Haskell守护函数没有加载,检查两个变量

时间:2017-12-01 21:08:43

标签: haskell

我有以下功能。 我想检查变量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”时,我的功能正在运行。为什么我的功能现在不起作用,这个错误意味着什么,以及如何加载这个功能?

1 个答案:

答案 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