折叠以上功能 - 幺半群

时间:2015-07-12 15:08:59

标签: haskell fold monoids

为什么折叠高于列表的长度不是幺半群?

length = foldr (\_ n -> 1+n) 0

它不是关联的并且具有中性元素0以便它应该是一个幺半群吗?

1 个答案:

答案 0 :(得分:3)

我很难理解你真正在问什么,而且我怀疑你演讲中声明的确切措辞可能很重要。

但是通过最直观的解释,我可以想到你是对的,在数学上,length函数一个“monoid同态”,用连接操作映射列表的monoid通过加法运算得到整数的整数。

在Haskell中技术上并非如此,但主要是因为数字类型没有给出Monoid实例,因为有两个明显的操作可供选择,加法和乘法。另一个原因是Haskell中的列表可能是无限的,因此length并不总是给出结果。