Warum scheint Haskell beim Lesen von Num standardmäßig Int zu lesen?

8

Ich habe nicht erwartet, dass der folgende Code funktioniert:

%Vor%

weil es nicht möglich ist, den Typ von (gelesen "7") basierend auf dem Code vollständig abzuleiten. Aber GHC (6.12.3) denkt anders und druckt 14.

Wenn "7" zu "7.2" geändert wird, schlägt der Code mit "no parse" fehl. Was ist denn hier los? Wie entscheidet Haskell, welche Instanz von Read verwendet werden soll?

    
Owen 28.05.2011, 23:41
quelle

2 Antworten

12

Dies wird durch Haskells Standardregeln für die Num -Klasse verursacht. Wenn Sie

hinzugefügt haben %Vor%

an den Anfang Ihrer Datei, dann erhalten Sie die folgenden Ergebnisse:

%Vor%

Kurz gesagt, Standardregeln sind ein Versuch, "das Richtige zu tun" und Sie vor einem Kompilierungsfehler zu retten, wenn Sie einen mehrdeutigen Typ in Ihrem Programm haben. Leider handelt es sich in diesem Fall um einen Kompilierfehler für einen Laufzeitfehler.

Sie können den Standard wie folgt deaktivieren:

%Vor%

, was Sie dazu zwingt, die Arten solcher Begriffe durch Typ-Annotationen eindeutig zu unterscheiden:

%Vor%     
Tom Crockett 28.05.2011, 23:59
quelle
2

Int ist der Standardtyp in dieser Instanz. Siehe Sek. 6.3, Ambiguität und Typ Defaulting, in einer Geschichte von Haskell: Faulenzen mit Klasse,

    
rickythesk8r 28.05.2011 23:58
quelle

Tags und Links