25 lines
722 B
Text
25 lines
722 B
Text
open lean (parser)
|
||
open lean.parser
|
||
open interactive
|
||
open tactic
|
||
|
||
reserve prefix `unquote! `:100
|
||
@[user_notation]
|
||
meta def unquote_macro (_ : parse $ tk "unquote!") (e : parse lean.parser.pexpr) : parser pexpr :=
|
||
↑(to_expr e >>= eval_expr pexpr)
|
||
|
||
#eval unquote! ``(1 + 1)
|
||
|
||
reserve infix ` +⋯+ `:65
|
||
@[user_notation]
|
||
meta def upto_notation (e₁ : parse lean.parser.pexpr) (_ : parse $ tk "+⋯+") (n₂ : ℕ) : parser pexpr :=
|
||
do n₁ ← ↑(to_expr e₁ >>= eval_expr nat),
|
||
pure $ (n₂+1-n₁).repeat (λ i e, ``(%%e + %%(reflect $ n₁ + i))) ``(0)
|
||
|
||
#check 1 +⋯+ 10
|
||
|
||
@[user_notation]
|
||
meta def no_tk (e₁ : parse lean.parser.pexpr) := e₁
|
||
|
||
@[user_notation]
|
||
meta def no_parser (e₁ : parse $ tk "(") := e₁
|