Qualche tempo fa in una delle estensioni Haskell (impossibile trovare il collegamento) e recently in Ur ho trovato che i nomi (ad es. Dei campi record) formano un tipo. Qualcuno può spiegare perché l'astrazione di tipo non è abbastanza per loro?Perché i nomi formano un tipo e non solo un tipo?
risposta
La risposta è semplice: perché possono essere visualizzati nei tipi. Di conseguenza, devono vivere a livello di tipo (altrimenti avresti bisogno di tipi dipendenti). E poiché vivono a livello di tipo, sono classificati per natura.
I sistemi di registrazione definiscono regole per valori, tipi e (forse) tipi. Le regole utilizzate dipendono dal tipo di sistema progettato e da ciò che il progettista desidera ottenere.
E.g. in Haskell, etichette discografiche sono:
- valori (le funzioni di accesso)
- quei valori sono tipi (ad esempio
Record -> Int
) - quei tipi hanno generi (
*
)
Altri sistemi di record può utilizzare il tipo o il sistema di tipo per scopi diversi.
Inserendo le etichette in un tipo separato, il controllo del tipo può trattarle in modo speciale, con regole speciali per es. lenti automatiche, o prove da fare con la costruzione dei record (forse la totalità) non è vero per le funzioni di scopo generale.
Un esempio di utilizzo del sistema gentile in Haskell è l'uso di "tipi non in scatola". Questi sono tipi che hanno:
- diverse rappresentazioni runtime a valori normali
- diverse forme di legame (ad esempio non possono essere allocati sul mucchio)
per mantenere tipi disimballati da miscelazione a regolare tipi, viene fornito un diverso tipo , che consente al compilatore di tracciare la separazione.
Quindi, non c'è nulla di magico nei nomi delle etichette discografiche che significa che devi usare un tipo diverso per rappresentarli: è solo una scelta che un progettista di linguaggi può fare - e in un linguaggio tipizzato come Ur o Twelf, questa può essere un'utile distinzione.
Grazie, l'esempio dei tipi non condivisi è illuminante – Fixpoint
Questa risposta ha messo tutto a posto nella mia testa. Grazie! – Fixpoint