为什么折叠高于列表的长度不是幺半群?
length = foldr (\_ n -> 1+n) 0
它不是关联的并且具有中性元素0
以便它应该是一个幺半群吗?
答案 0 :(得分:3)
我很难理解你真正在问什么,而且我怀疑你演讲中声明的确切措辞可能很重要。
但是通过最直观的解释,我可以想到你是对的,在数学上,length
函数是一个“monoid同态”,用连接操作映射列表的monoid通过加法运算得到整数的整数。
在Haskell中技术上并非如此,但主要是因为数字类型没有给出Monoid
实例,因为有两个明显的操作可供选择,加法和乘法。另一个原因是Haskell中的列表可能是无限的,因此length
并不总是给出结果。