introduce Macro class