>>
Haskell中函数的签名是这样的:
(>>) :: m a -> m b -> m b
默认实现是:
x >> y = x >>= \_ -> y
由此,我理解该>>
函数总是返回其正确的参数,而不管左边的值.lambda甚至不关心左参数(x)的值是什么.那么,为什么Nothing >> Just 3
等于Nothing
?它不应该只是返回Just 3
,因为那是右边的论证的价值吗?
我知道当与a相关联时,任何Just
值都将返回Nothing
,Nothing
但在这种情况下,Nothing
甚至不被lambda捕获.我错过了什么?
奖金问题,>>=
被称为绑定.什么>>
叫?
谢谢.
因为绑定甚至不关心lambda的价值是什么!
Just x >>= f = f x Nothing >>= _ = Nothing
请注意,(Nothing >>=)
它不会评估其第二个参数.
要真正理解(>>)
在这种情况下你需要查看for 的定义(>>=)
Maybe
:
(Just x) >>= k = k x Nothing >>= _ = Nothing
Nothing >>= k
Nothing
无论k
函数是什么,都会进行评估.在特定的情况下(>>)
,k
恰好是\_ -> y
.