I know the subject of cpp not working well with Haskell comes up every so often, usually with the conclusion that we need a preprocessor that understands Haskell code. If someone is working on that, this should probably be ignored.

Maybe gpp could be used instead of having to write one from scratch? it allows you to define the syntax it uses for macros - both user and "meta". Possibly it's flexible enough to do what's needed?