2012-09-05 3 views
6

algebra/2.1.1.2/doc/htmlのドキュメントには、種類のクラスが巨大に表示されています。Hackageの '代数'パッケージからの可換型モノイド

どの構造体に、可換的な連想操作とユニット/アイデンティティ要素を装備しなければならないが、それ以外のものは何もないと宣言するにはどうすればよいですか(逆、分散など)?

私は

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

と思っていますが、Data.Monoidのインスタンスは可換であるために仮定されていないと私は私の機能のユーザーは、彼らが見てで動作する機能のための可換性が必要であることを確認したいですタイプ。

答えて

8

(Abelian m, Monoidal m)

それは、 Monoidalはあなたが望むものよりもはるかに多く見えるかもしれませんが、NaturalはすべてSemiringです。

+1

これは正しい答えです。 –

1

そのパッケージは私が間違っている場合ので、私を修正し、可換クラスを提供していますが、それは第二型クラスを指定するだけの問題だように見えるように見えます:

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

'Commutative'は' Monoid'ではなく 'Multiplicative'クラスの動作について語ります。あなたは '(*)'と ''(1) '、' '(Abelian m、Monoidal m) ''で動作する乗法的な可換型モノイドを得るために' '(Commutative m、Unital m) (+) 'と' 'ゼロ '。 –

関連する問題