Con DataKinds, una definizione comeC'è un motivo per cui non è possibile popolare i tipi con DataKinds?
data KFoo = TFoo
introduce il tipo KFoo :: BOX
e il tipo TFoo :: KFoo
. Perché non posso poi passare a definire
data TFoo = CFoo
tale che CFoo :: TFoo
, TFoo :: KFoo
, KFoo :: BOX
?
Tutti i costruttori devono appartenere a un tipo che appartiene al tipo *
? Se è così, perché?
Edit: Non ottengo un errore quando faccio questo, perché i costruttori e tipi condividono uno spazio dei nomi, ma GHC, autorizza i conflitti perché disambigua nomi come tipi normali, piuttosto che costruttori promossi. I documenti dicono di prefisso con un '
per fare riferimento al costruttore promosso. Quando cambio che seconda linea per
data 'TFoo = CFoo
ottengo l'errore
valido capo del tipo o dichiarazione di classe: TFoo
Che errore si ottiene quando si tenta di definire 'data TFoo'? – cdk