問題タブ [monad-transformers]

For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.

0 投票する
2 に答える
502 参照

haskell - IdentityT トランスフォーマーの目的は何ですか?

トランスフォーマー パッケージを調べているときに、 IdentityTという名前のモナド トランスフォーマーを見つけました。

Identity モナドがどのように使われるか (例えばStateは単に のエイリアスであるStateT Identity) とモナド変換子が一般的にどのように機能するかは理解していますが、それが とどのように関係しているかはわかりませんIdentityT

MTL には含まれていないので、完全を期すために追加されたもので、実際には使用されていないと思います。あれは正しいですか?

0 投票する
1 に答える
212 参照

parsing - 通常のモナド関数をモナド変換子と同等に機能させる

バランスブラケットの問題を解決しようとしています。私は継続的な IO を実行したくありません。むしろ、getLine を 1 回呼び出して、結果の文字列を解析したいと考えています。したがって、問題を解決する関数は、入力文字列の未使用部分とブラケット スタックの 2 つの異なる状態を処理します。

スタックを操作するためのいくつかの関数をセットアップしたい:

State モナドで操作している場合はそれで問題ありませんが、StateT モナドで操作しています。

スタックに重複したモナドを持たないように言われたことは知っています。プッシュとポップの定義を単純化する方法が好きなので、私はこのようにしています。

2 つの問題:

  1. 何をしても、StateT に含まれるスタックにプッシュとポップを適用する方法が見つかりません。
  2. メイン関数からこれを呼び出す方法がわかりません

残りのコードは次のとおりです

0 投票する
2 に答える
625 参照

list - リストとListTモナド変換子をきれいに変換するにはどうすればよいですか?

ListT私は現在、モナド変換子を多用するプロジェクトを書いています。プレーンリストを使用する場合、非決定性の実装は非常に簡単です。ただし、コードをに変換する必要ListTがあると、はるかに複雑になります1

[a]簡単な例として、からへの変換には、ListT a実際には2つの関数を作成する必要があります。

シンプルですが、まだそこにないのには驚きました。

質問:

  • モナド変換子が必要な非決定性を処理するためのより良い方法はありますか?
  • リスト間をきれいに行き来するためのテクニック/ライブラリはありListTますか?

1正確な理由は非常に複雑なので、あまり詳しく説明したくありません。

0 投票する
1 に答える
168 参照

haskell - モナドコマンドを引数として取る関数で、モナドトランスフォーマーをサポートする最良の方法は何ですか?

計算があるとしましょう

今、私が書きたいとしましょう

次に、を実装するfoo際に、その引数を「ラップ解除」する必要がありますfoo x = lift (foo (unlift x))。このunlift関数は、モナド計算には適していません。状態トランスフォーマーの場合、プログラムの状態の変更を強制的に忘れることになります。

より一般的なメソッドを作成することはうまくいくようです。これはリフティング関数も取り、その結果は計算t () -> t ()になりますt

質問。これが最善の方法ですか?もっと一般的なものを書くことができますか?CPS スタイルのコード? ありがとう!!

0 投票する
1 に答える
447 参照

haskell - ネストされたStateTおよびErrorTモナドを適切に評価するにはどうすればよいですか?

プログラムのさまざまなレベルの制御構造に対して2つの型宣言があります。一番下は、Agent機能付きStateTのです。IO2つ目は機能を備えた別のものStateTAgent、3つ目(Plan)はErrorT。です。

評価するための最良の方法は何Planですか?runStateT私は次のコードを書きましたが、ネストされたrunErrorT呼び出しがたくさんあるため、それほど便利ではありません。

もっとシンプルで素敵なものはありますか?

0 投票する
2 に答える
1030 参照

haskell - モナドトランスフォーマー内でフォークする方法

いくつかのモナド変換子スタックを考えてみましょう。

そして のいくつかの機能J:

それから私はJ文脈の中にいることに気づきました。私は書くことができます

J今、コンテキスト内の別のスレッド内で quxes を覗いて印刷したい

これは明らかに機能しません。このような単純な問題を解決する方法がいくつかあると思いますが、それを理解することはできません。

0 投票する
1 に答える
344 参照

haskell - モナドスタックの操作

モナドのスタック、たとえば、、、IOおよびStateとのみErrorを使用する関数がある場合。関数を使用できるように、スタックから中央のモナドを「削除」するにはどうすればよいでしょうか。順序が、、、の場合、タイプを一致させるために使用できますが、モナドスタックに、場合によっては他のモナドが任意の順序で含まれている場合は、関数を使用できるようにしたいと思います。例えば:IOErrorStateIOErrorStateliftIOError

0 投票する
2 に答える
219 参照

haskell - モナド変換子でのみ外部モナドを更新する

失敗する可能性のある計算のモナドがあり、ログを記録します。

失敗しない関数がありますが、ログを記録します。

f2からのログを使用してf1のライターモナドを更新し、f2計算の出力をキャプチャするための最良の方法は何ですか?現在、私はこれを行っています:

私はリフトを使用して内部モナドを別の計算で更新しているので、ライターとどちらかのモナドを切り替えても問題は解決しません。

0 投票する
1 に答える
1330 参照

haskell - モナド変換子のリスト

リストモナド変換子を使用する必要があります。可換ではないため、ListT IOfromには潜在的な問題があることを読みました。そのため、 ListTが正しく実行されていることを確認しています。しかし、予期しない動作が発生しています。Control.Monad.ListIO

この簡単なテストを考えてみましょう。

Control.Monad.Listの使用:

「ListTdoneright」の使用:

これは「ListTが正しく行われた」という問題ですか、それとも間違って使用しているだけですか?望ましい代替案はありますか?

ありがとう!