什么是
无可辩驳的模式失败了
意思是?
什么情况会导致这个运行时错误?
考虑这个例子:
foo ~(Just x) = "hello"
main = putStrLn $ foo Nothing
这使用了一种无可辩驳的模式(~
部分)。无可辩驳的模式总是“匹配”,所以这个打印hello
.
foo ~(Just x) = x
main = putStrLn $ foo Nothing
现在,模式仍然匹配,但是当我们尝试使用x
当它实际上不存在时,我们得到了一个无可辩驳的模式匹配错误:
Irr.hs: /tmp/Irr.hs:2:1-17: Irrefutable pattern failed for pattern (Data.Maybe.Just x)
这与没有匹配模式时出现的错误有微妙的区别:
foo (Just x) = x
main = putStrLn $ foo Nothing
这输出
Irr.hs: /tmp/Irr.hs:2:1-16: Non-exhaustive patterns in function foo
当然,这是一个有些人为的例子。更可能的解释是它来自于一个模式let
捆绑,正如 chrisdb 建议的那样 https://stackoverflow.com/questions/6711870/what-are-the-cases-that-will-cause-irrefutable-pattern-failed-for-pattern/6711945#6711945.
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)