每当有人承诺“解释单子”时,我的兴趣就会被激起,但当所谓的“解释”是一长串例子时,我的兴趣就会被挫败感所取代,最后是一些即兴的评论,即“深奥的数学理论”背后的“数学理论”。想法”“目前太复杂,无法解释”。
现在我要求相反。我对范畴论有扎实的掌握,而且我不害怕图表追逐、米田引理或派生函子(事实上,monads和绝对意义上的附加词)。
有人可以给我一个清晰简洁函数式编程中 monad 的定义是什么?例子越少越好:有时一个清晰的概念可以表达一百多个胆怯的例子。尽管我并不挑剔,但 Haskell 作为演示语言会做得很好。
这个问题有一些很好的答案:Monad 作为附加词 https://stackoverflow.com/questions/4697320/monads-as-adjunctions
更重要的是,TMR #13 中 Derek Elkins 的“使用类别理论计算 Monad”文章应该具有您正在寻找的结构:http://www.haskell.org/wikiupload/8/85/TMR-Issue13.pdf http://www.haskell.org/wikiupload/8/85/TMR-Issue13.pdf
最后,也许这确实是最接近您正在寻找的内容,您可以直接转到源代码并查看 Moggi 1988-91 年关于该主题的开创性论文:http://www.disi.unige.it/person/MoggiE/publications.html http://www.disi.unige.it/person/MoggiE/publications.html
特别参见“计算和单子的概念”。
我自己的观点肯定过于简洁/不精确:
从类别开始Hask
其对象是 Haskell 类型,其态射是函数。函数也是对象Hask
,产品也是如此。所以Hask
是笛卡尔闭集。现在引入一个箭头来映射每个对象Hask
to MHask
这是对象的子集Hask
。单元!
接下来介绍一个箭头,将每个箭头映射到Hask
到箭头MHask
。这给了我们地图,并使得MHask
协变内函子。现在引入一个箭头来映射每个对象MHask
它是从一个对象生成的MHask
(通过单位)到对象MHask
它生成它。加入!从此,MHask
是一个单子(更准确地说是一个幺半群内函子)。
我确信上述内容存在缺陷是有原因的,这就是为什么我真的会引导您(如果您正在寻找形式主义),特别是 Moggi 论文。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)