小编Mar*_*tin的帖子

Monad理论和Haskell

大多数教程似乎提供了很多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

这些一般形式的子集是否在上面?为什么它们会自然变换?

马丁

theory monads haskell types

35
推荐指数
4
解决办法
2890
查看次数

标签 统计

haskell ×1

monads ×1

theory ×1

types ×1