仿函数和endofunctors之间的差异
有人能简单地解释两者之间的区别吗? 我并不完全理解monad是endofunctors而不是functor的部分。
一个函子可能从一个类别到另一个类别,一个endofunctor是一个函数,其开始和目标类别是相同的。
同态与态射相同。
现在,monad为什么要成为pipe理者?
有一句名言:“Monad只是内部pipe理员类别中的独angular兽”。 幸运的是,其他人已经在这个答案中解释得相当好。
monad必须成为一个pipe理者的终点的关键在于,像Haskell或µ
所称的join
,正如通常在类别理论中所称的那样,是monad定义的一部分。 现在
Prelude Control.Monad> :t join join :: Monad m => m (ma) -> ma
所以将函子m
应用于一个对象的结果(在Hask中,Haskelltypes作为对象和作为态射函数的一个types)必须是可以再次应用到的对象。 这意味着它必须属于类函数m
的范畴。
如果它的域和共域是相同的(严格来说,如果它的共域是它的域的一个子类别),换句话说,如果它是一个endofunctor,一个仿函数只能与它自己组合。 由于与自身的可组合性是monad定义的一部分,monad是工程师的一个更高端的内容。
¹有一个定义,可以使用(>>=)
或者bind
并将join
定义为派生属性。