大多数教程似乎提供了很多monad(IO,状态,列表等)的例子,然后期望读者能够抽象出整体原则,然后他们提到类别理论.通过尝试从例子中进行概括,我不会学得很好,我想从理论的角度理解为什么这种模式如此重要.
从这个线索来看: 任何人都可以解释Monads吗? 这是一个常见的问题,我已经尝试查看大多数建议的教程(除了我的linux机器上不能播放的Brian Beck视频):
有没有人知道从类别理论开始的教程,并用这些术语解释IO,状态,列表monad?以下是我未能成功的尝试:
据我所知,monad包含一个三元组:一个endo-functor和两个自然变换.
仿函数通常显示类型:(a - > b) - >(ma - > mb)我包括第二个括号只是为了强调对称性.
但是,这是一个endofunctor,所以域和codomain不应该像这样吗?:
(a - > b) - >(a - > b)
我认为答案是域和codomain都有一种类型:
(a - > b)| (ma - > mb)| (mma - > mmb)等......
但我不确定这是否有效或符合给定的仿函数的定义?
当我们继续进行自然变革时,它会变得更糟.如果我理解正确,自然变换是二阶函子(具有某些规则),它是从一个仿函数到另一个仿函数的仿函数.因为我们已经定义了上面的仿函数,一般类型的自然变换将是:((a - > b) - >(ma - > mb)) - >((a - > b) - >(ma - > mb ))
但是我们使用的实际自然变换有类型:
a - > ma
ma - >(a - > mb) - > mb
这些一般形式的子集是否在上面?为什么它们会自然变换?
马丁