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
- 1. ID è un "tipo root" o solo un tipo?
- 2. Perché usare il tipo anonimo funziona e usa un tipo esplicito non in un GroupBy?
- 3. Dichiarare un solo tipo - "usando" equivalente per singolo tipo
- 4. Perché non esiste un tipo intero non bloccato?
- 5. Perché è possibile utilizzare solo l'alias per dichiarare un enum e non il tipo .NET?
- 6. Un tipo può essere un tipo di riferimento e un tipo di valore allo stesso tempo?
- 7. 'vector' nello spazio dei nomi 'std' non specifica un tipo
- 8. Errore: '...' non indica un tipo
- 9. Impossibile convertire l'espressione lambda in tipo 'oggetto' perché non è un tipo delegato con un numero
- 10. Perché non possiamo bloccare un tipo di valore?
- 11. Non è possibile assegnare un valore di tipo 'NSArray' per un valore di tipo '[ANYOBJECT]'
- 12. Perché System.Array non può essere un vincolo di tipo?
- 13. Opzione Scala? Perché Some non eredita AnyVal e perché non è un tipo di valore?
- 14. Perché i newtypes non usano i tratti dal tipo interno?
- 15. Recupero del tipo non chiuso di un tipo generico che chiude un tipo generico
- 16. Haskell: Perché non sono permessi i costruttori del tipo infisso?
- 17. Un tipo dovrebbe essere solo in movimento, solo perché la copia può essere costosa?
- 18. Perché questo non dà un errore di tipo?
- 19. Perché `str` è un tipo primitivo?
- 20. Perché l'implementazione dell'interfaccia non può restituire un tipo più specifico?
- 21. Perché i metodi parziali possono avere solo un tipo di reso vuoto?
- 22. Perché java non ha un suffisso di tipo byte?
- 23. Perché std :: result_of accetta un tipo di funzione (non correlato) come argomento di tipo?
- 24. Perché i tag struct non sono nomi di tipo in C?
- 25. Perché `std :: initializer_list` non è definito come un tipo letterale?
- 26. Posso dire che un parametro di tipo C# deve essere solo un tipo di interfaccia?
- 27. _int64 non nomina un tipo
- 28. Impossibile convertire espressione lambda in tipo "Delega" perché non è un tipo delegato
- 29. Perché non promettere un tipo di dati in Scheme?
- 30. Perché non posso creare un array di tipo generico?
Questa risposta ha messo tutto a posto nella mia testa. Grazie! – Fixpoint