MonoidK和Monad的关系

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了MonoidK和Monad的关系相关的知识,希望对你有一定的参考价值。

我试图理解众所周知的短语A monad is just a monoid in the category of endofunctors并将一些类别理论概念映射到cats库。

MonoidK中有一个cats类型类,它在combineK方法上具有多态性。因此,如果我们使用仿函数对它进行参数化,那么这个类型类的一个实例在endofuctors类中看起来像monoid。

如果我们假设我们只能通过仿函数参数化MonoidK,那么MonadMonoidK在类别理论方面有什么区别?

答案

幺半群有两个概念:代数中的monoid和类别理论中的monoid。后者是前者更抽象的版本。前者可以被认为是后者非常具体的部分情况。我们称它们为monoid(1)和monoid(2)。

MonoidK是高等级的F[_]的monoid(1)。你知道如何“加倍”F[A]类型的两个元素和F[A]类型的“单位”。

Monad对于仿函数是monoid(2)。你知道如何将F[F[A]]“扁平”成F[A]以及如何将A“包装”到F[A]

以上是关于MonoidK和Monad的关系的主要内容,如果未能解决你的问题,请参考以下文章

monad 的例子在哪里? [复制]

FunctorApplicative 和 Monad

Haskell Monad(下)

Kotlin Monad的学习

函数式编程[4]functor和monad

Scala中monad中的重入锁