Il GHC documentation descrive la UNPACK
pragma come segue:
La UNPACK
indica al compilatore che dovrebbe decomprimere il contenuto di un campo costruttore al costruttore stesso, eliminando un livello di riferimento indiretto.
Come sarà DATATYPE T
essere imballati?
data T = T (P Int Int)
corrisponde

Pertanto, data T = T {-# UNPACK #-} !(P Int Int)
corrisponde

In parole semplici, UNPACK
ha decompresso il contenuto del costruttore P
nel campo della costruzione T
, rimuovendo un livello di riferimento indiretto e un'intestazione del costruttore (P
).
data T = T {-# UNPACK #-} !(P Int Int)
non è così "compatto", come data T'' = T'' Int# Int#
:

Che dire
data U = U {-# UNPACK #-} !(P Int (P Int Int))
?
Analogamente, data U = U (P Int (P Int Int))
corrisponde

e data U = U {-# UNPACK #-} !(P Int (P Int Int))
corrisponde

In parole semplici, UNPACK
ha decompresso il contenuto del costruttore P
nel campo della costruzione U
, rimuovendo un livello di riferimento indiretto e un'intestazione del costruttore (P
).
Risorse
Quindi, non v'è alcun modo per disfare 'T' a' T''' vale a dire rimuovere due livelli di costruttori? –
@Zeta Grazie per la modifica. Come hai prodotto quei bellissimi diagrammi? TikZ? La libreria 'diagrams'? – Jubobs
@Jubobs Mi sembra GraphVis per me ... – MathematicalOrchid