如果"List"是一个幺半群,它的"集合"是什么?

And*_*yuk 19 haskell

只需阅读类别理论书,并决定将其应用于haskell.

作者将Monoid定义为:

Monoid是一个L组,配有二进制运算*:LxL-> L和L中的区分单位元素u等...

将"List"结构作为monoid,很明显二进制运算是concat单位的[].

但是这里的M是什么?我试过L = {set of all lists}但是我认为这导致我遇到"L在L中?"的麻烦 问题,这似乎与集合有同样的问题.

还是我想错了什么?

编辑:正如@a​​pplicative所指出的,Haskell的列表是名为Free monoids的monoid !

sep*_*p2k 29

不是说"List is a Monoid",而是说"对于所有类型a,类型[a]是Monoid" 更准确.所以对于任何特定类型a,你的L都会L = {set of all lists of as}.根据这个定义,L当然不能包含它自己.

  • 我喜欢这个答案,因为它是来自Haskell的相当直接的翻译.`实例Monoid [a]`使用普遍量化的`a`,所以它真的是'forall a.实例Monoid [a]`.通过一点点重新排序,它非常接近"对于所有类型`a`,类型`[a]`是一个Monoid". (9认同)