An opinion: #Lisp, #Scheme, and #CommonLisp macros should also include type information, not only forms to process. The language(s) are typed, after all!
Luckily, this can be added on top of the existing macro system with… macros! And some compiler internals for type inference, in the order of what trivial-arguments are doing (disclosure: I’m the one that contributed type info fetching there.) With that and some syntax processing, one can infer the type of a given expression in like 80% of cases (might be less than that on non-SBCL compilers, but I have to test that.) And then act on it with a knowledge of what types there are.
I had a use-case for this when playing with CRUNCH, but it eludes me now. You have to believe me on the usefulness of types in macros.