2012-09-05 19 views
6

algebra/2.1.1.2/doc/html的文檔顯示了大量的類型類。Hackage上的'algebra'包中的交換幺半羣

如何申報有問題的結構必須配備一個交換相關操作和單位/單位元,但沒有任何東西(逆,分佈性等)?

我在想

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

但Data.Monoid的情況下,不應該是可交換的,我想我的功能,用戶可以看到他們需要可交換的功能通過查看工作類型。

回答

8

(Abelian m, Monoidal m)

它可能看起來Monoidal比你想要的要多得多,但它都是基於NaturalSemiring

+1

這是正確的答案。 –

1

它看起來像包提供了一個可交換類,所以糾正我,如果我錯了,但看起來它只是一個指定第二類型類的事:

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

'Commutative'會談'Multiplicative'類的行爲,而不是'Monoid'。你可以使用'(Commutative m,Unital m)'來得到一個與'(*)'和'one',或者(Abelian m,Monoidal m)'一起工作的乘性交換monoid,以得到一個與' (+)'和'零'。 –