在Haskell/Understanding monads/State有一个代码片段:在使用State Monad时理解符号“< - ”?
type GeneratorState = State StdGen
rollDie :: GeneratorState Int
rollDie = do generator <- get
let (value, newGenerator) = randomR (1,6) generator
put newGenerator
return value
关于符号<-
在上面的第三行中,有一个解释:
我们采取了伪随机发生器<-
连同GET 。用状态覆盖monadic值(a
,m a
),将生成器绑定到状态。 (如果有疑问,请回顾上面的get和>>=
的定义)。
我不明白:(1)generator
对应第一个参数定义State
? (2)为什么generator
只是State
这两个参数中的一个,而不是两个?当然,从上下文来看,答案很明显,但我不知道关于<-
的具体规则。
据我所知,评估evalState rollDie (mkStdGen 600)
时,get
将被State (mkStdGen 0) (mkStdGen 0)
这里所取代,并根据RWH的描述“<-
翻出东西拿出单子”,事情没有(mkStdGen 0) (mkStdGen 0)
?
谢谢!对不起,我几乎忘记了符号和'>> =''RWH'之间的等价关系,并没有完全理解“国家行为”作为一个整体! – abelard2008