2014-11-12 10 views

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.