use `expander` argument instead of three macroexpand ops