This PR removes functions from compiling decls from Environment, and moves all users to functions on CoreM. This is required for supporting the new code generator, since its implementation uses CoreM.
32 lines
772 B
Text
32 lines
772 B
Text
import Lean
|
||
|
||
open Lean
|
||
|
||
unsafe def test {α : Type} [ToString α] [ToExpr α] [BEq α] (a : α) : CoreM Unit := do
|
||
let env ← getEnv;
|
||
let auxName := `_toExpr._test;
|
||
let decl := Declaration.defnDecl {
|
||
name := auxName,
|
||
levelParams := [],
|
||
value := toExpr a,
|
||
type := toTypeExpr α,
|
||
hints := ReducibilityHints.abbrev,
|
||
safety := DefinitionSafety.safe
|
||
};
|
||
IO.println (toExpr a);
|
||
let oldEnv ← getEnv;
|
||
addAndCompile decl;
|
||
let newEnv ← getEnv
|
||
setEnv oldEnv
|
||
match newEnv.evalConst α {} auxName with
|
||
| Except.error ex => throwError ex
|
||
| Except.ok b => do
|
||
IO.println b;
|
||
unless a == b do
|
||
throwError "toExpr failed";
|
||
pure ()
|
||
|
||
#eval test #[(1, 2), (3, 4)]
|
||
#eval test ['a', 'b', 'c']
|
||
#eval test ("hello", true)
|
||
#eval test ((), 10)
|