2017-12-22 4 views
0

ich folgende Fehler bekommenOrd in implizite Definition, Fehler mit Wachen

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. Warum gibt es Ord in implizite Typdefinition?
  2. Was der Fehler sagt?
  3. Was ist falsch in der Definition?
+3

Die Lösung besteht darin, '-1' in Klammern zu setzen, z.B. 'abs (-1)', das liegt an Haskells Parsing, jemand anders kann besser erklären als ich die anderen Fragen. – Zpalmtree

+1

'abs -1' zu Haskell sieht aus wie" abs - 1 ", als ob" abs "eine Zahl wäre, das ist die Eigenart von Haskells Parsing @ Zpalmtree. – AJFarmar

Antwort

5

Wenn Sie schreiben abs -1 oder x -1 Haskell - als Binäroperators analysieren. So beschwert es sich, dass abs (was eine Funktion ist) keine Nummer ist. Wie Zpalmtree sagte, müssen Sie abs (-1) schreiben.