5
可能重复:
Why don't Haskell list comprehensions cause an error when pattern match fails?非详尽模式
今天我看到下面的代码:
Prelude> [a | Just a <- [Just 10, Nothing, Just 20]]
[10, 20]
它的工作原理。但我认为,上述名单的理解仅仅是语法糖...
[Just 10, Nothing, Just 20] >>= (\(Just x) -> return x)
...为此哈斯克尔,遇到Nothing
时,会发出错误*** Exception: Non-exhaustive patterns in lambda
。
所以我的问题是:什么[a | Just a <- [Just 10, Nothing, Just 20]]
翻译成(在一元代码方面),使其忽略Nothing
?
@ephemient:谢谢!您链接的帖子回答我的问题。我发现[另一个](http://stackoverflow.com/questions/7007222/haskell-list-comprehension-to-combinatory)。我在发布我的问题之前没有找到这些帖子的原因是因为他们没有包含“穷举”这个词,这是Haskell的问题。 (我是StackOverflow的新手,我不知道应该怎么做,我应该删除这个问题吗?对于输入“[non-] exhaustive”的用户仍然有用。) – 2012-07-30 22:35:33
You不需要删除 - 最终它会作为重复被关闭,这意味着将有大量的链接将人们从这里转移到下一个,并给出答案。而且,正如你注意到的,保持身边比杀死更有用:) – ephemient 2012-07-30 22:42:56