卡在 Haskell Wiki 中的 State Monad 示例中

Stucked in the example of State Monad in Haskell Wiki

我正在学习 State Monad,无法理解 Wiki 中的一个示例 (http://en.wikibooks.org/wiki/Haskell/Understanding_monads/State)

rollDie :: GeneratorState Int
rollDie = do generator <- get
             let (value, newGenerator) = randomR (1,6) generator
             put newGenerator
             return value

put有定义

put newState = State $ \_ -> ((), newState)

好像put只是新建了一个State,这一行的实际用途是什么?如果要使用值可能应该使用<-来提取,如果想再次使用state应该使用get。如果删除这一行(或者我遗漏了什么?)没有区别,那么,这一行到底是什么意思?

删除 put 并获得一些随机值。我预测你将永远得到相同的 "random value"。这就是 haskell 中随机生成器的工作原理:它(即 randomR)是一个纯函数 - 给定相同的生成器,它总是 return 相同的结果。您必须将 newGenerator 提供给下一个调用。这是通过 put.

完成的