与 GHC Generics 相比,是否有任何任务只有 SYB 才能完成,或者更容易完成?
问问题
486 次
1 回答
3
GHC 泛型是执行基本上任何查询或遍历的一种相当冗长的方法。例如,考虑一种语言 AST,其中Stmt
和Expr
类型都派生Typeable
、Generic
和Data
:
data Stmt = ... lots of constrs ...
data Expr = Const Int
| ... lots of other constrs ...
您如何利用 SYB 来获取从Expr
or开始的所有常量Stmt
?就像是:
getConst (Const i) = [i]
getConst _ = []
getAllConst = everything (++) (mkQ getConst)
将此与需要两个类的泛型的典型使用进行对比,遍历产品表示的总和,并为需要遍历的 N 个类型实例化 N 次类。SYB,实际上是大多数通用系统,在性能方面表现平平。
于 2014-11-12T19:43:04.580 回答