与GHC Generics相比,是否只有SYB才能完成或比SYB容易得多的任务?

最佳答案

GHC泛型是基本执行任何查询或遍历的相当冗长的方法。例如,考虑一种AST和Stmt类型的语言AST,它们都派生ExprTypeableGeneric:

data Stmt = ... lots of constrs ...
data Expr = Const Int
          | ... lots of other constrs ...

您如何利用SYB来获取所有从DataExpr开始的常量?就像是:
getConst (Const i) = [i]
getConst _         = []

getAllConst = everything (++) (mkQ getConst)

将其与泛型的典型用法相对照,泛型要求使用两个类,即遍历乘积表示形式的总和,并为需要遍历的N个类型实例化N次该类。 SYB,实际上是大多数通用系统,在performance中趋于平缓。

关于haskell - SYB(取消样板)相对于GHC泛型的优势,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/26893567/

10-12 20:00