"multi-argument" 功能组合如何工作(例如 fmap . fmap)?

How does "multi-argument" functional composition work (e.g. fmap . fmap)?

当我们有表达式时:

(fmap . fmap) function nested_functor

我希望它能翻译成

fmap (fmap function nested_functor)

尽管它的行为似乎令人惊讶

fmap (fmap function) nested_functor

为什么?

嗯,看看(.)的定义就知道了:

(f . g) x = f (g x)

所以,

(fmap . fmap) function = fmap (fmap function)

在末尾添加一个额外的参数并没有真正改变等式——只是让它更具体。

(fmap . fmap) function nested_functor = fmap (fmap function) nested_functor

(N.B。函数应用程序是左关联的,因此 f x y 表示 (f x) y。)