Allow splicing in concrete syntax
Template Haskell tends to lag behind GHC extensions, so it might be nice to allow concrete syntax to be returned, e.g. something like
f = $( return (RawE "5 + 6") )
There wouldn't be any need to restrict it to the top level, e.g. this would also be allowed:
f = $( return (InfixE (IntE 5) '(+) (RawE "6")) )
One possible disadvantage is that it might result in TH languishing even further behind, as there is less incentive to fill in the gaps.
Also, if a module splices in a raw expression from a TH library, what extensions should be enabled when parsing the string? Should we use the extensions enabled for the module, or should the
RawE constructor specify the extensions to be used? We actually have this problem already, as (for example) when instances are spliced in we might need !OverlappingInstances enabled, so just using the extensions enabled for the module would be consistent.