Haskell委员会为什么选择monad代表I / O?


36

清洁语言使用的独特类型来处理I /在一个单纯的功能设置O操作。为什么Haskell委员会改为使用monads?是否还有其他提议处理该委员会调查但决定反对的状态?

注意:我并不是在寻找Monad与其他形式的计算之间的圣战。让我们仅根据委员会在I / O方面的选择来讨论主题。


Answers:


16

根据《 Haskell的历史:与类一起懒惰》(请参阅第7节),最初考虑了三种不同的模型:延续“世界传递”(我对Clean不太了解,但听起来这是Clean方式) ?)。

7.2节的最后一段表明,唯一性类型概念目前尚未开发:

但是,对于Haskell来说,这种“遍历世界”的模型从来都不是真正的竞争者,因为我们看不到确保“单线程”访问世界状态的简便方法。(清洁设计师最终通过使用“唯一性类型”解决了这个问题)

单子的概念似乎已在Haskell的后续修订版中引入(从其他工作中重复使用),因为它产生了更简洁的代码(与延续/流相比):

一元法迅速占领了早期模型。类型更紧凑,信息更丰富。


10

我见过的最好的解释是西蒙·佩顿·琼斯(Simon Peyton-Jones)的《应付尴尬的小队》

根据我在论文中所记得的,关于懒惰的问题在决定中起了很大的作用。(我不确定默认情况下Clean是否像Haskell一样是惰性的。)


5
干净也懒。
chrisaycock 2012年
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.