...どのようにputsが状態を最初に更新していますか?何もせずにそこに座っているようです...
ああ、今私はあなたの質問を理解しています。 put
(とget
)がうまくいくかどうか疑問に思いますか?
たぶん、JavaScriptでの例では、(実際の可変状態で言語を)助ける:
var s; // mutable state
function get() { return s; }
function put(x) { s = x; }
function tick() {
var n = get();
put(n + 1);
return n;
}
私は、これはn
は変わらない一方で、内部の状態はまだ更新されます、ということを示したいと考えています。 tick()
を2回実行すると、状態は2回インクリメントされます。
が戻っハスケルに取得するには、ここでState
モナドの(関連部分)の完全な定義があります:
今
newtype State s a = State { runState :: s -> (a, s) }
instance Monad (State s) where
return a = State $ \s -> (a, s)
m >>= k = State $ \s -> let
(a, r) = runState m s
in runState (k a) r
get = State $ \s -> (s, s)
put s = State $ \_ -> ((), s)
手動>>=
、return
、get
をインライン化することにより、さらにあなたのtick
例を展開しようとput
。国家の仕組みがより明確になることを願っています。
私は5秒であなたを打つ!私自身/後で物事を理解する傾向があるのは奇妙です/私は質問しました。私はその応答に感謝します! :) – Rayne