【发布时间】:2018-10-05 03:19:13
【问题描述】:
也许这些陈述都不是绝对精确的,但单子通常被定义为“内函子类别中的一个幺半群”; Haskell Alternative 被定义为“应用函子上的幺半群”,其中applicative functor 是“强松散的幺半群函子”。现在,这两个定义听起来与无知者(我)非常相似,但效果却大不相同。 Alternative 的中性元素的类型为f a,因此是“空的”,而monad 的类型为a -> m a,因此具有“非空”的含义; Alternative 的操作类型为f a -> f a -> f a,monad 的操作类型为(a -> f b) -> (b -> f c) -> (a -> f c)。在我看来,真正重要的细节是 在 endofunctors 类别中与 在 endofunctors 类别中,尽管替代方案中的“强松散”细节可能很重要;但这就是我感到困惑的地方,因为至少在 Haskell 中,monad 最终成为了替代品:而且我发现我还没有对这里的所有细节有一个准确的分类理解。
如何准确表达alternative和monad之间的区别,使得它们都是与内函子有关的幺半群,但一个有一个“空”中性元素,另一个有一个“非空”中性元素?
【问题讨论】:
标签: monads functor applicative category-theory monoids