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.
Tags und Links haskell template-haskell