Ich verstehe nicht, warum die folgende Funktion funktioniert:Verwirrung mit Inferenz Haskell Typ
isLongerThanN :: Integral n => n -> [a] -> Bool
isLongerThanN n xs = length xs > fromIntegral n
aber folgendes nicht:
isLongerThanN' :: Integral n => n -> [a] -> Bool
isLongerThanN' n xs = length xs > n
, die den Fehler wirft
Could not deduce (n ~ Int)
from the context (Integral n)
bound by the type signature for
isLongerThanN' :: Integral n => n -> [a] -> Bool
at blah.hs:140:1-35
`n' is a rigid type variable bound by
the type signature for
isLongerThanN' :: Integral n => n -> [a] -> Bool
at blah.hs:140:1
In the second argument of `(>)', namely `n'
In the expression: length xs > n
In an equation for `isLongerThanN'':
isLongerThanN' n xs = length xs > n
(was ich wahrscheinlich falsch verstanden habe)
Wenn überhaupt, würde ich erwarten, dass es andersherum ist, da vonIntegral effektiv Variable n Typ zu erweitern ist.
Schreiben Sie nicht 'wenn foo dann wahr sonst false'. Es ist das gleiche wie nur 'foo'. – hammar
du hast recht, danke; Ich habe es geändert, aber das ist nicht die Frage – Inept
Deshalb hat er es nicht als Antwort posten ... – Jasper