algebra/2.1.1.2/doc/html的文档显示了很多类型类。
如何声明所讨论的结构必须配备可交换的关联操作和单位/身份元素,但没有其他条件(逆,分布等)?
我在想
reduce :: Monoid m => (a -> m) -> [a] -> m
但是Data.Monoid的实例不应该是可交换的,并且我希望函数的用户可以通过查看类型来了解他们需要函数的可交换性。
最佳答案
(Abelian m, Monoidal m)
看来Monoidal
远远超出了您的期望,但这完全基于Natural
作为Semiring
。