一个实际的例子:如果我处于良好的心情(“良好状态”)时,经理问我关于估计的问题,我会给他一个坚定的答案,但如果他连续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) }
但是我该如何做到这一点呢?签名中有一个状态变量,而在我的情况下它是 (心情,耐心)
,而不是输入变量(ESTIMATE
或Cookies
)。这就好像我必须在没有听取的情况下回答。
所以我的问题是:如何使用Haskell的State
单子,使计算既具有状态又具有参数?