"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
。)
当我们有表达式时:
(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
。)