型クラスMonadPlus、Alternative、Monoidの違いは?
標準ライブラリHaskellの型クラスMonadPlus、AlternativeおよびMonoidそれぞれが本質的に同じセマンティクスを持つ2つのメソッドを提供します。 空の値:mzero、empty、またはmempty。 オペレータa -> a -> a:一緒に型クラスの値を結合しmplus、<|>またはmappend。 3つすべてが、インスタンスが準拠する必要がある次の法律を指定します。 mempty `mappend` x = x x `mappend` mempty = x したがって、3つの型クラスはすべて同じメソッドを提供しているようです。 (Alternativeも提供someしてmany、彼らのデフォルトの定義は、通常は十分であるので、彼らはこの質問の面であまり重要ではないです。) だから、私の質問は:なぜこれらの3つの非常に類似したクラスがあるのですか?スーパークラスの制約が異なる以外に、それらの間に実際の違いはありますか?