問題タブ [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.
haskell - Haskell でのモナドの混合
Haskell で Ubigraph を使用しようとしていますが、私の問題はもっと一般的なものだと思います。私はコンパイルしようとしています:
そして私は得ています
op の型が putStrLn の戻り値の型とは異なるものとして暗示されていることはわかりますが、このコードを再設計して適切にコンパイルする方法がわかりません。op 関数の戻り値の型を変更することはできますか?
ありがとう
haskell - このMonad Stack関数の名前は?
State モナド内にステートフルな関数がたくさんあります。プログラムのある時点で、いくつかの IO アクションが必要になるため、次のようなタイプのペアを取得する StateT 内に IO をラップしました。
物事を単純にするために、IO コンテキストを関数のメイン セットに渡したくありません。また、それらをモナド スタック型でラップすることは避けたいと思います。しかし、トップレベル関数からそれらを呼び出すには、リフトに似たものが必要ですが、内側のモナドから値を持ち上げようとしているわけではありません。むしろ、私は StateT モナドの状態を State モナドの同等のものに変換したいと考えています。これを行うために、私は次のものを持っています:
これは、次のようなものをインターリーブするために使用されます。
かなり明白なコード ブロックのように思えるので、この関数には標準名があり、標準ライブラリのどこかに既に実装されているのだろうか? 説明を簡潔にしようとしましたが、明らかにこれは、スタックから 1 つのトランスフォーマーを取り出し、ラップされた値をトランスフォーマー型のいとこに変換し、スタック内で下のモナドをスキップし、結果を終わり。
haskell - ListT を使用してバックトラッキングと IO を取得するには?
List トランスフォーマーをどのように使用すればよいか、私にはよくわかりませんListT
。たとえば、この単純なタスクをどのように実行する必要がありますか:
そして、関数の型は何であるべきですか?
ListT
これは私が達成しようとしているタスクではありません (他の多くの方法を使用してこの問題を解決する方法を知っています) 。そのようなタスクを達成するために使用する方法を知りたいだけです。
haskell - mapMonadTrans :: MonadTrans xT => (ma -> nb) -> xT ma -> xT nb
問題はこれです。私は持っている:
引数を変更してこれを実行する必要があります。ただ、mが不明なので単純には使えません
すべての m に対して (withArgs args) を m に変換する必要があるためです。
私が見つけた 1 つの可能性は、次のように、独自の withArgs を定義することです。
ただし、これは面倒で、1 つの関数に固有のものですwithX :: X -> IO a -> IO a
。
もしあれば、これを行うためのより良い方法は何ですか?
編集: ハンドルの場合、Control.Monad.CatchIO が見つかりました。他のケースでは、上記のクラッジを避けるために、さらに別の短いクラッジ (投稿する価値はありません) を使用しました。まだより良い解決策を探しています!
haskell - Haskell のモナド変換子はカテゴリ的に何ですか?
数学の学生として、Haskell のモナドについて学んだときに最初にしたことは、自分が知っている意味でモナドが本当にモナドであるかどうかを確認することでした。しかし、モナド変換子について学びましたが、それらは圏論で研究されているものではないようです。
特に、それらは分配法則に関連していると予想しますが、それらはまったく異なるようです。モナド変換子は任意のモナドに適用されることが期待されますが、分配法則はモナドと特定の他のモナドとの間の関係です。
また、モナド変換子の通常の例を見ると、 while compose withは、どちらの順序でもwithのMaybeT m
合成ではありません。m
Maybe
StateT m
m
State
だから私の質問は、カテゴリー言語のモナド変換器とは何ですか?
haskell - アプリカティブは構成するが、モナドは構成しない
アプリカティブは構成しますが、モナドは構成しません。
上記のステートメントはどういう意味ですか? そして、どちらが他のものよりも好ましいのはいつですか?
haskell - モナド変換子によって生成される型を理解しようとする
のドキュメントControl.Monad.Trans.Error
は、2 つのモナドを結合するこの例を提供します。
これは直観に反していると思います:ラッピングErrorT
していると思われますが、エラー情報がIO アクションの結果の型に挿入されているように見えます。私はそれを期待していただろう IO
「ラップ」という言葉の通常の意味に基づいています。
問題をさらに混乱させるためにStateT
、それぞれのいくつかを実行します。
の側に状態型s
が注入されていますが、全体も関数でラップされています。Either
Right
Either
モナドが逆に結合されている場合、事態をさらに混乱させるために:
「外側」はまだ関数です。Either e (s -> (a, s))
状態関数がエラー型内にネストされているようなものは生成されません。
これらすべてに根底にある論理的な一貫性があることは確かですが、よくわかりません。その結果、個々のモナドの意味を理解するのに問題がなくても、あるモナドを別のモナドと組み合わせることが何を意味するのかを考えるのは難しいと思います。
誰かが私を啓発できますか?
(脚注:説明のために、とが互いに一致するように構成ErrorT
しています。通常は、レイヤーを使用するだけで済みます。Identity
StateWithError
ErrorWithState
StateWithError s e a = StateT s (Either e) a
ErrorT
haskell - Haskell:モナド変換子スタックの使い方がわかりません
私はタイプを持っています
現在の各状態を生成するモナディック値を作成したい
しかし、今日は愚かで、の値をに変換する方法がわかりませT a r [a]
んT a r a
。
haskell - monads-tf:MonadStateのMonadReaderインスタンス
次の例を考えてみましょう。MyM
私はただのモナドを持っていますStateT
通常、状態MyM
の読み取りと書き込みに使用されるためMyS
、次のような関数があります。
しかし、時々私はただ読む必要があるので、私は:の代わりにコンテキストがMyS
欲しいです:MonadReader
MonadState
そして、私は次のようなものを書きたいと思います:
したがって、基本的には、すべてのMonadState
インスタンスがMonadReader
対応するファミリタイプのインスタンスである必要があります。何かのようなもの
しかし、タイプチェックを行う方法がわかりません。このようなとの関係を表現することは可能MonadState
ですMonadReader
か?
ありがとう。
haskell - もっとrmonadライブラリ?
でいくつかの基本的なことをしたいと思いますRMonad
。「モナドとして」機能を使用する方法はありますか
- モナド変換子を適用する恒等 rmonad を持っていますか?
StateT
トランスフォーマーのような一般的なものはありますか?- 既存のモナドに制約を追加しますか? (たとえば、
StateT
追加の制約が必要な場合)
残念ながら、データファミリなど、それを機能させるものをまだ把握していません...そうでなければ、自分でコードを書いて喜んでいるでしょう。
編集
StateT
ライブラリのソースから一緒にハッキングして、動作するかどうかを確認します...