我试图理解众所周知的短语A monad is just a monoid in the category of endofunctors
并将一些范畴论概念映射到cats
库中。
cats
中有一个MonoidK
类型类,它在combineK
方法上是多态的。因此,如果我们用函子参数化它,这个类型类的一个实例看起来像内富子类别中的幺半群。
如果我们假设我们只能通过函子对MonoidK
进行参数化,那么MonoidK
和Monad
在范畴论方面有什么区别?
有两个概念:代数中的幺半群和范畴论中的幺半群。后者是前者的更抽象版本。前者可以被认为是后者非常具体的部分情况。让我们称它们为幺半群(1(和幺半群(2(。
MonoidK
是幺半群(1(表示高等F[_]
。您知道如何"乘以"F[A]
类型的两个元素和 F[A]
类型的"单位"。
Monad
是函子的幺半群 (2(。您知道如何将F[F[A]]
"展平"成F[A]
以及如何将A
"打包"到F[A]
中。