显然((.).(.))
运算符的通用名称是(.:)
。 (.:)
在哪里定义?或者我必须自己定义吗?
答案 0 :(得分:8)
您可以在composition库中找到它,以及其他更高阶的函数组合。 base
中未定义此运算符。如果您不想将(非常小的)包添加为依赖项,那么只需自己定义,但我会使用使用fmap
的更通用的版本:
(.:) :: (Functor f, Functor g) => (a -> b) -> f (g a) -> f (g b)
(.:) = fmap fmap fmap
只是fmap
通过两层仿函数的函数。对于函数,这些fmap
中的所有三个都专门用于(.)
。