Thank you to the author and maintainers of cpphs https://hackage.haskell.org/package/cpphs
It has tightly-focussed functionality for what I wanted to do: a more haskell-friendly counterpart to cpp.
Haskell libraries generally use cpp -- and then users complain how awkward it can be. I don't see that cpp does anything better/different vs cpphs -- that is, cpphs understands all the #if compiler_version logic. Then why isn't every library preferring cpphs?
AntC