与GHC Generics相比,是否只有SYB可以完成任务,或者使用它更容易?
答案 0 :(得分:3)
GHC Generics是一种相当冗长的方式来执行基本上任何查询或遍历。例如,考虑使用Stmt
和Expr
类型的语言AST,它们都派生Typeable
,Generic
和Data
:
data Stmt = ... lots of constrs ...
data Expr = Const Int
| ... lots of other constrs ...
如何利用SYB从Expr
或Stmt
开始获取所有常量?类似的东西:
getConst (Const i) = [i]
getConst _ = []
getAllConst = everything (++) (mkQ getConst)
将此与泛型的典型用法进行对比,需要两个类,遍历产品表示的总和,并为需要遍历的N个类型实例化N次。 SYB,实际上是大多数通用系统,都在performance。