给定以下代码
rollDie :: GeneratorState Int
rollDie = do generator <- get
let (value, newGenerator) = randomR (1,6) generator
put newGenerator
return value
我知道我可以将其翻译为:
rollDie2 :: GeneratorState Int
rollDie2 = get >>= \generator ->let (value, newGenerator) = randomR(1,6) generator
in put newGenerator >> return value
我测试了有和没有 的两个函数put newGenerator >>
,它们产生了不同的结果。我的问题是为什么?put
函数是纯函数,运算符 ( )>>
表示return value
不受先前结果的影响。