与GHC Generics相比,是否只有SYB才能完成或比SYB容易得多的任务?
最佳答案
GHC泛型是基本执行任何查询或遍历的相当冗长的方法。例如,考虑一种AST和Stmt
类型的语言AST,它们都派生Expr
,Typeable
和Generic
:
data Stmt = ... lots of constrs ...
data Expr = Const Int
| ... lots of other constrs ...
您如何利用SYB来获取所有从
Data
或Expr
开始的常量?就像是:getConst (Const i) = [i]
getConst _ = []
getAllConst = everything (++) (mkQ getConst)
将其与泛型的典型用法相对照,泛型要求使用两个类,即遍历乘积表示形式的总和,并为需要遍历的N个类型实例化N次该类。 SYB,实际上是大多数通用系统,在performance中趋于平缓。
关于haskell - SYB(取消样板)相对于GHC泛型的优势,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/26893567/