Vorlage Haskell-Datendeklarationen, die Show ableiten

8

Folgendes kompiliert nicht:

%Vor%

Ich kann nicht erkennen, was der Fehler überhaupt bedeutet:

%Vor%

Kann man Ableitungen wie diese machen?

    
Ana 31.12.2011, 18:01
quelle

1 Antwort

7

Dieses Problem tritt auf, weil TH-Anführungszeichen beim Kompilieren typgeprüft werden und Spleiße durch Variablen ersetzt werden. Dies ist normalerweise eine gute Idee, weil damit viele Arten von Problemen erkannt werden können, bevor der Spleiß ausgeführt wird. In einigen Fällen kann dies jedoch dazu führen, dass der Compiler einen Spleiß, der einen gültigen Code erzeugen würde, fälschlicherweise zurückweist.

In diesem Fall bedeutet das, dass der Compiler versucht, diesen Code zu überprüfen:

%Vor%

Dies funktioniert nicht, da die abgeleiteten Show und Read Instanzen Show und Read für t verwenden müssen, aber da t kein Typparameter von Alpha ist kann die notwendigen Einschränkungen nicht hinzufügen. Wenn dieser Spleiß ausgeführt wird, wird natürlich t durch einen konkreten Typ ersetzt, sodass die entsprechenden Instanzen ohne die Notwendigkeit von Einschränkungen verfügbar sind. Dies ist einer der Fälle, in denen der Compiler übervorsichtig ist.

Die Problemumgehung besteht darin, kein Quoting zu verwenden, sondern TH-Kombinatoren zu verwenden, die diesen zusätzlichen Prüfungen nicht unterliegen. Es ist unordentlich, aber es funktioniert:

%Vor%

Es gab einige, die darüber reden, die Schecks, die in Anführungszeichen gesetzt werden, zu entspannen , aber jetzt wirst du es tun muss nur damit umgehen.

    
hammar 31.12.2011 18:35
quelle

Tags und Links