Warum konnte der Compiler den Typ 'a == a' nicht mit '' True 'für die Typfamilie vergleichen?

8

Gibt es einen Grund, warum dieser Code nicht kompiliert wird:

%Vor%

mit Fehler:

%Vor%

Aber wenn ich die Typ-Familien-Definition in

ändere %Vor%

es ist gut zusammengestellt?

(ghc-7.10.3)

    
Dmitry Olshansky 03.02.2016, 08:15
quelle

1 Antwort

9

Aufgrund einer Bitte um ein vollständiges Arbeitsbeispiel von Daniel Wagner habe ich eine Antwort gefunden.

Komplettes Beispiel zuerst:

%Vor%

Das Problem ist hier mit PolyKinds Pragma. Ohne es geht es gut. Ich brauche es wahrscheinlich, damit ich schreiben kann

%Vor%

und alles geht gut.

Der Grund ist jetzt klar. Die Typfamilie ( == ) hat keine poly-kinded Instanzen (Details, die erklären, warum solche Instanzen nicht bereitgestellt werden hier ), damit wir nicht alle Gleichheiten reduzieren können. Also müssen wir eine Art angeben.

    
Dmitry Olshansky 03.02.2016, 13:17
quelle