Sto cercando di creare un interprete per un linguaggio funzionale in haskell (sono nuovo nella lingua). Sto creando quello che probabilmente è un mix strano di minimalismo e convenienza - nessun tipo di dati astratti, ma voglio fornire la possibilità di creare liste omogenee.Implementazione di una lingua in Haskell: liste omogenee
Quindi le mie variabili di base sono data Datum = DatInt Int | DatDbl Double | DatBool Bool
e mi sono reso conto che non sono affatto sicuro di come rappresentare elenchi omogenei. L'aggiunta di un costruttore List Datum
o qualcosa dell'ordinamento renderebbe un elenco eterogeneo e fare un elenco separato per ciascun tipo, ovvero ListInt [Int] | ListDbl [Double]
impedirebbe l'elenco di elenchi.
Quale sarebbe il modo migliore per rappresentare un elenco omogeneo?
È possibile utilizzare 'Lista [Datum]' per le liste omogenee, anche se potrebbe in linea di principio contenere quelle eterogenee pure. Se invece vuoi garantire _staticamente_ che tale elenco sia omogeneo, probabilmente avrai bisogno di GADT e possibilmente di tipi esistenziali. Se sei nuovo di Haskell, forse è meglio finire il tuo interprete in un modo più semplice, non statico, per prima cosa. Se ti senti avventuroso, puoi provare a spostarti su un tipo più esperto. – chi
In effetti, il tuo attuale framework non ti offre alcuna possibilità di codificare garanzie di tipo. Se aggiungi un costruttore 'Function', non sarai in grado di assicurarti che le funzioni vengano applicate anche ai tipi giusti. – dfeuer
@chi Desidero fornire garanzie di tipo statico, idealmente senza dover ricorrere a estensioni di lingua. È possibile a tutti? – drowdemon