6

algebra/2.1.1.2/doc/html的文档显示了大量的类型类。

我如何声明一个有问题的结构必须配备一个交换关联运算和一个单位/恒等元素,但没有其他任何东西(逆、分布等)?

我在想

reduce :: Monoid m => (a -> m) -> [a] -> m

但是 Data.Monoid 的实例不应该是可交换的,我希望我的函数的用户通过查看类型来看到他们需要可交换性才能使函数工作。

4

2 回答 2

8

(Abelian m, Monoidal m)

看起来这Monoidal比你想要的要多得多,但这一切都是基于Natural成为一个Semiring.

于 2012-09-05T21:29:27.450 回答
1

看起来该包提供了一个 Commutative 类,如果我错了,请纠正我,但看起来这只是指定第二个类型类的问题:

reduce :: (Monoid m, Commutative m) => (a -> m) -> [a] -> m
于 2012-09-05T21:26:26.793 回答