一般来说,当我们从Nothing
构造中的do
中抽取时会发生什么?为了说明我的困惑:为什么do {x <- Just 1; y <- Nothing; return x}
会产生Nothing
?
答案 0 :(得分:9)
您的do
区块已被淘汰:
Just 1 >>= (\x -> Nothing >>= (\y -> return x))
如果您查看可能的definition of (>>=)
:
(Just x) >>= k = k x
Nothing >>= _ = Nothing
您可以看到Nothing >>= (\y -> return x)
返回Nothing
而Just 1 >>= (\x -> Nothing)
也是Nothing
。