为什么`mappend`中缀别名`<>`而不是`+`?

时间:2014-05-21 22:26:52

标签: haskell

在Haskell中,为什么mappend(来自班级Monoid<>而不是+的中缀别名?在代数课程+通常用于幺半群的二元运算符。

2 个答案:

答案 0 :(得分:14)

函数+特定于数字,而且,它只是一种为数字实现Monoid的方法(*同样有效)。同样,对于布尔值,使用&&||同样有效。使用符号+表明Monoids特别是添加,而实际上它们只是关于任何关联操作

确实,至少根据我的经验,一个人可能会以类似的方式使用mappend:连接列表或向量,采用集合或地图的联合等等。但是,Haskell心态有利于普遍性和坚持数学原则而不是(可以说)更直观的东西。在我看来,将mappend 认为作为一种一般性的补充当然是合理的,并且在不适用的情况下进行调整。

答案 1 :(得分:5)

部分原因是principle of least astonishment,部分原因是至少two sensible monoid instances for numbers(即来自Sum的{​​{1}}和Product