做什么
irrefutable pattern failed for pattern
意思是?
什么情况会导致这个运行时错误?
最佳答案
考虑这个例子:
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
中的模式。绑定(bind), as chrisdb suggested .
关于haskell - 是什么导致了 "irrefutable pattern failed for pattern",它是什么意思?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6711870/