summaryrefslogtreecommitdiff
path: root/transfer/examples/exp.tr
diff options
context:
space:
mode:
Diffstat (limited to 'transfer/examples/exp.tr')
-rw-r--r--transfer/examples/exp.tr31
1 files changed, 31 insertions, 0 deletions
diff --git a/transfer/examples/exp.tr b/transfer/examples/exp.tr
new file mode 100644
index 000000000..b7202fedf
--- /dev/null
+++ b/transfer/examples/exp.tr
@@ -0,0 +1,31 @@
+data Stm : Type where {} ;
+data Exp : Type where {} ;
+data Var : Type where {} ;
+data Typ : Type where {} ;
+
+data ListStm : Type where {} ;
+
+data Tree : Type -> 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 composOp Tree ;
+
+rename : (String -> String) -> (C : Type) -> Tree C -> Tree C;
+rename f C t = case t of {
+ V x -> V (f x) ;
+ _ -> composOp_Tree C (rename f) t;
+ } ;
+