Haskell monad:词源与意义?

gwi*_*man 6 monads haskell terminology

当我开始理解某个概念时,我发现不能看到概念名称的明显词源与我认为我对这个概念的理解有什么关系是非常不令人满意的.如果我看不到这种联系,我就会觉得这个名字试图传达的一些重要见解我还没有发现.

Monad:来自希腊人的团结.星期一=一; ad =包含特定数字的组或单元.这构成了"由一件事组成的团体或单位".

http://www.haskell.org/haskellwiki/All_About_Monads说:

"monad是一种使用这些值来计算值和计算序列的计算方法.Monads允许程序员使用顺序构建块来构建计算,这些构建块本身就是计算序列." ..."存在用于构建执行I/O,具有状态,可能返回多个结果等的计算的其他monad"

没什么关于一个人的.

http://www.haskell.org/haskellwiki/Monad声称,单词monad中的单词指的是monad将产生的一个输出.但是假设任何函数产生一个输出,(并且上面的参考文献说"可能会返回多个结果",更不用说带外/错误结果了),并且"组或单元"没有任何内容,这种解释似乎难以令人信服.

有更好的解释吗?

[编辑:回应"关闭主题"标志.我的问题不是关于"monad"这个词本身的词源.它是关于monad的Haskell概念,以及monad这个词的根源如何告诉我们这个概念,或者实际上误导我们理解这个主题.鉴于monad是Haskell中一个着名的难以沟通的概念,这肯定是一个关于编程的问题.

这是一个突出的问题,因为受访者关于"monad"的根源如何与手头的主题相关的变化得到了加强,包括观察到Haskell自己的文档中的解释是高度可疑的.

也就是说,我对给出的答案非常满意(谢谢大家!),所以无需重新打开主题.但是我主张不把它移到其他地方,以便其他对Haskell重要概念有同样混淆的人可以在这里找到它.

C. *_*ann 10

有更好的解释吗?

简短回答:不,确实没有.

稍微不那么简短的答案:它几乎肯定与"monoid"有关,与任何其他使用"monad"(至少有两个)无关,而且这个术语是在数学家聚会上创造的,所以甚至可能都没有写过这是该术语的第一次使用.

引用和引用的答案更长:我在这里写的那个.

顺便说一下,维基上关于所谓意义的说法对我来说似乎非常可疑.

  • @gwideman:最接近的等效`Monoid`实例将是`Endo a`,endomorphisms`a - > a`和函数组合的monoid,其中标识值(当然)是`id`.`Monad`是Haskell类型类别的*endofunctors*的monoid,其中*functor*composition作为操作,identity functor作为标识值.对于monad`m`,我们可以从`Id a`获得`ma` - 也就是说,只是`a` - 使用`return`,并从`m`组成自己`m(ma)`我们可以使用`join`得到`ma`.幺半群结构仍然非常相关,它只是处于不同的水平. (2认同)