In che modo Haskell traduce [
e ]
nelle definizioni dell'elenco? Stanno valutando i costruttori o qualcosa del genere? Sono newtypes? C'è un modo per definire una sintassi di correzione , a differenza di una di tipo infisso?In che modo lo zucchero sintattico della sequenza ([1..6]) viene tradotto nella sintassi dell'elenco effettivo (1: 2: 3 ... 6)?
6
A
risposta
14
Questa sintassi è definita nello Report e in particolare in section 3.10. [1..6]
significa "enumFromTo 1 6
". Non è possibile definire la sintassi in modo simile.
Per enfatizzare --- '[1, 2, 3]' e '[1..3]' hanno lo stesso * valore *, ma arrivano in modi molto diversi. '[1, 2, 3]' desugars (direttamente!) A '1: 2: 3: []' mentre '[1..3]' desugars a 'enumFromTo 1 3' che poi * valuta * a' 1: 2: 3: [] '. –
@tel: e per completezza, '[1,2,3]' e '[1..3]' non hanno necessariamente lo stesso valore. Dipende da che tipo è. Potrebbe essere una lista di un tipo che implementa 'Enum' in un modo strano. – newacct
Uno potrebbe anche essere un errore di tipo dato che il tipo di principio di '[1,2,3]' è 'Num a => [a]' mentre il tipo di principio di '[1..3]' è '(Num a , Enum a) => [a] '. –