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