MonoidK 和 Monad 关系

MonoidK and Monad relation

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

cats 中有一个 MonoidK 类型类,它在 combineK 方法上是多态的。因此,如果我们用仿函数对其进行参数化,则此类型类的一个实例看起来像内处理函数类别中的幺半群。

如果我们假设我们只能通过函子参数化MonoidK,那么MonoidKMonad在范畴论方面有什么区别?

幺半群有两种概念:monoid in algebra and monoid在范畴论中。后者是前者的更抽象版本。前者可以被认为是后者的非常具体的部分情况。我们称它们为幺半群 (1) 和幺半群 (2)。

MonoidK 是更高种类 F[_] 的幺半群 (1)。您知道如何 "multiply" 类型 F[A] 的两个元素和类型 F[A].

的 "unit"

Monad 是函子的幺半群 (2)。您知道如何将 "flatten" F[F[A]] 转换为 F[A] 以及如何将 "pack" A 转换为 F[A]