タグ付けされた質問 「state-monad」

3
状態、ST、IORef、MVarの違い
私は48時間でスキーマの作成に取り組んでいます(最大で約85 時間です)、変数と割り当ての追加に関する部分にたどり着きました。この章には大きな概念的なジャンプがあります。最終的なソリューションに直接ジャンプするのではなく、2つのステップで適切なリファクタリングを行って実行したいと思います。とにかく… :私は、同じ目的を果たすように見える別のクラスの数を失ってもらいましたState、ST、IORef、とMVar。最初の3つはテキストで言及されていますが、最後の3つは、最初の3つに関する多くのStackOverflowの質問に対する好ましい回答のようです。それらはすべて、連続した呼び出しの間に状態を運ぶようです。 これらはそれぞれ何であり、どのように互いに異なるのですか? 特に、次の文は意味がありません。 代わりに、状態スレッドと呼ばれる機能を使用して、Haskellに集約状態を管理させます。これにより、関数を使用して変数を取得または設定し、他のプログラミング言語と同様に可変変数を処理できます。 そして IORefモジュールを使用すると、IOモナド内でステートフル変数を使用できます。 これらすべてにより、行がtype ENV = IORef [(String, IORef LispVal)]混乱します-なぜ2番目IORefですか?type ENV = State [(String, LispVal)]代わりに書くと何が壊れますか?

2
ハスケルの入れ子になった州
やや異なる種類の状態を持つ状態マシンのファミリーを定義しようとしています。特に、より「複雑な」状態機械には、より単純な状態機械の状態を組み合わせることによって形成される状態があります。 (これは、オブジェクトがオブジェクトでもあるいくつかの属性を持つオブジェクト指向の設定に似ています。) これが私が達成したいことの簡単な例です。 data InnerState = MkInnerState { _innerVal :: Int } data OuterState = MkOuterState { _outerTrigger :: Bool, _inner :: InnerState } innerStateFoo :: Monad m => StateT InnerState m Int innerStateFoo = do i <- _innerVal <$> get put $ MkInnerState (i + 1) return i outerStateFoo …
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.