我有这个摘要,您能解释一下这是什么,尤其是>> =?
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] 删除。
我来说两句