Hackage中'代数'包中的交换幺半群

时间:2012-09-05 21:03:30

标签: haskell hackage abstract-algebra

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

如何声明有问题的结构必须配备可交换的关联操作和单元/标识元素,但没有其他任何东西(反转,分配等)?

我在考虑

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

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

2 个答案:

答案 0 :(得分:8)

(Abelian m, Monoidal m)

Monoidal似乎比您想要的要多得多,但它都基于NaturalSemiring

答案 1 :(得分:1)

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

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