See https://ghc.haskell.org/trac/ghc/wiki/ImplementingTreesThatGrow
This commit prepares the ground for a full extensible AST, by replacing the type
parameter for the hsSyn data types with a set of indices into type families,
data GhcPs -- ^ Index for GHC parser output data GhcRn -- ^ Index for GHC renamer output data GhcTc -- ^ Index for GHC typechecker output
These are now used instead of RdrName, Name and Id/TcId/Var
Where the original name type is required in a polymorphic context, this is
accessible via the IdP type family, defined as
type family IdP p type instance IdP GhcPs = RdrName type instance IdP GhcRn = Name type instance IdP GhcTc = Id
These types are declared in the new 'hsSyn/HsExtension.hs' module.
To gain a better understanding of the extension mechanism, it has been applied
to HsLit only, also replacing the SourceText fields in them with extension
types.
To preserve extension generality, a type class is introduced to capture the
SourceText interface, which must be honoured by all of the extension points
which originally had a SourceText. The class is defined as
class HasSourceText a where -- Provide setters to mimic existing constructors noSourceText :: a sourceText :: String -> a setSourceText :: SourceText -> a getSourceText :: a -> SourceText
And the constraint is captured in SourceTextX, which is a constraint type
listing all the extension points that make use of the class.
Updating Haddock submodule to match.