import prelude data Cat : Type where Stm : Cat Exp : Cat Var : Cat Typ : Cat ListStm : Cat data Tree : Cat -> Type where SDecl : Tree Typ -> Tree Var -> Tree Stm SAss : Tree Var -> Tree Exp -> Tree Stm SBlock : Tree ListStm -> Tree Stm EAdd : Tree Exp -> Tree Exp -> Tree Exp EStm : Tree Stm -> Tree Exp EVar : Tree Var -> Tree Exp EInt : Integer -> Tree Exp V : String -> Tree Var TInt : Tree Typ TFloat : Tree Typ NilStm : Tree ListStm ConsStm : Tree Stm -> Tree ListStm -> Tree ListStm derive Compos Tree rename : (String -> String) -> (C : Type) -> Tree C -> Tree C rename f C t = case t of V x -> V (f x) _ -> composOp ? ? compos_Tree C (rename f) t main = rename (const ? ? "apa") Stm (SAss (V "y") (EAdd (EVar (V "x")) (EInt 2)))