* introduction * problem in short * solutions offered * problem description * example: what needs to change when we want to store position information? * data type: Expr -> BoundedExpr * producer: parser: find locations, fill fields * consumer: catamorphisms, use locations * the type of annotated trees * derive ExprF * a generic version * Ik weet niet wat voor faciliteiten andere lexer/parser tools bieden, zoals Alex en Happy. * Waarom sla ik annotaties niet gewoon op in een aparte boom? [Int] om paden aan te geven. * Geen garantie dat de twee bomen structureel overeenkomen. * Geen garantie dat een pad bestaat. * Structurele selecties kunnen mooi getypeerd zijn. * Waarom zie ik het niet gewoon als transformatie op AGs? * Vereist aanpassing parser. * Vereist (vooralsnog) preprocessor; vereist dat afgeleide code ook in AG is geschreven. * Multirec-aanpak * Voordelen * Meerdere datatypes * Selecties kunnen zippers opleveren * Datatype hoeft niet aangepast te worden * Pattern functors worden bijna automatisch afgeleid * Nadelen * Yield: geen type-onderscheid in kale/geannoteerde types * Folds worden iets ingewikkelder * Waarom transformeer ik de datatypes niet met TH? * Dan moeten de functies die de types gebruiken ook aangepast worden | No FP | FP | HFP ------+---------------+--------+---------------- No SP | SYB, ComposOp | Ann | MultiRec Ann SP | Tries | Zipper | MultiRec Zipper