hli*_*liu 2 monads haskell state-monad
我正在学习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
Run Code Online (Sandbox Code Playgroud)
在put有定义
put newState = State $ \_ -> ((), newState)
Run Code Online (Sandbox Code Playgroud)
它似乎put只是创造了一个新的State,这条线的实际用途是什么?如果要使用该值可能应该使用<-提取,而如果state要再使用则应该使用get.如果删除这一行(或者我错过了什么?)没有区别,那么,这条线的真正含义是什么?
删除它put并获取一些随机值.我预测你将永远得到相同的"随机值".这就是haskell中随机生成器的工作方式:它(即randomR)是一个纯函数 - 给定相同的生成器,它将始终返回相同的结果.您必须将newGenerator提供给下一个呼叫.这是通过put.