forked from GitHub/gf-core
33 lines
816 B
Plaintext
33 lines
816 B
Plaintext
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))) |