Kann jemand bitte erklären, was ich hier fehlt:In Bezug auf Haskell Typklassen (Num vs Read)
Prelude> :t read
read :: (Read a) => String -> a
Prelude> read "4"
<interactive>:1:0:
Ambiguous type variable `a' in the constraint:
`Read a' arising from a use of `read' at <interactive>:1:0-7
Probable fix: add a type signature that fixes these type variable(s)
read "4"
löst einen Fehler als GHCI nicht, welche konkreten Typ nicht wissen, dass wir wollen, es weiß nur, dass wir haben Sie eine Read
Typklasse. read "4" :: Int
funktioniert gut. Das ist mir klar.
Jetzt, nach der obigen Logik, erwartete ich fromIntegral 4
einen Fehler zu erhöhen:
Prelude> :t fromIntegral
fromIntegral :: (Integral a, Num b) => a -> b
Prelude> fromIntegral 4
4
aber es funktioniert gut. Warum wird in diesem Fall keine Typennummerierung benötigt? Ich habe erwartet, dass das oben genannte fehlschlägt; und NUR
Prelude> fromIntegral 4 :: Int
zu arbeiten.
NB - Ich lese "Lernen Sie ein Haskell für großes Gutes" und habe bis Kapitel 5 behandelt. Ist das, was ich frage, in Kapitel 7 (oder einem anderen Kapitel) diskutiert?
Danke.