Betrachten Sie das folgende Datenmodell, das ein existentielles verwendet:
%Vor% Die Regeln zum Speicherbedarf von Standardtypen wurden bereits früher erläutert . Wie lauten nun die Regeln für existenzielle Typen wie AnyNode
?
Gibt es Optimierungstechniken, z.B. einige Workarounds mit unsafeCoerce
machen es möglich, sich der Existenzerklärung zu entziehen? Ich frage das, weil ein Typ, der Node
ähnlich ist, in einer Kostenstelle einer sehr speicherintensiven Bibliothek platziert wird, so dass der Speicherbedarf alle ist, weshalb die schmutzigsten Hacks willkommen sind.
Das Paket ghc-datasize kann hier hilfreich sein:
%Vor% Es scheint also, dass Node
ein zusätzliches Wort im Vergleich zum einfachen unären Datenkonstruktor benötigt, vermutlich wegen des Show
-Klassenwörterbuchzeigers. Außerdem habe ich versucht, mehr Klasseneinschränkungen zu Node
hinzuzufügen, und jeder von ihnen benötigt ein zusätzliches Leerzeichen.
Ich weiß nicht genau, ob es möglich ist, den Wörterbuchzeiger unter bestimmten Umständen wegzuzaubern. Ich denke, es ist nicht möglich, wenn Sie den existentiellen Typ behalten möchten.
Tags und Links optimization haskell memory