`join`也是endofunctor的功能吗?

时间:2018-12-03 00:00:29

标签: haskell functional-programming monads

每个monad都是一个endofunctor。

bind是monad的组成,由fmapjoin组成。

fmap是endofunctor的功能。

那么,可以肯定地说join也是endofunctor的功能吗?

1 个答案:

答案 0 :(得分:2)

endofunctor是一对映射:一个将一个类型映射到另一个类型,另一个将一个函数映射到另一个函数。从这个意义上讲,endofunctor“具有” fmap,因为fmap是功能到功能的映射。

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