Warum kann ich in GHCi nicht "pure 1" in REPL anzeigen?

8

Ich habe versucht, einen angehobenen Wert a zuzuweisen.

%Vor%

Wenn ich a in REPL ausgewertet habe, wird 1 ausgegeben.

%Vor%

Daher dachte ich, dass es eine Implementierung von show für a geben könnte, und habe Folgendes versucht:

%Vor%

Aber der GHCi gibt einen Fehler aus:

%Vor%

Hat jemand irgendwelche Ideen dazu?

    
Hanfei Sun 26.05.2015, 17:12
quelle

1 Antwort

19

GHCi verwendet standardmäßig Applicative f => f bis IO . Wenn du es tust

%Vor%

Sie führen tatsächlich eine IO Integer Aktion wie

aus %Vor%

GHCi druckt standardmäßig das Ergebnis von IO actions. Daher die 1 in der Ergebniszeile. (Verwirrenderweise ist diese 1 nicht der Wert von a , noch die Ausgabe von a als IO Aktion - nur der zurückgegebene Wert der letzteren.)

GHCi verwendet eine ausgeklügelte Heuristik zur Handhabung von Benutzereingaben. Zuerst versucht es show it, möglicherweise einige Typklassen wie numerische Standardwerte. Dies schlägt in Ihrem Fall fehl. Wenn das fehlschlägt, versucht es zu sehen, ob die Eingabe eine Aktion IO ist. In diesem Fall wird die Aktion ausgeführt, und wenn das Ergebnis show ed lautet, wird es gedruckt.

Beachten Sie, dass diese GHCi-Magie nur auf der obersten Ebene stattfindet. Wenn Sie show a versuchen, versucht GHCi seine Magie auf dem gesamten show a , nicht auf a , so dass der gleiche Effekt nicht auftritt.

    
chi 26.05.2015 17:18
quelle

Tags und Links