Given the following code
rollDie :: GeneratorState Int
rollDie = do generator <- get
let (value, newGenerator) = randomR (1,6) generator
put newGenerator
return value
I know I can translate it as:
rollDie2 :: GeneratorState Int
rollDie2 = get >>= \generator ->let (value, newGenerator) = randomR(1,6) generator
in put newGenerator >> return value
I tested both functions with and without the put newGenerator >>
, and they produce different results. My question is why? The put
functions is pure, and the operator (>>
) means that return value
should be unaffected by prior results.