Macros are an important part of lisps, and it's hard (as in impossible in the general case) to verify that they are type-preserving.
The basic idea is to first expand the whole program (really the whole module) and then to type check the fully expanded code, which doesn't have macros.