lean4-htt/tests/lean/run/doCodeBlock.lean
Leonardo de Moura 94c7945bd3 feat: do code blocks
WIP
2020-09-30 19:20:16 -07:00

35 lines
839 B
Text

import Lean
new_frontend
namespace Lean.Elab.Term.Do
def ref := Syntax.missing
def vdecl (name : Name) (pure := true) : VarDecl :=
{ ref := ref, name := name, pure := pure, letDecl := Syntax.missing }
def print (c : CodeBlock) : TermElabM Unit := do
let msg := c.toMessageData
let msg ← addMessageContext msg
IO.println (← liftIO msg.toString)
pure ()
def tst : TermElabM Unit := do
let x := mkIdentFrom ref `x
let c ← mkIte ref (← `($x < 1))
(mkVarDecl (vdecl `w) (mkVarDecl (vdecl `z) (← mkReassign (vdecl `x) (mkReturn ref))))
(mkVarDecl (vdecl `x) (← mkReassign (vdecl `y) (mkBreak ref)))
print c
IO.println "-----"
let c ← concat c (mkVarDecl (vdecl `w) (← mkReassign (vdecl `z) (mkReturn ref)))
print c
let c ← mkReassign (vdecl `w) c
IO.println "-----"
print c
pure ()
#eval tst
end Lean.Elab.Term.Do