Haskell let-expression: cannot construct the infinite type



  • Hallo,

    Ich wollte mich nun wirklich aufraffen Haskell zu lernen, und hab mir vorgenommen all die kleinen Hausaufgaben in Haskell zu programmieren - leider nicht ganz problemlos.

    Folgender minimaler Codeausschnitt:

    {- Signatur von inverse -}
    inverse::(Integral a)=>a -> a -> a
    ...
    
    addPoint::(Integral a) => (a,a) -> (a,a) -> a -> a -> (a,a)
    addPoint (x1,y1) (x2,y2) a p =
        let s = inverse 2*y1 p
        in
            (s,s)
    

    Ich bekomme den folgenden Fehler:

    src/Main.hs:14:8:
        Occurs check: cannot construct the infinite type: a = a -> t -> t
        When generalising the type(s) for `s'
        In the expression: let s = inverse 2 * y1 p in (s, s)
        In the definition of `addPoint':
            addPoint (x1, y1) (x2, y2) a p = let s = inverse 2 * y1 p in (s, s)
    

    Irgendwie sagt mir das gar nichts. Ich vermute, dass das bedeutet, dass er aus irgendeinem Grund den Typ von s nicht auflösen kann. Ich hab auch schon rausgekriegt dass es aus irgendeinem Grund an inverse liegt (was alleine tadellos funktioniert). Weiß da jemand was ich falsch mache? Sicher irgendwas blödes, aber ich komm nicht drauf 😞



  • Und wenn du 2*y1 klammerst? Also (2*y1) .. habe gerade keinen Interpreter zur Hand zum Testen.



  • Autsch.... das wars. Danke dir



  • knivil schrieb:

    Und wenn du 2*y1 klammerst? Also (2*y1) .. habe gerade keinen Interpreter zur Hand zum Testen.

    http://codepad.org/
    http://ideone.com/


Anmelden zum Antworten