一个现实生活中的例子:如果我心情很好(“良好状态”),当经理问我有关估算时,我给了他一个可靠的答案,但他敢这样做3次吗in a row,中间没有一些免费零食,我的情绪发生了变化(我变得“糟糕的状态”),接下来的 3 次他走近时,我要求他不要用任何废话来打扰我。
这是我平常一天的日志:
[ 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
Monad.
newtype State s a = State { runState :: s -> (a, s) }
但我该怎么做呢?签名有一个状态空间,在我的例子中是(Mood,Patience)
,而不是用于输入(ESTIMATE
or Cookies
)。就好像我根本不听就应该回答一样!
所以我的问题是:我如何不仅进行有状态的计算,而且还进行有争议的计算State
Haskell 的单子?