从这个优秀的教程中了解State monad .然而,当我试图向非程序员解释时,他们有一个难以理解的问题.
如果State的目的是模拟可变内存,为什么state monad store的函数是这样的:
s -> (a, s)
Run Code Online (Sandbox Code Playgroud)
而不是简单地:
s -> s
Run Code Online (Sandbox Code Playgroud)
换句话说,对"中间"价值的需求是什么?例如,在我们需要的情况下,我们不能通过简单地将状态定义为元组来模拟它(state, value)吗?
我确定我感到困惑,任何帮助都表示赞赏.
为了扩展尼克的回答:
s是国家.如果所有函数都是s -> s(状态到状态),则函数将无法返回任何值.您可以将状态定义为(the actual state, value returned),但是将状态与状态函数计算的值混合在一起.而且你也希望函数能够实际计算并返回值,这也是常见的情况......