問題タブ [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.

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

haskell - 状態モナドのスコープ

次のコードで何が起こるかを理解しようとしています。コードは適切に動作しますが、その理由を理解しようとしています。

私が理解していないのは、State モナドの状態が loopArgs を連続して呼び出すたびに「リセット」されない理由です。状態は変数として渡され>>ますか?もしそうなら、誰かが私にその方法を教えてくれますか?

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

haskell - 独自の State モナドを作成する

モナドの使い方はわかるが、モナドの作り方がよくわからない。だから私はStateモナドを再作成する旅に出ています。

これまでのところ、新しい型 Toto (フランス語で foo) を作成し、それを Monad のインスタンスにしました。現在、「リーダー機能」を追加しようとしています。「get」関数を宣言するクラス TotoReader を作成しました。しかし、インスタンス化しようとすると、すべてがバラバラになります。GHC は (m ~ r) を推定できなかったと言っています (下部の完全なコンパイル エラー)。

しかし、最上位関数 get を作成すると、すべてが正しく機能します。

では、クラスでget関数を定義するにはどうすればよいですか?それは本当に正しい方法ですか? 私が理解できないのは何ですか?

以下の私のコード

コンパイルエラー

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

haskell - モナドを提供せずにモナド関数を呼び出せるのはなぜですか?

この非常に単純なコードが意味をなさないことに気付くまで、私は Haskell モナドをうまく扱えると思っていました (これはState モナドに関する haskell wikiからのものです)。

私を混乱させているのは、提供された唯一の引数が文字列であるのに、コードが「get」を呼び出すことが許可されているのはなぜですか? 何もないところから値を引き出しているようです。

私が質問するより良い方法は>>=、do 表記の代わりに and ラムダを使用してこの関数をどのように書き直すかということかもしれません。私はそれを自分で理解することができません。

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

haskell - 状態モナドとリストモナドの結合

次の Haskell コードを検討してください。

これにより、次の出力が生成されます。

ただし、代わりに次の出力を生成したいと思います。

これは、JavaScript のような非純粋な言語で簡単に実行できます。

Haskellで同じことをどのように行いますか?

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

haskell - 失敗したときに情報を保存する方法は?

StateTモナドトランスフォーマーを使用してステートフルな情報 (ロギングなど) を追跡するコードを書いています。

私が渡しているモナドStateTは非常に単純です:

それは単なるLeftRightバリアントです。

私を悩ませているのは の定義ですfail。私の計算では、このモナド内で多くの情報を生成します。失敗した場合でも、この情報を保持したいと考えています。現在、私ができる唯一のことは、すべてを に変換し、 に引数として渡されたインスタンスをString作成することです。BadStringfail

私がやりたいことは次のようなものです:

ただし、これまでに試したことはすべて型エラーになります。これはおそらく、異なるモナドが混在するためです。

failとにかく、必要な情報をすべてに変換することなく保持するために実装できる方法はありStringますか?

Haskell が達成できる最善の方法は、 show+readを使用してすべての情報を文字列としてfail.

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

scala - Scalaz で StateT をスタックする

Dan Piponi によるこのチュートリアルからいくつかの例を移植して、Scala の Monad Transformers を理解しようとしています: http://blog.sigfpe.com/2006/05/grok-haskell-monad-transformers.html

私はいくつかの簡単なことをしました:

になります:

しかし、一体どうすればこの次の例を Scala に移植できるのでしょうか?

私は scalaz 7.1.0-M6 を使ってここまでやってきました:

しかし、それはまだ近いとは言えません。

もちろん、私はこれを行うことができます:

しかし、スタックされた StateT をまったく使用していないため、質問には答えません。

前もって感謝します!

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

haskell - ミュータブル Vector を State Monad に入れる方法

私は Haskell で小さなプログラムを書き、Vector で State Monad を使用して Tree 内の Int 値のすべてのオカレンスをカウントしました。

しかし、不変の Vector の「更新」は O(n) の複雑さで行われます。そして、O(1) での更新と O(1) でのアクセスを探しています。私が理解しているように、可変ベクトルは私が望むことをします。それらを使用するには、ST または IO を使用する必要があります。私はいくつかの UnitTests を実行したいので、ST モナドを好みますが、関数呼び出しでそのベクトルを渡す必要はありません。ErrorT や WriterT などのトランスフォーマーを追加するので、Monad Transformers を使い続ける必要があります。

質問: Monad Transformers を使用して Mutable Vector を State Monad に入れる方法は?

コンパイルできない次のコードを思いつきました。

コンパイル エラーは次のとおりです。

注:境界をチェックしていないことは承知しています。