This attribute, which was implemented in #3640, is applied to the following structures: `Sigma`, `PSigma`, `PProd`, `And`, `Subtype`, and `Fin`. These were given this attribute in Lean 3.
58 lines
780 B
Text
58 lines
780 B
Text
import Lean
|
||
open Lean Meta
|
||
def test [ToExpr α] (a : α) : MetaM Unit := do
|
||
let a := toExpr a
|
||
let c ← litToCtor a
|
||
check c
|
||
IO.println s!"{← ppExpr c}"
|
||
assert! (← isDefEq c a)
|
||
/--
|
||
info: Nat.succ 9
|
||
-/
|
||
#guard_msgs in
|
||
#eval test 10
|
||
/--
|
||
info: Nat.succ 0
|
||
-/
|
||
#guard_msgs in
|
||
#eval test 1
|
||
/--
|
||
info: Nat.zero
|
||
-/
|
||
#guard_msgs in
|
||
#eval test 0
|
||
/--
|
||
info: Int.negSucc 1
|
||
-/
|
||
#guard_msgs in
|
||
#eval test (-2)
|
||
/--
|
||
info: Int.negSucc 0
|
||
-/
|
||
#guard_msgs in
|
||
#eval test (-1)
|
||
/--
|
||
info: Int.ofNat 0
|
||
-/
|
||
#guard_msgs in
|
||
#eval test (0 : Int)
|
||
/--
|
||
info: Int.ofNat 3
|
||
-/
|
||
#guard_msgs in
|
||
#eval test (3 : Int)
|
||
/--
|
||
info: ⟨3, ⋯⟩
|
||
-/
|
||
#guard_msgs in
|
||
#eval test (3 : Fin 5)
|
||
/--
|
||
info: ⟨0, ⋯⟩
|
||
-/
|
||
#guard_msgs in
|
||
#eval test (0 : Fin 5)
|
||
/--
|
||
info: ⟨1, ⋯⟩
|
||
-/
|
||
#guard_msgs in
|
||
#eval test (6 : Fin 5)
|