【发布时间】:2014-12-02 20:34:07
【问题描述】:
如果我们有以下代码:
import Control.Monad.State
type Stack = [Int]
pop :: State Stack Int
pop = state $ \(x:xs) -> (x,xs)
push :: Int -> State Stack ()
push a = state $ \xs -> ((),a:xs)
stackManip :: State Stack Int
stackManip = do
push 3
x <- pop
pop
我们的运行方式:
command: runState stackManip [1]
result: (1,[])
“Haskell”如何知道给我们的“x”赋值 3? 那么,他怎么知道从 State monad 中取出 3 而不是状态(在这种情况下是堆栈)?
与 Maybe monad 相同的问题:
do
x <- Just 5
这里只有一个值,但是 Haskell 怎么知道取 '5' 给 'x' 呢?
【问题讨论】: