Haskell State Monad的解释

yonutix

我有这个摘要,您能解释一下这是什么,尤其是>> =?

instance Monad (State s) where
    return a = State $ \s -> (a, s)
    State st >>= f = State $ \s ->
        let (a, s') = st s
        in  runState (f a) s'

最终您能以更清晰的形式编写它吗?谢谢

数学兰花

这段代码定义>>=应该做什么。

State func1 >>= f    =
  State $ ...stuff...

State构造函数所应遵循的是接受当前状态,并返回一个新的状态和结果的功能。因此...stuff...必须是这样的功能,也func1必须是这样的。

State $ \ state1 -> ...

好的,因此,我们想func1通过给它一些状态来“运行”

let (resultA, state2) = func1 state1

接下来,我们要调用f以获取下一个要执行的单子动作:

State func2 = f resultA

现在我们“运行”它,state2而不是喂它state1

in func2 state2

上面的示例代码使用runState,但是为了清晰起见,我想将其明确拼写出来。

State func1 >>= f   =
  State $ state1 ->
    let (resultA, state2) = func1 state1
        State func2 = f resultA
    in  func2 state2

本文收集自互联网,转载请注明来源。

如有侵权,请联系 [email protected] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章