今天看到如下代码:
Prelude> [a | Just a <- [Just 10, Nothing, Just 20]]
[10, 20]
有用。但我认为上面的列表理解只是...的语法糖
[Just 10, Nothing, Just 20] >>= (\(Just x) -> return x)
...为此,Haskell 在遇到 时Nothing
会发出错误*** Exception: Non-exhaustive patterns in lambda
。
所以我的问题是:什么[a | Just a <- [Just 10, Nothing, Just 20]]
翻译成(就一元代码而言)使它忽略Nothing
?