如果条件抛出错误,为什么在下面的负数?

Nai*_*air 2 haskell

我在Pluralsight观看'Haskell Fundamentals Part 1'.在第二章中,作者用if表示了一个非常简单的函数.当我尝试它时,每当我尝试使用带负数的函数时,我都会收到错误.这是功能

posOrNeg x = 
    if x >= 0
    then "Positive"
    else "Negative"
Run Code Online (Sandbox Code Playgroud)

当我尝试使用正数的方法时它工作正常,但是当我用负数调用方法时,winGHCi会抛出以下错误.
"没有实例(显示(a0 - > [Char])))因使用'print'而产生的......"
它还有更多的功能吗?

sep*_*p2k 14

当将相同的函数应用于相同类型的正数时,无法将函数应用于负数时出现类型错误.

在没有看到代码的情况下,最可能的解释是你写了类似的东西posOrNeg -42,posOrNeg - 42并且尝试从中减去42 posOrNeg(这是不可能的,因为当然,你不能从函数中减去一个数字).将函数应用于负数的正确语法是posOrNeg (-42)使用数字周围的括号,因此无法将其解析-为中缀运算符.

  • 请注意,使用`-XNegativeLiterals`,您可以执行`posOrNeg -42`(但不能执行`posOrNeg - 42`). (4认同)