Die GHC documentation beschreibt die UNPACK
pragma wie folgt:
Der UNPACK
dem Compiler anzeigt, dass er sollte den Inhalt eines Konstruktors Feld in den Konstruktor selbst, Entfernen eines Dereferenzierungsebene entpacken.
Wie werden Datentyp T
ausgepackt werden?
data T = T (P Int Int)
entspricht
Daher data T = T {-# UNPACK #-} !(P Int Int)
zu
Im Klartext entspricht, hat UNPACK
den Inhalt des Konstruktors P
in den Bereich der Konstruktor entpackt T
, Entfernen einer Ebene der Indirektion und eines Konstruktor-Headers (P
).
data T = T {-# UNPACK #-} !(P Int Int)
ist nicht als "kompakt" als data T'' = T'' Int# Int#
:
Was
data U = U {-# UNPACK #-} !(P Int (P Int Int))
?
Ähnlich data U = U (P Int (P Int Int))
entspricht
und data U = U {-# UNPACK #-} !(P Int (P Int Int))
entspricht
Im Klartext hat UNPACK
den Inhalt der Konstruktor P
in den Bereich der Konstruktor entpackt U
Entfernen einer Ebene der Indirektion und eines Konstruktor-Headers (P
).
Ressourcen
So gibt es keine Möglichkeit, 'T' zu' T''' heißt entfernen zwei Ebenen der Konstrukteure zu entpacken? –
@Zeta Danke für die Bearbeitung. Wie haben Sie diese schönen Diagramme erstellt? TikZ? Die 'Diagramme'-Bibliothek? – Jubobs
@Jubobs Sieht für mich wie GraphVis aus ... – MathematicalOrchid