lean4-htt/tests/compiler/reusebug.lean
2021-01-27 14:45:31 +01:00

32 lines
756 B
Text

inductive Expr
| Val : Int → Expr
| Var : String → Expr
| Add : Expr → Expr → Expr
| Mul : Expr → Expr → Expr
namespace Expr
protected def Expr.toString : Expr → String
| Val n => toString n
| Var x => x
| Add f g => "(" ++ Expr.toString f ++ " + " ++ Expr.toString g ++ ")"
| Mul f g => "(" ++ Expr.toString f ++ " * " ++ Expr.toString g ++ ")"
instance : ToString Expr :=
⟨Expr.toString⟩
partial def addAux : Expr → Expr → Expr
| f, Add (Val n) g => addAux (Val n) (addAux f g)
| f, g => Add f g
def add (a b : Expr) : Expr :=
addAux a b
end Expr
open Expr
def main (xs : List String) : IO UInt32 :=
do let x := Var "x";
IO.println (add (Val 1) (Add (Mul (Val 2) x) x));
pure 0