为什么没有>> Haskell中只有3个什么都没有?

Buz*_*uzu 7 monads haskell

>>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 >>=)它不会评估其第二个参数.


dup*_*ode 6

要真正理解(>>)在这种情况下你需要查看for 的定义(>>=)Maybe:

(Just x) >>= k      = k x
Nothing  >>= _      = Nothing
Run Code Online (Sandbox Code Playgroud)

Nothing >>= kNothing无论k函数是什么,都会进行评估.在特定的情况下(>>),k恰好是\_ -> y.