基本Haskell函数中的非穷举错误



我是Haskell的新手,正在尝试组合一个简单的函数来检查两个数字是否相等。这是可编译的,但当我尝试对程序进行测试时,它说这不是详尽无遗的。我不明白用布尔函数怎么可能是非穷举的?提前感谢:

data Value = ConstInt Int
           | Numequal Value Value
           | Ctrue Bool
           | Cfalse Bool
            deriving (Read, Show)
eval:: Value -> Bool
eval (Numequal e1 e2) =
   let x = eval e1
       y = eval e2
         in case (x, y) of
            (i1, i2)  -> 
                if x == y
                then False
                else True

您尚未完成eval函数。例如,假设我调用eval (ConstInt 34)。它应该返回什么?

此外,想想你的身体机能是什么。eval返回一个布尔值,所以xy都将是布尔值,您正在测试它们是否相等。这就是你想要的吗?

使用模式匹配时,必须处理所有可能的情况。

eval (Numequal e1 e2) = ...
eval _ = False -- or patterns for ConstInt, Ctrue and Cfalse

据我所知,您的数据类型应该是deriving (Eq),以便能够对其进行比较。

相关内容

  • 没有找到相关文章

最新更新