穷尽模式匹配只是因为我遗漏了`否则=`?
这个问题在这里已经有了答案:
GHC根本不知道a > b
, a < b
或a == b
必须评估为True
。 (事实上,编写一个违反这个假设的Ord
实例是可能的 - 尽管大多数程序员不会考虑这样做,当然Int
实例在这方面会表现得很好。)
你可以很明显地看到,GHC已经通过使用完整的模式匹配来覆盖所有的情况,例如
respond correct guess = case compare guess correct of
GT -> ...
LT -> ...
EQ -> ...
GHC在其严格性检查器中也有特殊情况, otherwise
True
,因此您可以添加(或替换)其中一名警卫作为替代解决方案。
respond correct guess
| guess > correct = ...
| guess < correct = ...
| otherwise = ...
编译器只进行静态语义分析。 由于运营商的意义是在运行时确定的,因此这三个案例无法看到所有可能的投入。
你的代码证明是正确的。 如果你想避免GHC的警告,你可以改变最后的条件, otherwise
。
上一篇: exhaustive pattern matches only because I left off `otherwise =`?