【发布时间】:2014-08-09 11:05:16
【问题描述】:
我正在阅读有关 State monad 的信息,在编写了下面的代码后,我无法理解初始状态 (mkStdGen 42) 是如何传递给 rollDice 函数的?
get 如何处理该初始值?
我了解rollDice 函数的工作原理,但我无法想象初始状态是如何提升到 monad 中的。
import Control.Monad.Trans.State
import System.Random
rollDice :: State StdGen Int
rollDice = do
generator <- get
let (x, s) = randomR (1,6) generator
put s
return x
main :: IO ()
main = putStrLn . show $ evalState rollDice (mkStdGen 42)
【问题讨论】: