問題タブ [state-monad]
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 - 州およびその他のMTLモナドの適用インスタンス?
のドキュメントを見ると、Control.Applicative
特定のモナド(たとえばIO
、Maybe
特に)のインスタンス宣言がありますが、やST
などのMTLモナドのインスタンスはありません。代わりに、汎用タイプが定義されているように見えます。これは、他のすべてのケースをカバーするためだと思います。State
RWS
WrappedMonad
だからここに私の質問があります:
Applicative
MTLモナドのインスタンスがないのはなぜですか?私がこれまでに自分で見つけた最良の答えは、3年前の投稿で、誰かがこれらのインスタンスを実装し、すぐに無視されました。どうしたの
WrappedMonad
?Redditに簡単に説明している投稿を見つけましたが、使い方がわからないと思います。
最終的には、(私が推奨したようにState
)アプリケーションスタイルで使用できるようにしたいと思いますが、コードにデータコンストラクターを散らかす必要がある場合、それは成功とは思えません。また、完全に無視して、インスタンスを自分で定義することもできます。たとえば、などの場合と同じように、インスタンスを定義します。WrappedMonad
WrappedMonad
Applicative
IO
ST
return
ap
haskell - Stateモナドをこのように単純に使用すると、スタックオーバーフローが発生するのはなぜですか?
私はStateモナドで遊んでいましたが、この単純なコードでスタックオーバーフローの原因がわかりません。
この コードで問題の原因を知りたいだけです。タスク自体は重要ではありません。
haskell - 2つのモナド間で状態を共有する方法は?
私は次のモナドの問題で立ち往生しています:
状態S=(LS、RS)の標準モナド状態があるとしましょう。私は別のモナドも持っています:
StatePを使用して計算を実行してから、Stateモナドの状態と状態をマージします。
動作していませんが、理由がわかりません。そのような機能を実現する別の方法はありますか?
scala - scalaz州のモナドを理解しようとしています
リフトプロジェクトでscalazを使い始めようとしています。その目的のために、私はスタイルに合うようにいくつかのコードを書き直しています。ユーザーにログインするためのコードを考えてみましょう。
したがって、これはどういうわけか状態モナドを使用して書き直す必要があります。しかし、私はどうやって得られないのですか。これを試してみてください:
UPD:回答によると、例を更新しました。
gets
、、などの使用方法を示す、scalazの状態モナドに関する優れたチュートリアル/説明はありput
ますか?
haskell - haskell における異なる相互作用レベルの状態
私は4ビットのマイクロプロセッサをエミュレートしています。レジスタ、メモリ、および実行中の出力を追跡する必要があります (フェッチ実行サイクル カウンターもあるというボーナス ポイント)。私はモナドなしでこれを行うことができましたが、一度に多くのものを明示的に渡すのは面倒です。また、関数定義はごちゃごちゃしていて、長くて読みにくいです。
私はモナドでこれをやろうとしましたが、うまくいきません。個別の状態コンポーネントをすべて 1 つの型として扱ってみましたが、値を何にするかという問題が残りました。
意味のある唯一のタイプでした。しかし、その時点で、なぜ気にする必要があるのでしょうか。複合型から文字列を取り出して値として扱うことで、分割しようとしました
RUNNING 出力が必要だったという事実を除いて、これはうまく機能しました。私が何をしても、文字列と状態の両方を同時に保持することはできませんでした。
今、私はモナドトランスフォーマーに取り組もうとしています。さまざまなレベルの状態をすべて分離する必要があるようです。しかし、私の頭は急速に爆発しています。
FEcycle カウンターもまだ入れていません!
質問:
- 私は正しい軌道に乗っていますか?
- モナドトランスフォーマーを引き抜いているのを見て、「実行中の出力」を状態として扱うのをやめて、それを IO モナドにパームオフすることは可能ですか? それを保持する代わりに、印刷するだけでよいのです。
- 状態を何層に分ける必要がありますか? 2 つの異なる層が見えますが、それらは互いに密接に依存しています (メモリとレジスタの両方が、メモリとレジスタの両方の状態に依存しています)。ひとつにまとめておくべきか、バラバラにして積み上げるべきか。最も読みやすいコードを生成するアプローチはどれですか?
haskell - 状態の管理 - SICP の第 3 章
私はコンピュータープログラムの構造と解釈に取り組んでおり、Haskell の演習を完了しています。最初の 2 つの章は問題ありませんでしたが (コードはgithubにあります)、第 3 章ではさらに難しく考えさせられます。
まず、銀行口座を例に、状態の管理について説明します。make-withdraw
関数を次のように定義します。
次のコードを実行できるようにします。
Haskell でこれをエミュレートする方法がわかりません。私は最初に State モナドを使ったいくつかの単純な関数を考えました:
これにより、コードを実行できます
しかし、それはスキームコードとは異なることをします。理想的には、次のようなものを実行できます
しかし、関数の書き方がわかりませんmakeWithdraw
。何かアドバイス?
arrays - STArrayを使用したHaskell並列計算
並行して計算を行い、結果をSTArrayに書き込もうとしています。このコードは、私がやろうとしていることを示していると思います。ただし、コンパイルエラーが発生します。
これはどのようにすればよいですか?
haskell - 「LearnyouaHaskell」のStateMonadコードに関する混乱
私はオンラインブックLearnyoua Haskell forgreatGoodを使用してHaskellを把握しようとしています。
私の知る限り、州のモナドを紹介する章にたどり着くまで、これまでモナドを理解することができました。
ただし、提示され、StateタイプのMonad実装であると主張されているコード(Hoogleで見つけることができませんでした)は、処理するには多すぎるようです。
そもそも、その背後にある論理、つまり、なぜそれが機能する必要があるのか、そして著者がこの手法をどのように検討したのかを理解していません(おそらく関連記事やホワイトペーパーを提案できますか?)
4行目では、関数fが1つのパラメーターを取ることが提案されています。
ただし、数行下には、パラメーターをとらないpopが表示されます。ポイント1を拡張するために、状態を表す関数を使用して作成者が達成しようとしていることは何ですか。
何が起こっているのかを理解するのに助けていただければ幸いです。
編集
ご担当者様、
以下の答えは私の質問を完全にカバーしています。
ただし、追加したいことが1つあります。
以下に提案する記事を読んだ後、上記の2番目のポイントに対する答えを見つけました:その間ずっと、pop関数は次のように使用されると思い
stuff >>= pop
ました:バインドタイプでは2番目のパラメーターは関数ですが、正しい使用法はこれですpop >>= stuff
、これをもう一度読んだ後、do-notationがプレーンなbind-lambdasにどのように変換されるかを理解しました。
haskell - Haskell でのモナドの結合
Haskell 学習演習としてスパイダー ソリティア プレーヤーを作成しようとしています。
私の関数は、ゲームごとに 1 回main
関数を呼び出し( を使用)、ゲーム番号と乱数発生器 ( ) を渡します。この関数はモナドと IO モナドを返す必要があります。IO モナドには、ゲーム テーブルを表示し、ゲームが勝ったか負けたかを示します。playGame
mapM
StdGen
playGame
Control.Monad.State
String
Bool
戻り値State
のモナドとモナドを組み合わせるにはどうすればよいですか? IO
`playGame の型宣言はどうあるべきか?
はState IO (String, Bool)
正しいですか?そうでない場合、それは何ですか?
でmain
、使用する予定です
これは正しい呼び出し方playGame
ですか?
compiler-optimization - SSAでの副作用追跡
私はJavaバイトコードのオプティマイザーに取り組んでおり、SSAを使用することにしました。ただし、ほとんどの最適化ではすべての操作が純粋に機能する必要があるため、副作用を処理するために、副作用を引き起こす可能性のあるすべての操作に不透明な状態パラメーターと戻り値を追加することにしました。これにより、副作用のある操作の最適化や並べ替えを防ぐことができます。たとえば、例外処理を無視すると、この擬似コードのようなものが得られます。
私がしていることの名前はありますか?それは良いアプローチですか?関数型言語にはモナドと呼ばれる概念があると聞きました。これは似ているように聞こえますが、同じではありません。モナドを使用する方が良いアプローチですか?もしそうなら、どうすればモナドを使用するようにこれを変更できますか?