我试图理解众所周知的短语A monad is just a monoid in the category of endofunctors
,并将一些类别理论概念映射到cats
库。MonoidK
中有一个cats
类型类,并且在combineK
方法上是多态的。因此,如果我们用函子参数化,则此类型类的一个实例看起来像是类内吸虫类中的类人。
如果我们假设只能通过函子对MonoidK
进行参数化,则在类别理论方面Monad
和MonoidK
有什么区别?
最佳答案
Monoid有两个概念:代数中的monoid和范畴论中的monoid。后者是前者的抽象版本。前者可以被视为后者的特定情况。我们称它们为monoid(1)和monoid(2)。MonoidK
是种类较高的F[_]
的等分面(1)。您知道如何“相乘” F[A]
类型的两个元素和F[A]
类型的“ unit”。Monad
是仿函数(2)的函子。您知道如何将F[F[A]]
“压平”为F[A]
,以及如何将A
“包装”为F[A]
。