标签: scala scala-cats category-theory
我试图理解众所周知的短语A monad is just a monoid in the category of endofunctors,并将一些类别理论概念映射到cats库中。
A monad is just a monoid in the category of endofunctors
cats
MonoidK中有一个cats类型类,它在combineK方法上是多态的。因此,如果我们用函子参数化,则此类型类的一个实例看起来像是类内吸虫类中的类人动物。
MonoidK
combineK
如果我们假设只能通过函子对MonoidK进行参数化,那么在类别理论上Monad和MonoidK之间有什么区别?
Monad
答案 0 :(得分:4)
有二元组的两个概念:代数中的monoid和范畴论中的monoid。后者是前者的抽象版本。前者可以被视为后者的非常具体的部分情况。我们称它们为monoid(1)和monoid(2)。
MonoidK对于种类较高的F[_]是等号(1)。您知道如何将F[A]类型的两个元素和F[A]类型的“单位”“相乘”。
F[_]
F[A]
Monad是仿函数(2)的函子。您知道如何将F[F[A]]压缩为F[A],以及如何将A压缩为F[A]。
F[F[A]]
A