In Bezug auf Haskell-Klassen (Num vs Read)

8

Kann mir bitte jemand erklären, was mir hier fehlt:

%Vor%

read "4" löst einen Fehler aus, da ghci nicht weiß, welcher konkrete Typ wir wollen, er weiß nur, dass wir eine Klasse Read type haben. read "4" :: Int funktioniert gut. Das ist mir klar.

Nach der obigen Logik erwartete ich nun, dass fromIntegral 4 einen Fehler auslöst:

%Vor%

Es funktioniert jedoch gut. Warum wird in diesem Fall keine Typennummerierung benötigt? Ich habe erwartet, dass das oben genannte fehlschlägt; und NUR

%Vor%

um zu arbeiten.

NB - Ich lese "Lernen Sie ein Haskell für großes Wohl" und habe bis Kapitel 5 gedeckt. Ist das, was ich frage, in Kapitel 7 (oder einem anderen Kapitel) besprochen?

Danke.

    
babon 05.07.2015, 08:20
quelle

2 Antworten

12

Es funktioniert wegen type defaulting , was zu mehrdeutigen Variablen führt standardmäßig auf Integer oder Double (oder einen anderen benutzerdefinierten Standard) festgelegt werden. Dies geschieht nur für Num und seine Unterklassen.

In GHCi sind die Regeln für den Ausfall entspannt , um auch für Show , Eq und Ord zu funktionieren, und auch () wird zur Liste der Standardtypen hinzugefügt. Dadurch können Ausdrücke wie [] == [] die Überprüfung überprüfen.

    
hammar 05.07.2015, 09:51
quelle
4

Der Unterschied besteht darin, dass read möglicherweise zu einem beliebigen Typ führen kann, während fromIntegral eine Zahl ergibt. Es gibt einige Fehler in Bezug auf Zahlen in ghci, so dass ghci einfach den Standardtyp verwenden kann.

    
Ingo 05.07.2015 09:36
quelle

Tags und Links