実際の例:私が良い気分(「良い状態」)にいる場合、マネージャーが見積もりについて私に尋ねるとき、私は彼に確かな答えを与えますが、それを3回実行することを敢行します、間にいくつかの無料の軽食がなくて、私の気分が変わる(私は「悪い状態」になる)、次の3回彼に近づく。彼はナンセンスで私に邪魔しないように頼む。ここでなぜrunStateシグネチャには状態引数だけがありますか?
は私のいつもの日のログです:
[ Mood: Good, Patience: 3 ] -- 11:00 am, I'm happy
ESTIMATE -> "bla bla 6", [ Mood: Good, Patience: 2 ]
ESTIMATE -> "bla bla 1", [ Mood: Good, Patience: 1 ]
Cookies! -> "", [ Mood: Good, Patience: 3 again! ]
ESTIMATE -> "bla bla 7", [ Mood: Good, Patience: 2 ]
ESTIMATE -> "bla bla 2", [ Mood: Good, Patience: 1 ]
ESTIMATE -> "bla bla 9", [ Mood: BAD , Patience: -2 ] -- Enough!
ESTIMATE -> "Need a break!" [ Mood: BAD , Patience: -1 ]
ESTIMATE -> "Deploynig!", [ Mood: BAD , Patience: 0 ]
ESTIMATE -> "Lunch time!", [ Mood: Good, Patience: 3 ] -- Ok he needs me..
ESTIMATE -> "bla bla 6", [ Mood: Good, Patience: 2 ]
...
今仕事で、私のこのモデルは、State
モナドを合わせているようです。
newtype State s a = State { runState :: s -> (a, s) }
しかし、どうすればよいですか?署名には州のための余地があります。私のケースでは(Mood,Patience)
であり、入力ではありません(ESTIMATE
またはCookies
)。それは私が聞いていなくても答えなければならないようなものです!
私の質問は:ステートフルであるだけでなく、HaskellのState
モナドでの引数計算もどうすればできますか?