只需阅读类别理论书,并决定将其应用于haskell.
作者将Monoid定义为:
Monoid是一个L组,配有二进制运算*:LxL-> L和L中的区分单位元素u等...
将"List"结构作为monoid,很明显二进制运算是concat单位的[].
但是这里的M是什么?我试过L = {set of all lists}但是我认为这导致我遇到"L在L中?"的麻烦 问题,这似乎与集合有同样的问题.
还是我想错了什么?
编辑:正如@applicative所指出的,Haskell的列表是名为Free monoids的monoid !
sep*_*p2k 29
不是说"List is a Monoid",而是说"对于所有类型a,类型[a]是Monoid" 更准确.所以对于任何特定类型a,你的L都会L = {set of all lists of as}.根据这个定义,L当然不能包含它自己.