Ich beantworte meine eigene Frage mit Informationen aus den Kommentaren von dfeuer und user2407038.
Es hat sich herausgestellt, dass mein Code die Sättigungsanforderung verletzt hat . Ich habe den Fehler wegen eines seltsamen Verhaltens (Bug?) Von %code% in ghci nicht gefunden. Aber das Schreiben des Typs in die hs -Datei selbst ergibt einen Kompilierungsfehler.
%code% ist nicht für Typfamilien gedacht, sondern für das Umschließen von regulären Typkonstruktoren wie %code% , die kein Problem mit Typvariablen haben. %code% funktioniert zum Beispiel gut.
Für Typfamilien müssen wir einen speziellen Hilfstyp für jede von ihnen definieren und dann eine %code% -Instanz für den Typ definieren. So:
%Vor%Beachten Sie, dass die %code% type-Familie auf diese Weise nicht mit einer beliebigen Typvariablen vereinheitlicht wird.
Ich habe dieses minimale Arbeitsbeispiel (aus der Singletons -Bibliothek) für die Zuordnung einer Typfamilie über eine Typ-Ebene ausgewählt Liste:
%Vor%Es scheint zu funktionieren:
%Vor%Der Code wird im Beitrag Defunktionalisierung für den Gewinn erläutert. Dies ist ein Workaround für die Tatsache, dass "GHC eine Typvariable nicht mit einer Typfamilie vereinheitlichen lässt". Dies wird als "Sättigungsanforderung von Typfamilien" bezeichnet.
Mein Zweifel ist: Wenn wir " %code% " ausführen, scheint es, dass %code% in der Zeile %code% mit unserer %code% type-Familie übereinstimmt. Warum verstößt das nicht gegen die Sättigungspflicht?