我是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
答案 0 :(得分:5)
您尚未完成eval
功能。例如,假设我呼叫eval (ConstInt 34)
。它应该返回什么?
另外,请考虑功能正文中的内容。 eval
会返回一个布尔值,因此x
和y
都将是布尔值,您正在测试它们是否相等。那是你要的吗?
答案 1 :(得分:4)
使用模式匹配时,您必须处理所有可能的情况。
eval (Numequal e1 e2) = ...
eval _ = False -- or patterns for ConstInt, Ctrue and Cfalse
答案 2 :(得分:0)
据我所知,您的数据类型应为deriving (Eq)
,以便您能够对其进行比较。