lean4-htt/tests/lean/scopedMacros.lean
2021-04-30 09:05:09 +02:00

62 lines
954 B
Text

namespace Foo
scoped macro "foo!" x:term:max : term => `($x + 1)
#check foo! 10
theorem ex1 : foo! 10 = 11 := rfl
end Foo
#check foo! 10 -- Error
open Foo
#check foo! 10 -- works
theorem ex2 : foo! 10 = 11 := rfl
scoped macro "bla!" x:term:max : term => `($x * 2) -- Error scoped macros must be used inside namespaces
section
local macro "bla!" x:term:max : term => `($x * 2)
theorem ex3 : bla! 10 = 20 := rfl
end
#check bla! 10 -- Error unknown identifier `bla!`
def bla! := 20 -- bla! is still a valid identifier
syntax "bar!" term:max : term
-- Error scoped attributes must be used inside namespaces
scoped macro_rules | `(bar! $x) => `($x + 10)
section
local macro_rules | `(bar! $x) => `($x + 20)
#check bar! 10
end
-- Error no elaboration function
#check bar! 10
namespace Bar
scoped macro_rules | `(bar! $x) => `($x + 10)
#check bar! 10
end Bar
-- Error no elaboration function
#check bar! 10
open Bar
#check bar! 10