The name mangling is similar to what "Hygienic macros" feature is called in Lisp world, where the names used in the macro emitted code are mangled so that they don't interfere with the same named symbols in the code where the macro was used.
The template haskell syntax is basically a shortcut to generate normal data types defined in TH package. In you example you can use something like this to have the name you want:
runQ (return $ [DataD [] (mkName "A") [] [NormalC (mkName "A") []] []])
But remember this can lead to name collision if the code that uses this macro has already a data deceleration called A.