>>
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 >>= k
Nothing
无论k
函数是什么,都会进行评估.在特定的情况下(>>)
,k
恰好是\_ -> y
.
归档时间: |
|
查看次数: |
374 次 |
最近记录: |