首页 > 解决方案 > `join` 也是 endofunctor 的函数?

问题描述

每个单子都是一个内函子。

bindmonad 是fmap和的组合join

fmap是内函子的函数。

那么,是否可以肯定地说它join也是 endofunctor 的函数?

标签: haskellfunctional-programmingmonads

解决方案


endofunctor 是一对映射:一个将一个类型映射到另一个类型,一个将一个函数映射到另一个函数。从这个意义上说,内函子“有” fmap,就像fmap函数到函数的映射一样。

单子是由一个内函子和两个自然变换组成的三元组。自然变换之一是return :: a -> m a. 另一个在 Haskell 中是(>>=) :: m a -> (a -> m b) -> m b. join ms = ms >>= id,但我们可以很容易地说那join :: m (m a) -> m a是与 monad 相关的自然转换m >>= f = join (fmap f m)。在这种情况下,monad(不是 endofunctor)“具有”join作为函数。


推荐阅读