6

のドキュメントを見ると、Control.Applicative特定のモナド(たとえばIOMaybe特に)のインスタンス宣言がありますが、やSTなどのMTLモナドのインスタンスはありません。代わりに、汎用タイプが定義されているように見えます。これは、他のすべてのケースをカバーするためだと思います。StateRWSWrappedMonad

だからここに私の質問があります:

  1. ApplicativeMTLモナドのインスタンスがないのはなぜですか?私がこれまでに自分で見つけた最良の答えは、3年前の投稿で、誰かがこれらのインスタンスを実装し、すぐに無視されました。

  2. どうしたのWrappedMonadRedditに簡単に説明している投稿を見つけましたが、使い方がわからないと思います。

最終的には、(私が推奨したようにState)アプリケーションスタイルで使用できるようにしたいと思いますが、コードにデータコンストラクターを散らかす必要がある場合、それは成功とは思えません。また、完全に無視して、インスタンスを自分で定義することもできます。たとえば、などの場合と同じように、インスタンスを定義します。WrappedMonadWrappedMonadApplicativeIOSTreturnap

4

2 に答える 2

8

baseそのドキュメントは、含まれていないパッケージのコンテンツのみに基づいて生成されるため、インスタンスStateは含まれません。MTL ドキュメントApplicativeを見ると、インスタンスがリストされていることがわかります。Applicative

別の方法として、GHCi を開いて Control.Monad.State と Control.Applicative をインポートし:i Applicative、 のインスタンスを一覧表示するApplicativeか、インスタンス:i StateTを持つクラスを一覧表示することができStateTます (はパラメータの 1 つが固定されStateた の型エイリアスです)。StateTどちらも、実際にそのようなインスタンスがあることを示します。

于 2011-11-03T00:54:09.613 に答える
2

その時点で利用可能な mtl がないため、mtl モナドの Applicative インスタンスをベース ドキュメントにリストすることはできません。良いニュースは、mtl-2.0.0.0 以降、 mtl にはたとえば Applicative インスタンス StateTがあることです。

于 2011-11-03T00:56:45.290 に答える