我有以下功能。 我想检查变量a和b是否都大于0,如果是这样的话 他们得到补充,如果没有,他们会被减去。我的功能并不意味着它仅用于测试目的,它只应加载和工作。
test a b
|a && b > 0 = a+b
|otherwise = a-b
我收到以下错误:
No instance for (Num Bool) arising from the literal `0'
但当我删除“&& b
”时,我的功能正在运行。为什么我的功能现在不起作用,这个错误意味着什么,以及如何加载这个功能?
答案 0 :(得分:2)
a && b > 0
折叠为a && (b > 0) => a && True
(假设为b>0
)。由于您无法对两个数字进行AND操作,因此会失败,从而为您提供自(&&) :: Bool -> Bool -> Bool
你想要
test a b
| a > 0 && b > 0 = a+b
| otherwise = a-b
或者你可以改变你的逻辑
test a b
| a <= 0 = a-b
| b <= 0 = a-b
| otherwise = a+b