隐式定义中的Ord,带有警卫的错误

时间:2017-12-22 05:15:21

标签: haskell

我收到了以下错误

Prelude> abs n | n>=0 = n+100 | otherwise =n
Prelude> abs 10
110
Prelude> abs -1

<interactive>:44:1: error:
    * Non type-variable argument in the constraint: Num (t -> t)
      (Use FlexibleContexts to permit this)
    * When checking the inferred type
        it :: forall t. (Ord t, Num (t -> t), Num t) => t -> t
  1. 为什么隐式类型定义中有Ord
  2. 错误在说什么?
  3. 定义有什么问题?

1 个答案:

答案 0 :(得分:5)

当您将abs -1x -1 Haskell解析为-作为二元运算符时。所以它抱怨abs(这是一个函数)不是一个数字。正如Zpalmtree所说,你需要写abs (-1)