Template Haskell: add proper support for qualified names in non-splicing applications
For the uninitiated, Derive is an application of Template Haskell that can generate external Haskell code (depending on how you use it) instead of having it spliced into a module. Template Haskell was not designed for this, and it shows in the handling of qualified names. For example:
Prelude> ' GHC.Base. Prelude> 'True GHC.Base.True Prelude> '(*) GHC.Num.* Prelude Data.Array.Unboxed> ''UArray Data.Array.Base.UArray
It would be nice if Template Haskell could instead use public names, where available, so that Derive and similar tools would be able to use qualified names (and the quoting syntax without fear of their ending up pointing into the middle of no-mans-land, or even GHC-only land.
This would also mean that users of Derive via TH splicing wouldn't need to import so many modules that the derivings depend on.