Mit DataKinds eine Definition wieGibt es einen Grund, warum wir Typen mit DataKinds nicht füllen können?
data KFoo = TFoo
stellt die Art und den Typ KFoo :: BOX
TFoo :: KFoo
. Warum kann dann auf Ich gehe
data TFoo = CFoo
so dass CFoo :: TFoo
zu definieren, TFoo :: KFoo
, KFoo :: BOX
?
Müssen alle Konstruktoren zu einem Typ gehören, der zum Typ *
gehört? Wenn ja warum?
Bearbeiten: Ich erhalte keinen Fehler, wenn ich dies tue, weil Konstruktoren und Typen einen Namespace teilen, aber GHC erlaubt Konflikte, da Namen Namen als reguläre Typen, anstatt gefördert Konstruktoren disambiguiert. Die Dokumente sagen, dass ein '
vorangestellt wird, um auf den heraufgestuften Konstruktor zu verweisen. Wenn ich die zweite Zeile ändern, um
data 'TFoo = CFoo
erhalte ich die Fehler
Malformed Kopf des Typs oder Klassendeklaration: TFoo
Welchen Fehler bekommen Sie, wenn Sie versuchen, 'Daten TFoo' zu definieren? – cdk