穷尽模式匹配只是因为我遗漏了`否则=`?

这个问题在这里已经有了答案:

  • GHC为什么抱怨非穷举模式? 3个答案

  • GHC根本不知道a > ba < ba == 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

    链接地址: http://www.djcxy.com/p/43223.html

    上一篇: exhaustive pattern matches only because I left off `otherwise =`?

    下一篇: Customising Cabal libraries (I think?)