Z DataKinds definicję jakCzy istnieje powód, dla którego nie możemy zapełnić typów danymi w DataKinds?
data KFoo = TFoo
wprowadza rodzaj KFoo :: BOX
i rodzaj TFoo :: KFoo
. Dlaczego nie mogę następnie przejść do definiowania
data TFoo = CFoo
takie, że CFoo :: TFoo
, TFoo :: KFoo
, KFoo :: BOX
?
Czy wszyscy konstruktorzy muszą należeć do typu należącego do rodzaju *
? Jeśli tak, dlaczego?
Edit: Nie pojawia się błąd, kiedy to zrobić, ponieważ konstruktorzy i rodzaje dzielić przestrzeń nazw, ale GHC pozwala konfliktów, ponieważ disambiguates nazwiska jak zwykłych typów, zamiast promowanych konstruktorów. Dokumenty mówią, aby poprzedzać prefiksem '
, aby odnosić się do promowanego konstruktora. Kiedy zmieni drugiej linii do
data 'TFoo = CFoo
pojawia się błąd
malformed głowy typu lub deklaracji klasy: Tfoo
Jaki błąd pojawia się przy próbie zdefiniowania "danych TFoo"? – cdk