答えて
はしかし、これはMonadState
努力を複製巻き上げるようなもののためのインスタンスを実装しなければならなかった誰を意味しました。
transformers
で
(今消滅monads-fd
とmonads-tf
)ロスパターソンは後者のみを提供し、ベースモナドとしてIdentity
を使用する簡単な方法を使用することを決めました。
これにより、mtl
を維持するための実装の労力が軽減され、State
モナドを実装する2つの異なる方法があるという事実が削除されました。しかし、mtl
の内部を教えるのが難しくなりました。なぜなら、ゲートのすぐ外にあるtransformers
バージョンを理解する必要があり、単純化されたバージョンをトレーニングホイールとして使用しないからです。
旧mtl
が廃止され、monads-fd
がmtl
2.0になったとき、既存のtransformers
を使用してこの設計決定を引き継いだ。
私は個人的には、少なくとも教育的目的のための別個の単純なモナドを好きでしたが、議論の反対側にははるかに多くの人がいました。
私は教育目的について全く同意します。元のよりシンプルなバージョンを含む 'monads-teach'パッケージをセットアップするべきでしょう。 –
ドキュメントから:計算上、単純に引数に関数を適用するのではなく、アイデンティティモナドを使用する理由はありません。アイデンティティモナドの目的は、モナド変圧器の理論における基本的な役割です。アイデンティティモナドに適用されたモナド変換器は、そのモナドの非変換バージョンを生成します。
私が理解しているように、モナド変圧器からのモナドの非変圧器バージョンを識別モナドを適用することによって得ることは、アイデンティティモナドが存在することとまったく同じです。非変圧器モナドを使用するだけでは利点はありませんが、モナド変圧器を使用する必要があることもあります。あなたが使用したい機能がそれを必要とするとき。我々は
newtype State s a = State { runState :: s -> (a, s) }
と
newtype StateT s m a = StateT { runStateT :: s -> m (a, s) }
の両方を持っていた
戻るmtl
1.0で
- 1. モナド対モナド変圧器
- 2. いくつかのモナド変圧器スタックを検討モナド変換
- 3. モナド変圧器モナドの複製
- 4. スカラストリームのモナド変圧器
- 5. モナド変圧器の例外をキャッチ
- 6. 自分のモナド変圧器と
- 7. 任意のモナド変圧器スタック
- 8. 2つのモナド変圧器の違いは何ですか?
- 9. Scalaz:それは私はモナド変圧器を勉強なし
- 10. なぜボイラープレート新しいモナド変圧器を書き
- 11. 変圧器としてのモナド組成の抽象化
- 12. スカラフリーMonadsと共産化物とモナド変圧器
- 13. モナド変圧器および応用的かもしれない
- 14. モナドをきれいにする - モナド変圧器を新しいタイプのモナドに応用すること
- 15. モナド内部モナド変換器の結果
- 16. 通常のモナディック関数をモナド変圧器と同等にする
- 17. Alfrescoシェア - 変圧器
- 18. ErrorTモナド変換器の理解
- 19. IOとFuture [オプション]モナド変換器
- 20. Pyspark:変圧器を保存
- 21. なぜData.Binary.Putモナドを変圧器に変更するとメモリリークが発生するのですか?
- 22. モナド変圧器はサービスからJSONを取得するために適用されますか?
- 23. Laravel Dingo入れ子の変圧器
- 24. これはJavascriptで有効なモナド変換器ですか?
- 25. は、たぶん私は、次のコードを持っている変圧器
- 26. PHPフラクタル(変圧器)がいくつかの奇妙なjsonを出力する
- 27. スカラ、JSONの変圧器を再生する条件
- 28. 入力に応じて可変数の値を持つ器具
- 29. IdentityT変圧器の目的は何ですか?
- 30. Groovy変圧器は無視されたようでした
「標準」バージョンとはどういう意味ですか? – Adrian
「トランスの標準バージョン」とはどういう意味ですか?通常、アイデンティティモナドに適用されるトランスの標準バージョンです。 – leftaroundabout
私は 'StateT s Identity a'と' State s a'を意味します。どちらも機能的には同じですか? –