在Haskell中,为什么mappend
(来自班级Monoid
)<>
而不是+
的中缀别名?在代数课程+
通常用于幺半群的二元运算符。
答案 0 :(得分:14)
函数+
特定于数字,而且,它只是一种为数字实现Monoid的方法(*
同样有效)。同样,对于布尔值,使用&&
和||
同样有效。使用符号+
表明Monoids特别是添加,而实际上它们只是关于任何关联操作。
确实,至少根据我的经验,一个人可能会以类似的方式使用mappend
:连接列表或向量,采用集合或地图的联合等等。但是,Haskell心态有利于普遍性和坚持数学原则而不是(可以说)更直观的东西。在我看来,将mappend
认为作为一种一般性的补充当然是合理的,并且在不适用的情况下进行调整。
答案 1 :(得分:5)
部分原因是principle of least astonishment,部分原因是至少two sensible monoid instances for numbers(即来自Sum
的{{1}}和Product
。