Sind Aufgaben, die nur mit SYB möglich oder viel einfacher sind, im Vergleich zu GHC Generics?Vorteile von SYB (verschrotten Sie Ihren Textbaustein) über GHC Generics
8
A
Antwort
3
GHC Generics ist eine ziemlich ausführliche Methode, um grundsätzlich jede Abfrage oder Traversierung durchzuführen. Um zum Beispiel eine Sprache AST mit Stmt
und Expr
Typen berücksichtigen, die beide ableiten Typeable
, Generic
und Data
:
data Stmt = ... lots of constrs ...
data Expr = Const Int
| ... lots of other constrs ...
Wie Sie SYB nutzen alle Konstanten aus beginnend entweder Expr
oder Stmt
zu bekommen? Etwas wie:
getConst (Const i) = [i]
getConst _ = []
getAllConst = everything (++) (mkQ getConst)
Kontrast dies mit der typischen Verwendung von Generics erfordert zwei Klassen, eine Traversal über die Summe von Produkten Darstellung und instanziiert die Klasse N-mal für die N-Typen durchlaufen zu müssen. Wo SYB und tatsächlich die meisten generischen Systeme fallen, ist in performance.