10

すべてMonadMonoidシーケンス操作であるため。MonadHaskellで継承しないのはなぜMonoidですか?

4

1 に答える 1

13

Monad偶数である必要はありません。これはすべての で機能しますApplicative。はい、次のように定義できます。

class (Functor f, Monoid (f ())) => Applicative f where

ただし、これは、Monoidインスタンスを作成するたびにインスタンスを提供する必要があることを意味しApplicativeます。確かに、このMonoidインスタンスはあまり頻繁に使用されないため、これは非常に煩わしい場合があります。

より良い解決策は、 の周りに newtype ラッパーを作成することです。そうすれば、すべてのアプリケーション ファンクターf ()のインスタンスを一度だけ提供できます。reducers パッケージMonoidですぐに利用できるものがあります。

于 2013-05-14T16:57:19.673 に答える