尝试将两个值相加,其中只有一个为负数,例如-1
和2
:
soma :: Float -> Float -> Float soma x1 x2 = x1 + x2
结果出错了; 为什么?
:10:6: No instance for (Num (Float -> Float -> Float)) arising from a use of `-' Possible fix: add an instance declaration for (Num (Float -> Float -> Float)) In the expression: soma - 1 2 In an equation for `it': it = soma - 1 2
psr.. 8
您应该使用(-1)而不是 - 1.解析器将您键入的内容解释为( - )soma(1 2).换句话说,它试图从soma中减去(1 2).哪个不起作用,因为减法不接受Float - > Float - > Float.
你希望(并且预期会发生)是为了让haskell评估 - 作为1上的一元运算符,优先级高于函数应用程序.这与haskell正常工作的方式相反.已经特别考虑(-1)被解释为(否定1). 这可能会导致一些问题,因为它是一个特殊情况 - 在这个例子中试图讨论 - 不起作用,因为它不是真的 - 但是否定.
据推测,一个更广泛的特殊情况可能会导致经验丰富的haskell程序员出现更多意外行为,因此语言设计师认为它不值得.
您应该使用(-1)而不是 - 1.解析器将您键入的内容解释为( - )soma(1 2).换句话说,它试图从soma中减去(1 2).哪个不起作用,因为减法不接受Float - > Float - > Float.
你希望(并且预期会发生)是为了让haskell评估 - 作为1上的一元运算符,优先级高于函数应用程序.这与haskell正常工作的方式相反.已经特别考虑(-1)被解释为(否定1). 这可能会导致一些问题,因为它是一个特殊情况 - 在这个例子中试图讨论 - 不起作用,因为它不是真的 - 但是否定.
据推测,一个更广泛的特殊情况可能会导致经验丰富的haskell程序员出现更多意外行为,因此语言设计师认为它不值得.