2014-09-21 33 views
2

我在看Plurasight中的'Haskell Fundamentals Part 1'。在第二章中,作者用表示一个非常简单的函数,如果其中有。当我尝试它时,我每次尝试带负数的函数时都会出错。下面是函数为什么负数在下面的条件中会引发错误?

posOrNeg x = 
    if x >= 0 
    then "Positive" 
    else "Negative" 

当我试图用正数的方法,它工作得很好,但是当我打电话与负数的方法,winGHCi抛出下面的错误。
“没有用于(显示(a0 - > [Char])))由于使用”打印“而产生的实例...”
更多地是它,那么这里的功能呢?

回答

14

当将相同的函数应用于相同类型的正数时,您将无法获得将函数应用于负数的类型错误。

在没有看到代码,最可能的解释是,你写的东西像posOrNeg -42,这是一样的posOrNeg - 42并试图从posOrNeg减去42(因为,当然,你不能减,这是不可能一个函数中的数字)。将函数应用于负数的正确语法是posOrNeg (-42),其中带有括号,因此无法将-解析为中缀运算符。

+0

是的,我没有通过括号中的负数。我以前不知道那个区别。有道理。 – Nair 2014-09-21 04:19:01

+4

请注意,使用'-XNegativeLiterals',您可以执行'posOrNeg -42'(但不是'posOrNeg - 42')。 – leftaroundabout 2014-09-21 08:23:59

+0

有时使用'negate'会比较容易使用,这取决于情况 – Carsten 2014-09-23 20:43:50

相关问题