Преимущества SYB (откажитесь от ваших шаблонов) перед GHC Generics

Есть ли какие-либо задачи, которые возможны только с SYB, или намного проще с ним, по сравнению с GHC Generics?

1 ответ

GHC Generics - довольно многословный способ выполнить практически любой запрос или обход. Например, рассмотрим язык AST с Stmt а также Expr типы, которые оба получают 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)

Сравните это с типичным использованием Generics, требующим двух классов, обходом суммы представлений продуктов и созданием экземпляра класса N раз для N типов, нуждающихся в прохождении. Там, где SYB, да и большинство систем общего назначения, не справляются с работой.

Другие вопросы по тегам