显然,((.).(.))
运算符的常用名称是 (.:)
。 (.:)
是在哪里定义的?还是我必须自己定义它?
你可以在组合库中找到它,以及其他高阶函数组合。这个运算符在base
中没有定义。如果你不想将一个(非常小的)包作为依赖添加进来,那么就自己定义它,虽然我会使用更通用的版本,该版本使用fmap
:
(.:) :: (Functor f, Functor g) => (a -> b) -> f (g a) -> f (g b)
(.:) = fmap fmap fmap
这只是通过两层函子进行函数映射的fmap
。 对于函数,这三个fmap
都专门化为(.)
。
.:
运算符,实际上对于其他的函子比函数更有用。 - Joachim Breitner
ghci
或cabal repl
中,你可以输入:i .:
来获取一些相关信息。 - Heimdell