在文档中Data.Monoid,它声明应满足以下法律:
mappend mempty x = x
mappend x mempty = x
mappend x (mappend y z) = mappend (mappend x y) z
mconcat = foldr mappend mempty
Run Code Online (Sandbox Code Playgroud)
我对这些的理解是前两个是同一性,第三个是相关性.
但是第四行的法律是什么?身份再次,但为mconcat?
pig*_*ker 12
在数学上,幺半群的定义需要存在mempty类似于mappend满足前三个定律的东西:左右同一性和相关性.
该mconcat方法已被添加到类中以反映这样的事实:列表中的累积通常是使用幺半群的方式.第四定律是可执行规范的mconcat:的确,那很有规律是代码行赋予的默认实现mconcat.制作mconcat类的成员意味着,每个Monoid实例,你可以自由地给予mconcat更有效的实现,就像只要其与默认同意.
我不清楚以mconcat这种方式重新实现是一个特别大的胜利.我倾向于避免mconcat支持(令人困惑的名字)fold.