diff --git a/.gitignore b/.gitignore
index 9812cbc6c9b6093f8e29c45a2baeb9abbb980a6c..bfe7cade683ae72e6c7b34b30b9a5c8411905d53 100644
--- a/.gitignore
+++ b/.gitignore
@@ -183,7 +183,6 @@ _darcs/
 /libraries/synopsis.png
 /libraries/stamp/
 /libraries/template-haskell/template-haskell.cabal
-/libraries/template-haskell-next/template-haskell-next.cabal
 /linter.log
 /mk/are-validating.mk
 /mk/build.mk
diff --git a/compiler/GHC/Builtin/Names/TH.hs b/compiler/GHC/Builtin/Names/TH.hs
index 8929f3c1e8c8849ae8b3689d7b25f4712709acd0..acf2e018b699d5b2ad614b00dbaea7055809a5e4 100644
--- a/compiler/GHC/Builtin/Names/TH.hs
+++ b/compiler/GHC/Builtin/Names/TH.hs
@@ -179,21 +179,23 @@ templateHaskellNames = [
     -- Quasiquoting
     quoteDecName, quoteTypeName, quoteExpName, quotePatName]
 
-thSyn, thLib, qqLib :: Module
-thSyn = mkTHModule (fsLit "Language.Haskell.TH.Lib.Syntax")
-thLib = mkTHModule (fsLit "Language.Haskell.TH.Lib.Internal")
-qqLib = mkTHModule (fsLit "Language.Haskell.TH.Quote")
+thSyn, thLib, qqLib, liftLib :: Module
+thSyn = mkTHModule (fsLit "GHC.Internal.TH.Syntax")
+thLib = mkTHModule (fsLit "GHC.Internal.TH.Lib")
+qqLib = mkTHModule (fsLit "GHC.Internal.TH.Quote")
+liftLib = mkTHModule (fsLit "GHC.Internal.TH.Lift")
 
 mkTHModule :: FastString -> Module
-mkTHModule m = mkModule thUnit (mkModuleNameFS m)
+mkTHModule m = mkModule ghcInternalUnit (mkModuleNameFS m)
 
-libFun, libTc, thFun, thTc, thCls, thCon :: FastString -> Unique -> Name
+libFun, libTc, thFun, thTc, thCls, thCon, liftFun :: FastString -> Unique -> Name
 libFun = mk_known_key_name varName  thLib
 libTc  = mk_known_key_name tcName   thLib
 thFun  = mk_known_key_name varName  thSyn
 thTc   = mk_known_key_name tcName   thSyn
 thCls  = mk_known_key_name clsName  thSyn
 thCon  = mk_known_key_name dataName thSyn
+liftFun = mk_known_key_name varName liftLib
 
 thFld :: FastString -> FastString -> Unique -> Name
 thFld con = mk_known_key_name (fieldName con) thSyn
@@ -203,7 +205,7 @@ qqFld = mk_known_key_name (fieldName (fsLit "QuasiQuoter")) qqLib
 
 -------------------- TH.Syntax -----------------------
 liftClassName :: Name
-liftClassName = thCls (fsLit "Lift") liftClassKey
+liftClassName = mk_known_key_name clsName liftLib (fsLit "Lift") liftClassKey
 
 quoteClassName :: Name
 quoteClassName = thCls (fsLit "Quote") quoteClassKey
@@ -239,8 +241,6 @@ returnQName    = thFun (fsLit "returnQ")   returnQIdKey
 bindQName      = thFun (fsLit "bindQ")     bindQIdKey
 sequenceQName  = thFun (fsLit "sequenceQ") sequenceQIdKey
 newNameName    = thFun (fsLit "newName")   newNameIdKey
-liftName       = thFun (fsLit "lift")      liftIdKey
-liftStringName = thFun (fsLit "liftString")  liftStringIdKey
 mkNameName     = thFun (fsLit "mkName")     mkNameIdKey
 mkNameG_vName  = thFun (fsLit "mkNameG_v")  mkNameG_vIdKey
 mkNameG_dName  = thFun (fsLit "mkNameG_d")  mkNameG_dIdKey
@@ -253,7 +253,9 @@ mkModNameName  = thFun (fsLit "mkModName")  mkModNameIdKey
 unTypeName     = thFld (fsLit "TExp") (fsLit "unType") unTypeIdKey
 unTypeCodeName    = thFun (fsLit "unTypeCode") unTypeCodeIdKey
 unsafeCodeCoerceName = thFun (fsLit "unsafeCodeCoerce") unsafeCodeCoerceIdKey
-liftTypedName = thFun (fsLit "liftTyped") liftTypedIdKey
+liftName       = liftFun (fsLit "lift")      liftIdKey
+liftStringName = liftFun (fsLit "liftString")  liftStringIdKey
+liftTypedName = liftFun (fsLit "liftTyped") liftTypedIdKey
 
 
 -------------------- TH.Lib -----------------------
diff --git a/compiler/GHC/Hs/Expr.hs b/compiler/GHC/Hs/Expr.hs
index 1b07e8d7c7a09f565816090e80b1915efa164dc6..5c2ccc3716ed35a792e26ccfe78f3cc2346e1784 100644
--- a/compiler/GHC/Hs/Expr.hs
+++ b/compiler/GHC/Hs/Expr.hs
@@ -66,7 +66,7 @@ import GHC.Tc.Utils.TcType (TcType, TcTyVar)
 import {-# SOURCE #-} GHC.Tc.Types.LclEnv (TcLclEnv)
 
 import GHCi.RemoteTypes ( ForeignRef )
-import qualified Language.Haskell.TH as TH (Q)
+import qualified GHC.Internal.TH.Syntax as TH (Q)
 
 -- libraries:
 import Data.Data hiding (Fixity(..))
diff --git a/compiler/GHC/HsToCore/Quote.hs b/compiler/GHC/HsToCore/Quote.hs
index 0ba683482d16add8fc656c74e55bdfc116f75e9d..ae09974f2c7f4683e11bc235ce3ddf24c3be22ba 100644
--- a/compiler/GHC/HsToCore/Quote.hs
+++ b/compiler/GHC/HsToCore/Quote.hs
@@ -42,8 +42,7 @@ import GHC.HsToCore.Match.Literal
 import GHC.HsToCore.Monad
 import GHC.HsToCore.Binds
 
-import qualified Language.Haskell.TH as TH
-import qualified Language.Haskell.TH.Syntax as TH
+import qualified GHC.Internal.TH.Syntax as TH
 
 import GHC.Hs
 
@@ -1008,7 +1007,7 @@ rep_sig d@(L _ (XSig {}))             = pprPanic "rep_sig IdSig" (ppr d)
 -- See Note [Scoped type variables in quotes]
 -- and Note [Don't quantify implicit type variables in quotes]
 rep_ty_sig_tvs :: [LHsTyVarBndr Specificity GhcRn]
-               -> MetaM (Core [M TH.TyVarBndrSpec])
+               -> MetaM (Core [M (TH.TyVarBndr TH.Specificity)])
 rep_ty_sig_tvs explicit_tvs
   = repListM tyVarBndrSpecTyConName repTyVarBndr
              explicit_tvs
@@ -1018,7 +1017,7 @@ rep_ty_sig_tvs explicit_tvs
 -- See Note [Scoped type variables in quotes]
 -- and Note [Don't quantify implicit type variables in quotes]
 rep_ty_sig_outer_tvs :: HsOuterSigTyVarBndrs GhcRn
-                     -> MetaM (Core [M TH.TyVarBndrSpec])
+                     -> MetaM (Core [M (TH.TyVarBndr TH.Specificity)])
 rep_ty_sig_outer_tvs (HsOuterImplicit{}) =
   coreListM tyVarBndrSpecTyConName []
 rep_ty_sig_outer_tvs (HsOuterExplicit{hso_bndrs = explicit_tvs}) =
@@ -1208,7 +1207,7 @@ rep_bndr_vis (HsBndrInvisible _) = rep2_nw bndrInvisName []
 
 addHsOuterFamEqnTyVarBinds ::
      HsOuterFamEqnTyVarBndrs GhcRn
-  -> (Core (Maybe [M TH.TyVarBndrUnit]) -> MetaM (Core (M a)))
+  -> (Core (Maybe [M (TH.TyVarBndr ())]) -> MetaM (Core (M a)))
   -> MetaM (Core (M a))
 addHsOuterFamEqnTyVarBinds outer_bndrs thing_inside = do
   elt_ty <- wrapName tyVarBndrUnitTyConName
@@ -1222,7 +1221,7 @@ addHsOuterFamEqnTyVarBinds outer_bndrs thing_inside = do
 
 addHsOuterSigTyVarBinds ::
      HsOuterSigTyVarBndrs GhcRn
-  -> (Core [M TH.TyVarBndrSpec] -> MetaM (Core (M a)))
+  -> (Core [M (TH.TyVarBndr TH.Specificity)] -> MetaM (Core (M a)))
   -> MetaM (Core (M a))
 addHsOuterSigTyVarBinds outer_bndrs thing_inside = case outer_bndrs of
   HsOuterImplicit{hso_ximplicit = imp_tvs} ->
diff --git a/compiler/GHC/Iface/Recomp.hs b/compiler/GHC/Iface/Recomp.hs
index 60cba7bd5d733a53e6c9875b50da2e403a500a99..fdfb714e620ff285a9acbf142103cc55902dd368 100644
--- a/compiler/GHC/Iface/Recomp.hs
+++ b/compiler/GHC/Iface/Recomp.hs
@@ -596,7 +596,7 @@ checkDependencies hsc_env summary iface
         liftIO $
           check_mods (sort hs) prev_dep_mods
           `recompThen`
-            let allPkgDeps = sortBy (comparing snd) $ nubOrdOn snd (ps ++ implicit_deps)
+            let allPkgDeps = sortBy (comparing snd) $ nubOrdOn snd ps
             in check_packages allPkgDeps prev_dep_pkgs
  where
 
@@ -621,8 +621,6 @@ checkDependencies hsc_env summary iface
    prev_dep_pkgs = Set.toAscList (Set.union (dep_direct_pkgs (mi_deps iface))
                                             (dep_plugin_pkgs (mi_deps iface)))
 
-   implicit_deps = map (fsLit "Implicit",) (implicitPackageDeps dflags)
-
    -- GHC.Prim is very special and doesn't appear in ms_textual_imps but
    -- ghc-prim will appear in the package dependencies still. In order to not confuse
    -- the recompilation logic we need to not forget we imported GHC.Prim.
diff --git a/compiler/GHC/Plugins.hs b/compiler/GHC/Plugins.hs
index 862de7ac4d7c257cd7495b90ab23db70a21c20d6..784a9b7f11fb0c7933ab779788212f6d028c2ecb 100644
--- a/compiler/GHC/Plugins.hs
+++ b/compiler/GHC/Plugins.hs
@@ -156,7 +156,7 @@ import GHC.Parser.Errors.Types ( PsWarning, PsError )
 import GHC.Types.Error         ( Messages )
 import GHC.Hs                  ( HsParsedModule )
 
-import qualified Language.Haskell.TH as TH
+import qualified GHC.Internal.TH.Syntax as TH
 
 {- This instance is defined outside GHC.Core.Opt.Monad so that
    GHC.Core.Opt.Monad does not depend on GHC.Tc.Utils.Env -}
diff --git a/compiler/GHC/Rename/Names.hs b/compiler/GHC/Rename/Names.hs
index 6e74ab9debbfd94b0747a42b3289313fd81a7131..1041f6f3c8cd5980899228d9c0c0f001f0d38b6c 100644
--- a/compiler/GHC/Rename/Names.hs
+++ b/compiler/GHC/Rename/Names.hs
@@ -215,11 +215,7 @@ rnImports imports = do
     let (decls, imp_user_spec, rdr_env, imp_avails, hpc_usage) = combine (stuff1 ++ stuff2)
     -- Update imp_boot_mods if imp_direct_mods mentions any of them
     let merged_import_avail = clobberSourceImports imp_avails
-    dflags <- getDynFlags
-    let final_import_avail  =
-          merged_import_avail { imp_dep_direct_pkgs = S.fromList (implicitPackageDeps dflags)
-                                                        `S.union` imp_dep_direct_pkgs merged_import_avail}
-    return (decls, imp_user_spec, rdr_env, final_import_avail, hpc_usage)
+    return (decls, imp_user_spec, rdr_env, merged_import_avail, hpc_usage)
 
   where
     clobberSourceImports imp_avails =
diff --git a/compiler/GHC/Rename/Splice.hs b/compiler/GHC/Rename/Splice.hs
index 2352b1f353ee395059b9f828a28e313a4e2be34d..a9767ef9dde3bcf32b5b9f649216914d2a4563e0 100644
--- a/compiler/GHC/Rename/Splice.hs
+++ b/compiler/GHC/Rename/Splice.hs
@@ -67,7 +67,7 @@ import {-# SOURCE #-} GHC.Tc.Gen.Splice
 import GHC.Tc.Zonk.Type
 
 import GHCi.RemoteTypes ( ForeignRef )
-import qualified Language.Haskell.TH as TH (Q)
+import qualified GHC.Internal.TH.Syntax as TH (Q)
 
 import qualified GHC.LanguageExtensions as LangExt
 
diff --git a/compiler/GHC/Runtime/Interpreter/JS.hs b/compiler/GHC/Runtime/Interpreter/JS.hs
index f68a61bb8bb1dd7cd766d442a1bbde60071552b0..276d9419be2288766f9682446be38e99baafe651 100644
--- a/compiler/GHC/Runtime/Interpreter/JS.hs
+++ b/compiler/GHC/Runtime/Interpreter/JS.hs
@@ -303,7 +303,6 @@ jsLinkObjects logger tmpfs tmp_dir cfg unit_env inst objs is_root = do
         }
 
   let units = preloadUnits (ue_units unit_env)
-              ++ [thUnitId] -- don't forget TH which is an implicit dep
 
   -- compute dependencies
   let link_spec = LinkSpec
diff --git a/compiler/GHC/Tc/Errors/Ppr.hs b/compiler/GHC/Tc/Errors/Ppr.hs
index a7703c8b6c640e1c812d53fb4346ca7702625ec9..9a14a02010d11b7c13636567dbe55587f8f03957 100644
--- a/compiler/GHC/Tc/Errors/Ppr.hs
+++ b/compiler/GHC/Tc/Errors/Ppr.hs
@@ -35,7 +35,12 @@ module GHC.Tc.Errors.Ppr
 
 import GHC.Prelude
 
-import qualified Language.Haskell.TH as TH
+import qualified GHC.Internal.TH.Syntax as TH
+-- In stage1: import "ghc-boot-th-next" qualified GHC.Internal.TH.Syntax as TH
+-- In stage2: import "ghc-boot-th"      qualified GHC.Internal.TH.Syntax as TH
+--            which resolves to
+--            import "ghc-internal"     qualified GHC.Internal.TH.Syntax as TH
+import qualified GHC.Internal.TH.Ppr as TH
 
 import GHC.Builtin.Names
 import GHC.Builtin.Types ( boxedRepDataConTyCon, tYPETyCon, filterCTuple, pretendNameIsInScope )
diff --git a/compiler/GHC/Tc/Errors/Types.hs b/compiler/GHC/Tc/Errors/Types.hs
index 35599c9788b7d0c78c9d15fbdb2b9044f5d5e8aa..7df78d9d8272f0b0078cbdd2b7fc5d60ae684401 100644
--- a/compiler/GHC/Tc/Errors/Types.hs
+++ b/compiler/GHC/Tc/Errors/Types.hs
@@ -218,7 +218,7 @@ import Language.Haskell.Syntax.Basic (FieldLabelString(..))
 import qualified Data.List.NonEmpty as NE
 import           Data.Typeable (Typeable)
 import GHC.Unit.Module.Warnings (WarningCategory, WarningTxt)
-import qualified Language.Haskell.TH.Syntax as TH
+import qualified GHC.Internal.TH.Syntax as TH
 
 import GHC.Generics ( Generic )
 import GHC.Types.Name.Env (NameEnv)
diff --git a/compiler/GHC/Tc/Gen/Splice.hs b/compiler/GHC/Tc/Gen/Splice.hs
index 83720b1b00338fdb38c681ed7401d05ceb72ac07..a792203b56564a5b9287cbd92201eb38cbba6820 100644
--- a/compiler/GHC/Tc/Gen/Splice.hs
+++ b/compiler/GHC/Tc/Gen/Splice.hs
@@ -131,9 +131,9 @@ import GHC.Data.FastString
 import GHC.Data.Maybe( MaybeErr(..) )
 import qualified GHC.Data.EnumSet as EnumSet
 
-import qualified Language.Haskell.TH as TH
 -- THSyntax gives access to internal functions and data types
-import qualified Language.Haskell.TH.Syntax as TH
+import qualified GHC.Internal.TH.Syntax as TH
+import qualified GHC.Internal.TH.Ppr    as TH
 
 #if defined(HAVE_INTERNAL_INTERPRETER)
 -- Because GHC.Desugar might not be in the base library of the bootstrapping compiler
@@ -2921,7 +2921,9 @@ tcGetInterp = do
 -- ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
 -- Staged Metaprogramming as implemented in Template Haskell introduces a whole
 -- new dimension of staging to the already staged bootstrapping process.
--- The `template-haskell` library plays a crucial role in this process.
+-- While users depend on the user-facing `template-haskell` library, the TH
+-- interface (all wired-in identifiers) is defined in `ghc-internal` and for
+-- bootstrapping purposes, re-exported from `ghc-boot-th`.
 --
 -- Nomenclature:
 --
@@ -2929,29 +2931,28 @@ tcGetInterp = do
 --   stage(N+1) compiler: The result of compiling GHC from source with stage(N)
 --       Recall that any code compiled by the stage1 compiler should be binary
 --       identical to the same code compiled by later stages.
---   boot TH: the `template-haskell` that comes with (and is linked to) the
+--   boot `ghc-boot-th`: the `ghc-boot-th` that comes with (and is linked to) the
 --       boot/stage0 compiler
---   in-tree TH: the `template-haskell` library that lives in GHC's repository.
---       Recall that building in-tree TH with the stage1 compiler yields a binary
---       that is identical to the in-tree TH compiled by stage2.
---   boot library: A library such as bytestring or containers that GHC depends on.
---       CONFUSINGLY, we build these libraries with the boot compiler as well as
---       the stage1 compiler; thus the "boot" in boot library does not refer to a
---       stage.
+--   in-tree `ghc-boot-th`: the `ghc-boot-th` library that lives in GHC's repository.
 --
--- Here is how we bootstrap `template-haskell` in tandem with GHC:
+-- Here is how we bootstrap TH in tandem with GHC:
 --
---  1. Link the stage1 compiler against the boot TH library.
---  2. When building the stage1 compiler, build a CPP'd version of the in-tree
---     TH using the boot compiler under a different package-id,
---     `template-haskell-next`, and build stage1 GHC against that.
---  3. Build the in-tree TH with the stage1 compiler.
---  4. Build and link the stage2 compiler against the in-tree TH.
+--  1. Build the stage1 compiler with the boot compiler.
+--     The latter comes with its own boot `ghc-boot-th` library, but we do not import it.
+--  2. Instead, the stage1 compiler depends on the in-tree `ghc-boot-th`.
+--       * To avoid clashes with the boot `ghc-boot-th`, we change its
+--         package-id `ghc-boot-th-next`.
+--       * There is a bit of CPP to vendor the stage1 TH AST defined in
+--         `ghc-internal`, which we cannot build with the boot compiler.
+--  3. Build `ghc-internal` and in-tree `ghc-boot-th` with the stage1 compiler.
+--     From here on `ghc-boot-th` re-exposes the TH modules from `ghc-internal`.
+--  4. Build and link the stage2 compiler against the in-tree `ghc-boot-th`.
+--     NB: No dependency on `ghc-boot-th-next`.
 --
 -- Observations:
 --
 --  A. The vendoring in (2) means that the fully qualified name of the in-tree TH
---     AST will be, e.g., `template-haskell-next:...VarE`, not `template-haskell:...VarE`.
+--     AST will be, e.g., `ghc-boot-th-next:...VarE`, not `ghc-internal:...VarE`.
 --     That is OK, because we need it just for the `Binary` instance and to
 --     convert TH ASTs returned by splices into the Hs AST, both of which do not
 --     depend on the fully qualified name of the type to serialise! Importantly,
@@ -2959,7 +2960,10 @@ tcGetInterp = do
 --     unaffected, because the desugaring refers to names in the in-tree TH
 --     library, which is built in the next stage, stage1, and later.
 --
--- (Rejected) alternative designs:
+-- When we decided in favour of the current design, `template-haskell`
+-- still contained the wired-in Ids that meanwhile were moved to
+-- `ghc-internal`.
+-- These were the (rejected) alternative designs back then:
 --
 --  1b. Build the in-tree TH with the stage0 compiler and link the stage1 compiler
 --      against it. This is what we did until Apr 24 and it is problematic (#23536):
@@ -2994,7 +2998,7 @@ tcGetInterp = do
 --           thus rejected.)
 --        * We have thus made it impossible to refactor in-tree TH.
 --          This problem was discussed in #23536.
---  1c. Do not build the stage1 compiler against any template-haskell library.
+--  1c. Do not build the stage1 compiler against any library exposing the in-tree TH AST.
 --      This is viable because no splices need to be run as part of the
 --      bootstrapping process, so we could CPP away all the code in the stage1
 --      compiler that refers to template-haskell types. However,
@@ -3018,7 +3022,7 @@ tcGetInterp = do
 -- Note [Hard-wiring in-tree template-haskell for desugaring quotes]
 -- ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
 -- To desugar Template Haskell quotes, GHC needs to wire in a bunch of Names in the
--- `template-haskell` library as Note [Known-key names], in GHC.Builtin.Names.TH.
+-- `ghc-internal` library as Note [Known-key names], in GHC.Builtin.Names.TH.
 -- Consider
 -- > foo :: Q Exp
 -- > foo = [| unwords ["hello", "world"] |]
@@ -3026,6 +3030,6 @@ tcGetInterp = do
 -- > varE (mkNameS "unwords") `appE` listE [litE (stringE "hello"), litE (stringE "world")]
 -- And all these smart constructors are known-key.
 -- NB: Since the constructors are known-key, it is impossible to link this program
--- against another template-haskell library in which, e.g., `varE` was moved into a
+-- against another `ghc-internal` library in which, e.g., `varE` was moved into a
 -- different module. So effectively, GHC is hard-wired against the in-tree
--- template-haskell library.
+-- `ghc-internal` library.
diff --git a/compiler/GHC/Tc/Gen/Splice.hs-boot b/compiler/GHC/Tc/Gen/Splice.hs-boot
index ffa59c6132198b816fe58aabf6cfa7bd55d7b73c..2ae3756498c177c3473c3eacf380611fb81f41e9 100644
--- a/compiler/GHC/Tc/Gen/Splice.hs-boot
+++ b/compiler/GHC/Tc/Gen/Splice.hs-boot
@@ -11,7 +11,7 @@ import GHC.Types.Annotations ( Annotation, CoreAnnTarget )
 import GHC.Hs.Extension ( GhcRn, GhcPs, GhcTc )
 
 import GHC.Hs ( HsQuote, HsExpr, LHsExpr, LHsType, LPat, LHsDecl, ThModFinalizers, HsUntypedSpliceResult )
-import qualified Language.Haskell.TH as TH
+import qualified GHC.Internal.TH.Syntax as TH
 
 tcTypedSplice :: Name
               -> LHsExpr GhcRn
diff --git a/compiler/GHC/Tc/Types/TH.hs b/compiler/GHC/Tc/Types/TH.hs
index ed66c448c8dbb9e2893186227f320cbe66f6953a..ad2c62c020ff7bce28422121ec48fe87ac80491f 100644
--- a/compiler/GHC/Tc/Types/TH.hs
+++ b/compiler/GHC/Tc/Types/TH.hs
@@ -13,7 +13,7 @@ module GHC.Tc.Types.TH (
   ) where
 
 import GHCi.RemoteTypes
-import qualified Language.Haskell.TH as TH
+import qualified GHC.Internal.TH.Syntax as TH
 import GHC.Tc.Types.Evidence
 import GHC.Utils.Outputable
 import GHC.Prelude
diff --git a/compiler/GHC/ThToHs.hs b/compiler/GHC/ThToHs.hs
index 96be958fb9b752439c8439e395f74d7e092af449..99329e8eb16d0a5c9b0fadb407bf3c2697b9ec5a 100644
--- a/compiler/GHC/ThToHs.hs
+++ b/compiler/GHC/ThToHs.hs
@@ -59,8 +59,7 @@ import Data.List.NonEmpty( NonEmpty (..), nonEmpty )
 import qualified Data.List.NonEmpty as NE
 import Data.Maybe( catMaybes, isNothing )
 import Data.Word (Word64)
-import Language.Haskell.TH as TH hiding (sigP)
-import Language.Haskell.TH.Syntax as TH
+import GHC.Internal.TH.Syntax as TH
 import Foreign.ForeignPtr
 import Foreign.Ptr
 import System.IO.Unsafe
@@ -1775,7 +1774,7 @@ cvtTypeKind typeOrKind ty
              -> mk_apps (HsExplicitListTy noAnn IsPromoted []) tys'
 
            PromotedConsT  -- See Note [Representing concrete syntax in types]
-                          -- in Language.Haskell.TH.Syntax
+                          -- in GHC.Internal.TH.Syntax
               | Just normals <- m_normals
               , [ty1, L _ (HsExplicitListTy _ ip tys2)] <- normals
               -> returnLA (HsExplicitListTy noAnn ip (ty1:tys2))
diff --git a/compiler/GHC/Unit/State.hs b/compiler/GHC/Unit/State.hs
index fde3c734d0fc370af2af80397f8fb4e92269bb75..be6374cca334d417353844d662930273e4a89f89 100644
--- a/compiler/GHC/Unit/State.hs
+++ b/compiler/GHC/Unit/State.hs
@@ -68,8 +68,7 @@ module GHC.Unit.State (
         pprWithUnitState,
 
         -- * Utils
-        unwireUnit,
-        implicitPackageDeps)
+        unwireUnit)
 where
 
 import GHC.Prelude
@@ -116,7 +115,6 @@ import Data.Set (Set)
 import Data.Monoid (First(..))
 import qualified Data.Semigroup as Semigroup
 import qualified Data.Set as Set
-import GHC.LanguageExtensions
 import Control.Applicative
 
 -- ---------------------------------------------------------------------------
@@ -2268,11 +2266,3 @@ pprWithUnitState :: UnitState -> SDoc -> SDoc
 pprWithUnitState state = updSDocContext (\ctx -> ctx
    { sdocUnitIdForUser = \fs -> pprUnitIdForUser state (UnitId fs)
    })
-
--- | Add package dependencies on the wired-in packages we use
-implicitPackageDeps :: DynFlags -> [UnitId]
-implicitPackageDeps dflags
-   = [thUnitId | xopt TemplateHaskellQuotes dflags]
-   -- TODO: Should also include `base` and `ghc-prim` if we use those implicitly, but
-   -- it is possible to not depend on base (for example, see `ghc-prim`)
-
diff --git a/compiler/GHC/Unit/Types.hs b/compiler/GHC/Unit/Types.hs
index 061c29e71a508d242dcaecb2bb153e8d5072718e..acb6908db1a11c7e4f9197c483fbb9d60d6ac759 100644
--- a/compiler/GHC/Unit/Types.hs
+++ b/compiler/GHC/Unit/Types.hs
@@ -65,7 +65,6 @@ module GHC.Unit.Types
    , ghcInternalUnitId
    , baseUnitId
    , rtsUnitId
-   , thUnitId
    , mainUnitId
    , thisGhcUnitId
    , interactiveUnitId
@@ -75,7 +74,6 @@ module GHC.Unit.Types
    , ghcInternalUnit
    , baseUnit
    , rtsUnit
-   , thUnit
    , mainUnit
    , thisGhcUnit
    , interactiveUnit
@@ -596,11 +594,11 @@ Make sure you change 'GHC.Unit.State.findWiredInUnits' if you add an entry here.
 -}
 
 bignumUnitId, primUnitId, ghcInternalUnitId, baseUnitId, rtsUnitId,
-  thUnitId, mainUnitId, thisGhcUnitId, interactiveUnitId,
+  mainUnitId, thisGhcUnitId, interactiveUnitId,
   experimentalUnitId :: UnitId
 
 bignumUnit, primUnit, ghcInternalUnit, baseUnit, rtsUnit,
-  thUnit, mainUnit, thisGhcUnit, interactiveUnit, experimentalUnit  :: Unit
+  mainUnit, thisGhcUnit, interactiveUnit, experimentalUnit  :: Unit
 
 primUnitId        = UnitId (fsLit "ghc-prim")
 bignumUnitId      = UnitId (fsLit "ghc-bignum")
@@ -609,10 +607,8 @@ baseUnitId        = UnitId (fsLit "base")
 rtsUnitId         = UnitId (fsLit "rts")
 thisGhcUnitId     = UnitId (fsLit cProjectUnitId) -- See Note [GHC's Unit Id]
 interactiveUnitId = UnitId (fsLit "interactive")
-thUnitId          = UnitId (fsLit "template-haskell")
 experimentalUnitId = UnitId (fsLit "ghc-experimental")
 
-thUnit            = RealUnit (Definite thUnitId)
 primUnit          = RealUnit (Definite primUnitId)
 bignumUnit        = RealUnit (Definite bignumUnitId)
 ghcInternalUnit   = RealUnit (Definite ghcInternalUnitId)
@@ -638,7 +634,6 @@ wiredInUnitIds =
    , ghcInternalUnitId
    , baseUnitId
    , rtsUnitId
-   , thUnitId
    , experimentalUnitId
    ]
    -- NB: ghc is no longer part of the wired-in units since its unit-id, given
diff --git a/compiler/ghc.cabal.in b/compiler/ghc.cabal.in
index 5d2dbb8084f5a074df4d3939264f54792d1a24b7..f59b69ff7d3310573e1af55bc2e0c71ef886c6a5 100644
--- a/compiler/ghc.cabal.in
+++ b/compiler/ghc.cabal.in
@@ -85,8 +85,8 @@ Flag hadrian-stage0
 Flag bootstrap
         Description:
           Enabled when building the stage1 compiler in order to vendor the in-tree
-          `template-haskell` library (including its dependency `ghc-boot-th`), while
-          allowing dependencies to depend on the boot `template-haskell` library.
+          `ghc-boot-th` library, and through that the in-tree TH AST defintions from
+          `ghc-internal`.
           See Note [Bootstrapping Template Haskell]
         Default: False
         Manual: True
@@ -135,10 +135,10 @@ Library
 
     if flag(bootstrap)
       Build-Depends:
-        template-haskell-next 
+        ghc-boot-th-next     == @ProjectVersionMunged@
     else
       Build-Depends:
-        template-haskell      == 2.22.*
+        ghc-boot-th          == @ProjectVersionMunged@
 
     if os(windows)
         Build-Depends: Win32  >= 2.3 && < 2.15
diff --git a/hadrian/src/Packages.hs b/hadrian/src/Packages.hs
index bf181065880728003fecc01f5c5c3de608c21d46..f0e8c1afa75918ab37f58e4de18a2ae2ffebac22 100644
--- a/hadrian/src/Packages.hs
+++ b/hadrian/src/Packages.hs
@@ -9,7 +9,7 @@ module Packages (
     ghcToolchain, ghcToolchainBin, haddock, haskeline,
     hsc2hs, hp2ps, hpc, hpcBin, integerGmp, integerSimple, iserv, iservProxy,
     libffi, mtl, osString, parsec, pretty, primitive, process, remoteIserv, rts,
-    runGhc, semaphoreCompat, stm, templateHaskell, templateHaskellNext, terminfo, text, time, timeout,
+    runGhc, semaphoreCompat, stm, templateHaskell, terminfo, text, time, timeout,
     transformers, unlit, unix, win32, xhtml,
     lintersCommon, lintNotes, lintCodes, lintCommitMsg, lintSubmoduleRefs, lintWhitespace,
     ghcPackages, isGhcPackage,
@@ -41,7 +41,7 @@ ghcPackages =
     , ghcCompact, ghcConfig, ghcExperimental, ghcHeap, ghcInternal, ghci, ghciWrapper, ghcPkg, ghcPrim
     , ghcToolchain, ghcToolchainBin, haddock, haskeline, hsc2hs
     , hp2ps, hpc, hpcBin, integerGmp, integerSimple, iserv, libffi, mtl, osString
-    , parsec, pretty, process, rts, runGhc, stm, semaphoreCompat, templateHaskell, templateHaskellNext
+    , parsec, pretty, process, rts, runGhc, stm, semaphoreCompat, templateHaskell
     , terminfo, text, time, transformers, unlit, unix, win32, xhtml
     , timeout
     , lintersCommon
@@ -124,7 +124,6 @@ runGhc              = util "runghc"
 semaphoreCompat     = lib  "semaphore-compat"
 stm                 = lib  "stm"
 templateHaskell     = lib  "template-haskell"
-templateHaskellNext = lib  "template-haskell-next"
 terminfo            = lib  "terminfo"
 text                = lib  "text"
 time                = lib  "time"
diff --git a/hadrian/src/Rules/Generate.hs b/hadrian/src/Rules/Generate.hs
index 6e1312e12f58bc4f1249cd86922a9f8de19776f6..32ca2f054279d30bb2211710ec88f5295054eebe 100644
--- a/hadrian/src/Rules/Generate.hs
+++ b/hadrian/src/Rules/Generate.hs
@@ -344,14 +344,6 @@ templateRules = do
   templateRule "utils/ghc-pkg/ghc-pkg.cabal" $ projectVersion
   templateRule "libraries/template-haskell/template-haskell.cabal" $ mconcat
     [ projectVersion
-    , interpolateVar "Suffix" $ pure ""
-    , interpolateVar "SourceRoot" $ pure "."
-    ]
-  templateRuleFrom "libraries/template-haskell/template-haskell.cabal.in"
-                   "libraries/template-haskell-next/template-haskell-next.cabal" $ mconcat
-    [ projectVersion
-    , interpolateVar "Suffix" $ pure "-next"
-    , interpolateVar "SourceRoot" $ pure "../template-haskell"
     ]
   templateRule "libraries/prologue.txt" $ packageVersions
   templateRule "rts/include/ghcversion.h" $ mconcat
diff --git a/hadrian/src/Rules/ToolArgs.hs b/hadrian/src/Rules/ToolArgs.hs
index 7bbab5382897f71b5feb978adafd07bac844c2b7..3e8543ef026cb57c71bbe0fac162932abc1018b9 100644
--- a/hadrian/src/Rules/ToolArgs.hs
+++ b/hadrian/src/Rules/ToolArgs.hs
@@ -154,7 +154,6 @@ toolTargets = [ cabalSyntax
               , hpc
               , hpcBin  -- # executable
               , time
-              , templateHaskellNext
               , semaphoreCompat
               , unlit  -- # executable
               ] ++ if windowsHost then [ win32 ] else [ unix ]
diff --git a/hadrian/src/Settings/Default.hs b/hadrian/src/Settings/Default.hs
index 41f744e7b4ab3a2a7d7b3a4eb824720b1c8d4f9d..be5540af166ed730745337419d1299067b732050 100644
--- a/hadrian/src/Settings/Default.hs
+++ b/hadrian/src/Settings/Default.hs
@@ -102,7 +102,6 @@ stage0Packages = do
              , process -- depends on filepath
              , runGhc
              , semaphoreCompat -- depends on
-             , templateHaskellNext
              , time -- depends on win32
              , unlit
              , if windowsHost then win32 else unix
@@ -127,7 +126,6 @@ stage1Packages = do
           | p == unix         = False
           -- These packages are only needed for bootstrapping.
           -- See Note [Bootstrapping Template Haskell]
-          | p == templateHaskellNext = False
           | p == ghcBootThNext = False
           | otherwise         = True
 
diff --git a/hadrian/src/Settings/Packages.hs b/hadrian/src/Settings/Packages.hs
index d6430ada71773d989087dd20bb87eae89dc6c7c0..35c9badeaca76950d5e1c74f15da4ac2591fb4d5 100644
--- a/hadrian/src/Settings/Packages.hs
+++ b/hadrian/src/Settings/Packages.hs
@@ -186,8 +186,8 @@ packageArgs = do
         , package haddock ?
           builder (Cabal Flags) ? arg "in-ghc-tree"
 
-        ---------------------------- template-haskell --------------------------
-        , package templateHaskellNext ?
+        ---------------------------- ghc-boot-th-next --------------------------
+        , package ghcBootThNext ?
             builder (Cabal Flags) ? stage0 `cabalFlag` "bootstrap"
 
         ---------------------------------- text --------------------------------
diff --git a/libraries/base/src/Control/Monad/IO/Class.hs b/libraries/base/src/Control/Monad/IO/Class.hs
index c277cec56fd5657da8c395f08eee71d645cb73a4..5619cefc873be2e4aa6186d4c529828ebeccb0c0 100644
--- a/libraries/base/src/Control/Monad/IO/Class.hs
+++ b/libraries/base/src/Control/Monad/IO/Class.hs
@@ -14,61 +14,8 @@
 -- Class of monads based on @IO@.
 -----------------------------------------------------------------------------
 
-module Control.Monad.IO.Class (
-    MonadIO(..)
-  ) where
-
-import GHC.Internal.Base
-
--- | Monads in which 'IO' computations may be embedded.
--- Any monad built by applying a sequence of monad transformers to the
--- 'IO' monad will be an instance of this class.
---
--- Instances should satisfy the following laws, which state that 'liftIO'
--- is a transformer of monads:
---
--- * @'liftIO' . 'return' = 'return'@
---
--- * @'liftIO' (m >>= f) = 'liftIO' m >>= ('liftIO' . f)@
-
-class (Monad m) => MonadIO m where
-    -- | Lift a computation from the 'IO' monad.
-    -- This allows us to run IO computations in any monadic stack, so long as it supports these kinds of operations
-    -- (i.e. 'IO' is the base monad for the stack).
-    --
-    -- === __Example__
-    --
-    --
-    -- > import Control.Monad.Trans.State -- from the "transformers" library
-    -- >
-    -- > printState :: Show s => StateT s IO ()
-    -- > printState = do
-    -- >   state <- get
-    -- >   liftIO $ print state
-    --
-    --
-    -- Had we omitted @'liftIO'@, we would have ended up with this error:
-    --
-    -- > • Couldn't match type ‘IO’ with ‘StateT s IO’
-    -- >  Expected type: StateT s IO ()
-    -- >    Actual type: IO ()
-    --
-    -- The important part here is the mismatch between @StateT s IO ()@ and @'IO' ()@.
-    --
-    -- Luckily, we know of a function that takes an @'IO' a@ and returns an @(m a)@: @'liftIO'@,
-    -- enabling us to run the program and see the expected results:
-    --
-    -- @
-    -- > evalStateT printState "hello"
-    -- "hello"
-    --
-    -- > evalStateT printState 3
-    -- 3
-    -- @
-    --
-    liftIO :: IO a -> m a
-
--- | @since 4.9.0.0
-instance MonadIO IO where
-    liftIO = id
+module Control.Monad.IO.Class
+  ( MonadIO(..) )
+  where
 
+import GHC.Internal.Control.Monad.IO.Class
diff --git a/libraries/base/src/Data/Array/Byte.hs b/libraries/base/src/Data/Array/Byte.hs
index f954c627e7f173eee131d611a4c2e0a68522bf34..72bd13dea324f93a621348ca8e18d96e9d4aad69 100644
--- a/libraries/base/src/Data/Array/Byte.hs
+++ b/libraries/base/src/Data/Array/Byte.hs
@@ -13,6 +13,7 @@
 {-# LANGUAGE TypeFamilies #-}
 {-# LANGUAGE Trustworthy #-}
 {-# LANGUAGE UnboxedTuples #-}
+{-# LANGUAGE TemplateHaskellQuotes #-}
 
 module Data.Array.Byte (
   ByteArray(..),
@@ -30,6 +31,9 @@ import GHC.Num.Integer (Integer(..))
 import GHC.Internal.Show (intToDigit)
 import GHC.Internal.ST (ST(..), runST)
 import GHC.Internal.Word (Word8(..))
+import GHC.Internal.TH.Syntax
+import GHC.Internal.TH.Lift
+import GHC.Internal.ForeignPtr
 import Prelude
 
 -- | Lifted wrapper for 'ByteArray#'.
@@ -196,6 +200,35 @@ instance Show ByteArray where
           comma | i == 0    = id
                 | otherwise = showString ", "
 
+instance Lift ByteArray where
+  liftTyped x = unsafeCodeCoerce (lift x)
+  lift (ByteArray b) = return
+    (AppE (AppE (VarE addrToByteArrayName) (LitE (IntegerL (fromIntegral len))))
+      (LitE (BytesPrimL (Bytes ptr 0 (fromIntegral len)))))
+    where
+      len# = sizeofByteArray# b
+      len = I# len#
+      pb :: ByteArray#
+      !(ByteArray pb)
+        | isTrue# (isByteArrayPinned# b) = ByteArray b
+        | otherwise = runST $ ST $
+          \s -> case newPinnedByteArray# len# s of
+            (# s', mb #) -> case copyByteArray# b 0# mb 0# len# s' of
+              s'' -> case unsafeFreezeByteArray# mb s'' of
+                (# s''', ret #) -> (# s''', ByteArray ret #)
+      ptr :: ForeignPtr Word8
+      ptr = ForeignPtr (byteArrayContents# pb) (PlainPtr (unsafeCoerce# pb))
+
+addrToByteArrayName :: Name
+addrToByteArrayName = 'addrToByteArray
+
+addrToByteArray :: Int -> Addr# -> ByteArray
+addrToByteArray (I# len) addr = runST $ ST $
+  \s -> case newByteArray# len s of
+    (# s', mb #) -> case copyAddrToByteArray# addr mb 0# len s' of
+      s'' -> case unsafeFreezeByteArray# mb s'' of
+        (# s''', ret #) -> (# s''', ByteArray ret #)
+
 -- | Compare prefixes of given length.
 compareByteArraysFromBeginning :: ByteArray -> ByteArray -> Int -> Ordering
 {-# INLINE compareByteArraysFromBeginning #-}
diff --git a/libraries/base/src/Data/Fixed.hs b/libraries/base/src/Data/Fixed.hs
index dfbbcfaeedb6bdf5b930724344f25561454fbd40..7f48a6632443aa5c24038c16d2571357b403d839 100644
--- a/libraries/base/src/Data/Fixed.hs
+++ b/libraries/base/src/Data/Fixed.hs
@@ -2,6 +2,7 @@
 {-# LANGUAGE ScopedTypeVariables #-}
 {-# LANGUAGE PolyKinds #-}
 {-# LANGUAGE FlexibleInstances #-}
+{-# LANGUAGE TemplateHaskellQuotes #-}
 
 -----------------------------------------------------------------------------
 -- |
@@ -90,6 +91,8 @@ import GHC.Internal.TypeLits (KnownNat, natVal)
 import GHC.Internal.Read
 import GHC.Internal.Text.ParserCombinators.ReadPrec
 import GHC.Internal.Text.Read.Lex
+import qualified GHC.Internal.TH.Syntax as TH
+import qualified GHC.Internal.TH.Lift as TH
 import Data.Typeable
 import Prelude
 
@@ -140,6 +143,13 @@ instance (Typeable k,Typeable a) => Data (Fixed (a :: k)) where
     dataTypeOf _ = tyFixed
     toConstr _ = conMkFixed
 
+-- |
+-- @since template-haskell-2.19.0.0
+-- @since base-4.21.0.0
+instance TH.Lift (Fixed a) where
+  liftTyped x = TH.unsafeCodeCoerce (TH.lift x)
+  lift (MkFixed x) = [| MkFixed x |]
+
 -- | Types which can be used as a resolution argument to the 'Fixed' type constructor must implement the 'HasResolution'  typeclass.
 class HasResolution (a :: k) where
     -- | Provide the resolution for a fixed-point fractional number.
diff --git a/libraries/ghc-boot-th/GHC/ForeignSrcLang/Type.hs b/libraries/ghc-boot-th/GHC/ForeignSrcLang/Type.hs
index 19b223f56dbef6509517a90177653252f5241c8a..723296b79b712e7a99b95f1ad6de8aba41df6fa6 100644
--- a/libraries/ghc-boot-th/GHC/ForeignSrcLang/Type.hs
+++ b/libraries/ghc-boot-th/GHC/ForeignSrcLang/Type.hs
@@ -1,18 +1,5 @@
-{-# LANGUAGE DeriveGeneric #-}
 module GHC.ForeignSrcLang.Type
   ( ForeignSrcLang(..)
   ) where
 
-import Prelude -- See note [Why do we import Prelude here?]
-import GHC.Generics (Generic)
-
--- | Foreign formats supported by GHC via TH
-data ForeignSrcLang
-  = LangC      -- ^ C
-  | LangCxx    -- ^ C++
-  | LangObjc   -- ^ Objective C
-  | LangObjcxx -- ^ Objective C++
-  | LangAsm    -- ^ Assembly language (.s)
-  | LangJs     -- ^ JavaScript
-  | RawObject  -- ^ Object (.o)
-  deriving (Eq, Show, Generic)
+import GHC.Internal.ForeignSrcLang
diff --git a/libraries/template-haskell/Language/Haskell/TH/Lib/Map.hs b/libraries/ghc-boot-th/GHC/Internal/TH/Lib/Map.hs
similarity index 98%
rename from libraries/template-haskell/Language/Haskell/TH/Lib/Map.hs
rename to libraries/ghc-boot-th/GHC/Internal/TH/Lib/Map.hs
index 27794dd735d9a1935466f2199f2f27f6d09a49ff..7d3f80be3cae6e48f9bc2616d3ccbeac51120ada 100644
--- a/libraries/template-haskell/Language/Haskell/TH/Lib/Map.hs
+++ b/libraries/ghc-boot-th/GHC/Internal/TH/Lib/Map.hs
@@ -10,11 +10,11 @@
 --
 -- The original code is BSD-licensed and copyrighted by Daan Leijen, Andriy Palamarchuk, et al.
 
-module Language.Haskell.TH.Lib.Map
+module GHC.Internal.TH.Lib.Map
     ( Map
     , empty
     , insert
-    , Language.Haskell.TH.Lib.Map.lookup
+    , GHC.Internal.TH.Lib.Map.lookup
     ) where
 
 import Prelude
diff --git a/libraries/ghc-boot-th/GHC/Internal/TH/Ppr.hs b/libraries/ghc-boot-th/GHC/Internal/TH/Ppr.hs
new file mode 100644
index 0000000000000000000000000000000000000000..fb35c98b448458794f913511fa7871eb574ead80
--- /dev/null
+++ b/libraries/ghc-boot-th/GHC/Internal/TH/Ppr.hs
@@ -0,0 +1,1075 @@
+{-# LANGUAGE Trustworthy #-}
+{-# LANGUAGE LambdaCase #-}
+-- | contains a prettyprinter for the
+-- Template Haskell datatypes
+
+module GHC.Internal.TH.Ppr where
+    -- All of the exports from this module should
+    -- be "public" functions.  The main module TH
+    -- re-exports them all.
+
+import Text.PrettyPrint (render)
+import GHC.Internal.TH.PprLib
+import GHC.Internal.TH.Syntax
+import Data.Word ( Word8 )
+import Data.Char ( toLower, chr)
+import GHC.Show  ( showMultiLineString )
+import GHC.Lexeme( isVarSymChar )
+import Data.Ratio ( numerator, denominator )
+import Data.Foldable ( toList )
+import Prelude hiding ((<>))
+
+nestDepth :: Int
+nestDepth = 4
+
+type Precedence = Int
+appPrec, opPrec, unopPrec, funPrec, qualPrec, sigPrec, noPrec :: Precedence
+appPrec  = 6    -- Argument of a function or type application
+opPrec   = 5    -- Argument of an infix operator
+unopPrec = 4    -- Argument of an unresolved infix operator
+funPrec  = 3    -- Argument of a function arrow
+qualPrec = 2    -- Forall-qualified type or result of a function arrow
+sigPrec  = 1    -- Argument of an explicit type signature
+noPrec   = 0    -- Others
+
+parensIf :: Bool -> Doc -> Doc
+parensIf True d = parens d
+parensIf False d = d
+
+------------------------------
+
+pprint :: Ppr a => a -> String
+pprint x = render $ to_HPJ_Doc $ ppr x
+
+class Ppr a where
+    ppr :: a -> Doc
+    ppr_list :: [a] -> Doc
+    ppr_list = vcat . map ppr
+
+instance Ppr a => Ppr [a] where
+    ppr x = ppr_list x
+
+------------------------------
+instance Ppr Name where
+    ppr v = pprName v
+
+------------------------------
+instance Ppr Info where
+    ppr (TyConI d)     = ppr d
+    ppr (ClassI d is)  = ppr d $$ vcat (map ppr is)
+    ppr (FamilyI d is) = ppr d $$ vcat (map ppr is)
+    ppr (PrimTyConI name arity is_unlifted)
+      = text "Primitive"
+        <+> (if is_unlifted then text "unlifted" else empty)
+        <+> text "type constructor" <+> quotes (ppr name)
+        <+> parens (text "arity" <+> int arity)
+    ppr (ClassOpI v ty cls)
+      = text "Class op from" <+> ppr cls <> colon <+> ppr_sig v ty
+    ppr (DataConI v ty tc)
+      = text "Constructor from" <+> ppr tc <> colon <+> ppr_sig v ty
+    ppr (PatSynI nm ty) = pprPatSynSig nm ty
+    ppr (TyVarI v ty)
+      = text "Type variable" <+> ppr v <+> equals <+> ppr ty
+    ppr (VarI v ty mb_d)
+      = vcat [ppr_sig v ty,
+              case mb_d of { Nothing -> empty; Just d -> ppr d }]
+
+ppr_sig :: Name -> Type -> Doc
+ppr_sig v ty = pprName' Applied v <+> dcolon <+> ppr ty
+
+pprFixity :: Name -> Fixity -> NamespaceSpecifier -> Doc
+pprFixity _ f _ | f == defaultFixity = empty
+pprFixity v (Fixity i d) ns_spec
+  = ppr_fix d <+> int i <+> pprNamespaceSpecifier ns_spec <+> pprName' Infix v
+    where ppr_fix InfixR = text "infixr"
+          ppr_fix InfixL = text "infixl"
+          ppr_fix InfixN = text "infix"
+
+pprNamespaceSpecifier :: NamespaceSpecifier -> Doc
+pprNamespaceSpecifier NoNamespaceSpecifier = empty
+pprNamespaceSpecifier TypeNamespaceSpecifier = text "type"
+pprNamespaceSpecifier DataNamespaceSpecifier = text "data"
+
+-- | Pretty prints a pattern synonym type signature
+pprPatSynSig :: Name -> PatSynType -> Doc
+pprPatSynSig nm ty
+  = text "pattern" <+> pprPrefixOcc nm <+> dcolon <+> pprPatSynType ty
+
+-- | Pretty prints a pattern synonym's type; follows the usual
+-- conventions to print a pattern synonym type compactly, yet
+-- unambiguously. See the note on 'PatSynType' and the section on
+-- pattern synonyms in the GHC user's guide for more information.
+pprPatSynType :: PatSynType -> Doc
+pprPatSynType ty@(ForallT uniTys reqs ty'@(ForallT exTys provs ty''))
+  | null exTys,  null provs = ppr (ForallT uniTys reqs ty'')
+  | null uniTys, null reqs  = noreqs <+> ppr ty'
+  | null reqs               = pprForallBndrs uniTys <+> noreqs <+> ppr ty'
+  | otherwise               = ppr ty
+  where noreqs = text "() =>"
+        pprForallBndrs tvs = text "forall" <+> hsep (map ppr tvs) <+> text "."
+pprPatSynType ty            = ppr ty
+
+------------------------------
+instance Ppr Module where
+  ppr (Module pkg m) = text (pkgString pkg) <+> text (modString m)
+
+instance Ppr ModuleInfo where
+  ppr (ModuleInfo imps) = text "Module" <+> vcat (map ppr imps)
+
+------------------------------
+instance Ppr Exp where
+    ppr = pprExp noPrec
+
+pprPrefixOcc :: Name -> Doc
+-- Print operators with parens around them
+pprPrefixOcc n = parensIf (isSymOcc n) (ppr n)
+
+isSymOcc :: Name -> Bool
+isSymOcc n
+  = case nameBase n of
+      []    -> True  -- Empty name; weird
+      (c:_) -> isVarSymChar c
+                   -- c.f. isVarSymChar in GHC itself
+
+pprInfixExp :: Exp -> Doc
+pprInfixExp (VarE v) = pprName' Infix v
+pprInfixExp (ConE v) = pprName' Infix v
+pprInfixExp (UnboundVarE v) = pprName' Infix v
+-- This case will only ever be reached in exceptional circumstances.
+-- For example, when printing an error message in case of a malformed expression.
+pprInfixExp e = text "`" <> ppr e <> text "`"
+
+pprExp :: Precedence -> Exp -> Doc
+pprExp _ (VarE v)     = pprName' Applied v
+pprExp _ (ConE c)     = pprName' Applied c
+pprExp i (LitE l)     = pprLit i l
+pprExp i (AppE e1 e2) = parensIf (i >= appPrec) $ pprExp opPrec e1
+                                              <+> pprExp appPrec e2
+pprExp i (AppTypeE e t)
+ = parensIf (i >= appPrec) $ pprExp opPrec e <+> char '@' <> pprParendType t
+pprExp _ (ParensE e)  = parens (pprExp noPrec e)
+pprExp i (UInfixE e1 op e2)
+ = parensIf (i > unopPrec) $ pprExp unopPrec e1
+                         <+> pprInfixExp op
+                         <+> pprExp unopPrec e2
+pprExp i (InfixE (Just e1) op (Just e2))
+ = parensIf (i >= opPrec) $ pprExp opPrec e1
+                        <+> pprInfixExp op
+                        <+> pprExp opPrec e2
+pprExp _ (InfixE me1 op me2) = parens $ pprMaybeExp noPrec me1
+                                    <+> pprInfixExp op
+                                    <+> pprMaybeExp noPrec me2
+pprExp i (LamE [] e) = pprExp i e -- #13856
+pprExp i (LamE ps e) = parensIf (i > noPrec) $ char '\\' <> hsep (map (pprPat appPrec) ps)
+                                           <+> text "->" <+> ppr e
+pprExp i (LamCaseE ms)
+  = parensIf (i > noPrec) $ text "\\case" $$ braces (semiSep ms)
+pprExp i (LamCasesE ms)
+  = parensIf (i > noPrec) $ text "\\cases" $$ braces (semi_sep ms)
+  where semi_sep = sep . punctuate semi . map (pprClause False)
+pprExp i (TupE es)
+  | [Just e] <- es
+  = pprExp i (ConE (tupleDataName 1) `AppE` e)
+  | otherwise
+  = parens (commaSepWith (pprMaybeExp noPrec) es)
+pprExp _ (UnboxedTupE es) = hashParens (commaSepWith (pprMaybeExp noPrec) es)
+pprExp _ (UnboxedSumE e alt arity) = unboxedSumBars (ppr e) alt arity
+-- Nesting in Cond is to avoid potential problems in do statements
+pprExp i (CondE guard true false)
+ = parensIf (i > noPrec) $ sep [text "if"   <+> ppr guard,
+                       nest 1 $ text "then" <+> ppr true,
+                       nest 1 $ text "else" <+> ppr false]
+pprExp i (MultiIfE alts)
+  = parensIf (i > noPrec) $ vcat $
+      case alts of
+        []            -> [text "if {}"]
+        (alt : alts') -> text "if" <+> pprGuarded arrow alt
+                         : map (nest 3 . pprGuarded arrow) alts'
+pprExp i (LetE ds_ e) = parensIf (i > noPrec) $ text "let" <+> pprDecs ds_
+                                             $$ text " in" <+> ppr e
+  where
+    pprDecs []  = empty
+    pprDecs [d] = ppr d
+    pprDecs ds  = braces (semiSep ds)
+
+pprExp i (CaseE e ms)
+ = parensIf (i > noPrec) $ text "case" <+> ppr e <+> text "of"
+                        $$ braces (semiSep ms)
+pprExp i (DoE m ss_) = parensIf (i > noPrec) $
+    pprQualifier m <> text "do" <+> pprStms ss_
+  where
+    pprQualifier Nothing = empty
+    pprQualifier (Just modName) = text (modString modName) <> char '.'
+    pprStms []  = empty
+    pprStms [s] = ppr s
+    pprStms ss  = braces (semiSep ss)
+pprExp i (MDoE m ss_) = parensIf (i > noPrec) $
+    pprQualifier m <> text "mdo" <+> pprStms ss_
+  where
+    pprQualifier Nothing = empty
+    pprQualifier (Just modName) = text (modString modName) <> char '.'
+    pprStms []  = empty
+    pprStms [s] = ppr s
+    pprStms ss  = braces (semiSep ss)
+
+pprExp _ (CompE []) = text "<<Empty CompExp>>"
+-- This will probably break with fixity declarations - would need a ';'
+pprExp _ (CompE ss) =
+    if null ss'
+       -- If there are no statements in a list comprehension besides the last
+       -- one, we simply treat it like a normal list.
+       then text "[" <> ppr s <> text "]"
+       else text "[" <> ppr s
+        <+> bar
+        <+> commaSep ss'
+         <> text "]"
+  where s = last ss
+        ss' = init ss
+pprExp _ (ArithSeqE d) = ppr d
+pprExp _ (ListE es) = brackets (commaSep es)
+pprExp i (SigE e t) = parensIf (i > noPrec) $ pprExp sigPrec e
+                                          <+> dcolon <+> pprType sigPrec t
+pprExp _ (RecConE nm fs) = pprName' Applied nm <> braces (pprFields fs)
+pprExp _ (RecUpdE e fs) = pprExp appPrec e <> braces (pprFields fs)
+pprExp i (StaticE e) = parensIf (i >= appPrec) $
+                         text "static"<+> pprExp appPrec e
+pprExp _ (UnboundVarE v) = pprName' Applied v
+pprExp _ (LabelE s) = text "#" <> text s
+pprExp _ (ImplicitParamVarE n) = text ('?' : n)
+pprExp _ (GetFieldE e f) = pprExp appPrec e <> text ('.': f)
+pprExp _ (ProjectionE xs) = parens $ hcat $ map ((char '.'<>) . text) $ toList xs
+pprExp _ (TypedBracketE e) = text "[||" <> ppr e <> text "||]"
+pprExp _ (TypedSpliceE e) = text "$$" <> pprExp appPrec e
+pprExp i (TypeE t) = parensIf (i > noPrec) $ text "type" <+> ppr t
+
+pprFields :: [(Name,Exp)] -> Doc
+pprFields = sep . punctuate comma . map (\(s,e) -> pprName' Applied s <+> equals <+> ppr e)
+
+pprMaybeExp :: Precedence -> Maybe Exp -> Doc
+pprMaybeExp _ Nothing = empty
+pprMaybeExp i (Just e) = pprExp i e
+
+------------------------------
+instance Ppr Stmt where
+    ppr (BindS p e) = ppr p <+> text "<-" <+> ppr e
+    ppr (LetS ds) = text "let" <+> (braces (semiSep ds))
+    ppr (NoBindS e) = ppr e
+    ppr (ParS sss) = sep $ punctuate bar
+                         $ map commaSep sss
+    ppr (RecS ss) = text "rec" <+> (braces (semiSep ss))
+
+------------------------------
+instance Ppr Match where
+    ppr (Match p rhs ds) = pprMatchPat p <+> pprBody False rhs
+                        $$ where_clause ds
+
+pprMatchPat :: Pat -> Doc
+-- Everything except pattern signatures bind more tightly than (->)
+pprMatchPat p@(SigP {}) = parens (ppr p)
+pprMatchPat p           = ppr p
+
+------------------------------
+pprGuarded :: Doc -> (Guard, Exp) -> Doc
+pprGuarded eqDoc (guard, expr) = case guard of
+  NormalG guardExpr -> bar <+> ppr guardExpr <+> eqDoc <+> ppr expr
+  PatG    stmts     -> bar <+> vcat (punctuate comma $ map ppr stmts) $$
+                         nest nestDepth (eqDoc <+> ppr expr)
+
+------------------------------
+pprBody :: Bool -> Body -> Doc
+pprBody eq body = case body of
+    GuardedB xs -> nest nestDepth $ vcat $ map (pprGuarded eqDoc) xs
+    NormalB  e  -> eqDoc <+> ppr e
+  where eqDoc | eq        = equals
+              | otherwise = arrow
+
+------------------------------
+pprClause :: Bool -> Clause -> Doc
+pprClause eqDoc (Clause ps rhs ds)
+  = hsep (map (pprPat appPrec) ps) <+> pprBody eqDoc rhs
+    $$ where_clause ds
+
+------------------------------
+instance Ppr Lit where
+  ppr = pprLit noPrec
+
+pprLit :: Precedence -> Lit -> Doc
+pprLit i (IntPrimL x)    = parensIf (i > noPrec && x < 0)
+                                    (integer x <> char '#')
+pprLit _ (WordPrimL x)    = integer x <> text "##"
+pprLit i (FloatPrimL x)  = parensIf (i > noPrec && x < 0)
+                                    (float (fromRational x) <> char '#')
+pprLit i (DoublePrimL x) = parensIf (i > noPrec && x < 0)
+                                    (double (fromRational x) <> text "##")
+pprLit i (IntegerL x)    = parensIf (i > noPrec && x < 0) (integer x)
+pprLit _ (CharL c)       = text (show c)
+pprLit _ (CharPrimL c)   = text (show c) <> char '#'
+pprLit _ (StringL s)     = pprString s
+pprLit _ (StringPrimL s) = pprString (bytesToString s) <> char '#'
+pprLit _ (BytesPrimL {}) = pprString "<binary data>"
+pprLit i (RationalL rat)
+  | withoutFactor 2 (withoutFactor 5 $ denominator rat) /= 1
+  -- if the denominator has prime factors other than 2 and 5
+  -- or can't be represented as Double, show as fraction
+  = parensIf (i > noPrec) $
+    integer (numerator rat) <+> char '/' <+> integer (denominator rat)
+  | rat /= 0 && (zeroes < -2 || zeroes > 6),
+    let (n, d) = properFraction (rat / magnitude)
+  -- if < 0.01 or >= 100_000_000, use scientific notation
+  = parensIf (i > noPrec && rat < 0)
+             (integer n
+              <> (if d == 0 then empty else char '.' <> decimals (abs d))
+              <> char 'e' <> integer zeroes)
+  | let (n, d) = properFraction rat
+  = parensIf (i > noPrec && rat < 0)
+             (integer n <> char '.'
+              <> if d == 0 then char '0' else decimals (abs d))
+  where zeroes :: Integer
+        zeroes = log10 (abs rat)
+        log10 :: Rational -> Integer
+        log10 x
+          | x >= 10 = 1 + log10 (x / 10)
+          | x < 1 = -1 + log10 (x * 10)
+          | otherwise = 0
+        magnitude :: Rational
+        magnitude = 10 ^^ zeroes
+        withoutFactor :: Integer -> Integer -> Integer
+        withoutFactor _ 0 = 0
+        withoutFactor p n
+          | (n', 0) <- divMod n p = withoutFactor p n'
+          | otherwise = n
+        -- | Expects the argument 0 <= x < 1
+        decimals :: Rational -> Doc
+        decimals x
+          | x == 0 = empty
+          | otherwise = integer n <> decimals d
+          where (n, d) = properFraction (x * 10)
+
+bytesToString :: [Word8] -> String
+bytesToString = map (chr . fromIntegral)
+
+pprString :: String -> Doc
+-- Print newlines as newlines with Haskell string escape notation,
+-- not as '\n'.  For other non-printables use regular escape notation.
+pprString s = vcat (map text (showMultiLineString s))
+
+------------------------------
+instance Ppr Pat where
+    ppr = pprPat noPrec
+
+pprPat :: Precedence -> Pat -> Doc
+pprPat i (LitP l)     = pprLit i l
+pprPat _ (VarP v)     = pprName' Applied v
+pprPat i (TupP ps)
+  | [_] <- ps
+  = pprPat i (ConP (tupleDataName 1) [] ps)
+  | otherwise
+  = parens (commaSep ps)
+pprPat _ (UnboxedTupP ps) = hashParens (commaSep ps)
+pprPat _ (UnboxedSumP p alt arity) = unboxedSumBars (ppr p) alt arity
+pprPat i (ConP s ts ps)  = parensIf (i >= appPrec) $
+      pprName' Applied s
+  <+> sep (map (\t -> char '@' <> pprParendType t) ts)
+  <+> sep (map (pprPat appPrec) ps)
+pprPat _ (ParensP p)  = parens $ pprPat noPrec p
+pprPat i (UInfixP p1 n p2)
+                      = parensIf (i > unopPrec) (pprPat unopPrec p1 <+>
+                                                 pprName' Infix n   <+>
+                                                 pprPat unopPrec p2)
+pprPat i (InfixP p1 n p2)
+                      = parensIf (i >= opPrec) (pprPat opPrec p1 <+>
+                                                pprName' Infix n <+>
+                                                pprPat opPrec p2)
+pprPat i (TildeP p)   = parensIf (i > noPrec) $ char '~' <> pprPat appPrec p
+pprPat i (BangP p)    = parensIf (i > noPrec) $ char '!' <> pprPat appPrec p
+pprPat i (AsP v p)    = parensIf (i > noPrec) $ ppr v <> text "@"
+                                                      <> pprPat appPrec p
+pprPat _ WildP        = text "_"
+pprPat _ (RecP nm fs)
+ = parens $     pprName' Applied nm
+            <+> braces (sep $ punctuate comma $
+                        map (\(s,p) -> pprName' Applied s <+> equals <+> ppr p) fs)
+pprPat _ (ListP ps) = brackets (commaSep ps)
+pprPat i (SigP p t) = parensIf (i > noPrec) $ ppr p <+> dcolon <+> ppr t
+pprPat _ (ViewP e p) = parens $ pprExp noPrec e <+> text "->" <+> pprPat noPrec p
+pprPat _ (TypeP t) = parens $ text "type" <+> ppr t
+pprPat _ (InvisP t) = parens $ text "@" <+> ppr t
+
+------------------------------
+instance Ppr Dec where
+    ppr = ppr_dec True
+
+ppr_dec :: Bool     -- ^ declaration on the toplevel?
+        -> Dec
+        -> Doc
+ppr_dec isTop (FunD f cs)   = layout $ map (\c -> pprPrefixOcc f <+> ppr c) cs
+  where
+    layout :: [Doc] -> Doc
+    layout = if isTop then vcat else semiSepWith id
+ppr_dec _ (ValD p r ds) = ppr p <+> pprBody True r
+                          $$ where_clause ds
+ppr_dec _ (TySynD t xs rhs)
+  = ppr_tySyn empty (Just t) (hsep (map ppr xs)) rhs
+ppr_dec isTop (DataD ctxt t xs ksig cs decs)
+  = ppr_data isTop empty ctxt (Just t) (hsep (map ppr xs)) ksig cs decs
+ppr_dec isTop (NewtypeD ctxt t xs ksig c decs)
+  = ppr_newtype isTop empty ctxt (Just t) (sep (map ppr xs)) ksig c decs
+ppr_dec isTop (TypeDataD t xs ksig cs)
+  = ppr_type_data isTop empty [] (Just t) (hsep (map ppr xs)) ksig cs []
+ppr_dec _  (ClassD ctxt c xs fds ds)
+  = text "class" <+> pprCxt ctxt <+> pprName' Applied c <+> hsep (map ppr xs) <+> ppr fds
+    $$ where_clause ds
+ppr_dec _ (InstanceD o ctxt i ds) =
+        text "instance" <+> maybe empty ppr_overlap o <+> pprCxt ctxt <+> ppr i
+                                  $$ where_clause ds
+ppr_dec _ (SigD f t)    = pprPrefixOcc f <+> dcolon <+> ppr t
+ppr_dec _ (KiSigD f k)  = text "type" <+> pprPrefixOcc f <+> dcolon <+> ppr k
+ppr_dec _ (ForeignD f)  = ppr f
+ppr_dec _ (InfixD fx ns_spec n) = pprFixity n fx ns_spec
+ppr_dec _ (DefaultD tys) =
+        text "default" <+> parens (sep $ punctuate comma $ map ppr tys)
+ppr_dec _ (PragmaD p)   = ppr p
+ppr_dec isTop (DataFamilyD tc tvs kind)
+  = text "data" <+> maybeFamily <+> pprName' Applied tc <+> hsep (map ppr tvs) <+> maybeKind
+  where
+    maybeFamily | isTop     = text "family"
+                | otherwise = empty
+    maybeKind | (Just k') <- kind = dcolon <+> ppr k'
+              | otherwise = empty
+ppr_dec isTop (DataInstD ctxt bndrs ty ksig cs decs)
+  = ppr_data isTop (maybeInst <+> ppr_bndrs bndrs)
+             ctxt Nothing (ppr ty) ksig cs decs
+  where
+    maybeInst | isTop     = text "instance"
+              | otherwise = empty
+ppr_dec isTop (NewtypeInstD ctxt bndrs ty ksig c decs)
+  = ppr_newtype isTop (maybeInst <+> ppr_bndrs bndrs)
+                ctxt Nothing (ppr ty) ksig c decs
+  where
+    maybeInst | isTop     = text "instance"
+              | otherwise = empty
+ppr_dec isTop (TySynInstD (TySynEqn mb_bndrs ty rhs))
+  = ppr_tySyn (maybeInst <+> ppr_bndrs mb_bndrs)
+              Nothing (ppr ty) rhs
+  where
+    maybeInst | isTop     = text "instance"
+              | otherwise = empty
+ppr_dec isTop (OpenTypeFamilyD tfhead)
+  = text "type" <+> maybeFamily <+> ppr_tf_head tfhead
+  where
+    maybeFamily | isTop     = text "family"
+                | otherwise = empty
+ppr_dec _ (ClosedTypeFamilyD tfhead eqns)
+  = hang (text "type family" <+> ppr_tf_head tfhead <+> text "where")
+      nestDepth (vcat (map ppr_eqn eqns))
+  where
+    ppr_eqn (TySynEqn mb_bndrs lhs rhs)
+      = ppr_bndrs mb_bndrs <+> ppr lhs <+> text "=" <+> ppr rhs
+ppr_dec _ (RoleAnnotD name roles)
+  = hsep [ text "type role", pprName' Applied name ] <+> hsep (map ppr roles)
+ppr_dec _ (StandaloneDerivD ds cxt ty)
+  = hsep [ text "deriving"
+         , maybe empty ppr_deriv_strategy ds
+         , text "instance"
+         , pprCxt cxt
+         , ppr ty ]
+ppr_dec _ (DefaultSigD n ty)
+  = hsep [ text "default", pprPrefixOcc n, dcolon, ppr ty ]
+ppr_dec _ (PatSynD name args dir pat)
+  = text "pattern" <+> pprNameArgs <+> ppr dir <+> pprPatRHS
+  where
+    pprNameArgs | InfixPatSyn a1 a2 <- args = ppr a1 <+> pprName' Infix name <+> ppr a2
+                | otherwise                 = pprName' Applied name <+> ppr args
+    pprPatRHS   | ExplBidir cls <- dir = hang (ppr pat <+> text "where")
+                                              nestDepth
+                                              (vcat $ (pprName' Applied name <+>) . ppr <$> cls)
+                | otherwise            = ppr pat
+ppr_dec _ (PatSynSigD name ty)
+  = pprPatSynSig name ty
+ppr_dec _ (ImplicitParamBindD n e)
+  = hsep [text ('?' : n), text "=", ppr e]
+
+ppr_deriv_strategy :: DerivStrategy -> Doc
+ppr_deriv_strategy ds =
+  case ds of
+    StockStrategy    -> text "stock"
+    AnyclassStrategy -> text "anyclass"
+    NewtypeStrategy  -> text "newtype"
+    ViaStrategy ty   -> text "via" <+> pprParendType ty
+
+ppr_overlap :: Overlap -> Doc
+ppr_overlap o = text $
+  case o of
+    Overlaps      -> "{-# OVERLAPS #-}"
+    Overlappable  -> "{-# OVERLAPPABLE #-}"
+    Overlapping   -> "{-# OVERLAPPING #-}"
+    Incoherent    -> "{-# INCOHERENT #-}"
+
+ppr_data :: Bool     -- ^ declaration on the toplevel?
+         -> Doc -> Cxt -> Maybe Name -> Doc -> Maybe Kind -> [Con] -> [DerivClause]
+         -> Doc
+ppr_data = ppr_typedef "data"
+
+ppr_newtype :: Bool     -- ^ declaration on the toplevel?
+            -> Doc -> Cxt -> Maybe Name -> Doc -> Maybe Kind -> Con -> [DerivClause]
+            -> Doc
+ppr_newtype isTop maybeInst ctxt t argsDoc ksig c decs
+  = ppr_typedef "newtype" isTop maybeInst ctxt t argsDoc ksig [c] decs
+
+ppr_type_data :: Bool     -- ^ declaration on the toplevel?
+              -> Doc -> Cxt -> Maybe Name -> Doc -> Maybe Kind -> [Con] -> [DerivClause]
+              -> Doc
+ppr_type_data = ppr_typedef "type data"
+
+ppr_typedef :: String -> Bool -> Doc -> Cxt -> Maybe Name -> Doc -> Maybe Kind -> [Con] -> [DerivClause] -> Doc
+ppr_typedef data_or_newtype isTop maybeInst ctxt t argsDoc ksig cs decs
+  = sep [text data_or_newtype <+> maybeInst
+            <+> pprCxt ctxt
+            <+> case t of
+                 Just n -> pprName' Applied n <+> argsDoc
+                 Nothing -> argsDoc
+            <+> ksigDoc <+> maybeWhere,
+         nest nestDepth (layout (pref $ map ppr cs)),
+         if null decs
+           then empty
+           else nest nestDepth
+              $ vcat $ map ppr_deriv_clause decs]
+  where
+    pref :: [Doc] -> [Doc]
+    pref xs | isGadtDecl = xs
+    pref []              = []      -- No constructors; can't happen in H98
+    pref (d:ds)          = (char '=' <+> d):map (bar <+>) ds
+
+    layout :: [Doc] -> Doc
+    layout | isGadtDecl && not isTop = braces . semiSepWith id
+           | otherwise = vcat
+
+    maybeWhere :: Doc
+    maybeWhere | isGadtDecl = text "where"
+               | otherwise  = empty
+
+    isGadtDecl :: Bool
+    isGadtDecl = not (null cs) && all isGadtCon cs
+        where isGadtCon (GadtC _ _ _   ) = True
+              isGadtCon (RecGadtC _ _ _) = True
+              isGadtCon (ForallC _ _ x ) = isGadtCon x
+              isGadtCon  _               = False
+
+    ksigDoc = case ksig of
+                Nothing -> empty
+                Just k  -> dcolon <+> ppr k
+
+
+ppr_deriv_clause :: DerivClause -> Doc
+ppr_deriv_clause (DerivClause ds ctxt)
+  = text "deriving" <+> pp_strat_before
+                    <+> ppr_cxt_preds appPrec ctxt
+                    <+> pp_strat_after
+  where
+    -- @via@ is unique in that in comes /after/ the class being derived,
+    -- so we must special-case it.
+    (pp_strat_before, pp_strat_after) =
+      case ds of
+        Just (via@ViaStrategy{}) -> (empty, ppr_deriv_strategy via)
+        _                        -> (maybe empty ppr_deriv_strategy ds, empty)
+
+ppr_tySyn :: Doc -> Maybe Name -> Doc -> Type -> Doc
+ppr_tySyn maybeInst t argsDoc rhs
+  = text "type" <+> maybeInst
+    <+> case t of
+         Just n -> pprName' Applied n <+> argsDoc
+         Nothing -> argsDoc
+    <+> text "=" <+> ppr rhs
+
+ppr_tf_head :: TypeFamilyHead -> Doc
+ppr_tf_head (TypeFamilyHead tc tvs res inj)
+  = pprName' Applied tc <+> hsep (map ppr tvs) <+> ppr res <+> maybeInj
+  where
+    maybeInj | (Just inj') <- inj = ppr inj'
+             | otherwise          = empty
+
+ppr_bndrs :: PprFlag flag => Maybe [TyVarBndr flag] -> Doc
+ppr_bndrs (Just bndrs) = text "forall" <+> sep (map ppr bndrs) <> text "."
+ppr_bndrs Nothing = empty
+
+------------------------------
+instance Ppr FunDep where
+    ppr (FunDep xs ys) = hsep (map ppr xs) <+> text "->" <+> hsep (map ppr ys)
+    ppr_list [] = empty
+    ppr_list xs = bar <+> commaSep xs
+
+------------------------------
+instance Ppr FamilyResultSig where
+    ppr NoSig           = empty
+    ppr (KindSig k)     = dcolon <+> ppr k
+    ppr (TyVarSig bndr) = text "=" <+> ppr bndr
+
+------------------------------
+instance Ppr InjectivityAnn where
+    ppr (InjectivityAnn lhs rhs) =
+        bar <+> ppr lhs <+> text "->" <+> hsep (map ppr rhs)
+
+------------------------------
+instance Ppr Foreign where
+    ppr (ImportF callconv safety impent as typ)
+       = text "foreign import"
+     <+> showtextl callconv
+     <+> showtextl safety
+     <+> text (show impent)
+     <+> pprName' Applied as
+     <+> dcolon <+> ppr typ
+    ppr (ExportF callconv expent as typ)
+        = text "foreign export"
+      <+> showtextl callconv
+      <+> text (show expent)
+      <+> pprName' Applied as
+      <+> dcolon <+> ppr typ
+
+------------------------------
+instance Ppr Pragma where
+    ppr (InlineP n inline rm phases)
+       = text "{-#"
+     <+> ppr inline
+     <+> ppr rm
+     <+> ppr phases
+     <+> pprName' Applied n
+     <+> text "#-}"
+    ppr (OpaqueP n)
+       = text "{-# OPAQUE" <+> pprName' Applied n <+> text "#-}"
+    ppr (SpecialiseP n ty inline phases)
+       =   text "{-# SPECIALISE"
+       <+> maybe empty ppr inline
+       <+> ppr phases
+       <+> sep [ pprName' Applied n <+> dcolon
+               , nest 2 $ ppr ty ]
+       <+> text "#-}"
+    ppr (SpecialiseInstP inst)
+       = text "{-# SPECIALISE instance" <+> ppr inst <+> text "#-}"
+    ppr (RuleP n ty_bndrs tm_bndrs lhs rhs phases)
+       = sep [ text "{-# RULES" <+> pprString n <+> ppr phases
+             , nest 4 $ ppr_ty_forall ty_bndrs <+> ppr_tm_forall ty_bndrs
+                                               <+> ppr lhs
+             , nest 4 $ char '=' <+> ppr rhs <+> text "#-}" ]
+      where ppr_ty_forall Nothing      = empty
+            ppr_ty_forall (Just bndrs) = text "forall"
+                                         <+> fsep (map ppr bndrs)
+                                         <+> char '.'
+            ppr_tm_forall Nothing | null tm_bndrs = empty
+            ppr_tm_forall _ = text "forall"
+                              <+> fsep (map ppr tm_bndrs)
+                              <+> char '.'
+    ppr (AnnP tgt expr)
+       = text "{-# ANN" <+> target1 tgt <+> ppr expr <+> text "#-}"
+      where target1 ModuleAnnotation    = text "module"
+            target1 (TypeAnnotation t)  = text "type" <+> pprName' Applied t
+            target1 (ValueAnnotation v) = pprName' Applied v
+    ppr (LineP line file)
+       = text "{-# LINE" <+> int line <+> text (show file) <+> text "#-}"
+    ppr (CompleteP cls mty)
+       = text "{-# COMPLETE" <+> (fsep $ punctuate comma $ map (pprName' Applied) cls)
+                <+> maybe empty (\ty -> dcolon <+> pprName' Applied ty) mty <+> text "#-}"
+    ppr (SCCP nm str)
+       = text "{-# SCC" <+> pprName' Applied nm <+> maybe empty pprString str <+> text "#-}"
+
+------------------------------
+instance Ppr Inline where
+    ppr NoInline  = text "NOINLINE"
+    ppr Inline    = text "INLINE"
+    ppr Inlinable = text "INLINABLE"
+
+------------------------------
+instance Ppr RuleMatch where
+    ppr ConLike = text "CONLIKE"
+    ppr FunLike = empty
+
+------------------------------
+instance Ppr Phases where
+    ppr AllPhases       = empty
+    ppr (FromPhase i)   = brackets $ int i
+    ppr (BeforePhase i) = brackets $ char '~' <> int i
+
+------------------------------
+instance Ppr RuleBndr where
+    ppr (RuleVar n)         = ppr n
+    ppr (TypedRuleVar n ty) = parens $ ppr n <+> dcolon <+> ppr ty
+
+------------------------------
+instance Ppr Clause where
+    ppr = pprClause True
+
+------------------------------
+instance Ppr Con where
+    ppr (NormalC c sts) = pprName' Applied c <+> sep (map pprBangType sts)
+
+    ppr (RecC c vsts)
+        = pprName' Applied c <+> braces (sep (punctuate comma $ map pprVarBangType vsts))
+
+    ppr (InfixC st1 c st2) = pprBangType st1
+                         <+> pprName' Infix c
+                         <+> pprBangType st2
+
+    ppr (ForallC ns ctxt (GadtC cs sts ty))
+        = commaSepApplied cs <+> dcolon <+> pprForall ns ctxt
+      <+> pprGadtRHS sts ty
+
+    ppr (ForallC ns ctxt (RecGadtC cs vsts ty))
+        = commaSepApplied cs <+> dcolon <+> pprForall ns ctxt
+      <+> pprRecFields vsts ty
+
+    ppr (ForallC ns ctxt con)
+        = pprForall ns ctxt <+> ppr con
+
+    ppr (GadtC cs sts ty)
+        = commaSepApplied cs <+> dcolon <+> pprGadtRHS sts ty
+
+    ppr (RecGadtC cs vsts ty)
+        = commaSepApplied cs <+> dcolon <+> pprRecFields vsts ty
+
+instance Ppr PatSynDir where
+  ppr Unidir        = text "<-"
+  ppr ImplBidir     = text "="
+  ppr (ExplBidir _) = text "<-"
+    -- the ExplBidir's clauses are pretty printed together with the
+    -- entire pattern synonym; so only print the direction here.
+
+instance Ppr PatSynArgs where
+  ppr (PrefixPatSyn args) = sep $ map ppr args
+  ppr (InfixPatSyn a1 a2) = ppr a1 <+> ppr a2
+  ppr (RecordPatSyn sels) = braces $ sep (punctuate comma (map (pprName' Applied) sels))
+
+commaSepApplied :: [Name] -> Doc
+commaSepApplied = commaSepWith (pprName' Applied)
+
+pprForall :: [TyVarBndr Specificity] -> Cxt -> Doc
+pprForall = pprForall' ForallInvis
+
+pprForallVis :: [TyVarBndr ()] -> Cxt -> Doc
+pprForallVis = pprForall' ForallVis
+
+pprForall' :: PprFlag flag => ForallVisFlag -> [TyVarBndr flag] -> Cxt -> Doc
+pprForall' fvf tvs cxt
+  -- even in the case without any tvs, there could be a non-empty
+  -- context cxt (e.g., in the case of pattern synonyms, where there
+  -- are multiple forall binders and contexts).
+  | [] <- tvs = pprCxt cxt
+  | otherwise = text "forall" <+> hsep (map ppr tvs)
+                              <+> separator <+> pprCxt cxt
+  where
+    separator = case fvf of
+                  ForallVis   -> text "->"
+                  ForallInvis -> char '.'
+
+pprRecFields :: [(Name, Strict, Type)] -> Type -> Doc
+pprRecFields vsts ty
+    = braces (sep (punctuate comma $ map pprVarBangType vsts))
+  <+> arrow <+> ppr ty
+
+pprGadtRHS :: [(Strict, Type)] -> Type -> Doc
+pprGadtRHS [] ty
+    = ppr ty
+pprGadtRHS sts ty
+    = sep (punctuate (space <> arrow) (map pprBangType sts))
+  <+> arrow <+> ppr ty
+
+------------------------------
+pprVarBangType :: VarBangType -> Doc
+-- Slight infelicity: with print non-atomic type with parens
+pprVarBangType (v, bang, t) = pprName' Applied v <+> dcolon <+> pprBangType (bang, t)
+
+------------------------------
+pprBangType :: BangType -> Doc
+-- Make sure we print
+--
+-- Con {-# UNPACK #-} a
+--
+-- rather than
+--
+-- Con {-# UNPACK #-}a
+--
+-- when there's no strictness annotation. If there is a strictness annotation,
+-- it's okay to not put a space between it and the type.
+pprBangType (bt@(Bang _ NoSourceStrictness), t) = ppr bt <+> pprParendType t
+pprBangType (bt, t) = ppr bt <> pprParendType t
+
+------------------------------
+instance Ppr Bang where
+    ppr (Bang su ss) = ppr su <+> ppr ss
+
+------------------------------
+instance Ppr SourceUnpackedness where
+    ppr NoSourceUnpackedness = empty
+    ppr SourceNoUnpack       = text "{-# NOUNPACK #-}"
+    ppr SourceUnpack         = text "{-# UNPACK #-}"
+
+------------------------------
+instance Ppr SourceStrictness where
+    ppr NoSourceStrictness = empty
+    ppr SourceLazy         = char '~'
+    ppr SourceStrict       = char '!'
+
+------------------------------
+instance Ppr DecidedStrictness where
+    ppr DecidedLazy   = empty
+    ppr DecidedStrict = char '!'
+    ppr DecidedUnpack = text "{-# UNPACK #-} !"
+
+------------------------------
+{-# DEPRECATED pprVarStrictType
+               "As of @template-haskell-2.11.0.0@, 'VarStrictType' has been replaced by 'VarBangType'. Please use 'pprVarBangType' instead." #-}
+pprVarStrictType :: (Name, Strict, Type) -> Doc
+pprVarStrictType = pprVarBangType
+
+------------------------------
+{-# DEPRECATED pprStrictType
+               "As of @template-haskell-2.11.0.0@, 'StrictType' has been replaced by 'BangType'. Please use 'pprBangType' instead." #-}
+pprStrictType :: (Strict, Type) -> Doc
+pprStrictType = pprBangType
+
+------------------------------
+pprType :: Precedence -> Type -> Doc
+pprType _ (VarT v)               = pprName' Applied v
+-- `Applied` is used here instead of `ppr` because of infix names (#13887)
+pprType _ (ConT c)               = pprName' Applied c
+pprType _ (TupleT 0)             = text "()"
+pprType p (TupleT 1)             = pprType p (ConT (tupleTypeName 1))
+pprType _ (TupleT n)             = parens (hcat (replicate (n-1) comma))
+pprType _ (UnboxedTupleT n)      = hashParens $ hcat $ replicate (n-1) comma
+pprType _ (UnboxedSumT arity)    = hashParens $ hcat $ replicate (arity-1) bar
+pprType _ ArrowT                 = parens (text "->")
+pprType _ MulArrowT              = text "FUN"
+pprType _ ListT                  = text "[]"
+pprType _ (LitT l)               = pprTyLit l
+pprType _ (PromotedT c)          = text "'" <> pprName' Applied c
+pprType _ (PromotedTupleT 0)     = text "'()"
+pprType p (PromotedTupleT 1)     = pprType p (PromotedT (tupleDataName 1))
+pprType _ (PromotedTupleT n)     = quoteParens (hcat (replicate (n-1) comma))
+pprType _ PromotedNilT           = text "'[]"
+pprType _ PromotedConsT          = text "'(:)"
+pprType _ StarT                  = char '*'
+pprType _ ConstraintT            = text "Constraint"
+pprType _ (SigT ty k)            = parens (ppr ty <+> text "::" <+> ppr k)
+pprType _ WildCardT              = char '_'
+pprType p t@(InfixT {})          = pprInfixT p t
+pprType p t@(UInfixT {})         = pprInfixT p t
+pprType p t@(PromotedInfixT {})  = pprInfixT p t
+pprType p t@(PromotedUInfixT {}) = pprInfixT p t
+pprType _ (ParensT t)            = parens (pprType noPrec t)
+pprType p (ImplicitParamT n ty) =
+  parensIf (p >= sigPrec) $ text ('?':n) <+> text "::" <+> pprType sigPrec ty
+pprType _ EqualityT              = text "(~)"
+pprType p (ForallT tvars ctxt ty) =
+  parensIf (p >= funPrec) $ sep [pprForall tvars ctxt, pprType qualPrec ty]
+pprType p (ForallVisT tvars ty) =
+  parensIf (p >= funPrec) $ sep [pprForallVis tvars [], pprType qualPrec ty]
+pprType p t@AppT{}               = pprTyApp p (split t)
+pprType p t@AppKindT{}           = pprTyApp p (split t)
+
+------------------------------
+pprParendType :: Type -> Doc
+pprParendType = pprType appPrec
+
+pprInfixT :: Precedence -> Type -> Doc
+pprInfixT p = \case
+  InfixT x n y          -> with x n y ""  opPrec
+  UInfixT x n y         -> with x n y ""  unopPrec
+  PromotedInfixT x n y  -> with x n y "'" opPrec
+  PromotedUInfixT x n y -> with x n y "'" unopPrec
+  t                     -> pprParendType t
+  where
+    with x n y prefix p' =
+      parensIf
+        (p >= p')
+        (pprType opPrec x <+> text prefix <> pprName' Infix n <+> pprType opPrec y)
+
+instance Ppr Type where
+    ppr = pprType noPrec
+instance Ppr TypeArg where
+    ppr (TANormal ty) = ppr ty
+    ppr (TyArg ki) = char '@' <> parensIf (isStarT ki) (ppr ki)
+
+pprParendTypeArg :: TypeArg -> Doc
+pprParendTypeArg (TANormal ty) = pprParendType ty
+pprParendTypeArg (TyArg ki) = char '@' <> parensIf (isStarT ki) (pprParendType ki)
+
+isStarT :: Type -> Bool
+isStarT StarT = True
+isStarT _ = False
+
+{- Note [Pretty-printing kind signatures]
+~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+GHC's parser only recognises a kind signature in a type when there are
+parens around it.  E.g. the parens are required here:
+   f :: (Int :: *)
+   type instance F Int = (Bool :: *)
+So we always print a SigT with parens (see #10050). -}
+
+pprTyApp :: Precedence -> (Type, [TypeArg]) -> Doc
+pprTyApp p app@(MulArrowT, [TANormal (PromotedT c), TANormal arg1, TANormal arg2])
+  | p >= funPrec  = parens (pprTyApp noPrec app)
+  | c == oneName  = sep [pprFunArgType arg1 <+> text "%1 ->", pprType qualPrec arg2]
+  | c == manyName = sep [pprFunArgType arg1 <+> text "->", pprType qualPrec arg2]
+pprTyApp p (MulArrowT, [TANormal argm, TANormal arg1, TANormal arg2]) =
+  parensIf (p >= funPrec) $
+    sep [pprFunArgType arg1 <+> text "%" <> pprType appPrec argm <+> text "->",
+         pprType qualPrec arg2]
+pprTyApp p (ArrowT, [TANormal arg1, TANormal arg2]) =
+  parensIf (p >= funPrec) $
+    sep [pprFunArgType arg1 <+> text "->", pprType qualPrec arg2]
+pprTyApp p (EqualityT, [TANormal arg1, TANormal arg2]) =
+  parensIf (p >= opPrec) $
+    sep [pprType opPrec arg1 <+> text "~", pprType opPrec arg2]
+pprTyApp _ (ListT, [TANormal arg]) = brackets (pprType noPrec arg)
+pprTyApp p (TupleT 1, args) = pprTyApp p (ConT (tupleTypeName 1), args)
+pprTyApp _ (TupleT n, args)
+ | length args == n, Just args' <- traverse fromTANormal args
+ = parens (commaSep args')
+pprTyApp p (PromotedTupleT 1, args) = pprTyApp p (PromotedT (tupleDataName 1), args)
+pprTyApp _ (PromotedTupleT n, args)
+ | length args == n, Just args' <- traverse fromTANormal args
+ = quoteParens (commaSep args')
+pprTyApp p (fun, args) =
+  parensIf (p >= appPrec) $ pprParendType fun <+> sep (map pprParendTypeArg args)
+
+fromTANormal :: TypeArg -> Maybe Type
+fromTANormal (TANormal arg) = Just arg
+fromTANormal (TyArg _) = Nothing
+
+-- Print the type to the left of @->@. Everything except forall and (->) binds more tightly than (->).
+pprFunArgType :: Type -> Doc
+pprFunArgType = pprType funPrec
+
+data ForallVisFlag = ForallVis   -- forall a -> {...}
+                   | ForallInvis -- forall a.   {...}
+  deriving Show
+
+data TypeArg = TANormal Type
+             | TyArg Kind
+
+split :: Type -> (Type, [TypeArg])    -- Split into function and args
+split t = go t []
+    where go (AppT t1 t2) args = go t1 (TANormal t2:args)
+          go (AppKindT ty ki) args = go ty (TyArg ki:args)
+          go ty           args = (ty, args)
+
+pprTyLit :: TyLit -> Doc
+pprTyLit (NumTyLit n) = integer n
+pprTyLit (StrTyLit s) = text (show s)
+pprTyLit (CharTyLit c) = text (show c)
+
+instance Ppr TyLit where
+  ppr = pprTyLit
+
+------------------------------
+class PprFlag flag where
+    pprTyVarBndr :: (TyVarBndr flag) -> Doc
+
+instance PprFlag () where
+    pprTyVarBndr (PlainTV nm ())    = ppr nm
+    pprTyVarBndr (KindedTV nm () k) = parens (ppr nm <+> dcolon <+> ppr k)
+
+instance PprFlag Specificity where
+    pprTyVarBndr (PlainTV nm SpecifiedSpec)    = ppr nm
+    pprTyVarBndr (PlainTV nm InferredSpec)     = braces (ppr nm)
+    pprTyVarBndr (KindedTV nm SpecifiedSpec k) = parens (ppr nm <+> dcolon <+> ppr k)
+    pprTyVarBndr (KindedTV nm InferredSpec  k) = braces (ppr nm <+> dcolon <+> ppr k)
+
+instance PprFlag BndrVis where
+    pprTyVarBndr (PlainTV nm vis)    = pprBndrVis vis (ppr nm)
+    pprTyVarBndr (KindedTV nm vis k) = pprBndrVis vis (parens (ppr nm <+> dcolon <+> ppr k))
+
+pprBndrVis :: BndrVis -> Doc -> Doc
+pprBndrVis BndrReq   d = d
+pprBndrVis BndrInvis d = char '@' <> d
+
+instance PprFlag flag => Ppr (TyVarBndr flag) where
+    ppr bndr = pprTyVarBndr bndr
+
+instance Ppr Role where
+    ppr NominalR          = text "nominal"
+    ppr RepresentationalR = text "representational"
+    ppr PhantomR          = text "phantom"
+    ppr InferR            = text "_"
+
+------------------------------
+pprCxt :: Cxt -> Doc
+pprCxt [] = empty
+pprCxt ts = ppr_cxt_preds funPrec ts <+> text "=>"
+
+ppr_cxt_preds :: Precedence -> Cxt -> Doc
+ppr_cxt_preds _ [] = text "()"
+ppr_cxt_preds p [t] = pprType p t
+ppr_cxt_preds _ ts = parens (commaSep ts)
+
+------------------------------
+instance Ppr Range where
+    ppr = brackets . pprRange
+        where pprRange :: Range -> Doc
+              pprRange (FromR e) = ppr e <+> text ".."
+              pprRange (FromThenR e1 e2) = ppr e1 <> text ","
+                                           <+> ppr e2 <+> text ".."
+              pprRange (FromToR e1 e2) = ppr e1 <+> text ".." <+> ppr e2
+              pprRange (FromThenToR e1 e2 e3) = ppr e1 <> text ","
+                                             <+> ppr e2 <+> text ".."
+                                             <+> ppr e3
+
+------------------------------
+where_clause :: [Dec] -> Doc
+where_clause [] = empty
+where_clause ds = nest nestDepth $ text "where" <+> braces (semiSepWith (ppr_dec False) ds)
+
+showtextl :: Show a => a -> Doc
+showtextl = text . map toLower . show
+
+hashParens :: Doc -> Doc
+hashParens d = text "(# " <> d <> text " #)"
+
+quoteParens :: Doc -> Doc
+quoteParens d = text "'(" <> d <> text ")"
+
+-----------------------------
+instance Ppr Loc where
+  ppr (Loc { loc_module = md
+           , loc_package = pkg
+           , loc_start = (start_ln, start_col)
+           , loc_end = (end_ln, end_col) })
+    = hcat [ text pkg, colon, text md, colon
+           , parens $ int start_ln <> comma <> int start_col
+           , text "-"
+           , parens $ int end_ln <> comma <> int end_col ]
+
+-- Takes a separator and a pretty-printing function and prints a list of things
+-- separated by the separator followed by space.
+sepWith :: Doc -> (a -> Doc) -> [a] -> Doc
+sepWith sepDoc pprFun = sep . punctuate sepDoc . map pprFun
+
+-- Takes a list of printable things and prints them separated by commas followed
+-- by space.
+commaSep :: Ppr a => [a] -> Doc
+commaSep = commaSepWith ppr
+
+-- Takes a list of things and prints them with the given pretty-printing
+-- function, separated by commas followed by space.
+commaSepWith :: (a -> Doc) -> [a] -> Doc
+commaSepWith pprFun = sepWith comma pprFun
+
+-- Takes a list of printable things and prints them separated by semicolons
+-- followed by space.
+semiSep :: Ppr a => [a] -> Doc
+semiSep = sep . punctuate semi . map ppr
+
+-- Takes a list of things and prints them with the given pretty-printing
+-- function, separated by semicolons followed by space.
+semiSepWith :: (a -> Doc) -> [a] -> Doc
+semiSepWith pprFun = sepWith semi pprFun
+
+-- Prints out the series of vertical bars that wraps an expression or pattern
+-- used in an unboxed sum.
+unboxedSumBars :: Doc -> SumAlt -> SumArity -> Doc
+unboxedSumBars d alt arity = hashParens $
+    bars (alt-1) <> d <> bars (arity - alt)
+  where
+    bars i = hsep (replicate i bar)
+
+-- Text containing the vertical bar character.
+bar :: Doc
+bar = char '|'
diff --git a/libraries/ghc-boot-th/GHC/Internal/TH/PprLib.hs b/libraries/ghc-boot-th/GHC/Internal/TH/PprLib.hs
new file mode 100644
index 0000000000000000000000000000000000000000..9754735df09200bfc18a166d70acc151be1205ef
--- /dev/null
+++ b/libraries/ghc-boot-th/GHC/Internal/TH/PprLib.hs
@@ -0,0 +1,226 @@
+{-# LANGUAGE FlexibleInstances, Safe #-}
+
+-- | Monadic front-end to Text.PrettyPrint
+
+module GHC.Internal.TH.PprLib (
+
+        -- * The document type
+        Doc,            -- Abstract, instance of Show
+        PprM,
+
+        -- * Primitive Documents
+        empty,
+        semi, comma, colon, dcolon, space, equals, arrow,
+        lparen, rparen, lbrack, rbrack, lbrace, rbrace,
+
+        -- * Converting values into documents
+        text, char, ptext,
+        int, integer, float, double, rational,
+
+        -- * Wrapping documents in delimiters
+        parens, brackets, braces, quotes, doubleQuotes,
+
+        -- * Combining documents
+        (<>), (<+>), hcat, hsep,
+        ($$), ($+$), vcat,
+        sep, cat,
+        fsep, fcat,
+        nest,
+        hang, punctuate,
+
+        -- * Predicates on documents
+        isEmpty,
+
+    to_HPJ_Doc, pprName, pprName'
+  ) where
+
+
+import GHC.Internal.TH.Syntax
+    (Uniq, Name(..), showName', NameFlavour(..), NameIs(..))
+import qualified Text.PrettyPrint as HPJ
+import Control.Monad (liftM, liftM2, ap)
+import GHC.Internal.TH.Lib.Map ( Map )
+import qualified GHC.Internal.TH.Lib.Map as Map ( lookup, insert, empty )
+import Prelude hiding ((<>))
+
+infixl 6 <>
+infixl 6 <+>
+infixl 5 $$, $+$
+
+-- ---------------------------------------------------------------------------
+-- The interface
+
+-- The primitive Doc values
+
+instance Show Doc where
+   show d = HPJ.render (to_HPJ_Doc d)
+
+isEmpty :: Doc    -> PprM Bool;  -- ^ Returns 'True' if the document is empty
+
+empty   :: Doc;                 -- ^ An empty document
+semi    :: Doc;                 -- ^ A ';' character
+comma   :: Doc;                 -- ^ A ',' character
+colon   :: Doc;                 -- ^ A ':' character
+dcolon  :: Doc;                 -- ^ A "::" string
+space   :: Doc;                 -- ^ A space character
+equals  :: Doc;                 -- ^ A '=' character
+arrow   :: Doc;                 -- ^ A "->" string
+lparen  :: Doc;                 -- ^ A '(' character
+rparen  :: Doc;                 -- ^ A ')' character
+lbrack  :: Doc;                 -- ^ A '[' character
+rbrack  :: Doc;                 -- ^ A ']' character
+lbrace  :: Doc;                 -- ^ A '{' character
+rbrace  :: Doc;                 -- ^ A '}' character
+
+text     :: String   -> Doc
+ptext    :: String   -> Doc
+char     :: Char     -> Doc
+int      :: Int      -> Doc
+integer  :: Integer  -> Doc
+float    :: Float    -> Doc
+double   :: Double   -> Doc
+rational :: Rational -> Doc
+
+
+parens       :: Doc -> Doc;     -- ^ Wrap document in @(...)@
+brackets     :: Doc -> Doc;     -- ^ Wrap document in @[...]@
+braces       :: Doc -> Doc;     -- ^ Wrap document in @{...}@
+quotes       :: Doc -> Doc;     -- ^ Wrap document in @\'...\'@
+doubleQuotes :: Doc -> Doc;     -- ^ Wrap document in @\"...\"@
+
+-- Combining @Doc@ values
+
+(<>)   :: Doc -> Doc -> Doc;     -- ^Beside
+hcat   :: [Doc] -> Doc;          -- ^List version of '<>'
+(<+>)  :: Doc -> Doc -> Doc;     -- ^Beside, separated by space
+hsep   :: [Doc] -> Doc;          -- ^List version of '<+>'
+
+($$)   :: Doc -> Doc -> Doc;     -- ^Above; if there is no
+                                 -- overlap it \"dovetails\" the two
+($+$)  :: Doc -> Doc -> Doc;     -- ^Above, without dovetailing.
+vcat   :: [Doc] -> Doc;          -- ^List version of '$$'
+
+cat    :: [Doc] -> Doc;          -- ^ Either hcat or vcat
+sep    :: [Doc] -> Doc;          -- ^ Either hsep or vcat
+fcat   :: [Doc] -> Doc;          -- ^ \"Paragraph fill\" version of cat
+fsep   :: [Doc] -> Doc;          -- ^ \"Paragraph fill\" version of sep
+
+nest   :: Int -> Doc -> Doc;     -- ^ Nested
+
+
+-- GHC-specific ones.
+
+hang :: Doc -> Int -> Doc -> Doc;      -- ^ @hang d1 n d2 = sep [d1, nest n d2]@
+punctuate :: Doc -> [Doc] -> [Doc]
+   -- ^ @punctuate p [d1, ... dn] = [d1 \<> p, d2 \<> p, ... dn-1 \<> p, dn]@
+
+-- ---------------------------------------------------------------------------
+-- The "implementation"
+
+type State = (Map Name Name, Uniq)
+data PprM a = PprM { runPprM :: State -> (a, State) }
+
+pprName :: Name -> Doc
+pprName = pprName' Alone
+
+pprName' :: NameIs -> Name -> Doc
+pprName' ni n@(Name o (NameU _))
+ = PprM $ \s@(fm, i)
+        -> let (n', s') = case Map.lookup n fm of
+                         Just d -> (d, s)
+                         Nothing -> let n'' = Name o (NameU i)
+                                    in (n'', (Map.insert n n'' fm, i + 1))
+           in (HPJ.text $ showName' ni n', s')
+pprName' ni n = text $ showName' ni n
+
+{-
+instance Show Name where
+  show (Name occ (NameU u))    = occString occ ++ "_" ++ show (I# u)
+  show (Name occ NameS)        = occString occ
+  show (Name occ (NameG ns m)) = modString m ++ "." ++ occString occ
+
+data Name = Name OccName NameFlavour
+
+data NameFlavour
+  | NameU Int#                  -- A unique local name
+-}
+
+to_HPJ_Doc :: Doc -> HPJ.Doc
+to_HPJ_Doc d = fst $ runPprM d (Map.empty, 0)
+
+instance Functor PprM where
+      fmap = liftM
+
+instance Applicative PprM where
+      pure x = PprM $ \s -> (x, s)
+      (<*>) = ap
+
+instance Monad PprM where
+    m >>= k  = PprM $ \s -> let (x, s') = runPprM m s
+                            in runPprM (k x) s'
+
+type Doc = PprM HPJ.Doc
+
+-- The primitive Doc values
+
+isEmpty = liftM HPJ.isEmpty
+
+empty = return HPJ.empty
+semi = return HPJ.semi
+comma = return HPJ.comma
+colon = return HPJ.colon
+dcolon = return $ HPJ.text "::"
+space = return HPJ.space
+equals = return HPJ.equals
+arrow = return $ HPJ.text "->"
+lparen = return HPJ.lparen
+rparen = return HPJ.rparen
+lbrack = return HPJ.lbrack
+rbrack = return HPJ.rbrack
+lbrace = return HPJ.lbrace
+rbrace = return HPJ.rbrace
+
+text = return . HPJ.text
+ptext = return . HPJ.ptext
+char = return . HPJ.char
+int = return . HPJ.int
+integer = return . HPJ.integer
+float = return . HPJ.float
+double = return . HPJ.double
+rational = return . HPJ.rational
+
+
+parens = liftM HPJ.parens
+brackets = liftM HPJ.brackets
+braces = liftM HPJ.braces
+quotes = liftM HPJ.quotes
+doubleQuotes = liftM HPJ.doubleQuotes
+
+-- Combining @Doc@ values
+
+(<>) = liftM2 (HPJ.<>)
+hcat = liftM HPJ.hcat . sequence
+(<+>) = liftM2 (HPJ.<+>)
+hsep = liftM HPJ.hsep . sequence
+
+($$) = liftM2 (HPJ.$$)
+($+$) = liftM2 (HPJ.$+$)
+vcat = liftM HPJ.vcat . sequence
+
+cat  = liftM HPJ.cat . sequence
+sep  = liftM HPJ.sep . sequence
+fcat = liftM HPJ.fcat . sequence
+fsep = liftM HPJ.fsep . sequence
+
+nest n = liftM (HPJ.nest n)
+
+hang d1 n d2 = do d1' <- d1
+                  d2' <- d2
+                  return (HPJ.hang d1' n d2')
+
+-- punctuate uses the same definition as Text.PrettyPrint
+punctuate _ []     = []
+punctuate p (d:ds) = go d ds
+                   where
+                     go d' [] = [d']
+                     go d' (e:es) = (d' <> p) : go e es
diff --git a/libraries/ghc-boot-th/GHC/LanguageExtensions/Type.hs b/libraries/ghc-boot-th/GHC/LanguageExtensions/Type.hs
index a74427c920e1c834b62e739446654fc77b0e1d4e..c605adb9fed4d2ba17ac4245d1650e64714130a2 100644
--- a/libraries/ghc-boot-th/GHC/LanguageExtensions/Type.hs
+++ b/libraries/ghc-boot-th/GHC/LanguageExtensions/Type.hs
@@ -8,155 +8,7 @@
 --
 -- A data type defining the language extensions supported by GHC.
 --
-{-# LANGUAGE DeriveGeneric, Safe #-}
+{-# LANGUAGE Safe #-}
 module GHC.LanguageExtensions.Type ( Extension(..) ) where
 
-import Prelude -- See note [Why do we import Prelude here?]
-import GHC.Generics
-
--- | The language extensions known to GHC.
---
--- Note that there is an orphan 'Binary' instance for this type supplied by
--- the "GHC.LanguageExtensions" module provided by @ghc-boot@. We can't provide
--- here as this would require adding transitive dependencies to the
--- @template-haskell@ package, which must have a minimal dependency set.
-data Extension
--- See Note [Updating flag description in the User's Guide] in
--- GHC.Driver.Session
-   = Cpp
-   | OverlappingInstances
-   | UndecidableInstances
-   | IncoherentInstances
-   | UndecidableSuperClasses
-   | MonomorphismRestriction
-   | MonoLocalBinds
-   | DeepSubsumption
-   | RelaxedPolyRec           -- Deprecated
-   | ExtendedDefaultRules     -- Use GHC's extended rules for defaulting
-   | ForeignFunctionInterface
-   | UnliftedFFITypes
-   | InterruptibleFFI
-   | CApiFFI
-   | GHCForeignImportPrim
-   | JavaScriptFFI
-   | ParallelArrays           -- Syntactic support for parallel arrays
-   | Arrows                   -- Arrow-notation syntax
-   | TemplateHaskell
-   | TemplateHaskellQuotes    -- subset of TH supported by stage1, no splice
-   | QualifiedDo
-   | QuasiQuotes
-   | ImplicitParams
-   | ImplicitPrelude
-   | ScopedTypeVariables
-   | AllowAmbiguousTypes
-   | UnboxedTuples
-   | UnboxedSums
-   | UnliftedNewtypes
-   | UnliftedDatatypes
-   | BangPatterns
-   | TypeFamilies
-   | TypeFamilyDependencies
-   | TypeInType               -- Deprecated
-   | OverloadedStrings
-   | OverloadedLists
-   | NumDecimals
-   | DisambiguateRecordFields
-   | RecordWildCards
-   | NamedFieldPuns
-   | ViewPatterns
-   | GADTs
-   | GADTSyntax
-   | NPlusKPatterns
-   | DoAndIfThenElse
-   | BlockArguments
-   | RebindableSyntax
-   | ConstraintKinds
-   | PolyKinds                -- Kind polymorphism
-   | DataKinds                -- Datatype promotion
-   | TypeData                 -- allow @type data@ definitions
-   | InstanceSigs
-   | ApplicativeDo
-   | LinearTypes
-   | RequiredTypeArguments    -- Visible forall (VDQ) in types of terms
-
-   | StandaloneDeriving
-   | DeriveDataTypeable
-   | AutoDeriveTypeable       -- Automatic derivation of Typeable
-   | DeriveFunctor
-   | DeriveTraversable
-   | DeriveFoldable
-   | DeriveGeneric            -- Allow deriving Generic/1
-   | DefaultSignatures        -- Allow extra signatures for defmeths
-   | DeriveAnyClass           -- Allow deriving any class
-   | DeriveLift               -- Allow deriving Lift
-   | DerivingStrategies
-   | DerivingVia              -- Derive through equal representation
-
-   | TypeSynonymInstances
-   | FlexibleContexts
-   | FlexibleInstances
-   | ConstrainedClassMethods
-   | MultiParamTypeClasses
-   | NullaryTypeClasses
-   | FunctionalDependencies
-   | UnicodeSyntax
-   | ExistentialQuantification
-   | MagicHash
-   | EmptyDataDecls
-   | KindSignatures
-   | RoleAnnotations
-   | ParallelListComp
-   | TransformListComp
-   | MonadComprehensions
-   | GeneralizedNewtypeDeriving
-   | RecursiveDo
-   | PostfixOperators
-   | TupleSections
-   | PatternGuards
-   | LiberalTypeSynonyms
-   | RankNTypes
-   | ImpredicativeTypes
-   | TypeOperators
-   | ExplicitNamespaces
-   | PackageImports
-   | ExplicitForAll
-   | AlternativeLayoutRule
-   | AlternativeLayoutRuleTransitional
-   | DatatypeContexts
-   | NondecreasingIndentation
-   | RelaxedLayout
-   | TraditionalRecordSyntax
-   | LambdaCase
-   | MultiWayIf
-   | BinaryLiterals
-   | NegativeLiterals
-   | HexFloatLiterals
-   | DuplicateRecordFields
-   | OverloadedLabels
-   | EmptyCase
-   | PatternSynonyms
-   | PartialTypeSignatures
-   | NamedWildCards
-   | StaticPointers
-   | TypeApplications
-   | Strict
-   | StrictData
-   | EmptyDataDeriving
-   | NumericUnderscores
-   | QuantifiedConstraints
-   | StarIsType
-   | ImportQualifiedPost
-   | CUSKs
-   | StandaloneKindSignatures
-   | LexicalNegation
-   | FieldSelectors
-   | OverloadedRecordDot
-   | OverloadedRecordUpdate
-   | TypeAbstractions
-   | ExtendedLiterals
-   | ListTuplePuns
-   deriving (Eq, Enum, Show, Generic, Bounded)
--- 'Ord' and 'Bounded' are provided for GHC API users (see discussions
--- in https://gitlab.haskell.org/ghc/ghc/merge_requests/2707 and
--- https://gitlab.haskell.org/ghc/ghc/merge_requests/826).
-instance Ord Extension where compare a b = compare (fromEnum a) (fromEnum b)
+import GHC.Internal.LanguageExtensions
diff --git a/libraries/ghc-boot-th/GHC/Lexeme.hs b/libraries/ghc-boot-th/GHC/Lexeme.hs
index 09d83917d354db087d9c65db8c60500953d75d8d..1b896e1ab92a993da6af4f684b4e35e8bb60696c 100644
--- a/libraries/ghc-boot-th/GHC/Lexeme.hs
+++ b/libraries/ghc-boot-th/GHC/Lexeme.hs
@@ -1,3 +1,4 @@
+{-# LANGUAGE CPP #-}
 -----------------------------------------------------------------------------
 -- |
 -- Module      :  GHC.Lexeme
@@ -14,37 +15,4 @@ module GHC.Lexeme (
         startsVarSymASCII, isVarSymChar, okSymChar
   ) where
 
-import Prelude -- See note [Why do we import Prelude here?]
-import Data.Char
-
--- | Is this character acceptable in a symbol (after the first char)?
--- See alexGetByte in GHC.Parser.Lexer
-okSymChar :: Char -> Bool
-okSymChar c
-  | c `elem` "(),;[]`{}_\"'"
-  = False
-  | otherwise
-  = case generalCategory c of
-      ConnectorPunctuation -> True
-      DashPunctuation      -> True
-      OtherPunctuation     -> True
-      MathSymbol           -> True
-      CurrencySymbol       -> True
-      ModifierSymbol       -> True
-      OtherSymbol          -> True
-      _                    -> False
-
-startsVarSym, startsVarId, startsConSym, startsConId :: Char -> Bool
-startsVarSym c = okSymChar c && c /= ':' -- Infix Ids
-startsConSym c = c == ':'                -- Infix data constructors
-startsVarId c  = c == '_' || case generalCategory c of  -- Ordinary Ids
-  LowercaseLetter -> True
-  OtherLetter     -> True   -- See #1103
-  _               -> False
-startsConId c  = isUpper c || c == '('  -- Ordinary type constructors and data constructors
-
-startsVarSymASCII :: Char -> Bool
-startsVarSymASCII c = c `elem` "!#$%&*+./<=>?@\\^|~-"
-
-isVarSymChar :: Char -> Bool
-isVarSymChar c = c == ':' || startsVarSym c
+import GHC.Internal.Lexeme
diff --git a/libraries/ghc-boot-th/ghc-boot-th.cabal.in b/libraries/ghc-boot-th/ghc-boot-th.cabal.in
index d61f773310e1f92c0d11123026b69fc2923893f7..a47ef4816cfa31567ffdcae78bd62b6c10df2536 100644
--- a/libraries/ghc-boot-th/ghc-boot-th.cabal.in
+++ b/libraries/ghc-boot-th/ghc-boot-th.cabal.in
@@ -26,15 +26,49 @@ source-repository head
     location: https://gitlab.haskell.org/ghc/ghc.git
     subdir:   libraries/ghc-boot-th
 
+Flag bootstrap
+        Description:
+          Enabled when building the stage1 compiler in order to vendor the in-tree
+          `ghc-boot-th` library, and through that the in-tree TH AST defintions from
+          `ghc-internal`.
+          See Note [Bootstrapping Template Haskell]
+        Default: False
+        Manual: True
+
 Library
-    hs-source-dirs: @SourceRoot@
     default-language: Haskell2010
     other-extensions: DeriveGeneric
     default-extensions: NoImplicitPrelude
 
     exposed-modules:
-            GHC.LanguageExtensions.Type
             GHC.ForeignSrcLang.Type
+            GHC.Internal.TH.Lib.Map
+            GHC.Internal.TH.Ppr
+            GHC.Internal.TH.PprLib
+            GHC.LanguageExtensions.Type
             GHC.Lexeme
 
-    build-depends: base       >= 4.7 && < 4.21
+    build-depends:
+        base       >= 4.7 && < 4.21,
+        ghc-prim,
+        pretty      == 1.1.*
+
+    if flag(bootstrap)
+        cpp-options: -DBOOTSTRAP_TH
+        hs-source-dirs: @SourceRoot@ ../ghc-internal/src
+        exposed-modules:
+            GHC.Internal.TH.Lib
+            GHC.Internal.TH.Syntax
+        other-modules:
+            GHC.Internal.ForeignSrcLang
+            GHC.Internal.LanguageExtensions
+            GHC.Internal.Lexeme
+    else
+        hs-source-dirs: @SourceRoot@
+        build-depends:
+            ghc-internal
+        reexported-modules:
+            GHC.Internal.TH.Lib,
+            GHC.Internal.TH.Lift,
+            GHC.Internal.TH.Quote,
+            GHC.Internal.TH.Syntax
diff --git a/libraries/ghc-internal/ghc-internal.cabal b/libraries/ghc-internal/ghc-internal.cabal
index 290fd62975976aaf934ad6c318c57291b8c1cbf7..c971f098b6b902815035bf003e9ad99e41ec9960 100644
--- a/libraries/ghc-internal/ghc-internal.cabal
+++ b/libraries/ghc-internal/ghc-internal.cabal
@@ -100,6 +100,7 @@ Library
         GHC.Internal.Control.Monad
         GHC.Internal.Control.Monad.Fail
         GHC.Internal.Control.Monad.Fix
+        GHC.Internal.Control.Monad.IO.Class
         GHC.Internal.Control.Monad.ST
         GHC.Internal.Control.Monad.ST.Lazy
         GHC.Internal.Control.Monad.ST.Imp
@@ -160,6 +161,7 @@ Library
         GHC.Internal.Foreign.Ptr
         GHC.Internal.Foreign.StablePtr
         GHC.Internal.Foreign.Storable
+        GHC.Internal.ForeignSrcLang
         GHC.Internal.Arr
         GHC.Internal.ArrayArray
         GHC.Internal.Base
@@ -229,6 +231,8 @@ Library
         GHC.Internal.Integer.Logarithms
         GHC.Internal.IsList
         GHC.Internal.Ix
+        GHC.Internal.LanguageExtensions
+        GHC.Internal.Lexeme
         GHC.Internal.List
         GHC.Internal.Maybe
         GHC.Internal.MVar
@@ -255,6 +259,10 @@ Library
         GHC.Internal.Stack.Types
         GHC.Internal.Stats
         GHC.Internal.Storable
+        GHC.Internal.TH.Syntax
+        GHC.Internal.TH.Lib
+        GHC.Internal.TH.Lift
+        GHC.Internal.TH.Quote
         GHC.Internal.TopHandler
         GHC.Internal.TypeError
         GHC.Internal.TypeLits
diff --git a/libraries/ghc-internal/src/GHC/Internal/Base.hs b/libraries/ghc-internal/src/GHC/Internal/Base.hs
index 41cb422c6f8530d85316f1a59fb1ac4318c7195b..24071599e7980db30bfa505746e031d77e6a0efb 100644
--- a/libraries/ghc-internal/src/GHC/Internal/Base.hs
+++ b/libraries/ghc-internal/src/GHC/Internal/Base.hs
@@ -416,12 +416,15 @@ W3:
    * Do-notation introduces references to GHC.Internal.Base for Monad stuff.
      * Likewise arrow-notation to GHC.Internal.Control.Arrow
      * Likewise RecursiveDo stuff to GHC.Internal.Control.Monad.Fix
-   * (Does TemplateHaskellQuotes fall into this category as well?)
+   * TemplateHaskell quotes introduce references to GHC.Internal.TH.Lib.
 
-  These are not problematic in practice.  For example, a program
-  that uses arrow-notation but does not otherwise import the Arrow
-  type class will almost certainly fail to type-check anyway.
-  (The "Arrow m" constraint will be very hard to solve!)
+  These are not problematic in practice, because we do not make use of
+  overloaded notation during bootstrap of GHC. Yet! If in the future we
+  we decide to use TemplateHaskell in GHC or `ghc-internal`, we need to
+  add explicit imports. To demonstrate that these errors can occur, consider
+    e n = [| True |]
+  which compiles with -XTemplateHaskell *without* requiring the user to
+  import GHC.Internal.TH.Lib.
 
 W4:
   Stock derived instances introduce references to various things.
@@ -430,15 +433,12 @@ W4:
   as long as the module which defines Eq imports GHC.Magic this cannot
   cause trouble.
 
-  Things are a bit more complex for the Lift class (see #22229).
-  * Derived Lift instances refer to machinery in
-  Language.Haskell.TH.Lib.Internal, which is not imported by the module
-  Language.Haskell.TH.Lib.Syntax that defines the Lift class.
-  * Language.Haskell.TH.Lib.Internal imports Language.Haskell.TH.Lib.Syntax, so
-  we can't add the reverse dependency without using a .hs-boot file
-  * What we do instead is that we expose a module Language.Haskell.TH.Syntax
-  importing both Language.Haskell.TH.Lib.{Syntax,Internal). Users are expected
-  to import this module.
+  A similar solution concerns the deriving of Lift instances with
+  -XTemplateHaskell: A derived Lift instance must (transitively)
+  import GHC.Internal.TH.Lift, where the Lift class is defined.
+  The derived Lift instance references various identifiers in
+  GHC.Internal.TH.Lib, so it is an import of GHC.Internal.TH.Lift.
+
 
 W5:
   If no explicit "default" declaration is present, the assumed
diff --git a/libraries/ghc-internal/src/GHC/Internal/Control/Monad/IO/Class.hs b/libraries/ghc-internal/src/GHC/Internal/Control/Monad/IO/Class.hs
new file mode 100644
index 0000000000000000000000000000000000000000..3863ef9fea8afe54f485d3b60af1ef28f7f54d64
--- /dev/null
+++ b/libraries/ghc-internal/src/GHC/Internal/Control/Monad/IO/Class.hs
@@ -0,0 +1,74 @@
+{-# LANGUAGE Trustworthy #-}
+
+-----------------------------------------------------------------------------
+-- |
+-- Module      :  GHC.Internal.Control.Monad.IO.Class
+-- Copyright   :  (c) Andy Gill 2001,
+--                (c) Oregon Graduate Institute of Science and Technology, 2001
+-- License     :  BSD-style (see the file LICENSE)
+--
+-- Maintainer  :  R.Paterson@city.ac.uk
+-- Stability   :  stable
+-- Portability :  portable
+--
+-- Class of monads based on @IO@.
+-----------------------------------------------------------------------------
+
+module GHC.Internal.Control.Monad.IO.Class (
+    MonadIO(..)
+  ) where
+
+import GHC.Internal.Base
+
+-- | Monads in which 'IO' computations may be embedded.
+-- Any monad built by applying a sequence of monad transformers to the
+-- 'IO' monad will be an instance of this class.
+--
+-- Instances should satisfy the following laws, which state that 'liftIO'
+-- is a transformer of monads:
+--
+-- * @'liftIO' . 'return' = 'return'@
+--
+-- * @'liftIO' (m >>= f) = 'liftIO' m >>= ('liftIO' . f)@
+
+class (Monad m) => MonadIO m where
+    -- | Lift a computation from the 'IO' monad.
+    -- This allows us to run IO computations in any monadic stack, so long as it supports these kinds of operations
+    -- (i.e. 'IO' is the base monad for the stack).
+    --
+    -- === __Example__
+    --
+    --
+    -- > import Control.Monad.Trans.State -- from the "transformers" library
+    -- >
+    -- > printState :: Show s => StateT s IO ()
+    -- > printState = do
+    -- >   state <- get
+    -- >   liftIO $ print state
+    --
+    --
+    -- Had we omitted @'liftIO'@, we would have ended up with this error:
+    --
+    -- > • Couldn't match type ‘IO’ with ‘StateT s IO’
+    -- >  Expected type: StateT s IO ()
+    -- >    Actual type: IO ()
+    --
+    -- The important part here is the mismatch between @StateT s IO ()@ and @'IO' ()@.
+    --
+    -- Luckily, we know of a function that takes an @'IO' a@ and returns an @(m a)@: @'liftIO'@,
+    -- enabling us to run the program and see the expected results:
+    --
+    -- @
+    -- > evalStateT printState "hello"
+    -- "hello"
+    --
+    -- > evalStateT printState 3
+    -- 3
+    -- @
+    --
+    liftIO :: IO a -> m a
+
+-- | @since base-4.9.0.0
+instance MonadIO IO where
+    liftIO = id
+
diff --git a/libraries/ghc-internal/src/GHC/Internal/ForeignSrcLang.hs b/libraries/ghc-internal/src/GHC/Internal/ForeignSrcLang.hs
new file mode 100644
index 0000000000000000000000000000000000000000..578acca17d0022a894bac889298eec6a2d7c7c88
--- /dev/null
+++ b/libraries/ghc-internal/src/GHC/Internal/ForeignSrcLang.hs
@@ -0,0 +1,25 @@
+{-# LANGUAGE CPP #-}
+{-# LANGUAGE DeriveGeneric #-}
+module GHC.Internal.ForeignSrcLang
+  ( ForeignSrcLang(..)
+  ) where
+
+#ifdef BOOTSTRAP_TH
+import Prelude -- See note [Why do we import Prelude here?]
+import GHC.Generics (Generic)
+#else
+import GHC.Internal.Base
+import GHC.Internal.Show
+import GHC.Internal.Generics
+#endif
+
+-- | Foreign formats supported by GHC via TH
+data ForeignSrcLang
+  = LangC      -- ^ C
+  | LangCxx    -- ^ C++
+  | LangObjc   -- ^ Objective C
+  | LangObjcxx -- ^ Objective C++
+  | LangAsm    -- ^ Assembly language (.s)
+  | LangJs     -- ^ JavaScript
+  | RawObject  -- ^ Object (.o)
+  deriving (Eq, Show, Generic)
diff --git a/libraries/ghc-internal/src/GHC/Internal/LanguageExtensions.hs b/libraries/ghc-internal/src/GHC/Internal/LanguageExtensions.hs
new file mode 100644
index 0000000000000000000000000000000000000000..d2fc5d903697e1142fe592f7da78c53934827244
--- /dev/null
+++ b/libraries/ghc-internal/src/GHC/Internal/LanguageExtensions.hs
@@ -0,0 +1,169 @@
+-----------------------------------------------------------------------------
+-- |
+-- Module      :  GHC.Internal.LanguageExtensions
+-- Copyright   :  (c) The GHC Team
+--
+-- Maintainer  :  ghc-devs@haskell.org
+-- Portability :  portable
+--
+-- A data type defining the language extensions supported by GHC.
+--
+{-# LANGUAGE DeriveGeneric, CPP, Trustworthy #-}
+module GHC.Internal.LanguageExtensions ( Extension(..) ) where
+
+#ifdef BOOTSTRAP_TH
+import Prelude -- See note [Why do we import Prelude here?]
+import GHC.Generics (Generic)
+#else
+import GHC.Internal.Base
+import GHC.Internal.Show
+import GHC.Internal.Generics
+import GHC.Internal.Data.Enum
+#endif
+
+-- | The language extensions known to GHC.
+--
+-- Note that there is an orphan 'Binary' instance for this type supplied by
+-- the "GHC.LanguageExtensions" module provided by @ghc-boot@. We can't provide
+-- here as this would require adding transitive dependencies to the
+-- @template-haskell@ package, which must have a minimal dependency set.
+data Extension
+-- See Note [Updating flag description in the User's Guide] in
+-- GHC.Driver.Session
+   = Cpp
+   | OverlappingInstances
+   | UndecidableInstances
+   | IncoherentInstances
+   | UndecidableSuperClasses
+   | MonomorphismRestriction
+   | MonoLocalBinds
+   | DeepSubsumption
+   | RelaxedPolyRec           -- Deprecated
+   | ExtendedDefaultRules     -- Use GHC's extended rules for defaulting
+   | ForeignFunctionInterface
+   | UnliftedFFITypes
+   | InterruptibleFFI
+   | CApiFFI
+   | GHCForeignImportPrim
+   | JavaScriptFFI
+   | ParallelArrays           -- Syntactic support for parallel arrays
+   | Arrows                   -- Arrow-notation syntax
+   | TemplateHaskell
+   | TemplateHaskellQuotes    -- subset of TH supported by stage1, no splice
+   | QualifiedDo
+   | QuasiQuotes
+   | ImplicitParams
+   | ImplicitPrelude
+   | ScopedTypeVariables
+   | AllowAmbiguousTypes
+   | UnboxedTuples
+   | UnboxedSums
+   | UnliftedNewtypes
+   | UnliftedDatatypes
+   | BangPatterns
+   | TypeFamilies
+   | TypeFamilyDependencies
+   | TypeInType               -- Deprecated
+   | OverloadedStrings
+   | OverloadedLists
+   | NumDecimals
+   | DisambiguateRecordFields
+   | RecordWildCards
+   | NamedFieldPuns
+   | ViewPatterns
+   | GADTs
+   | GADTSyntax
+   | NPlusKPatterns
+   | DoAndIfThenElse
+   | BlockArguments
+   | RebindableSyntax
+   | ConstraintKinds
+   | PolyKinds                -- Kind polymorphism
+   | DataKinds                -- Datatype promotion
+   | TypeData                 -- allow @type data@ definitions
+   | InstanceSigs
+   | ApplicativeDo
+   | LinearTypes
+   | RequiredTypeArguments    -- Visible forall (VDQ) in types of terms
+
+   | StandaloneDeriving
+   | DeriveDataTypeable
+   | AutoDeriveTypeable       -- Automatic derivation of Typeable
+   | DeriveFunctor
+   | DeriveTraversable
+   | DeriveFoldable
+   | DeriveGeneric            -- Allow deriving Generic/1
+   | DefaultSignatures        -- Allow extra signatures for defmeths
+   | DeriveAnyClass           -- Allow deriving any class
+   | DeriveLift               -- Allow deriving Lift
+   | DerivingStrategies
+   | DerivingVia              -- Derive through equal representation
+
+   | TypeSynonymInstances
+   | FlexibleContexts
+   | FlexibleInstances
+   | ConstrainedClassMethods
+   | MultiParamTypeClasses
+   | NullaryTypeClasses
+   | FunctionalDependencies
+   | UnicodeSyntax
+   | ExistentialQuantification
+   | MagicHash
+   | EmptyDataDecls
+   | KindSignatures
+   | RoleAnnotations
+   | ParallelListComp
+   | TransformListComp
+   | MonadComprehensions
+   | GeneralizedNewtypeDeriving
+   | RecursiveDo
+   | PostfixOperators
+   | TupleSections
+   | PatternGuards
+   | LiberalTypeSynonyms
+   | RankNTypes
+   | ImpredicativeTypes
+   | TypeOperators
+   | ExplicitNamespaces
+   | PackageImports
+   | ExplicitForAll
+   | AlternativeLayoutRule
+   | AlternativeLayoutRuleTransitional
+   | DatatypeContexts
+   | NondecreasingIndentation
+   | RelaxedLayout
+   | TraditionalRecordSyntax
+   | LambdaCase
+   | MultiWayIf
+   | BinaryLiterals
+   | NegativeLiterals
+   | HexFloatLiterals
+   | DuplicateRecordFields
+   | OverloadedLabels
+   | EmptyCase
+   | PatternSynonyms
+   | PartialTypeSignatures
+   | NamedWildCards
+   | StaticPointers
+   | TypeApplications
+   | Strict
+   | StrictData
+   | EmptyDataDeriving
+   | NumericUnderscores
+   | QuantifiedConstraints
+   | StarIsType
+   | ImportQualifiedPost
+   | CUSKs
+   | StandaloneKindSignatures
+   | LexicalNegation
+   | FieldSelectors
+   | OverloadedRecordDot
+   | OverloadedRecordUpdate
+   | TypeAbstractions
+   | ExtendedLiterals
+   | ListTuplePuns
+   deriving (Eq, Enum, Show, Generic, Bounded)
+-- 'Ord' and 'Bounded' are provided for GHC API users (see discussions
+-- in https://gitlab.haskell.org/ghc/ghc/merge_requests/2707 and
+-- https://gitlab.haskell.org/ghc/ghc/merge_requests/826).
+instance Ord Extension where compare a b = compare (fromEnum a) (fromEnum b)
diff --git a/libraries/ghc-internal/src/GHC/Internal/Lexeme.hs b/libraries/ghc-internal/src/GHC/Internal/Lexeme.hs
new file mode 100644
index 0000000000000000000000000000000000000000..0d9c967c8274bcd8614793c1f13572be7e4af5b3
--- /dev/null
+++ b/libraries/ghc-internal/src/GHC/Internal/Lexeme.hs
@@ -0,0 +1,57 @@
+{-# LANGUAGE CPP #-}
+-----------------------------------------------------------------------------
+-- |
+-- Module      :  GHC.Internal.Lexeme
+-- Copyright   :  (c) The GHC Team
+--
+-- Maintainer  :  ghc-devs@haskell.org
+-- Portability :  portable
+--
+-- Functions to evaluate whether or not a string is a valid identifier.
+--
+module GHC.Internal.Lexeme (
+          -- * Lexical characteristics of Haskell names
+        startsVarSym, startsVarId, startsConSym, startsConId,
+        startsVarSymASCII, isVarSymChar, okSymChar
+  ) where
+
+#ifdef BOOTSTRAP_TH
+import Prelude -- See note [Why do we import Prelude here?]
+import Data.Char
+#else
+import GHC.Internal.Base
+import GHC.Internal.Unicode
+import GHC.Internal.List (elem)
+#endif
+
+-- | Is this character acceptable in a symbol (after the first char)?
+-- See alexGetByte in GHC.Parser.Lexer
+okSymChar :: Char -> Bool
+okSymChar c
+  | c `elem` "(),;[]`{}_\"'"
+  = False
+  | otherwise
+  = case generalCategory c of
+      ConnectorPunctuation -> True
+      DashPunctuation      -> True
+      OtherPunctuation     -> True
+      MathSymbol           -> True
+      CurrencySymbol       -> True
+      ModifierSymbol       -> True
+      OtherSymbol          -> True
+      _                    -> False
+
+startsVarSym, startsVarId, startsConSym, startsConId :: Char -> Bool
+startsVarSym c = okSymChar c && c /= ':' -- Infix Ids
+startsConSym c = c == ':'                -- Infix data constructors
+startsVarId c  = c == '_' || case generalCategory c of  -- Ordinary Ids
+  LowercaseLetter -> True
+  OtherLetter     -> True   -- See #1103
+  _               -> False
+startsConId c  = isUpper c || c == '('  -- Ordinary type constructors and data constructors
+
+startsVarSymASCII :: Char -> Bool
+startsVarSymASCII c = c `elem` "!#$%&*+./<=>?@\\^|~-"
+
+isVarSymChar :: Char -> Bool
+isVarSymChar c = c == ':' || startsVarSym c
diff --git a/libraries/ghc-internal/src/GHC/Internal/TH/Lib.hs b/libraries/ghc-internal/src/GHC/Internal/TH/Lib.hs
new file mode 100644
index 0000000000000000000000000000000000000000..28e6c8040b0d9b6dee9272e417f11512728e580c
--- /dev/null
+++ b/libraries/ghc-internal/src/GHC/Internal/TH/Lib.hs
@@ -0,0 +1,1251 @@
+{-# OPTIONS_HADDOCK not-home #-}
+{-# LANGUAGE CPP #-}
+{-# LANGUAGE PolyKinds #-}
+{-# LANGUAGE StandaloneKindSignatures #-}
+{-# LANGUAGE Trustworthy #-}
+
+-- |
+-- GHC.Internal.TH.Lib exposes some additional functionality that
+-- is used internally in GHC's integration with Template Haskell. This is not a
+-- part of the public API, and as such, there are no API guarantees for this
+-- module from version to version.
+
+-- Why do we have both GHC.Internal.TH.Lib and
+-- Language.Haskell.TH.Lib? Ultimately, it's because the functions in the
+-- former (which are tailored for GHC's use) need different type signatures
+-- than the ones in the latter. Syncing up the Internal type signatures would
+-- involve a massive amount of breaking changes, so for the time being, we
+-- relegate as many changes as we can to just the Internal module, where it
+-- is safe to break things.
+
+module GHC.Internal.TH.Lib where
+
+import GHC.Internal.TH.Syntax hiding (Role, InjectivityAnn)
+import qualified GHC.Internal.TH.Syntax as TH
+#ifdef BOOTSTRAP_TH
+import Control.Applicative(liftA, Applicative(..))
+import qualified Data.Kind as Kind (Type)
+import Data.Word( Word8 )
+import Data.List.NonEmpty ( NonEmpty(..) )
+import GHC.Exts (TYPE)
+import Prelude hiding (Applicative(..))
+#else
+import GHC.Internal.Base hiding (Type, Module, inline)
+import GHC.Internal.Data.Foldable
+import GHC.Internal.Data.Functor
+import GHC.Internal.Data.Maybe
+import GHC.Internal.Data.Traversable (traverse, sequenceA)
+import GHC.Internal.Integer
+import GHC.Internal.List (zip)
+import GHC.Internal.Real
+import GHC.Internal.Show
+import GHC.Internal.Word
+import qualified GHC.Types as Kind (Type)
+#endif
+
+----------------------------------------------------------
+-- * Type synonyms
+----------------------------------------------------------
+
+-- | Representation-polymorphic since /template-haskell-2.17.0.0/.
+type TExpQ :: TYPE r -> Kind.Type
+type TExpQ a = Q (TExp a)
+
+type CodeQ :: TYPE r -> Kind.Type
+type CodeQ = Code Q
+
+type InfoQ               = Q Info
+type PatQ                = Q Pat
+type FieldPatQ           = Q FieldPat
+type ExpQ                = Q Exp
+type DecQ                = Q Dec
+type DecsQ               = Q [Dec]
+type Decs                = [Dec] -- Defined as it is more convenient to wire-in
+type ConQ                = Q Con
+type TypeQ               = Q Type
+type KindQ               = Q Kind
+type TyLitQ              = Q TyLit
+type CxtQ                = Q Cxt
+type PredQ               = Q Pred
+type DerivClauseQ        = Q DerivClause
+type MatchQ              = Q Match
+type ClauseQ             = Q Clause
+type BodyQ               = Q Body
+type GuardQ              = Q Guard
+type StmtQ               = Q Stmt
+type RangeQ              = Q Range
+type SourceStrictnessQ   = Q SourceStrictness
+type SourceUnpackednessQ = Q SourceUnpackedness
+type BangQ               = Q Bang
+type BangTypeQ           = Q BangType
+type VarBangTypeQ        = Q VarBangType
+type StrictTypeQ         = Q StrictType
+type VarStrictTypeQ      = Q VarStrictType
+type FieldExpQ           = Q FieldExp
+type RuleBndrQ           = Q RuleBndr
+type TySynEqnQ           = Q TySynEqn
+type PatSynDirQ          = Q PatSynDir
+type PatSynArgsQ         = Q PatSynArgs
+type FamilyResultSigQ    = Q FamilyResultSig
+type DerivStrategyQ      = Q DerivStrategy
+
+-- must be defined here for DsMeta to find it
+type Role                = TH.Role
+type InjectivityAnn      = TH.InjectivityAnn
+
+type TyVarBndrUnit       = TyVarBndr ()
+type TyVarBndrSpec       = TyVarBndr Specificity
+type TyVarBndrVis        = TyVarBndr BndrVis
+
+----------------------------------------------------------
+-- * Lowercase pattern syntax functions
+----------------------------------------------------------
+
+intPrimL    :: Integer -> Lit
+intPrimL    = IntPrimL
+wordPrimL    :: Integer -> Lit
+wordPrimL    = WordPrimL
+floatPrimL  :: Rational -> Lit
+floatPrimL  = FloatPrimL
+doublePrimL :: Rational -> Lit
+doublePrimL = DoublePrimL
+integerL    :: Integer -> Lit
+integerL    = IntegerL
+charL       :: Char -> Lit
+charL       = CharL
+charPrimL   :: Char -> Lit
+charPrimL   = CharPrimL
+stringL     :: String -> Lit
+stringL     = StringL
+stringPrimL :: [Word8] -> Lit
+stringPrimL = StringPrimL
+bytesPrimL :: Bytes -> Lit
+bytesPrimL = BytesPrimL
+rationalL   :: Rational -> Lit
+rationalL   = RationalL
+
+litP :: Quote m => Lit -> m Pat
+litP l = pure (LitP l)
+
+varP :: Quote m => Name -> m Pat
+varP v = pure (VarP v)
+
+tupP :: Quote m => [m Pat] -> m Pat
+tupP ps = do { ps1 <- sequenceA ps; pure (TupP ps1)}
+
+unboxedTupP :: Quote m => [m Pat] -> m Pat
+unboxedTupP ps = do { ps1 <- sequenceA ps; pure (UnboxedTupP ps1)}
+
+unboxedSumP :: Quote m => m Pat -> SumAlt -> SumArity -> m Pat
+unboxedSumP p alt arity = do { p1 <- p; pure (UnboxedSumP p1 alt arity) }
+
+conP :: Quote m => Name -> [m Type] -> [m Pat] -> m Pat
+conP n ts ps = do ps' <- sequenceA ps
+                  ts' <- sequenceA ts
+                  pure (ConP n ts' ps')
+infixP :: Quote m => m Pat -> Name -> m Pat -> m Pat
+infixP p1 n p2 = do p1' <- p1
+                    p2' <- p2
+                    pure (InfixP p1' n p2')
+uInfixP :: Quote m => m Pat -> Name -> m Pat -> m Pat
+uInfixP p1 n p2 = do p1' <- p1
+                     p2' <- p2
+                     pure (UInfixP p1' n p2')
+parensP :: Quote m => m Pat -> m Pat
+parensP p = do p' <- p
+               pure (ParensP p')
+
+tildeP :: Quote m => m Pat -> m Pat
+tildeP p = do p' <- p
+              pure (TildeP p')
+bangP :: Quote m => m Pat -> m Pat
+bangP p = do p' <- p
+             pure (BangP p')
+asP :: Quote m => Name -> m Pat -> m Pat
+asP n p = do p' <- p
+             pure (AsP n p')
+wildP :: Quote m => m Pat
+wildP = pure WildP
+recP :: Quote m => Name -> [m FieldPat] -> m Pat
+recP n fps = do fps' <- sequenceA fps
+                pure (RecP n fps')
+listP :: Quote m => [m Pat] -> m Pat
+listP ps = do ps' <- sequenceA ps
+              pure (ListP ps')
+sigP :: Quote m => m Pat -> m Type -> m Pat
+sigP p t = do p' <- p
+              t' <- t
+              pure (SigP p' t')
+typeP :: Quote m => m Type -> m Pat
+typeP t = do t' <- t
+             pure (TypeP t')
+invisP :: Quote m => m Type -> m Pat
+invisP t = do t' <- t
+              pure (InvisP t')
+viewP :: Quote m => m Exp -> m Pat -> m Pat
+viewP e p = do e' <- e
+               p' <- p
+               pure (ViewP e' p')
+
+
+fieldPat :: Quote m => Name -> m Pat -> m FieldPat
+fieldPat n p = do p' <- p
+                  pure (n, p')
+
+
+-------------------------------------------------------------------------------
+-- *   Stmt
+
+bindS :: Quote m => m Pat -> m Exp -> m Stmt
+bindS p e = liftA2 BindS p e
+
+letS :: Quote m => [m Dec] -> m Stmt
+letS ds = do { ds1 <- sequenceA ds; pure (LetS ds1) }
+
+noBindS :: Quote m => m Exp -> m Stmt
+noBindS e = do { e1 <- e; pure (NoBindS e1) }
+
+parS :: Quote m => [[m Stmt]] -> m Stmt
+parS sss = do { sss1 <- traverse sequenceA sss; pure (ParS sss1) }
+
+recS :: Quote m => [m Stmt] -> m Stmt
+recS ss = do { ss1 <- sequenceA ss; pure (RecS ss1) }
+
+-------------------------------------------------------------------------------
+-- *   Range
+
+fromR :: Quote m => m Exp -> m Range
+fromR x = do { a <- x; pure (FromR a) }
+
+fromThenR :: Quote m => m Exp -> m Exp -> m Range
+fromThenR x y = do { a <- x; b <- y; pure (FromThenR a b) }
+
+fromToR :: Quote m => m Exp -> m Exp -> m Range
+fromToR x y = do { a <- x; b <- y; pure (FromToR a b) }
+
+fromThenToR :: Quote m => m Exp -> m Exp -> m Exp -> m Range
+fromThenToR x y z = do { a <- x; b <- y; c <- z;
+                         pure (FromThenToR a b c) }
+-------------------------------------------------------------------------------
+-- *   Body
+
+normalB :: Quote m => m Exp -> m Body
+normalB e = do { e1 <- e; pure (NormalB e1) }
+
+guardedB :: Quote m => [m (Guard,Exp)] -> m Body
+guardedB ges = do { ges' <- sequenceA ges; pure (GuardedB ges') }
+
+-------------------------------------------------------------------------------
+-- *   Guard
+
+normalG :: Quote m => m Exp -> m Guard
+normalG e = do { e1 <- e; pure (NormalG e1) }
+
+normalGE :: Quote m => m Exp -> m Exp -> m (Guard, Exp)
+normalGE g e = do { g1 <- g; e1 <- e; pure (NormalG g1, e1) }
+
+patG :: Quote m => [m Stmt] -> m Guard
+patG ss = do { ss' <- sequenceA ss; pure (PatG ss') }
+
+patGE :: Quote m => [m Stmt] -> m Exp -> m (Guard, Exp)
+patGE ss e = do { ss' <- sequenceA ss;
+                  e'  <- e;
+                  pure (PatG ss', e') }
+
+-------------------------------------------------------------------------------
+-- *   Match and Clause
+
+-- | Use with 'caseE'
+match :: Quote m => m Pat -> m Body -> [m Dec] -> m Match
+match p rhs ds = do { p' <- p;
+                      r' <- rhs;
+                      ds' <- sequenceA ds;
+                      pure (Match p' r' ds') }
+
+-- | Use with 'funD'
+clause :: Quote m => [m Pat] -> m Body -> [m Dec] -> m Clause
+clause ps r ds = do { ps' <- sequenceA ps;
+                      r' <- r;
+                      ds' <- sequenceA ds;
+                      pure (Clause ps' r' ds') }
+
+---------------------------------------------------------------------------
+-- *   Exp
+
+-- | Dynamically binding a variable (unhygienic)
+dyn :: Quote m => String -> m Exp
+dyn s = pure (VarE (mkName s))
+
+varE :: Quote m => Name -> m Exp
+varE s = pure (VarE s)
+
+conE :: Quote m => Name -> m Exp
+conE s =  pure (ConE s)
+
+litE :: Quote m => Lit -> m Exp
+litE c = pure (LitE c)
+
+appE :: Quote m => m Exp -> m Exp -> m Exp
+appE x y = do { a <- x; b <- y; pure (AppE a b)}
+
+appTypeE :: Quote m => m Exp -> m Type -> m Exp
+appTypeE x t = do { a <- x; s <- t; pure (AppTypeE a s) }
+
+parensE :: Quote m => m Exp -> m Exp
+parensE x = do { x' <- x; pure (ParensE x') }
+
+uInfixE :: Quote m => m Exp -> m Exp -> m Exp -> m Exp
+uInfixE x s y = do { x' <- x; s' <- s; y' <- y;
+                     pure (UInfixE x' s' y') }
+
+infixE :: Quote m => Maybe (m Exp) -> m Exp -> Maybe (m Exp) -> m Exp
+infixE (Just x) s (Just y) = do { a <- x; s' <- s; b <- y;
+                                  pure (InfixE (Just a) s' (Just b))}
+infixE Nothing  s (Just y) = do { s' <- s; b <- y;
+                                  pure (InfixE Nothing s' (Just b))}
+infixE (Just x) s Nothing  = do { a <- x; s' <- s;
+                                  pure (InfixE (Just a) s' Nothing)}
+infixE Nothing  s Nothing  = do { s' <- s; pure (InfixE Nothing s' Nothing) }
+
+infixApp :: Quote m => m Exp -> m Exp -> m Exp -> m Exp
+infixApp x y z = infixE (Just x) y (Just z)
+sectionL :: Quote m => m Exp -> m Exp -> m Exp
+sectionL x y = infixE (Just x) y Nothing
+sectionR :: Quote m => m Exp -> m Exp -> m Exp
+sectionR x y = infixE Nothing x (Just y)
+
+lamE :: Quote m => [m Pat] -> m Exp -> m Exp
+lamE ps e = do ps' <- sequenceA ps
+               e' <- e
+               pure (LamE ps' e')
+
+-- | Single-arg lambda
+lam1E :: Quote m => m Pat -> m Exp -> m Exp
+lam1E p e = lamE [p] e
+
+-- | Lambda-case (@\case@)
+lamCaseE :: Quote m => [m Match] -> m Exp
+lamCaseE ms = LamCaseE <$> sequenceA ms
+
+-- | Lambda-cases (@\cases@)
+lamCasesE :: Quote m => [m Clause] -> m Exp
+lamCasesE ms = LamCasesE <$> sequenceA ms
+
+tupE :: Quote m => [Maybe (m Exp)] -> m Exp
+tupE es = do { es1 <- traverse sequenceA es; pure (TupE es1)}
+
+unboxedTupE :: Quote m => [Maybe (m Exp)] -> m Exp
+unboxedTupE es = do { es1 <- traverse sequenceA es; pure (UnboxedTupE es1)}
+
+unboxedSumE :: Quote m => m Exp -> SumAlt -> SumArity -> m Exp
+unboxedSumE e alt arity = do { e1 <- e; pure (UnboxedSumE e1 alt arity) }
+
+condE :: Quote m => m Exp -> m Exp -> m Exp -> m Exp
+condE x y z =  do { a <- x; b <- y; c <- z; pure (CondE a b c)}
+
+multiIfE :: Quote m => [m (Guard, Exp)] -> m Exp
+multiIfE alts = MultiIfE <$> sequenceA alts
+
+letE :: Quote m => [m Dec] -> m Exp -> m Exp
+letE ds e = do { ds2 <- sequenceA ds; e2 <- e; pure (LetE ds2 e2) }
+
+caseE :: Quote m => m Exp -> [m Match] -> m Exp
+caseE e ms = do { e1 <- e; ms1 <- sequenceA ms; pure (CaseE e1 ms1) }
+
+doE :: Quote m => Maybe ModName -> [m Stmt] -> m Exp
+doE m ss = do { ss1 <- sequenceA ss; pure (DoE m ss1) }
+
+mdoE :: Quote m => Maybe ModName -> [m Stmt] -> m Exp
+mdoE m ss = do { ss1 <- sequenceA ss; pure (MDoE m ss1) }
+
+compE :: Quote m => [m Stmt] -> m Exp
+compE ss = do { ss1 <- sequenceA ss; pure (CompE ss1) }
+
+arithSeqE :: Quote m => m Range -> m Exp
+arithSeqE r = do { r' <- r; pure (ArithSeqE r') }
+
+listE :: Quote m => [m Exp] -> m Exp
+listE es = do { es1 <- sequenceA es; pure (ListE es1) }
+
+sigE :: Quote m => m Exp -> m Type -> m Exp
+sigE e t = do { e1 <- e; t1 <- t; pure (SigE e1 t1) }
+
+recConE :: Quote m => Name -> [m (Name,Exp)] -> m Exp
+recConE c fs = do { flds <- sequenceA fs; pure (RecConE c flds) }
+
+recUpdE :: Quote m => m Exp -> [m (Name,Exp)] -> m Exp
+recUpdE e fs = do { e1 <- e; flds <- sequenceA fs; pure (RecUpdE e1 flds) }
+
+stringE :: Quote m => String -> m Exp
+stringE = litE . stringL
+
+fieldExp :: Quote m => Name -> m Exp -> m (Name, Exp)
+fieldExp s e = do { e' <- e; pure (s,e') }
+
+-- | @staticE x = [| static x |]@
+staticE :: Quote m => m Exp -> m Exp
+staticE = fmap StaticE
+
+unboundVarE :: Quote m => Name -> m Exp
+unboundVarE s = pure (UnboundVarE s)
+
+labelE :: Quote m => String -> m Exp
+labelE s = pure (LabelE s)
+
+implicitParamVarE :: Quote m => String -> m Exp
+implicitParamVarE n = pure (ImplicitParamVarE n)
+
+getFieldE :: Quote m => m Exp -> String -> m Exp
+getFieldE e f = do
+  e' <- e
+  pure (GetFieldE e' f)
+
+projectionE :: Quote m => NonEmpty String -> m Exp
+projectionE xs = pure (ProjectionE xs)
+
+typedSpliceE :: Quote m => m Exp -> m Exp
+typedSpliceE = fmap TypedSpliceE
+
+typedBracketE :: Quote m => m Exp -> m Exp
+typedBracketE = fmap TypedBracketE
+
+-- ** 'arithSeqE' Shortcuts
+fromE :: Quote m => m Exp -> m Exp
+fromE x = do { a <- x; pure (ArithSeqE (FromR a)) }
+
+fromThenE :: Quote m => m Exp -> m Exp -> m Exp
+fromThenE x y = do { a <- x; b <- y; pure (ArithSeqE (FromThenR a b)) }
+
+fromToE :: Quote m => m Exp -> m Exp -> m Exp
+fromToE x y = do { a <- x; b <- y; pure (ArithSeqE (FromToR a b)) }
+
+fromThenToE :: Quote m => m Exp -> m Exp -> m Exp -> m Exp
+fromThenToE x y z = do { a <- x; b <- y; c <- z;
+                         pure (ArithSeqE (FromThenToR a b c)) }
+
+typeE :: Quote m => m Type -> m Exp
+typeE = fmap TypeE
+
+-------------------------------------------------------------------------------
+-- *   Dec
+
+valD :: Quote m => m Pat -> m Body -> [m Dec] -> m Dec
+valD p b ds =
+  do { p' <- p
+     ; ds' <- sequenceA ds
+     ; b' <- b
+     ; pure (ValD p' b' ds')
+     }
+
+funD :: Quote m => Name -> [m Clause] -> m Dec
+funD nm cs =
+ do { cs1 <- sequenceA cs
+    ; pure (FunD nm cs1)
+    }
+
+tySynD :: Quote m => Name -> [m (TyVarBndr BndrVis)] -> m Type -> m Dec
+tySynD tc tvs rhs =
+  do { tvs1 <- sequenceA tvs
+     ; rhs1 <- rhs
+     ; pure (TySynD tc tvs1 rhs1)
+     }
+
+dataD :: Quote m => m Cxt -> Name -> [m (TyVarBndr BndrVis)] -> Maybe (m Kind) -> [m Con]
+      -> [m DerivClause] -> m Dec
+dataD ctxt tc tvs ksig cons derivs =
+  do
+    ctxt1   <- ctxt
+    tvs1    <- sequenceA tvs
+    ksig1   <- sequenceA ksig
+    cons1   <- sequenceA cons
+    derivs1 <- sequenceA derivs
+    pure (DataD ctxt1 tc tvs1 ksig1 cons1 derivs1)
+
+newtypeD :: Quote m => m Cxt -> Name -> [m (TyVarBndr BndrVis)] -> Maybe (m Kind) -> m Con
+         -> [m DerivClause] -> m Dec
+newtypeD ctxt tc tvs ksig con derivs =
+  do
+    ctxt1   <- ctxt
+    tvs1    <- sequenceA tvs
+    ksig1   <- sequenceA ksig
+    con1    <- con
+    derivs1 <- sequenceA derivs
+    pure (NewtypeD ctxt1 tc tvs1 ksig1 con1 derivs1)
+
+typeDataD :: Quote m => Name -> [m (TyVarBndr BndrVis)] -> Maybe (m Kind) -> [m Con]
+      -> m Dec
+typeDataD tc tvs ksig cons =
+  do
+    tvs1    <- sequenceA tvs
+    ksig1   <- sequenceA ksig
+    cons1   <- sequenceA cons
+    pure (TypeDataD tc tvs1 ksig1 cons1)
+
+classD :: Quote m => m Cxt -> Name -> [m (TyVarBndr BndrVis)] -> [FunDep] -> [m Dec] -> m Dec
+classD ctxt cls tvs fds decs =
+  do
+    tvs1  <- sequenceA tvs
+    decs1 <- sequenceA decs
+    ctxt1 <- ctxt
+    pure $ ClassD ctxt1 cls tvs1 fds decs1
+
+instanceD :: Quote m => m Cxt -> m Type -> [m Dec] -> m Dec
+instanceD = instanceWithOverlapD Nothing
+
+instanceWithOverlapD :: Quote m => Maybe Overlap -> m Cxt -> m Type -> [m Dec] -> m Dec
+instanceWithOverlapD o ctxt ty decs =
+  do
+    ctxt1 <- ctxt
+    decs1 <- sequenceA decs
+    ty1   <- ty
+    pure $ InstanceD o ctxt1 ty1 decs1
+
+
+
+sigD :: Quote m => Name -> m Type -> m Dec
+sigD fun ty = liftA (SigD fun) $ ty
+
+kiSigD :: Quote m => Name -> m Kind -> m Dec
+kiSigD fun ki = liftA (KiSigD fun) $ ki
+
+forImpD :: Quote m => Callconv -> Safety -> String -> Name -> m Type -> m Dec
+forImpD cc s str n ty
+ = do ty' <- ty
+      pure $ ForeignD (ImportF cc s str n ty')
+
+infixLD :: Quote m => Int -> Name -> m Dec
+infixLD prec = infixLWithSpecD prec NoNamespaceSpecifier
+
+infixRD :: Quote m => Int -> Name -> m Dec
+infixRD prec = infixRWithSpecD prec NoNamespaceSpecifier
+
+infixND :: Quote m => Int -> Name -> m Dec
+infixND prec = infixNWithSpecD prec NoNamespaceSpecifier
+
+infixLWithSpecD :: Quote m => Int -> NamespaceSpecifier -> Name -> m Dec
+infixLWithSpecD prec ns_spec nm = pure (InfixD (Fixity prec InfixL) ns_spec nm)
+
+infixRWithSpecD :: Quote m => Int -> NamespaceSpecifier -> Name -> m Dec
+infixRWithSpecD prec ns_spec nm = pure (InfixD (Fixity prec InfixR) ns_spec nm)
+
+infixNWithSpecD :: Quote m => Int -> NamespaceSpecifier -> Name -> m Dec
+infixNWithSpecD prec ns_spec nm = pure (InfixD (Fixity prec InfixN) ns_spec nm)
+
+defaultD :: Quote m => [m Type] -> m Dec
+defaultD tys = DefaultD <$> sequenceA tys
+
+pragInlD :: Quote m => Name -> Inline -> RuleMatch -> Phases -> m Dec
+pragInlD name inline rm phases
+  = pure $ PragmaD $ InlineP name inline rm phases
+
+pragOpaqueD :: Quote m => Name -> m Dec
+pragOpaqueD name = pure $ PragmaD $ OpaqueP name
+
+pragSpecD :: Quote m => Name -> m Type -> Phases -> m Dec
+pragSpecD n ty phases
+  = do
+      ty1    <- ty
+      pure $ PragmaD $ SpecialiseP n ty1 Nothing phases
+
+pragSpecInlD :: Quote m => Name -> m Type -> Inline -> Phases -> m Dec
+pragSpecInlD n ty inline phases
+  = do
+      ty1    <- ty
+      pure $ PragmaD $ SpecialiseP n ty1 (Just inline) phases
+
+pragSpecInstD :: Quote m => m Type -> m Dec
+pragSpecInstD ty
+  = do
+      ty1    <- ty
+      pure $ PragmaD $ SpecialiseInstP ty1
+
+pragRuleD :: Quote m => String -> Maybe [m (TyVarBndr ())] -> [m RuleBndr] -> m Exp -> m Exp
+          -> Phases -> m Dec
+pragRuleD n ty_bndrs tm_bndrs lhs rhs phases
+  = do
+      ty_bndrs1 <- traverse sequenceA ty_bndrs
+      tm_bndrs1 <- sequenceA tm_bndrs
+      lhs1   <- lhs
+      rhs1   <- rhs
+      pure $ PragmaD $ RuleP n ty_bndrs1 tm_bndrs1 lhs1 rhs1 phases
+
+pragAnnD :: Quote m => AnnTarget -> m Exp -> m Dec
+pragAnnD target expr
+  = do
+      exp1 <- expr
+      pure $ PragmaD $ AnnP target exp1
+
+pragLineD :: Quote m => Int -> String -> m Dec
+pragLineD line file = pure $ PragmaD $ LineP line file
+
+pragCompleteD :: Quote m => [Name] -> Maybe Name -> m Dec
+pragCompleteD cls mty = pure $ PragmaD $ CompleteP cls mty
+
+pragSCCFunD :: Quote m => Name -> m Dec
+pragSCCFunD nm = pure $ PragmaD $ SCCP nm Nothing
+
+pragSCCFunNamedD :: Quote m => Name -> String -> m Dec
+pragSCCFunNamedD nm str = pure $ PragmaD $ SCCP nm (Just str)
+
+dataInstD :: Quote m => m Cxt -> (Maybe [m (TyVarBndr ())]) -> m Type -> Maybe (m Kind) -> [m Con]
+          -> [m DerivClause] -> m Dec
+dataInstD ctxt mb_bndrs ty ksig cons derivs =
+  do
+    ctxt1   <- ctxt
+    mb_bndrs1 <- traverse sequenceA mb_bndrs
+    ty1    <- ty
+    ksig1   <- sequenceA ksig
+    cons1   <- sequenceA cons
+    derivs1 <- sequenceA derivs
+    pure (DataInstD ctxt1 mb_bndrs1 ty1 ksig1 cons1 derivs1)
+
+newtypeInstD :: Quote m => m Cxt -> (Maybe [m (TyVarBndr ())]) -> m Type -> Maybe (m Kind) -> m Con
+             -> [m DerivClause] -> m Dec
+newtypeInstD ctxt mb_bndrs ty ksig con derivs =
+  do
+    ctxt1   <- ctxt
+    mb_bndrs1 <- traverse sequenceA mb_bndrs
+    ty1    <- ty
+    ksig1   <- sequenceA ksig
+    con1    <- con
+    derivs1 <- sequenceA derivs
+    pure (NewtypeInstD ctxt1 mb_bndrs1 ty1 ksig1 con1 derivs1)
+
+tySynInstD :: Quote m => m TySynEqn -> m Dec
+tySynInstD eqn =
+  do
+    eqn1 <- eqn
+    pure (TySynInstD eqn1)
+
+dataFamilyD :: Quote m => Name -> [m (TyVarBndr BndrVis)] -> Maybe (m Kind) -> m Dec
+dataFamilyD tc tvs kind =
+  do tvs'  <- sequenceA tvs
+     kind' <- sequenceA kind
+     pure $ DataFamilyD tc tvs' kind'
+
+openTypeFamilyD :: Quote m => Name -> [m (TyVarBndr BndrVis)] -> m FamilyResultSig
+                -> Maybe InjectivityAnn -> m Dec
+openTypeFamilyD tc tvs res inj =
+  do tvs' <- sequenceA tvs
+     res' <- res
+     pure $ OpenTypeFamilyD (TypeFamilyHead tc tvs' res' inj)
+
+closedTypeFamilyD :: Quote m => Name -> [m (TyVarBndr BndrVis)] -> m FamilyResultSig
+                  -> Maybe InjectivityAnn -> [m TySynEqn] -> m Dec
+closedTypeFamilyD tc tvs result injectivity eqns =
+  do tvs1    <- sequenceA tvs
+     result1 <- result
+     eqns1   <- sequenceA eqns
+     pure (ClosedTypeFamilyD (TypeFamilyHead tc tvs1 result1 injectivity) eqns1)
+
+roleAnnotD :: Quote m => Name -> [Role] -> m Dec
+roleAnnotD name roles = pure $ RoleAnnotD name roles
+
+standaloneDerivD :: Quote m => m Cxt -> m Type -> m Dec
+standaloneDerivD = standaloneDerivWithStrategyD Nothing
+
+standaloneDerivWithStrategyD :: Quote m => Maybe (m DerivStrategy) -> m Cxt -> m Type -> m Dec
+standaloneDerivWithStrategyD mdsq ctxtq tyq =
+  do
+    mds  <- sequenceA mdsq
+    ctxt <- ctxtq
+    ty   <- tyq
+    pure $ StandaloneDerivD mds ctxt ty
+
+defaultSigD :: Quote m => Name -> m Type -> m Dec
+defaultSigD n tyq =
+  do
+    ty <- tyq
+    pure $ DefaultSigD n ty
+
+-- | Pattern synonym declaration
+patSynD :: Quote m => Name -> m PatSynArgs -> m PatSynDir -> m Pat -> m Dec
+patSynD name args dir pat = do
+  args'    <- args
+  dir'     <- dir
+  pat'     <- pat
+  pure (PatSynD name args' dir' pat')
+
+-- | Pattern synonym type signature
+patSynSigD :: Quote m => Name -> m Type -> m Dec
+patSynSigD nm ty =
+  do ty' <- ty
+     pure $ PatSynSigD nm ty'
+
+-- | Implicit parameter binding declaration. Can only be used in let
+-- and where clauses which consist entirely of implicit bindings.
+implicitParamBindD :: Quote m => String -> m Exp -> m Dec
+implicitParamBindD n e =
+  do
+    e' <- e
+    pure $ ImplicitParamBindD n e'
+
+tySynEqn :: Quote m => (Maybe [m (TyVarBndr ())]) -> m Type -> m Type -> m TySynEqn
+tySynEqn mb_bndrs lhs rhs =
+  do
+    mb_bndrs1 <- traverse sequenceA mb_bndrs
+    lhs1 <- lhs
+    rhs1 <- rhs
+    pure (TySynEqn mb_bndrs1 lhs1 rhs1)
+
+cxt :: Quote m => [m Pred] -> m Cxt
+cxt = sequenceA
+
+derivClause :: Quote m => Maybe (m DerivStrategy) -> [m Pred] -> m DerivClause
+derivClause mds p = do mds' <- sequenceA mds
+                       p'   <- cxt p
+                       pure $ DerivClause mds' p'
+
+stockStrategy :: Quote m => m DerivStrategy
+stockStrategy = pure StockStrategy
+
+anyclassStrategy :: Quote m => m DerivStrategy
+anyclassStrategy = pure AnyclassStrategy
+
+newtypeStrategy :: Quote m => m DerivStrategy
+newtypeStrategy = pure NewtypeStrategy
+
+viaStrategy :: Quote m => m Type -> m DerivStrategy
+viaStrategy = fmap ViaStrategy
+
+normalC :: Quote m => Name -> [m BangType] -> m Con
+normalC con strtys = liftA (NormalC con) $ sequenceA strtys
+
+recC :: Quote m => Name -> [m VarBangType] -> m Con
+recC con varstrtys = liftA (RecC con) $ sequenceA varstrtys
+
+infixC :: Quote m => m (Bang, Type) -> Name -> m (Bang, Type) -> m Con
+infixC st1 con st2 = do st1' <- st1
+                        st2' <- st2
+                        pure $ InfixC st1' con st2'
+
+forallC :: Quote m => [m (TyVarBndr Specificity)] -> m Cxt -> m Con -> m Con
+forallC ns ctxt con = do
+  ns'   <- sequenceA ns
+  ctxt' <- ctxt
+  con'  <- con
+  pure $ ForallC ns' ctxt' con'
+
+gadtC :: Quote m => [Name] -> [m StrictType] -> m Type -> m Con
+gadtC cons strtys ty = liftA2 (GadtC cons) (sequenceA strtys) ty
+
+recGadtC :: Quote m => [Name] -> [m VarStrictType] -> m Type -> m Con
+recGadtC cons varstrtys ty = liftA2 (RecGadtC cons) (sequenceA varstrtys) ty
+
+-------------------------------------------------------------------------------
+-- *   Type
+
+forallT :: Quote m => [m (TyVarBndr Specificity)] -> m Cxt -> m Type -> m Type
+forallT tvars ctxt ty = do
+    tvars1 <- sequenceA tvars
+    ctxt1  <- ctxt
+    ty1    <- ty
+    pure $ ForallT tvars1 ctxt1 ty1
+
+forallVisT :: Quote m => [m (TyVarBndr ())] -> m Type -> m Type
+forallVisT tvars ty = ForallVisT <$> sequenceA tvars <*> ty
+
+varT :: Quote m => Name -> m Type
+varT = pure . VarT
+
+conT :: Quote m => Name -> m Type
+conT = pure . ConT
+
+infixT :: Quote m => m Type -> Name -> m Type -> m Type
+infixT t1 n t2 = do t1' <- t1
+                    t2' <- t2
+                    pure (InfixT t1' n t2')
+
+uInfixT :: Quote m => m Type -> Name -> m Type -> m Type
+uInfixT t1 n t2 = do t1' <- t1
+                     t2' <- t2
+                     pure (UInfixT t1' n t2')
+
+promotedInfixT :: Quote m => m Type -> Name -> m Type -> m Type
+promotedInfixT t1 n t2 = do t1' <- t1
+                            t2' <- t2
+                            pure (PromotedInfixT t1' n t2')
+
+promotedUInfixT :: Quote m => m Type -> Name -> m Type -> m Type
+promotedUInfixT t1 n t2 = do t1' <- t1
+                             t2' <- t2
+                             pure (PromotedUInfixT t1' n t2')
+
+parensT :: Quote m => m Type -> m Type
+parensT t = do t' <- t
+               pure (ParensT t')
+
+appT :: Quote m => m Type -> m Type -> m Type
+appT t1 t2 = do
+           t1' <- t1
+           t2' <- t2
+           pure $ AppT t1' t2'
+
+appKindT :: Quote m => m Type -> m Kind -> m Type
+appKindT ty ki = do
+               ty' <- ty
+               ki' <- ki
+               pure $ AppKindT ty' ki'
+
+arrowT :: Quote m => m Type
+arrowT = pure ArrowT
+
+mulArrowT :: Quote m => m Type
+mulArrowT = pure MulArrowT
+
+listT :: Quote m => m Type
+listT = pure ListT
+
+litT :: Quote m => m TyLit -> m Type
+litT l = fmap LitT l
+
+tupleT :: Quote m => Int -> m Type
+tupleT i = pure (TupleT i)
+
+unboxedTupleT :: Quote m => Int -> m Type
+unboxedTupleT i = pure (UnboxedTupleT i)
+
+unboxedSumT :: Quote m => SumArity -> m Type
+unboxedSumT arity = pure (UnboxedSumT arity)
+
+sigT :: Quote m => m Type -> m Kind -> m Type
+sigT t k
+  = do
+      t' <- t
+      k' <- k
+      pure $ SigT t' k'
+
+equalityT :: Quote m => m Type
+equalityT = pure EqualityT
+
+wildCardT :: Quote m => m Type
+wildCardT = pure WildCardT
+
+implicitParamT :: Quote m => String -> m Type -> m Type
+implicitParamT n t
+  = do
+      t' <- t
+      pure $ ImplicitParamT n t'
+
+{-# DEPRECATED classP "As of template-haskell-2.10, constraint predicates (Pred) are just types (Type), in keeping with ConstraintKinds. Please use 'conT' and 'appT'." #-}
+classP :: Quote m => Name -> [m Type] -> m Pred
+classP cla tys
+  = do
+      tysl <- sequenceA tys
+      pure (foldl AppT (ConT cla) tysl)
+
+{-# DEPRECATED equalP "As of template-haskell-2.10, constraint predicates (Pred) are just types (Type), in keeping with ConstraintKinds. Please see 'equalityT'." #-}
+equalP :: Quote m => m Type -> m Type -> m Pred
+equalP tleft tright
+  = do
+      tleft1  <- tleft
+      tright1 <- tright
+      eqT <- equalityT
+      pure (foldl AppT eqT [tleft1, tright1])
+
+promotedT :: Quote m => Name -> m Type
+promotedT = pure . PromotedT
+
+promotedTupleT :: Quote m => Int -> m Type
+promotedTupleT i = pure (PromotedTupleT i)
+
+promotedNilT :: Quote m => m Type
+promotedNilT = pure PromotedNilT
+
+promotedConsT :: Quote m => m Type
+promotedConsT = pure PromotedConsT
+
+noSourceUnpackedness, sourceNoUnpack, sourceUnpack :: Quote m => m SourceUnpackedness
+noSourceUnpackedness = pure NoSourceUnpackedness
+sourceNoUnpack       = pure SourceNoUnpack
+sourceUnpack         = pure SourceUnpack
+
+noSourceStrictness, sourceLazy, sourceStrict :: Quote m => m SourceStrictness
+noSourceStrictness = pure NoSourceStrictness
+sourceLazy         = pure SourceLazy
+sourceStrict       = pure SourceStrict
+
+{-# DEPRECATED isStrict
+    ["Use 'bang'. See https://gitlab.haskell.org/ghc/ghc/wikis/migration/8.0. ",
+     "Example usage: 'bang noSourceUnpackedness sourceStrict'"] #-}
+{-# DEPRECATED notStrict
+    ["Use 'bang'. See https://gitlab.haskell.org/ghc/ghc/wikis/migration/8.0. ",
+     "Example usage: 'bang noSourceUnpackedness noSourceStrictness'"] #-}
+{-# DEPRECATED unpacked
+    ["Use 'bang'. See https://gitlab.haskell.org/ghc/ghc/wikis/migration/8.0. ",
+     "Example usage: 'bang sourceUnpack sourceStrict'"] #-}
+isStrict, notStrict, unpacked :: Quote m => m Strict
+isStrict = bang noSourceUnpackedness sourceStrict
+notStrict = bang noSourceUnpackedness noSourceStrictness
+unpacked = bang sourceUnpack sourceStrict
+
+bang :: Quote m => m SourceUnpackedness -> m SourceStrictness -> m Bang
+bang u s = do u' <- u
+              s' <- s
+              pure (Bang u' s')
+
+bangType :: Quote m => m Bang -> m Type -> m BangType
+bangType = liftA2 (,)
+
+varBangType :: Quote m => Name -> m BangType -> m VarBangType
+varBangType v bt = (\(b, t) -> (v, b, t)) <$> bt
+
+{-# DEPRECATED strictType
+               "As of @template-haskell-2.11.0.0@, 'StrictType' has been replaced by 'BangType'. Please use 'bangType' instead." #-}
+strictType :: Quote m => m Strict -> m Type -> m StrictType
+strictType = bangType
+
+{-# DEPRECATED varStrictType
+               "As of @template-haskell-2.11.0.0@, 'VarStrictType' has been replaced by 'VarBangType'. Please use 'varBangType' instead." #-}
+varStrictType :: Quote m => Name -> m StrictType -> m VarStrictType
+varStrictType = varBangType
+
+-- * Type Literals
+
+-- MonadFail here complicates things (a lot) because it would mean we would
+-- have to emit a MonadFail constraint during typechecking if there was any
+-- chance the desugaring would use numTyLit, which in general is hard to
+-- predict.
+numTyLit :: Quote m => Integer -> m TyLit
+numTyLit n = if n >= 0 then pure (NumTyLit n)
+                       else error ("Negative type-level number: " ++ show n)
+
+strTyLit :: Quote m => String -> m TyLit
+strTyLit s = pure (StrTyLit s)
+
+charTyLit :: Quote m => Char -> m TyLit
+charTyLit c = pure (CharTyLit c)
+
+-------------------------------------------------------------------------------
+-- *   Kind
+
+plainTV :: Quote m => Name -> m (TyVarBndr ())
+plainTV n = pure $ PlainTV n ()
+
+plainInvisTV :: Quote m => Name -> Specificity -> m (TyVarBndr Specificity)
+plainInvisTV n s = pure $ PlainTV n s
+
+plainBndrTV :: Quote m => Name -> BndrVis -> m (TyVarBndr BndrVis)
+plainBndrTV n v = pure $ PlainTV n v
+
+kindedTV :: Quote m => Name -> m Kind -> m (TyVarBndr ())
+kindedTV n = fmap (KindedTV n ())
+
+kindedInvisTV :: Quote m => Name -> Specificity -> m Kind -> m (TyVarBndr Specificity)
+kindedInvisTV n s = fmap (KindedTV n s)
+
+kindedBndrTV :: Quote m => Name -> BndrVis -> m Kind -> m (TyVarBndr BndrVis)
+kindedBndrTV n v = fmap (KindedTV n v)
+
+specifiedSpec :: Specificity
+specifiedSpec = SpecifiedSpec
+
+inferredSpec :: Specificity
+inferredSpec = InferredSpec
+
+bndrReq :: BndrVis
+bndrReq = BndrReq
+
+bndrInvis :: BndrVis
+bndrInvis = BndrInvis
+
+varK :: Name -> Kind
+varK = VarT
+
+conK :: Name -> Kind
+conK = ConT
+
+tupleK :: Int -> Kind
+tupleK = TupleT
+
+arrowK ::  Kind
+arrowK = ArrowT
+
+listK ::  Kind
+listK = ListT
+
+appK :: Kind -> Kind -> Kind
+appK = AppT
+
+starK :: Quote m => m Kind
+starK = pure StarT
+
+constraintK :: Quote m => m Kind
+constraintK = pure ConstraintT
+
+-------------------------------------------------------------------------------
+-- *   Type family result
+
+noSig :: Quote m => m FamilyResultSig
+noSig = pure NoSig
+
+kindSig :: Quote m => m Kind -> m FamilyResultSig
+kindSig = fmap KindSig
+
+tyVarSig :: Quote m => m (TyVarBndr ()) -> m FamilyResultSig
+tyVarSig = fmap TyVarSig
+
+-------------------------------------------------------------------------------
+-- *   Injectivity annotation
+
+injectivityAnn :: Name -> [Name] -> InjectivityAnn
+injectivityAnn = TH.InjectivityAnn
+
+-------------------------------------------------------------------------------
+-- *   Role
+
+nominalR, representationalR, phantomR, inferR :: Role
+nominalR          = NominalR
+representationalR = RepresentationalR
+phantomR          = PhantomR
+inferR            = InferR
+
+-------------------------------------------------------------------------------
+-- *   Callconv
+
+cCall, stdCall, cApi, prim, javaScript :: Callconv
+cCall      = CCall
+stdCall    = StdCall
+cApi       = CApi
+prim       = Prim
+javaScript = JavaScript
+
+-------------------------------------------------------------------------------
+-- *   Safety
+
+unsafe, safe, interruptible :: Safety
+unsafe = Unsafe
+safe = Safe
+interruptible = Interruptible
+
+-------------------------------------------------------------------------------
+-- *   FunDep
+
+funDep ::  [Name] -> [Name] -> FunDep
+funDep = FunDep
+
+-------------------------------------------------------------------------------
+-- *   RuleBndr
+ruleVar :: Quote m => Name -> m RuleBndr
+ruleVar = pure . RuleVar
+
+typedRuleVar :: Quote m => Name -> m Type -> m RuleBndr
+typedRuleVar n ty = TypedRuleVar n <$> ty
+
+-------------------------------------------------------------------------------
+-- *   AnnTarget
+valueAnnotation ::  Name -> AnnTarget
+valueAnnotation = ValueAnnotation
+
+typeAnnotation ::  Name -> AnnTarget
+typeAnnotation = TypeAnnotation
+
+moduleAnnotation :: AnnTarget
+moduleAnnotation = ModuleAnnotation
+
+-------------------------------------------------------------------------------
+-- * Pattern Synonyms (sub constructs)
+
+unidir, implBidir :: Quote m => m PatSynDir
+unidir    = pure Unidir
+implBidir = pure ImplBidir
+
+explBidir :: Quote m => [m Clause] -> m PatSynDir
+explBidir cls = do
+  cls' <- sequenceA cls
+  pure (ExplBidir cls')
+
+prefixPatSyn :: Quote m => [Name] -> m PatSynArgs
+prefixPatSyn args = pure $ PrefixPatSyn args
+
+recordPatSyn :: Quote m => [Name] -> m PatSynArgs
+recordPatSyn sels = pure $ RecordPatSyn sels
+
+infixPatSyn :: Quote m => Name -> Name -> m PatSynArgs
+infixPatSyn arg1 arg2 = pure $ InfixPatSyn arg1 arg2
+
+--------------------------------------------------------------
+-- * Useful helper function
+
+appsE :: Quote m => [m Exp] -> m Exp
+appsE [] = error "appsE []"
+appsE [x] = x
+appsE (x:y:zs) = appsE ( (appE x y) : zs )
+
+-- | pure the Module at the place of splicing.  Can be used as an
+-- input for 'reifyModule'.
+thisModule :: Q Module
+thisModule = do
+  loc <- location
+  pure $ Module (mkPkgName $ loc_package loc) (mkModName $ loc_module loc)
+
+--------------------------------------------------------------
+-- * Documentation combinators
+
+-- | Attaches Haddock documentation to the declaration provided. Unlike
+-- 'putDoc', the names do not need to be in scope when calling this function so
+-- it can be used for quoted declarations and anything else currently being
+-- spliced.
+-- Not all declarations can have documentation attached to them. For those that
+-- can't, 'withDecDoc' will return it unchanged without any side effects.
+withDecDoc :: String -> Q Dec -> Q Dec
+withDecDoc doc dec = do
+  dec' <- dec
+  case doc_loc dec' of
+    Just loc -> qAddModFinalizer $ qPutDoc loc doc
+    Nothing  -> pure ()
+  pure dec'
+  where
+    doc_loc (FunD n _)                                     = Just $ DeclDoc n
+    doc_loc (ValD (VarP n) _ _)                            = Just $ DeclDoc n
+    doc_loc (DataD _ n _ _ _ _)                            = Just $ DeclDoc n
+    doc_loc (NewtypeD _ n _ _ _ _)                         = Just $ DeclDoc n
+    doc_loc (TypeDataD n _ _ _)                            = Just $ DeclDoc n
+    doc_loc (TySynD n _ _)                                 = Just $ DeclDoc n
+    doc_loc (ClassD _ n _ _ _)                             = Just $ DeclDoc n
+    doc_loc (SigD n _)                                     = Just $ DeclDoc n
+    doc_loc (ForeignD (ImportF _ _ _ n _))                 = Just $ DeclDoc n
+    doc_loc (ForeignD (ExportF _ _ n _))                   = Just $ DeclDoc n
+    doc_loc (InfixD _ _ n)                                 = Just $ DeclDoc n
+    doc_loc (DataFamilyD n _ _)                            = Just $ DeclDoc n
+    doc_loc (OpenTypeFamilyD (TypeFamilyHead n _ _ _))     = Just $ DeclDoc n
+    doc_loc (ClosedTypeFamilyD (TypeFamilyHead n _ _ _) _) = Just $ DeclDoc n
+    doc_loc (PatSynD n _ _ _)                              = Just $ DeclDoc n
+    doc_loc (PatSynSigD n _)                               = Just $ DeclDoc n
+
+    -- For instances we just pass along the full type
+    doc_loc (InstanceD _ _ t _)           = Just $ InstDoc t
+    doc_loc (DataInstD _ _ t _ _ _)       = Just $ InstDoc t
+    doc_loc (NewtypeInstD _ _ t _ _ _)    = Just $ InstDoc t
+    doc_loc (TySynInstD (TySynEqn _ t _)) = Just $ InstDoc t
+
+    -- Declarations that can't have documentation attached to
+    -- ValDs that aren't a simple variable pattern
+    doc_loc (ValD _ _ _)             = Nothing
+    doc_loc (KiSigD _ _)             = Nothing
+    doc_loc (PragmaD _)              = Nothing
+    doc_loc (RoleAnnotD _ _)         = Nothing
+    doc_loc (StandaloneDerivD _ _ _) = Nothing
+    doc_loc (DefaultSigD _ _)        = Nothing
+    doc_loc (ImplicitParamBindD _ _) = Nothing
+    doc_loc (DefaultD _)             = Nothing
+
+-- | Variant of 'withDecDoc' that applies the same documentation to
+-- multiple declarations. Useful for documenting quoted declarations.
+withDecsDoc :: String -> Q [Dec] -> Q [Dec]
+withDecsDoc doc decs = decs >>= mapM (withDecDoc doc . pure)
+
+-- | Variant of 'funD' that attaches Haddock documentation.
+funD_doc :: Name -> [Q Clause]
+         -> Maybe String -- ^ Documentation to attach to function
+         -> [Maybe String] -- ^ Documentation to attach to arguments
+         -> Q Dec
+funD_doc nm cs mfun_doc arg_docs = do
+  qAddModFinalizer $ sequence_
+    [putDoc (ArgDoc nm i) s | (i, Just s) <- zip [0..] arg_docs]
+  let dec = funD nm cs
+  case mfun_doc of
+    Just fun_doc -> withDecDoc fun_doc dec
+    Nothing -> funD nm cs
+
+-- | Variant of 'dataD' that attaches Haddock documentation.
+dataD_doc :: Q Cxt -> Name -> [Q (TyVarBndr BndrVis)] -> Maybe (Q Kind)
+          -> [(Q Con, Maybe String, [Maybe String])]
+          -- ^ List of constructors, documentation for the constructor, and
+          -- documentation for the arguments
+          -> [Q DerivClause]
+          -> Maybe String
+          -- ^ Documentation to attach to the data declaration
+          -> Q Dec
+dataD_doc ctxt tc tvs ksig cons_with_docs derivs mdoc = do
+  qAddModFinalizer $ mapM_ docCons cons_with_docs
+  let dec = dataD ctxt tc tvs ksig (map (\(con, _, _) -> con) cons_with_docs) derivs
+  maybe dec (flip withDecDoc dec) mdoc
+
+-- | Variant of 'newtypeD' that attaches Haddock documentation.
+newtypeD_doc :: Q Cxt -> Name -> [Q (TyVarBndr BndrVis)] -> Maybe (Q Kind)
+             -> (Q Con, Maybe String, [Maybe String])
+             -- ^ The constructor, documentation for the constructor, and
+             -- documentation for the arguments
+             -> [Q DerivClause]
+             -> Maybe String
+             -- ^ Documentation to attach to the newtype declaration
+             -> Q Dec
+newtypeD_doc ctxt tc tvs ksig con_with_docs@(con, _, _) derivs mdoc = do
+  qAddModFinalizer $ docCons con_with_docs
+  let dec = newtypeD ctxt tc tvs ksig con derivs
+  maybe dec (flip withDecDoc dec) mdoc
+
+-- | Variant of 'typeDataD' that attaches Haddock documentation.
+typeDataD_doc :: Name -> [Q (TyVarBndr BndrVis)] -> Maybe (Q Kind)
+          -> [(Q Con, Maybe String, [Maybe String])]
+          -- ^ List of constructors, documentation for the constructor, and
+          -- documentation for the arguments
+          -> Maybe String
+          -- ^ Documentation to attach to the data declaration
+          -> Q Dec
+typeDataD_doc tc tvs ksig cons_with_docs mdoc = do
+  qAddModFinalizer $ mapM_ docCons cons_with_docs
+  let dec = typeDataD tc tvs ksig (map (\(con, _, _) -> con) cons_with_docs)
+  maybe dec (flip withDecDoc dec) mdoc
+
+-- | Variant of 'dataInstD' that attaches Haddock documentation.
+dataInstD_doc :: Q Cxt -> (Maybe [Q (TyVarBndr ())]) -> Q Type -> Maybe (Q Kind)
+              -> [(Q Con, Maybe String, [Maybe String])]
+              -- ^ List of constructors, documentation for the constructor, and
+              -- documentation for the arguments
+              -> [Q DerivClause]
+              -> Maybe String
+              -- ^ Documentation to attach to the instance declaration
+              -> Q Dec
+dataInstD_doc ctxt mb_bndrs ty ksig cons_with_docs derivs mdoc = do
+  qAddModFinalizer $ mapM_ docCons cons_with_docs
+  let dec = dataInstD ctxt mb_bndrs ty ksig (map (\(con, _, _) -> con) cons_with_docs)
+              derivs
+  maybe dec (flip withDecDoc dec) mdoc
+
+-- | Variant of 'newtypeInstD' that attaches Haddock documentation.
+newtypeInstD_doc :: Q Cxt -> (Maybe [Q (TyVarBndr ())]) -> Q Type
+                 -> Maybe (Q Kind)
+                 -> (Q Con, Maybe String, [Maybe String])
+                 -- ^ The constructor, documentation for the constructor, and
+                 -- documentation for the arguments
+                 -> [Q DerivClause]
+                 -> Maybe String
+                 -- ^ Documentation to attach to the instance declaration
+                 -> Q Dec
+newtypeInstD_doc ctxt mb_bndrs ty ksig con_with_docs@(con, _, _) derivs mdoc = do
+  qAddModFinalizer $ docCons con_with_docs
+  let dec = newtypeInstD ctxt mb_bndrs ty ksig con derivs
+  maybe dec (flip withDecDoc dec) mdoc
+
+-- | Variant of 'patSynD' that attaches Haddock documentation.
+patSynD_doc :: Name -> Q PatSynArgs -> Q PatSynDir -> Q Pat
+            -> Maybe String   -- ^ Documentation to attach to the pattern synonym
+            -> [Maybe String] -- ^ Documentation to attach to the pattern arguments
+            -> Q Dec
+patSynD_doc name args dir pat mdoc arg_docs = do
+  qAddModFinalizer $ sequence_
+    [putDoc (ArgDoc name i) s | (i, Just s) <- zip [0..] arg_docs]
+  let dec = patSynD name args dir pat
+  maybe dec (flip withDecDoc dec) mdoc
+
+-- | Document a data/newtype constructor with its arguments.
+docCons :: (Q Con, Maybe String, [Maybe String]) -> Q ()
+docCons (c, md, arg_docs) = do
+  c' <- c
+  -- Attach docs to the constructors
+  sequence_ [ putDoc (DeclDoc nm) d | Just d <- [md], nm <- get_cons_names c' ]
+  -- Attach docs to the arguments
+  case c' of
+    -- Record selector documentation isn't stored in the argument map,
+    -- but in the declaration map instead
+    RecC _ var_bang_types ->
+      sequence_ [ putDoc (DeclDoc nm) arg_doc
+                  | (Just arg_doc, (nm, _, _)) <- zip arg_docs var_bang_types
+                ]
+    _ ->
+      sequence_ [ putDoc (ArgDoc nm i) arg_doc
+                    | nm <- get_cons_names c'
+                    , (i, Just arg_doc) <- zip [0..] arg_docs
+                ]
diff --git a/libraries/ghc-internal/src/GHC/Internal/TH/Lift.hs b/libraries/ghc-internal/src/GHC/Internal/TH/Lift.hs
new file mode 100644
index 0000000000000000000000000000000000000000..55b015ac414884bd30d479ee7548534b24c29b8f
--- /dev/null
+++ b/libraries/ghc-internal/src/GHC/Internal/TH/Lift.hs
@@ -0,0 +1,569 @@
+{-# OPTIONS_HADDOCK not-home #-} -- we want users to import Language.Haskell.TH.Syntax instead
+{-# LANGUAGE CPP #-}
+{-# LANGUAGE BangPatterns #-}
+{-# LANGUAGE DefaultSignatures #-}
+{-# LANGUAGE KindSignatures #-}
+{-# LANGUAGE MagicHash #-}
+{-# LANGUAGE PolyKinds #-}
+{-# LANGUAGE RankNTypes #-}
+{-# LANGUAGE ScopedTypeVariables #-}
+{-# LANGUAGE TemplateHaskellQuotes #-}
+{-# LANGUAGE Trustworthy #-}
+{-# LANGUAGE TypeOperators #-}
+{-# LANGUAGE UnboxedSums #-}
+{-# LANGUAGE UnboxedTuples #-}
+{-# OPTIONS_GHC -fno-warn-inline-rule-shadowing #-}
+
+-- | This module gives the definition of the 'Lift' class.
+--
+-- This is an internal module.
+-- Please import "Language.Haskell.TH" or "Language.Haskell.TH.Syntax" instead!
+
+module GHC.Internal.TH.Lift
+  ( Lift(..)
+  -- * Generic Lift implementations
+  , dataToQa
+  , dataToExpQ
+  , liftData
+  , dataToPatQ
+  -- * Wired-in names
+  , liftString
+  , trueName
+  , falseName
+  , nothingName
+  , justName
+  , leftName
+  , rightName
+  , nonemptyName
+  )
+  where
+
+import GHC.Internal.TH.Syntax
+import GHC.Internal.TH.Lib ()  -- See wrinkle (W4) of Note [Tracking dependencies on primitives]
+import GHC.Internal.Lexeme ( startsVarSym, startsVarId )
+
+import GHC.Internal.Data.Either
+import GHC.Internal.Type.Reflection
+import GHC.Internal.Data.Bool
+import GHC.Internal.Base hiding (Type, Module, inline)
+import GHC.Internal.Data.Foldable
+import GHC.Internal.Data.Functor
+import GHC.Internal.Integer
+import GHC.Internal.Real
+import GHC.Internal.Word
+import GHC.Internal.Int
+import GHC.Internal.Data.Data
+import GHC.Internal.Natural
+
+-- | A 'Lift' instance can have any of its values turned into a Template
+-- Haskell expression. This is needed when a value used within a Template
+-- Haskell quotation is bound outside the Oxford brackets (@[| ... |]@ or
+-- @[|| ... ||]@) but not at the top level. As an example:
+--
+-- > add1 :: Int -> Code Q Int
+-- > add1 x = [|| x + 1 ||]
+--
+-- Template Haskell has no way of knowing what value @x@ will take on at
+-- splice-time, so it requires the type of @x@ to be an instance of 'Lift'.
+--
+-- A 'Lift' instance must satisfy @$(lift x) ≡ x@ and @$$(liftTyped x) ≡ x@
+-- for all @x@, where @$(...)@ and @$$(...)@ are Template Haskell splices.
+-- It is additionally expected that @'lift' x ≡ 'unTypeCode' ('liftTyped' x)@.
+--
+-- 'Lift' instances can be derived automatically by use of the @-XDeriveLift@
+-- GHC language extension:
+--
+-- > {-# LANGUAGE DeriveLift #-}
+-- > module Foo where
+-- >
+-- > import Language.Haskell.TH.Syntax
+-- >
+-- > data Bar a = Bar1 a (Bar a) | Bar2 String
+-- >   deriving Lift
+--
+-- Representation-polymorphic since /template-haskell-2.16.0.0/.
+class Lift (t :: TYPE r) where
+  -- | Turn a value into a Template Haskell expression, suitable for use in
+  -- a splice.
+  lift :: Quote m => t -> m Exp
+  default lift :: (r ~ ('BoxedRep 'Lifted), Quote m) => t -> m Exp
+  lift = unTypeCode . liftTyped
+
+  -- | Turn a value into a Template Haskell typed expression, suitable for use
+  -- in a typed splice.
+  --
+  -- @since template-haskell-2.16.0.0
+  liftTyped :: Quote m => t -> Code m t
+
+
+-- If you add any instances here, consider updating test th/TH_Lift
+instance Lift Integer where
+  liftTyped x = unsafeCodeCoerce (lift x)
+  lift x = return (LitE (IntegerL x))
+
+instance Lift Int where
+  liftTyped x = unsafeCodeCoerce (lift x)
+  lift x = return (LitE (IntegerL (fromIntegral x)))
+
+-- | @since template-haskell-2.16.0.0
+instance Lift Int# where
+  liftTyped x = unsafeCodeCoerce (lift x)
+  lift x = return (LitE (IntPrimL (fromIntegral (I# x))))
+
+instance Lift Int8 where
+  liftTyped x = unsafeCodeCoerce (lift x)
+  lift x = return (LitE (IntegerL (fromIntegral x)))
+
+instance Lift Int16 where
+  liftTyped x = unsafeCodeCoerce (lift x)
+  lift x = return (LitE (IntegerL (fromIntegral x)))
+
+instance Lift Int32 where
+  liftTyped x = unsafeCodeCoerce (lift x)
+  lift x = return (LitE (IntegerL (fromIntegral x)))
+
+instance Lift Int64 where
+  liftTyped x = unsafeCodeCoerce (lift x)
+  lift x = return (LitE (IntegerL (fromIntegral x)))
+
+-- | @since template-haskell-2.16.0.0
+instance Lift Word# where
+  liftTyped x = unsafeCodeCoerce (lift x)
+  lift x = return (LitE (WordPrimL (fromIntegral (W# x))))
+
+instance Lift Word where
+  liftTyped x = unsafeCodeCoerce (lift x)
+  lift x = return (LitE (IntegerL (fromIntegral x)))
+
+instance Lift Word8 where
+  liftTyped x = unsafeCodeCoerce (lift x)
+  lift x = return (LitE (IntegerL (fromIntegral x)))
+
+instance Lift Word16 where
+  liftTyped x = unsafeCodeCoerce (lift x)
+  lift x = return (LitE (IntegerL (fromIntegral x)))
+
+instance Lift Word32 where
+  liftTyped x = unsafeCodeCoerce (lift x)
+  lift x = return (LitE (IntegerL (fromIntegral x)))
+
+instance Lift Word64 where
+  liftTyped x = unsafeCodeCoerce (lift x)
+  lift x = return (LitE (IntegerL (fromIntegral x)))
+
+instance Lift Natural where
+  liftTyped x = unsafeCodeCoerce (lift x)
+  lift x = return (LitE (IntegerL (fromIntegral x)))
+
+instance Integral a => Lift (Ratio a) where
+  liftTyped x = unsafeCodeCoerce (lift x)
+  lift x = return (LitE (RationalL (toRational x)))
+
+instance Lift Float where
+  liftTyped x = unsafeCodeCoerce (lift x)
+  lift x = return (LitE (RationalL (toRational x)))
+
+-- | @since template-haskell-2.16.0.0
+instance Lift Float# where
+  liftTyped x = unsafeCodeCoerce (lift x)
+  lift x = return (LitE (FloatPrimL (toRational (F# x))))
+
+instance Lift Double where
+  liftTyped x = unsafeCodeCoerce (lift x)
+  lift x = return (LitE (RationalL (toRational x)))
+
+-- | @since template-haskell-2.16.0.0
+instance Lift Double# where
+  liftTyped x = unsafeCodeCoerce (lift x)
+  lift x = return (LitE (DoublePrimL (toRational (D# x))))
+
+instance Lift Char where
+  liftTyped x = unsafeCodeCoerce (lift x)
+  lift x = return (LitE (CharL x))
+
+-- | @since template-haskell-2.16.0.0
+instance Lift Char# where
+  liftTyped x = unsafeCodeCoerce (lift x)
+  lift x = return (LitE (CharPrimL (C# x)))
+
+instance Lift Bool where
+  liftTyped x = unsafeCodeCoerce (lift x)
+
+  lift True  = return (ConE trueName)
+  lift False = return (ConE falseName)
+
+-- | Produces an 'Addr#' literal from the NUL-terminated C-string starting at
+-- the given memory address.
+--
+-- @since template-haskell-2.16.0.0
+instance Lift Addr# where
+  liftTyped x = unsafeCodeCoerce (lift x)
+  lift x
+    = return (LitE (StringPrimL (map (fromIntegral . ord) (unpackCString# x))))
+
+instance Lift a => Lift (Maybe a) where
+  liftTyped x = unsafeCodeCoerce (lift x)
+
+  lift Nothing  = return (ConE nothingName)
+  lift (Just x) = liftM (ConE justName `AppE`) (lift x)
+
+instance (Lift a, Lift b) => Lift (Either a b) where
+  liftTyped x = unsafeCodeCoerce (lift x)
+
+  lift (Left x)  = liftM (ConE leftName  `AppE`) (lift x)
+  lift (Right y) = liftM (ConE rightName `AppE`) (lift y)
+
+instance Lift a => Lift [a] where
+  liftTyped x = unsafeCodeCoerce (lift x)
+  lift xs = do { xs' <- mapM lift xs; return (ListE xs') }
+
+liftString :: Quote m => String -> m Exp
+-- Used in GHC.Tc.Gen.Expr to short-circuit the lifting for strings
+liftString s = return (LitE (StringL s))
+
+-- | @since template-haskell-2.15.0.0
+instance Lift a => Lift (NonEmpty a) where
+  liftTyped x = unsafeCodeCoerce (lift x)
+
+  lift (x :| xs) = do
+    x' <- lift x
+    xs' <- lift xs
+    return (InfixE (Just x') (ConE nonemptyName) (Just xs'))
+
+-- | @since template-haskell-2.15.0.0
+instance Lift Void where
+  liftTyped = liftCode . absurd
+  lift = pure . absurd
+
+instance Lift () where
+  liftTyped x = unsafeCodeCoerce (lift x)
+  lift () = return (ConE (tupleDataName 0))
+
+instance (Lift a, Lift b) => Lift (a, b) where
+  liftTyped x = unsafeCodeCoerce (lift x)
+  lift (a, b)
+    = liftM TupE $ sequence $ map (fmap Just) [lift a, lift b]
+
+instance (Lift a, Lift b, Lift c) => Lift (a, b, c) where
+  liftTyped x = unsafeCodeCoerce (lift x)
+  lift (a, b, c)
+    = liftM TupE $ sequence $ map (fmap Just) [lift a, lift b, lift c]
+
+instance (Lift a, Lift b, Lift c, Lift d) => Lift (a, b, c, d) where
+  liftTyped x = unsafeCodeCoerce (lift x)
+  lift (a, b, c, d)
+    = liftM TupE $ sequence $ map (fmap Just) [lift a, lift b, lift c, lift d]
+
+instance (Lift a, Lift b, Lift c, Lift d, Lift e)
+      => Lift (a, b, c, d, e) where
+  liftTyped x = unsafeCodeCoerce (lift x)
+  lift (a, b, c, d, e)
+    = liftM TupE $ sequence $ map (fmap Just) [ lift a, lift b
+                                              , lift c, lift d, lift e ]
+
+instance (Lift a, Lift b, Lift c, Lift d, Lift e, Lift f)
+      => Lift (a, b, c, d, e, f) where
+  liftTyped x = unsafeCodeCoerce (lift x)
+  lift (a, b, c, d, e, f)
+    = liftM TupE $ sequence $ map (fmap Just) [ lift a, lift b, lift c
+                                              , lift d, lift e, lift f ]
+
+instance (Lift a, Lift b, Lift c, Lift d, Lift e, Lift f, Lift g)
+      => Lift (a, b, c, d, e, f, g) where
+  liftTyped x = unsafeCodeCoerce (lift x)
+  lift (a, b, c, d, e, f, g)
+    = liftM TupE $ sequence $ map (fmap Just) [ lift a, lift b, lift c
+                                              , lift d, lift e, lift f, lift g ]
+
+-- | @since template-haskell-2.16.0.0
+instance Lift (# #) where
+  liftTyped x = unsafeCodeCoerce (lift x)
+  lift (# #) = return (ConE (unboxedTupleTypeName 0))
+
+-- | @since template-haskell-2.16.0.0
+instance (Lift a) => Lift (# a #) where
+  liftTyped x = unsafeCodeCoerce (lift x)
+  lift (# a #)
+    = liftM UnboxedTupE $ sequence $ map (fmap Just) [lift a]
+
+-- | @since template-haskell-2.16.0.0
+instance (Lift a, Lift b) => Lift (# a, b #) where
+  liftTyped x = unsafeCodeCoerce (lift x)
+  lift (# a, b #)
+    = liftM UnboxedTupE $ sequence $ map (fmap Just) [lift a, lift b]
+
+-- | @since template-haskell-2.16.0.0
+instance (Lift a, Lift b, Lift c)
+      => Lift (# a, b, c #) where
+  liftTyped x = unsafeCodeCoerce (lift x)
+  lift (# a, b, c #)
+    = liftM UnboxedTupE $ sequence $ map (fmap Just) [lift a, lift b, lift c]
+
+-- | @since template-haskell-2.16.0.0
+instance (Lift a, Lift b, Lift c, Lift d)
+      => Lift (# a, b, c, d #) where
+  liftTyped x = unsafeCodeCoerce (lift x)
+  lift (# a, b, c, d #)
+    = liftM UnboxedTupE $ sequence $ map (fmap Just) [ lift a, lift b
+                                                     , lift c, lift d ]
+
+-- | @since template-haskell-2.16.0.0
+instance (Lift a, Lift b, Lift c, Lift d, Lift e)
+      => Lift (# a, b, c, d, e #) where
+  liftTyped x = unsafeCodeCoerce (lift x)
+  lift (# a, b, c, d, e #)
+    = liftM UnboxedTupE $ sequence $ map (fmap Just) [ lift a, lift b
+                                                     , lift c, lift d, lift e ]
+
+-- | @since template-haskell-2.16.0.0
+instance (Lift a, Lift b, Lift c, Lift d, Lift e, Lift f)
+      => Lift (# a, b, c, d, e, f #) where
+  liftTyped x = unsafeCodeCoerce (lift x)
+  lift (# a, b, c, d, e, f #)
+    = liftM UnboxedTupE $ sequence $ map (fmap Just) [ lift a, lift b, lift c
+                                                     , lift d, lift e, lift f ]
+
+-- | @since template-haskell-2.16.0.0
+instance (Lift a, Lift b, Lift c, Lift d, Lift e, Lift f, Lift g)
+      => Lift (# a, b, c, d, e, f, g #) where
+  liftTyped x = unsafeCodeCoerce (lift x)
+  lift (# a, b, c, d, e, f, g #)
+    = liftM UnboxedTupE $ sequence $ map (fmap Just) [ lift a, lift b, lift c
+                                                     , lift d, lift e, lift f
+                                                     , lift g ]
+
+-- | @since template-haskell-2.16.0.0
+instance (Lift a, Lift b) => Lift (# a | b #) where
+  liftTyped x = unsafeCodeCoerce (lift x)
+  lift x
+    = case x of
+        (# y | #) -> UnboxedSumE <$> lift y <*> pure 1 <*> pure 2
+        (# | y #) -> UnboxedSumE <$> lift y <*> pure 2 <*> pure 2
+
+-- | @since template-haskell-2.16.0.0
+instance (Lift a, Lift b, Lift c)
+      => Lift (# a | b | c #) where
+  liftTyped x = unsafeCodeCoerce (lift x)
+  lift x
+    = case x of
+        (# y | | #) -> UnboxedSumE <$> lift y <*> pure 1 <*> pure 3
+        (# | y | #) -> UnboxedSumE <$> lift y <*> pure 2 <*> pure 3
+        (# | | y #) -> UnboxedSumE <$> lift y <*> pure 3 <*> pure 3
+
+-- | @since template-haskell-2.16.0.0
+instance (Lift a, Lift b, Lift c, Lift d)
+      => Lift (# a | b | c | d #) where
+  liftTyped x = unsafeCodeCoerce (lift x)
+  lift x
+    = case x of
+        (# y | | | #) -> UnboxedSumE <$> lift y <*> pure 1 <*> pure 4
+        (# | y | | #) -> UnboxedSumE <$> lift y <*> pure 2 <*> pure 4
+        (# | | y | #) -> UnboxedSumE <$> lift y <*> pure 3 <*> pure 4
+        (# | | | y #) -> UnboxedSumE <$> lift y <*> pure 4 <*> pure 4
+
+-- | @since template-haskell-2.16.0.0
+instance (Lift a, Lift b, Lift c, Lift d, Lift e)
+      => Lift (# a | b | c | d | e #) where
+  liftTyped x = unsafeCodeCoerce (lift x)
+  lift x
+    = case x of
+        (# y | | | | #) -> UnboxedSumE <$> lift y <*> pure 1 <*> pure 5
+        (# | y | | | #) -> UnboxedSumE <$> lift y <*> pure 2 <*> pure 5
+        (# | | y | | #) -> UnboxedSumE <$> lift y <*> pure 3 <*> pure 5
+        (# | | | y | #) -> UnboxedSumE <$> lift y <*> pure 4 <*> pure 5
+        (# | | | | y #) -> UnboxedSumE <$> lift y <*> pure 5 <*> pure 5
+
+-- | @since template-haskell-2.16.0.0
+instance (Lift a, Lift b, Lift c, Lift d, Lift e, Lift f)
+      => Lift (# a | b | c | d | e | f #) where
+  liftTyped x = unsafeCodeCoerce (lift x)
+  lift x
+    = case x of
+        (# y | | | | | #) -> UnboxedSumE <$> lift y <*> pure 1 <*> pure 6
+        (# | y | | | | #) -> UnboxedSumE <$> lift y <*> pure 2 <*> pure 6
+        (# | | y | | | #) -> UnboxedSumE <$> lift y <*> pure 3 <*> pure 6
+        (# | | | y | | #) -> UnboxedSumE <$> lift y <*> pure 4 <*> pure 6
+        (# | | | | y | #) -> UnboxedSumE <$> lift y <*> pure 5 <*> pure 6
+        (# | | | | | y #) -> UnboxedSumE <$> lift y <*> pure 6 <*> pure 6
+
+-- | @since template-haskell-2.16.0.0
+instance (Lift a, Lift b, Lift c, Lift d, Lift e, Lift f, Lift g)
+      => Lift (# a | b | c | d | e | f | g #) where
+  liftTyped x = unsafeCodeCoerce (lift x)
+  lift x
+    = case x of
+        (# y | | | | | | #) -> UnboxedSumE <$> lift y <*> pure 1 <*> pure 7
+        (# | y | | | | | #) -> UnboxedSumE <$> lift y <*> pure 2 <*> pure 7
+        (# | | y | | | | #) -> UnboxedSumE <$> lift y <*> pure 3 <*> pure 7
+        (# | | | y | | | #) -> UnboxedSumE <$> lift y <*> pure 4 <*> pure 7
+        (# | | | | y | | #) -> UnboxedSumE <$> lift y <*> pure 5 <*> pure 7
+        (# | | | | | y | #) -> UnboxedSumE <$> lift y <*> pure 6 <*> pure 7
+        (# | | | | | | y #) -> UnboxedSumE <$> lift y <*> pure 7 <*> pure 7
+
+-- TH has a special form for literal strings,
+-- which we should take advantage of.
+-- NB: the lhs of the rule has no args, so that
+--     the rule will apply to a 'lift' all on its own
+--     which happens to be the way the type checker
+--     creates it.
+{-# RULES "TH:liftString" lift = \s -> return (LitE (StringL s)) #-}
+
+
+trueName, falseName :: Name
+trueName  = 'True
+falseName = 'False
+
+nothingName, justName :: Name
+nothingName = 'Nothing
+justName    = 'Just
+
+leftName, rightName :: Name
+leftName  = 'Left
+rightName = 'Right
+
+nonemptyName :: Name
+nonemptyName = '(:|)
+
+-----------------------------------------------------
+--
+--              Generic Lift implementations
+--
+-----------------------------------------------------
+
+-- | 'dataToQa' is an internal utility function for constructing generic
+-- conversion functions from types with 'Data' instances to various
+-- quasi-quoting representations.  See the source of 'dataToExpQ' and
+-- 'dataToPatQ' for two example usages: @mkCon@, @mkLit@
+-- and @appQ@ are overloadable to account for different syntax for
+-- expressions and patterns; @antiQ@ allows you to override type-specific
+-- cases, a common usage is just @const Nothing@, which results in
+-- no overloading.
+dataToQa  ::  forall m a k q. (Quote m, Data a)
+          =>  (Name -> k)
+          ->  (Lit -> m q)
+          ->  (k -> [m q] -> m q)
+          ->  (forall b . Data b => b -> Maybe (m q))
+          ->  a
+          ->  m q
+dataToQa mkCon mkLit appCon antiQ t =
+    case antiQ t of
+      Nothing ->
+          case constrRep constr of
+            AlgConstr _ ->
+                appCon (mkCon funOrConName) conArgs
+              where
+                funOrConName :: Name
+                funOrConName =
+                    case showConstr constr of
+                      "(:)"       -> Name (mkOccName ":")
+                                          (NameG DataName
+                                                (mkPkgName "ghc-prim")
+                                                (mkModName "GHC.Types"))
+                      con@"[]"    -> Name (mkOccName con)
+                                          (NameG DataName
+                                                (mkPkgName "ghc-prim")
+                                                (mkModName "GHC.Types"))
+                      con@('(':_) -> Name (mkOccName con)
+                                          (NameG DataName
+                                                (mkPkgName "ghc-prim")
+                                                (mkModName "GHC.Tuple"))
+
+                      -- Tricky case: see Note [Data for non-algebraic types]
+                      fun@(x:_)   | startsVarSym x || startsVarId x
+                                  -> mkNameG_v tyconPkg tyconMod fun
+                      con         -> mkNameG_d tyconPkg tyconMod con
+
+                  where
+                    tycon :: TyCon
+                    tycon = (typeRepTyCon . typeOf) t
+
+                    tyconPkg, tyconMod :: String
+                    tyconPkg = tyConPackage tycon
+                    tyconMod = tyConModule  tycon
+
+                conArgs :: [m q]
+                conArgs = gmapQ (dataToQa mkCon mkLit appCon antiQ) t
+            IntConstr n ->
+                mkLit $ IntegerL n
+            FloatConstr n ->
+                mkLit $ RationalL n
+            CharConstr c ->
+                mkLit $ CharL c
+        where
+          constr :: Constr
+          constr = toConstr t
+
+      Just y -> y
+
+
+{- Note [Data for non-algebraic types]
+~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+Class Data was originally intended for algebraic data types.  But
+it is possible to use it for abstract types too.  For example, in
+package `text` we find
+
+  instance Data Text where
+    ...
+    toConstr _ = packConstr
+
+  packConstr :: Constr
+  packConstr = mkConstr textDataType "pack" [] Prefix
+
+Here `packConstr` isn't a real data constructor, it's an ordinary
+function.  Two complications
+
+* In such a case, we must take care to build the Name using
+  mkNameG_v (for values), not mkNameG_d (for data constructors).
+  See #10796.
+
+* The pseudo-constructor is named only by its string, here "pack".
+  But 'dataToQa' needs the TyCon of its defining module, and has
+  to assume it's defined in the same module as the TyCon itself.
+  But nothing enforces that; #12596 shows what goes wrong if
+  "pack" is defined in a different module than the data type "Text".
+  -}
+
+-- | 'dataToExpQ' converts a value to a 'Exp' representation of the
+-- same value, in the SYB style. It is generalized to take a function
+-- override type-specific cases; see 'liftData' for a more commonly
+-- used variant.
+dataToExpQ  ::  (Quote m, Data a)
+            =>  (forall b . Data b => b -> Maybe (m Exp))
+            ->  a
+            ->  m Exp
+dataToExpQ = dataToQa varOrConE litE (foldl appE)
+    where
+          -- Make sure that VarE is used if the Constr value relies on a
+          -- function underneath the surface (instead of a constructor).
+          -- See #10796.
+          varOrConE s =
+            case nameSpace s of
+                 Just VarName      -> return (VarE s)
+                 Just (FldName {}) -> return (VarE s)
+                 Just DataName     -> return (ConE s)
+                 _ -> error $ "Can't construct an expression from name "
+                           ++ showName s
+          appE x y = do { a <- x; b <- y; return (AppE a b)}
+          litE c = return (LitE c)
+
+-- | 'liftData' is a variant of 'lift' in the 'Lift' type class which
+-- works for any type with a 'Data' instance.
+liftData :: (Quote m, Data a) => a -> m Exp
+liftData = dataToExpQ (const Nothing)
+
+-- | 'dataToPatQ' converts a value to a 'Pat' representation of the same
+-- value, in the SYB style. It takes a function to handle type-specific cases,
+-- alternatively, pass @const Nothing@ to get default behavior.
+dataToPatQ  ::  (Quote m, Data a)
+            =>  (forall b . Data b => b -> Maybe (m Pat))
+            ->  a
+            ->  m Pat
+dataToPatQ = dataToQa id litP conP
+    where litP l = return (LitP l)
+          conP n ps =
+            case nameSpace n of
+                Just DataName -> do
+                    ps' <- sequence ps
+                    return (ConP n [] ps')
+                _ -> error $ "Can't construct a pattern from name "
+                          ++ showName n
diff --git a/libraries/ghc-internal/src/GHC/Internal/TH/Quote.hs b/libraries/ghc-internal/src/GHC/Internal/TH/Quote.hs
new file mode 100644
index 0000000000000000000000000000000000000000..45d4f34938cefe44d87fdd2442e7fba45a076911
--- /dev/null
+++ b/libraries/ghc-internal/src/GHC/Internal/TH/Quote.hs
@@ -0,0 +1,42 @@
+{-# LANGUAGE CPP, RankNTypes, ScopedTypeVariables, Trustworthy #-}
+{- |
+Module : GHC.Internal.TH.Quote
+Description : Quasi-quoting support for Template Haskell
+
+Template Haskell supports quasiquoting, which permits users to construct
+program fragments by directly writing concrete syntax.  A quasiquoter is
+essentially a function with takes a string to a Template Haskell AST.
+This module defines the 'QuasiQuoter' datatype, which specifies a
+quasiquoter @q@ which can be invoked using the syntax
+@[q| ... string to parse ... |]@ when the @QuasiQuotes@ language
+extension is enabled, and some utility functions for manipulating
+quasiquoters.  Nota bene: this package does not define any parsers,
+that is up to you.
+
+This is an internal module. Please import 'Language.Haskell.TH.Quote' instead.
+-}
+module GHC.Internal.TH.Quote(
+        QuasiQuoter(..),
+    ) where
+
+import GHC.Internal.TH.Syntax
+import GHC.Internal.Base hiding (Type)
+
+
+-- | The 'QuasiQuoter' type, a value @q@ of this type can be used
+-- in the syntax @[q| ... string to parse ...|]@.  In fact, for
+-- convenience, a 'QuasiQuoter' actually defines multiple quasiquoters
+-- to be used in different splice contexts; if you are only interested
+-- in defining a quasiquoter to be used for expressions, you would
+-- define a 'QuasiQuoter' with only 'quoteExp', and leave the other
+-- fields stubbed out with errors.
+data QuasiQuoter = QuasiQuoter {
+    -- | Quasi-quoter for expressions, invoked by quotes like @lhs = $[q|...]@
+    quoteExp  :: String -> Q Exp,
+    -- | Quasi-quoter for patterns, invoked by quotes like @f $[q|...] = rhs@
+    quotePat  :: String -> Q Pat,
+    -- | Quasi-quoter for types, invoked by quotes like @f :: $[q|...]@
+    quoteType :: String -> Q Type,
+    -- | Quasi-quoter for declarations, invoked by top-level quotes
+    quoteDec  :: String -> Q [Dec]
+    }
diff --git a/libraries/template-haskell/Language/Haskell/TH/Lib/Syntax.hs b/libraries/ghc-internal/src/GHC/Internal/TH/Syntax.hs
similarity index 80%
rename from libraries/template-haskell/Language/Haskell/TH/Lib/Syntax.hs
rename to libraries/ghc-internal/src/GHC/Internal/TH/Syntax.hs
index 8d080fef9bb56867ffa346013ed47cf2b9761f4b..1f2c76a38d7af5d07dc176c3f1f43bdc3cac2b95 100644
--- a/libraries/template-haskell/Language/Haskell/TH/Lib/Syntax.hs
+++ b/libraries/ghc-internal/src/GHC/Internal/TH/Syntax.hs
@@ -7,7 +7,6 @@
              Trustworthy, DeriveFunctor, DeriveTraversable,
              BangPatterns, RecordWildCards, ImplicitParams #-}
 
-{-# OPTIONS_GHC -fno-warn-inline-rule-shadowing #-}
 {-# LANGUAGE TemplateHaskellQuotes #-}
 {-# LANGUAGE StandaloneKindSignatures #-}
 
@@ -18,21 +17,21 @@
 -- guarantees for this module from version to version.
 --
 -- Import "Language.Haskell.TH" or "Language.Haskell.TH.Syntax" instead!
-module Language.Haskell.TH.Lib.Syntax
-    ( module Language.Haskell.TH.Lib.Syntax
+module GHC.Internal.TH.Syntax
+    ( module GHC.Internal.TH.Syntax
       -- * Language extensions
-    , module Language.Haskell.TH.LanguageExtensions
+    , module GHC.Internal.LanguageExtensions
     , ForeignSrcLang(..)
     -- * Notes
     -- ** Unresolved Infix
     -- $infix
     ) where
 
+#ifdef BOOTSTRAP_TH
 import Prelude
 import Data.Data hiding (Fixity(..))
 import Data.IORef
 import System.IO.Unsafe ( unsafePerformIO )
-import System.FilePath
 import GHC.IO.Unsafe    ( unsafeDupableInterleaveIO )
 import Control.Monad.IO.Class (MonadIO (..))
 import Control.Monad.Fix (MonadFix (..))
@@ -46,34 +45,41 @@ import Data.Word
 import GHC.Generics     ( Generic )
 import qualified Data.Kind as Kind (Type)
 import GHC.Ptr          ( Ptr, plusPtr )
-import GHC.Lexeme       ( startsVarSym, startsVarId )
-import GHC.ForeignSrcLang.Type
-import Language.Haskell.TH.LanguageExtensions
-import Prelude hiding (Applicative(..))
 import Foreign.ForeignPtr
 import Foreign.C.String
 import Foreign.C.Types
-import GHC.Types        (TYPE, RuntimeRep(..), Levity(..))
-
-#ifndef BOOTSTRAP_TH
-import Control.Monad (liftM)
-import Data.Array.Byte (ByteArray(..))
-import Data.Char (ord)
-import Data.Int
-import Data.Ratio
-import Data.Void        ( Void, absurd )
-import GHC.CString      ( unpackCString# )
-import GHC.Exts
-  ( ByteArray#, unsafeFreezeByteArray#, copyAddrToByteArray#, newByteArray#
-  , isByteArrayPinned#, isTrue#, sizeofByteArray#, unsafeCoerce#, byteArrayContents#
-  , copyByteArray#, newPinnedByteArray#)
-import GHC.ForeignPtr (ForeignPtr(..), ForeignPtrContents(..))
-import GHC.Prim         ( Int#, Word#, Char#, Double#, Float#, Addr# )
-import GHC.ST (ST(..), runST)
-import GHC.Types        ( Int(..), Word(..), Char(..), Double(..), Float(..))
-import Numeric.Natural
-import qualified Data.Fixed as Fixed
+import GHC.Types        (TYPE, RuntimeRep(..))
+#else
+import GHC.Internal.Base hiding (Type, Module, sequence)
+import GHC.Internal.Data.Data hiding (Fixity(..))
+import GHC.Internal.Data.Traversable
+import GHC.Internal.Word
+import GHC.Internal.Generics (Generic)
+import GHC.Internal.IORef
+import GHC.Internal.System.IO
+import GHC.Internal.Show
+import GHC.Internal.Integer
+import GHC.Internal.Real
+import GHC.Internal.Data.Foldable
+import GHC.Internal.Foreign.Ptr
+import GHC.Internal.ForeignPtr
+import GHC.Internal.Data.Typeable
+import GHC.Internal.Control.Monad.IO.Class
+import GHC.Internal.Foreign.C.Types
+import GHC.Internal.Foreign.C.String
+import GHC.Internal.Control.Monad.Fail
+import GHC.Internal.Control.Monad.Fix
+import GHC.Internal.Control.Exception
+import GHC.Internal.Num
+import GHC.Internal.IO.Unsafe
+import GHC.Internal.List (dropWhile, break, replicate, reverse, last)
+import GHC.Internal.MVar
+import GHC.Internal.IO.Exception
+import GHC.Internal.Unicode
+import qualified GHC.Types as Kind (Type)
 #endif
+import GHC.Internal.ForeignSrcLang
+import GHC.Internal.LanguageExtensions
 
 -----------------------------------------------------
 --
@@ -784,13 +790,6 @@ runIO m = Q (qRunIO m)
 getPackageRoot :: Q FilePath
 getPackageRoot = Q qGetPackageRoot
 
--- | The input is a filepath, which if relative is offset by the package root.
-makeRelativeToProject :: FilePath -> Q FilePath
-makeRelativeToProject fp | isRelative fp = do
-  root <- getPackageRoot
-  return (root </> fp)
-makeRelativeToProject fp = return fp
-
 
 
 -- | Record external files that runIO is using (dependent upon).
@@ -968,570 +967,11 @@ sequenceQ :: forall m . Monad m => forall a . [m a] -> m [a]
 sequenceQ = sequence
 
 
------------------------------------------------------
---
---              The Lift class
---
------------------------------------------------------
-
--- | A 'Lift' instance can have any of its values turned into a Template
--- Haskell expression. This is needed when a value used within a Template
--- Haskell quotation is bound outside the Oxford brackets (@[| ... |]@ or
--- @[|| ... ||]@) but not at the top level. As an example:
---
--- > add1 :: Int -> Code Q Int
--- > add1 x = [|| x + 1 ||]
---
--- Template Haskell has no way of knowing what value @x@ will take on at
--- splice-time, so it requires the type of @x@ to be an instance of 'Lift'.
---
--- A 'Lift' instance must satisfy @$(lift x) ≡ x@ and @$$(liftTyped x) ≡ x@
--- for all @x@, where @$(...)@ and @$$(...)@ are Template Haskell splices.
--- It is additionally expected that @'lift' x ≡ 'unTypeCode' ('liftTyped' x)@.
---
--- 'Lift' instances can be derived automatically by use of the @-XDeriveLift@
--- GHC language extension:
---
--- > {-# LANGUAGE DeriveLift #-}
--- > module Foo where
--- >
--- > import Language.Haskell.TH.Syntax
--- >
--- > data Bar a = Bar1 a (Bar a) | Bar2 String
--- >   deriving Lift
---
--- Representation-polymorphic since /template-haskell-2.16.0.0/.
-class Lift (t :: TYPE r) where
-  -- | Turn a value into a Template Haskell expression, suitable for use in
-  -- a splice.
-  lift :: Quote m => t -> m Exp
-  default lift :: (r ~ ('BoxedRep 'Lifted), Quote m) => t -> m Exp
-  lift = unTypeCode . liftTyped
-
-  -- | Turn a value into a Template Haskell typed expression, suitable for use
-  -- in a typed splice.
-  --
-  -- @since 2.16.0.0
-  liftTyped :: Quote m => t -> Code m t
-
-
--- See Note [Bootstrapping Template Haskell]
-#ifndef BOOTSTRAP_TH
--- If you add any instances here, consider updating test th/TH_Lift
-instance Lift Integer where
-  liftTyped x = unsafeCodeCoerce (lift x)
-  lift x = return (LitE (IntegerL x))
-
-instance Lift Int where
-  liftTyped x = unsafeCodeCoerce (lift x)
-  lift x = return (LitE (IntegerL (fromIntegral x)))
-
--- | @since 2.16.0.0
-instance Lift Int# where
-  liftTyped x = unsafeCodeCoerce (lift x)
-  lift x = return (LitE (IntPrimL (fromIntegral (I# x))))
-
-instance Lift Int8 where
-  liftTyped x = unsafeCodeCoerce (lift x)
-  lift x = return (LitE (IntegerL (fromIntegral x)))
-
-instance Lift Int16 where
-  liftTyped x = unsafeCodeCoerce (lift x)
-  lift x = return (LitE (IntegerL (fromIntegral x)))
-
-instance Lift Int32 where
-  liftTyped x = unsafeCodeCoerce (lift x)
-  lift x = return (LitE (IntegerL (fromIntegral x)))
-
-instance Lift Int64 where
-  liftTyped x = unsafeCodeCoerce (lift x)
-  lift x = return (LitE (IntegerL (fromIntegral x)))
-
--- | @since 2.16.0.0
-instance Lift Word# where
-  liftTyped x = unsafeCodeCoerce (lift x)
-  lift x = return (LitE (WordPrimL (fromIntegral (W# x))))
-
-instance Lift Word where
-  liftTyped x = unsafeCodeCoerce (lift x)
-  lift x = return (LitE (IntegerL (fromIntegral x)))
-
-instance Lift Word8 where
-  liftTyped x = unsafeCodeCoerce (lift x)
-  lift x = return (LitE (IntegerL (fromIntegral x)))
-
-instance Lift Word16 where
-  liftTyped x = unsafeCodeCoerce (lift x)
-  lift x = return (LitE (IntegerL (fromIntegral x)))
-
-instance Lift Word32 where
-  liftTyped x = unsafeCodeCoerce (lift x)
-  lift x = return (LitE (IntegerL (fromIntegral x)))
-
-instance Lift Word64 where
-  liftTyped x = unsafeCodeCoerce (lift x)
-  lift x = return (LitE (IntegerL (fromIntegral x)))
-
-instance Lift Natural where
-  liftTyped x = unsafeCodeCoerce (lift x)
-  lift x = return (LitE (IntegerL (fromIntegral x)))
-
-instance Lift (Fixed.Fixed a) where
-  liftTyped x = unsafeCodeCoerce (lift x)
-  lift (Fixed.MkFixed x) = do
-    ex <- lift x
-    return (ConE mkFixedName `AppE` ex)
-    where
-      mkFixedName = 'Fixed.MkFixed
-
-instance Integral a => Lift (Ratio a) where
-  liftTyped x = unsafeCodeCoerce (lift x)
-  lift x = return (LitE (RationalL (toRational x)))
-
-instance Lift Float where
-  liftTyped x = unsafeCodeCoerce (lift x)
-  lift x = return (LitE (RationalL (toRational x)))
-
--- | @since 2.16.0.0
-instance Lift Float# where
-  liftTyped x = unsafeCodeCoerce (lift x)
-  lift x = return (LitE (FloatPrimL (toRational (F# x))))
-
-instance Lift Double where
-  liftTyped x = unsafeCodeCoerce (lift x)
-  lift x = return (LitE (RationalL (toRational x)))
-
--- | @since 2.16.0.0
-instance Lift Double# where
-  liftTyped x = unsafeCodeCoerce (lift x)
-  lift x = return (LitE (DoublePrimL (toRational (D# x))))
-
-instance Lift Char where
-  liftTyped x = unsafeCodeCoerce (lift x)
-  lift x = return (LitE (CharL x))
-
--- | @since 2.16.0.0
-instance Lift Char# where
-  liftTyped x = unsafeCodeCoerce (lift x)
-  lift x = return (LitE (CharPrimL (C# x)))
-
-instance Lift Bool where
-  liftTyped x = unsafeCodeCoerce (lift x)
-
-  lift True  = return (ConE trueName)
-  lift False = return (ConE falseName)
-
--- | Produces an 'Addr#' literal from the NUL-terminated C-string starting at
--- the given memory address.
---
--- @since 2.16.0.0
-instance Lift Addr# where
-  liftTyped x = unsafeCodeCoerce (lift x)
-  lift x
-    = return (LitE (StringPrimL (map (fromIntegral . ord) (unpackCString# x))))
-
--- |
--- @since 2.19.0.0
-instance Lift ByteArray where
-  liftTyped x = unsafeCodeCoerce (lift x)
-  lift (ByteArray b) = return
-    (AppE (AppE (VarE addrToByteArrayName) (LitE (IntegerL (fromIntegral len))))
-      (LitE (BytesPrimL (Bytes ptr 0 (fromIntegral len)))))
-    where
-      len# = sizeofByteArray# b
-      len = I# len#
-      pb :: ByteArray#
-      !(ByteArray pb)
-        | isTrue# (isByteArrayPinned# b) = ByteArray b
-        | otherwise = runST $ ST $
-          \s -> case newPinnedByteArray# len# s of
-            (# s', mb #) -> case copyByteArray# b 0# mb 0# len# s' of
-              s'' -> case unsafeFreezeByteArray# mb s'' of
-                (# s''', ret #) -> (# s''', ByteArray ret #)
-      ptr :: ForeignPtr Word8
-      ptr = ForeignPtr (byteArrayContents# pb) (PlainPtr (unsafeCoerce# pb))
-
-addrToByteArrayName :: Name
-addrToByteArrayName = 'addrToByteArray
-
-addrToByteArray :: Int -> Addr# -> ByteArray
-addrToByteArray (I# len) addr = runST $ ST $
-  \s -> case newByteArray# len s of
-    (# s', mb #) -> case copyAddrToByteArray# addr mb 0# len s' of
-      s'' -> case unsafeFreezeByteArray# mb s'' of
-        (# s''', ret #) -> (# s''', ByteArray ret #)
-
-instance Lift a => Lift (Maybe a) where
-  liftTyped x = unsafeCodeCoerce (lift x)
-
-  lift Nothing  = return (ConE nothingName)
-  lift (Just x) = liftM (ConE justName `AppE`) (lift x)
-
-instance (Lift a, Lift b) => Lift (Either a b) where
-  liftTyped x = unsafeCodeCoerce (lift x)
-
-  lift (Left x)  = liftM (ConE leftName  `AppE`) (lift x)
-  lift (Right y) = liftM (ConE rightName `AppE`) (lift y)
-
-instance Lift a => Lift [a] where
-  liftTyped x = unsafeCodeCoerce (lift x)
-  lift xs = do { xs' <- mapM lift xs; return (ListE xs') }
-
-liftString :: Quote m => String -> m Exp
--- Used in GHC.Tc.Gen.Expr to short-circuit the lifting for strings
-liftString s = return (LitE (StringL s))
-
--- | @since 2.15.0.0
-instance Lift a => Lift (NonEmpty a) where
-  liftTyped x = unsafeCodeCoerce (lift x)
-
-  lift (x :| xs) = do
-    x' <- lift x
-    xs' <- lift xs
-    return (InfixE (Just x') (ConE nonemptyName) (Just xs'))
-
--- | @since 2.15.0.0
-instance Lift Void where
-  liftTyped = liftCode . absurd
-  lift = pure . absurd
-
-instance Lift () where
-  liftTyped x = unsafeCodeCoerce (lift x)
-  lift () = return (ConE (tupleDataName 0))
-
-instance (Lift a, Lift b) => Lift (a, b) where
-  liftTyped x = unsafeCodeCoerce (lift x)
-  lift (a, b)
-    = liftM TupE $ sequence $ map (fmap Just) [lift a, lift b]
-
-instance (Lift a, Lift b, Lift c) => Lift (a, b, c) where
-  liftTyped x = unsafeCodeCoerce (lift x)
-  lift (a, b, c)
-    = liftM TupE $ sequence $ map (fmap Just) [lift a, lift b, lift c]
-
-instance (Lift a, Lift b, Lift c, Lift d) => Lift (a, b, c, d) where
-  liftTyped x = unsafeCodeCoerce (lift x)
-  lift (a, b, c, d)
-    = liftM TupE $ sequence $ map (fmap Just) [lift a, lift b, lift c, lift d]
-
-instance (Lift a, Lift b, Lift c, Lift d, Lift e)
-      => Lift (a, b, c, d, e) where
-  liftTyped x = unsafeCodeCoerce (lift x)
-  lift (a, b, c, d, e)
-    = liftM TupE $ sequence $ map (fmap Just) [ lift a, lift b
-                                              , lift c, lift d, lift e ]
-
-instance (Lift a, Lift b, Lift c, Lift d, Lift e, Lift f)
-      => Lift (a, b, c, d, e, f) where
-  liftTyped x = unsafeCodeCoerce (lift x)
-  lift (a, b, c, d, e, f)
-    = liftM TupE $ sequence $ map (fmap Just) [ lift a, lift b, lift c
-                                              , lift d, lift e, lift f ]
-
-instance (Lift a, Lift b, Lift c, Lift d, Lift e, Lift f, Lift g)
-      => Lift (a, b, c, d, e, f, g) where
-  liftTyped x = unsafeCodeCoerce (lift x)
-  lift (a, b, c, d, e, f, g)
-    = liftM TupE $ sequence $ map (fmap Just) [ lift a, lift b, lift c
-                                              , lift d, lift e, lift f, lift g ]
-
--- | @since 2.16.0.0
-instance Lift (# #) where
-  liftTyped x = unsafeCodeCoerce (lift x)
-  lift (# #) = return (ConE (unboxedTupleTypeName 0))
-
--- | @since 2.16.0.0
-instance (Lift a) => Lift (# a #) where
-  liftTyped x = unsafeCodeCoerce (lift x)
-  lift (# a #)
-    = liftM UnboxedTupE $ sequence $ map (fmap Just) [lift a]
-
--- | @since 2.16.0.0
-instance (Lift a, Lift b) => Lift (# a, b #) where
-  liftTyped x = unsafeCodeCoerce (lift x)
-  lift (# a, b #)
-    = liftM UnboxedTupE $ sequence $ map (fmap Just) [lift a, lift b]
-
--- | @since 2.16.0.0
-instance (Lift a, Lift b, Lift c)
-      => Lift (# a, b, c #) where
-  liftTyped x = unsafeCodeCoerce (lift x)
-  lift (# a, b, c #)
-    = liftM UnboxedTupE $ sequence $ map (fmap Just) [lift a, lift b, lift c]
-
--- | @since 2.16.0.0
-instance (Lift a, Lift b, Lift c, Lift d)
-      => Lift (# a, b, c, d #) where
-  liftTyped x = unsafeCodeCoerce (lift x)
-  lift (# a, b, c, d #)
-    = liftM UnboxedTupE $ sequence $ map (fmap Just) [ lift a, lift b
-                                                     , lift c, lift d ]
-
--- | @since 2.16.0.0
-instance (Lift a, Lift b, Lift c, Lift d, Lift e)
-      => Lift (# a, b, c, d, e #) where
-  liftTyped x = unsafeCodeCoerce (lift x)
-  lift (# a, b, c, d, e #)
-    = liftM UnboxedTupE $ sequence $ map (fmap Just) [ lift a, lift b
-                                                     , lift c, lift d, lift e ]
-
--- | @since 2.16.0.0
-instance (Lift a, Lift b, Lift c, Lift d, Lift e, Lift f)
-      => Lift (# a, b, c, d, e, f #) where
-  liftTyped x = unsafeCodeCoerce (lift x)
-  lift (# a, b, c, d, e, f #)
-    = liftM UnboxedTupE $ sequence $ map (fmap Just) [ lift a, lift b, lift c
-                                                     , lift d, lift e, lift f ]
-
--- | @since 2.16.0.0
-instance (Lift a, Lift b, Lift c, Lift d, Lift e, Lift f, Lift g)
-      => Lift (# a, b, c, d, e, f, g #) where
-  liftTyped x = unsafeCodeCoerce (lift x)
-  lift (# a, b, c, d, e, f, g #)
-    = liftM UnboxedTupE $ sequence $ map (fmap Just) [ lift a, lift b, lift c
-                                                     , lift d, lift e, lift f
-                                                     , lift g ]
-
--- | @since 2.16.0.0
-instance (Lift a, Lift b) => Lift (# a | b #) where
-  liftTyped x = unsafeCodeCoerce (lift x)
-  lift x
-    = case x of
-        (# y | #) -> UnboxedSumE <$> lift y <*> pure 1 <*> pure 2
-        (# | y #) -> UnboxedSumE <$> lift y <*> pure 2 <*> pure 2
-
--- | @since 2.16.0.0
-instance (Lift a, Lift b, Lift c)
-      => Lift (# a | b | c #) where
-  liftTyped x = unsafeCodeCoerce (lift x)
-  lift x
-    = case x of
-        (# y | | #) -> UnboxedSumE <$> lift y <*> pure 1 <*> pure 3
-        (# | y | #) -> UnboxedSumE <$> lift y <*> pure 2 <*> pure 3
-        (# | | y #) -> UnboxedSumE <$> lift y <*> pure 3 <*> pure 3
-
--- | @since 2.16.0.0
-instance (Lift a, Lift b, Lift c, Lift d)
-      => Lift (# a | b | c | d #) where
-  liftTyped x = unsafeCodeCoerce (lift x)
-  lift x
-    = case x of
-        (# y | | | #) -> UnboxedSumE <$> lift y <*> pure 1 <*> pure 4
-        (# | y | | #) -> UnboxedSumE <$> lift y <*> pure 2 <*> pure 4
-        (# | | y | #) -> UnboxedSumE <$> lift y <*> pure 3 <*> pure 4
-        (# | | | y #) -> UnboxedSumE <$> lift y <*> pure 4 <*> pure 4
-
--- | @since 2.16.0.0
-instance (Lift a, Lift b, Lift c, Lift d, Lift e)
-      => Lift (# a | b | c | d | e #) where
-  liftTyped x = unsafeCodeCoerce (lift x)
-  lift x
-    = case x of
-        (# y | | | | #) -> UnboxedSumE <$> lift y <*> pure 1 <*> pure 5
-        (# | y | | | #) -> UnboxedSumE <$> lift y <*> pure 2 <*> pure 5
-        (# | | y | | #) -> UnboxedSumE <$> lift y <*> pure 3 <*> pure 5
-        (# | | | y | #) -> UnboxedSumE <$> lift y <*> pure 4 <*> pure 5
-        (# | | | | y #) -> UnboxedSumE <$> lift y <*> pure 5 <*> pure 5
-
--- | @since 2.16.0.0
-instance (Lift a, Lift b, Lift c, Lift d, Lift e, Lift f)
-      => Lift (# a | b | c | d | e | f #) where
-  liftTyped x = unsafeCodeCoerce (lift x)
-  lift x
-    = case x of
-        (# y | | | | | #) -> UnboxedSumE <$> lift y <*> pure 1 <*> pure 6
-        (# | y | | | | #) -> UnboxedSumE <$> lift y <*> pure 2 <*> pure 6
-        (# | | y | | | #) -> UnboxedSumE <$> lift y <*> pure 3 <*> pure 6
-        (# | | | y | | #) -> UnboxedSumE <$> lift y <*> pure 4 <*> pure 6
-        (# | | | | y | #) -> UnboxedSumE <$> lift y <*> pure 5 <*> pure 6
-        (# | | | | | y #) -> UnboxedSumE <$> lift y <*> pure 6 <*> pure 6
-
--- | @since 2.16.0.0
-instance (Lift a, Lift b, Lift c, Lift d, Lift e, Lift f, Lift g)
-      => Lift (# a | b | c | d | e | f | g #) where
-  liftTyped x = unsafeCodeCoerce (lift x)
-  lift x
-    = case x of
-        (# y | | | | | | #) -> UnboxedSumE <$> lift y <*> pure 1 <*> pure 7
-        (# | y | | | | | #) -> UnboxedSumE <$> lift y <*> pure 2 <*> pure 7
-        (# | | y | | | | #) -> UnboxedSumE <$> lift y <*> pure 3 <*> pure 7
-        (# | | | y | | | #) -> UnboxedSumE <$> lift y <*> pure 4 <*> pure 7
-        (# | | | | y | | #) -> UnboxedSumE <$> lift y <*> pure 5 <*> pure 7
-        (# | | | | | y | #) -> UnboxedSumE <$> lift y <*> pure 6 <*> pure 7
-        (# | | | | | | y #) -> UnboxedSumE <$> lift y <*> pure 7 <*> pure 7
-
--- TH has a special form for literal strings,
--- which we should take advantage of.
--- NB: the lhs of the rule has no args, so that
---     the rule will apply to a 'lift' all on its own
---     which happens to be the way the type checker
---     creates it.
-{-# RULES "TH:liftString" lift = \s -> return (LitE (StringL s)) #-}
-
-
-trueName, falseName :: Name
-trueName  = 'True
-falseName = 'False
-
-nothingName, justName :: Name
-nothingName = 'Nothing
-justName    = 'Just
-
-leftName, rightName :: Name
-leftName  = 'Left
-rightName = 'Right
-
-nonemptyName :: Name
-nonemptyName = '(:|)
-#endif
 
 oneName, manyName :: Name
 oneName  = mkNameG DataName "ghc-prim" "GHC.Types" "One"
 manyName = mkNameG DataName "ghc-prim" "GHC.Types" "Many"
 
------------------------------------------------------
---
---              Generic Lift implementations
---
------------------------------------------------------
-
--- | 'dataToQa' is an internal utility function for constructing generic
--- conversion functions from types with 'Data' instances to various
--- quasi-quoting representations.  See the source of 'dataToExpQ' and
--- 'dataToPatQ' for two example usages: @mkCon@, @mkLit@
--- and @appQ@ are overloadable to account for different syntax for
--- expressions and patterns; @antiQ@ allows you to override type-specific
--- cases, a common usage is just @const Nothing@, which results in
--- no overloading.
-dataToQa  ::  forall m a k q. (Quote m, Data a)
-          =>  (Name -> k)
-          ->  (Lit -> m q)
-          ->  (k -> [m q] -> m q)
-          ->  (forall b . Data b => b -> Maybe (m q))
-          ->  a
-          ->  m q
-dataToQa mkCon mkLit appCon antiQ t =
-    case antiQ t of
-      Nothing ->
-          case constrRep constr of
-            AlgConstr _ ->
-                appCon (mkCon funOrConName) conArgs
-              where
-                funOrConName :: Name
-                funOrConName =
-                    case showConstr constr of
-                      "(:)"       -> Name (mkOccName ":")
-                                          (NameG DataName
-                                                (mkPkgName "ghc-prim")
-                                                (mkModName "GHC.Types"))
-                      con@"[]"    -> Name (mkOccName con)
-                                          (NameG DataName
-                                                (mkPkgName "ghc-prim")
-                                                (mkModName "GHC.Types"))
-                      con@('(':_) -> Name (mkOccName con)
-                                          (NameG DataName
-                                                (mkPkgName "ghc-prim")
-                                                (mkModName "GHC.Tuple"))
-
-                      -- Tricky case: see Note [Data for non-algebraic types]
-                      fun@(x:_)   | startsVarSym x || startsVarId x
-                                  -> mkNameG_v tyconPkg tyconMod fun
-                      con         -> mkNameG_d tyconPkg tyconMod con
-
-                  where
-                    tycon :: TyCon
-                    tycon = (typeRepTyCon . typeOf) t
-
-                    tyconPkg, tyconMod :: String
-                    tyconPkg = tyConPackage tycon
-                    tyconMod = tyConModule  tycon
-
-                conArgs :: [m q]
-                conArgs = gmapQ (dataToQa mkCon mkLit appCon antiQ) t
-            IntConstr n ->
-                mkLit $ IntegerL n
-            FloatConstr n ->
-                mkLit $ RationalL n
-            CharConstr c ->
-                mkLit $ CharL c
-        where
-          constr :: Constr
-          constr = toConstr t
-
-      Just y -> y
-
-
-{- Note [Data for non-algebraic types]
-~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
-Class Data was originally intended for algebraic data types.  But
-it is possible to use it for abstract types too.  For example, in
-package `text` we find
-
-  instance Data Text where
-    ...
-    toConstr _ = packConstr
-
-  packConstr :: Constr
-  packConstr = mkConstr textDataType "pack" [] Prefix
-
-Here `packConstr` isn't a real data constructor, it's an ordinary
-function.  Two complications
-
-* In such a case, we must take care to build the Name using
-  mkNameG_v (for values), not mkNameG_d (for data constructors).
-  See #10796.
-
-* The pseudo-constructor is named only by its string, here "pack".
-  But 'dataToQa' needs the TyCon of its defining module, and has
-  to assume it's defined in the same module as the TyCon itself.
-  But nothing enforces that; #12596 shows what goes wrong if
-  "pack" is defined in a different module than the data type "Text".
-  -}
-
--- | 'dataToExpQ' converts a value to a 'Exp' representation of the
--- same value, in the SYB style. It is generalized to take a function
--- override type-specific cases; see 'liftData' for a more commonly
--- used variant.
-dataToExpQ  ::  (Quote m, Data a)
-            =>  (forall b . Data b => b -> Maybe (m Exp))
-            ->  a
-            ->  m Exp
-dataToExpQ = dataToQa varOrConE litE (foldl appE)
-    where
-          -- Make sure that VarE is used if the Constr value relies on a
-          -- function underneath the surface (instead of a constructor).
-          -- See #10796.
-          varOrConE s =
-            case nameSpace s of
-                 Just VarName      -> return (VarE s)
-                 Just (FldName {}) -> return (VarE s)
-                 Just DataName     -> return (ConE s)
-                 _ -> error $ "Can't construct an expression from name "
-                           ++ showName s
-          appE x y = do { a <- x; b <- y; return (AppE a b)}
-          litE c = return (LitE c)
-
--- | 'liftData' is a variant of 'lift' in the 'Lift' type class which
--- works for any type with a 'Data' instance.
-liftData :: (Quote m, Data a) => a -> m Exp
-liftData = dataToExpQ (const Nothing)
-
--- | 'dataToPatQ' converts a value to a 'Pat' representation of the same
--- value, in the SYB style. It takes a function to handle type-specific cases,
--- alternatively, pass @const Nothing@ to get default behavior.
-dataToPatQ  ::  (Quote m, Data a)
-            =>  (forall b . Data b => b -> Maybe (m Pat))
-            ->  a
-            ->  m Pat
-dataToPatQ = dataToQa id litP conP
-    where litP l = return (LitP l)
-          conP n ps =
-            case nameSpace n of
-                Just DataName -> do
-                    ps' <- sequence ps
-                    return (ConP n [] ps')
-                _ -> error $ "Can't construct a pattern from name "
-                          ++ showName n
 
 -----------------------------------------------------
 --              Names and uniques
diff --git a/libraries/ghci/GHCi/Message.hs b/libraries/ghci/GHCi/Message.hs
index 2660285660f42eae860858776271b6ecca30c750..09efb86cdbffee910c5f5db752f3ef42c599a4bf 100644
--- a/libraries/ghci/GHCi/Message.hs
+++ b/libraries/ghci/GHCi/Message.hs
@@ -53,8 +53,7 @@ import Data.Map (Map)
 import Foreign
 import GHC.Generics
 import GHC.Stack.CCS
-import qualified Language.Haskell.TH        as TH
-import qualified Language.Haskell.TH.Syntax as TH
+import qualified GHC.Internal.TH.Syntax        as TH
 import System.Exit
 import System.IO
 import System.IO.Error
diff --git a/libraries/ghci/GHCi/TH.hs b/libraries/ghci/GHCi/TH.hs
index a99cd5892b9ce69c3974f7514bec81d4e6c9b016..b4dfa4022a15c9f478e0f8fc1d648078e9398ad6 100644
--- a/libraries/ghci/GHCi/TH.hs
+++ b/libraries/ghci/GHCi/TH.hs
@@ -110,8 +110,7 @@ import Data.Map (Map)
 import qualified Data.Map as M
 import Data.Maybe
 import GHC.Desugar
-import qualified Language.Haskell.TH        as TH
-import qualified Language.Haskell.TH.Syntax as TH
+import qualified GHC.Internal.TH.Syntax as TH
 import Unsafe.Coerce
 
 -- | Create a new instance of 'QState'
diff --git a/libraries/ghci/GHCi/TH/Binary.hs b/libraries/ghci/GHCi/TH/Binary.hs
index 7d6b6bcd2d499ec1ccd8e3fd05bb73baf897b9c3..61205e06849c3569ce38cc06c7499892b3f761c1 100644
--- a/libraries/ghci/GHCi/TH/Binary.hs
+++ b/libraries/ghci/GHCi/TH/Binary.hs
@@ -12,8 +12,7 @@ import Data.Binary
 import qualified Data.ByteString as B
 import qualified Data.ByteString.Internal as B
 import GHC.Serialized
-import qualified Language.Haskell.TH        as TH
-import qualified Language.Haskell.TH.Syntax as TH
+import qualified GHC.Internal.TH.Syntax as TH
 -- Put these in a separate module because they take ages to compile
 
 instance Binary TH.Loc
diff --git a/libraries/ghci/ghci.cabal.in b/libraries/ghci/ghci.cabal.in
index c18d7850ce10d666854c7848902f3e54b24ac1ba..172cf9f888be29d9eb4f32e83fa8544c508d493b 100644
--- a/libraries/ghci/ghci.cabal.in
+++ b/libraries/ghci/ghci.cabal.in
@@ -25,8 +25,8 @@ Flag internal-interpreter
 Flag bootstrap
         Description:
           Enabled when building the stage1 compiler in order to vendor the in-tree
-          `template-haskell` library (including its dependency `ghc-boot-th`), while
-          allowing dependencies to depend on the boot `template-haskell` library.
+          `ghc-boot-th` library, and through that the in-tree TH AST defintions from
+          `ghc-internal`.
           See Note [Bootstrapping Template Haskell]
         Default: False
         Manual: True
@@ -97,10 +97,10 @@ library
 
     if flag(bootstrap)
       build-depends:
-            template-haskell-next == 2.22.*
+            ghc-boot-th-next  == @ProjectVersionMunged@
     else
       build-depends:
-            template-haskell      == 2.22.*
+            ghc-boot-th       == @ProjectVersionMunged@
 
     if !os(windows)
         Build-Depends: unix >= 2.7 && < 2.9
diff --git a/libraries/template-haskell/Language/Haskell/TH/Lib.hs b/libraries/template-haskell/Language/Haskell/TH/Lib.hs
index 27169d6342a5badf3a7a39cdad5f9c38bdd23132..afe108fbb5a70feabc3d4c17cedcf76b2b72b2d5 100644
--- a/libraries/template-haskell/Language/Haskell/TH/Lib.hs
+++ b/libraries/template-haskell/Language/Haskell/TH/Lib.hs
@@ -139,7 +139,7 @@ module Language.Haskell.TH.Lib (
 
    ) where
 
-import Language.Haskell.TH.Lib.Internal hiding
+import GHC.Internal.TH.Lib hiding
   ( tySynD
   , dataD
   , newtypeD
@@ -179,7 +179,7 @@ import Language.Haskell.TH.Lib.Internal hiding
   , Role
   , InjectivityAnn
   )
-import qualified Language.Haskell.TH.Lib.Internal as Internal
+import qualified GHC.Internal.TH.Lib as Internal
 import Language.Haskell.TH.Syntax
 
 import Control.Applicative (Applicative(..))
diff --git a/libraries/template-haskell/Language/Haskell/TH/Lib/Internal.hs b/libraries/template-haskell/Language/Haskell/TH/Lib/Internal.hs
index 532cef954d2202db0453bef4a8daaa9a247d6521..90bb7de919a688c5c73766f3d93b79c9eb8c36db 100644
--- a/libraries/template-haskell/Language/Haskell/TH/Lib/Internal.hs
+++ b/libraries/template-haskell/Language/Haskell/TH/Lib/Internal.hs
@@ -1,15 +1,11 @@
-{-# OPTIONS_HADDOCK not-home #-}
-{-# LANGUAGE PolyKinds #-}
-{-# LANGUAGE StandaloneKindSignatures #-}
-{-# LANGUAGE Trustworthy #-}
-
+{-# LANGUAGE Safe #-}
 -- |
 -- Language.Haskell.TH.Lib.Internal exposes some additional functionality that
 -- is used internally in GHC's integration with Template Haskell. This is not a
 -- part of the public API, and as such, there are no API guarantees for this
 -- module from version to version.
 
--- Why do we have both Language.Haskell.TH.Lib.Internal and
+-- Why do we have both GHC.Internal.TH.Lib and
 -- Language.Haskell.TH.Lib? Ultimately, it's because the functions in the
 -- former (which are tailored for GHC's use) need different type signatures
 -- than the ones in the latter. Syncing up the Internal type signatures would
@@ -17,1220 +13,8 @@
 -- relegate as many changes as we can to just the Internal module, where it
 -- is safe to break things.
 
-module Language.Haskell.TH.Lib.Internal where
-
-import Language.Haskell.TH.Lib.Syntax hiding (Role, InjectivityAnn)
-import qualified Language.Haskell.TH.Lib.Syntax as TH
-import Control.Applicative(liftA, Applicative(..))
-import qualified Data.Kind as Kind (Type)
-import Data.Word( Word8 )
-import Data.List.NonEmpty ( NonEmpty(..) )
-import GHC.Exts (TYPE)
-import Prelude hiding (Applicative(..))
-
-----------------------------------------------------------
--- * Type synonyms
-----------------------------------------------------------
-
--- | Representation-polymorphic since /template-haskell-2.17.0.0/.
-type TExpQ :: TYPE r -> Kind.Type
-type TExpQ a = Q (TExp a)
-
-type CodeQ :: TYPE r -> Kind.Type
-type CodeQ = Code Q
-
-type InfoQ               = Q Info
-type PatQ                = Q Pat
-type FieldPatQ           = Q FieldPat
-type ExpQ                = Q Exp
-type DecQ                = Q Dec
-type DecsQ               = Q [Dec]
-type Decs                = [Dec] -- Defined as it is more convenient to wire-in
-type ConQ                = Q Con
-type TypeQ               = Q Type
-type KindQ               = Q Kind
-type TyLitQ              = Q TyLit
-type CxtQ                = Q Cxt
-type PredQ               = Q Pred
-type DerivClauseQ        = Q DerivClause
-type MatchQ              = Q Match
-type ClauseQ             = Q Clause
-type BodyQ               = Q Body
-type GuardQ              = Q Guard
-type StmtQ               = Q Stmt
-type RangeQ              = Q Range
-type SourceStrictnessQ   = Q SourceStrictness
-type SourceUnpackednessQ = Q SourceUnpackedness
-type BangQ               = Q Bang
-type BangTypeQ           = Q BangType
-type VarBangTypeQ        = Q VarBangType
-type StrictTypeQ         = Q StrictType
-type VarStrictTypeQ      = Q VarStrictType
-type FieldExpQ           = Q FieldExp
-type RuleBndrQ           = Q RuleBndr
-type TySynEqnQ           = Q TySynEqn
-type PatSynDirQ          = Q PatSynDir
-type PatSynArgsQ         = Q PatSynArgs
-type FamilyResultSigQ    = Q FamilyResultSig
-type DerivStrategyQ      = Q DerivStrategy
-
--- must be defined here for DsMeta to find it
-type Role                = TH.Role
-type InjectivityAnn      = TH.InjectivityAnn
-
-type TyVarBndrUnit       = TyVarBndr ()
-type TyVarBndrSpec       = TyVarBndr Specificity
-type TyVarBndrVis        = TyVarBndr BndrVis
-
-----------------------------------------------------------
--- * Lowercase pattern syntax functions
-----------------------------------------------------------
-
-intPrimL    :: Integer -> Lit
-intPrimL    = IntPrimL
-wordPrimL    :: Integer -> Lit
-wordPrimL    = WordPrimL
-floatPrimL  :: Rational -> Lit
-floatPrimL  = FloatPrimL
-doublePrimL :: Rational -> Lit
-doublePrimL = DoublePrimL
-integerL    :: Integer -> Lit
-integerL    = IntegerL
-charL       :: Char -> Lit
-charL       = CharL
-charPrimL   :: Char -> Lit
-charPrimL   = CharPrimL
-stringL     :: String -> Lit
-stringL     = StringL
-stringPrimL :: [Word8] -> Lit
-stringPrimL = StringPrimL
-bytesPrimL :: Bytes -> Lit
-bytesPrimL = BytesPrimL
-rationalL   :: Rational -> Lit
-rationalL   = RationalL
-
-litP :: Quote m => Lit -> m Pat
-litP l = pure (LitP l)
-
-varP :: Quote m => Name -> m Pat
-varP v = pure (VarP v)
-
-tupP :: Quote m => [m Pat] -> m Pat
-tupP ps = do { ps1 <- sequenceA ps; pure (TupP ps1)}
-
-unboxedTupP :: Quote m => [m Pat] -> m Pat
-unboxedTupP ps = do { ps1 <- sequenceA ps; pure (UnboxedTupP ps1)}
-
-unboxedSumP :: Quote m => m Pat -> SumAlt -> SumArity -> m Pat
-unboxedSumP p alt arity = do { p1 <- p; pure (UnboxedSumP p1 alt arity) }
-
-conP :: Quote m => Name -> [m Type] -> [m Pat] -> m Pat
-conP n ts ps = do ps' <- sequenceA ps
-                  ts' <- sequenceA ts
-                  pure (ConP n ts' ps')
-infixP :: Quote m => m Pat -> Name -> m Pat -> m Pat
-infixP p1 n p2 = do p1' <- p1
-                    p2' <- p2
-                    pure (InfixP p1' n p2')
-uInfixP :: Quote m => m Pat -> Name -> m Pat -> m Pat
-uInfixP p1 n p2 = do p1' <- p1
-                     p2' <- p2
-                     pure (UInfixP p1' n p2')
-parensP :: Quote m => m Pat -> m Pat
-parensP p = do p' <- p
-               pure (ParensP p')
-
-tildeP :: Quote m => m Pat -> m Pat
-tildeP p = do p' <- p
-              pure (TildeP p')
-bangP :: Quote m => m Pat -> m Pat
-bangP p = do p' <- p
-             pure (BangP p')
-asP :: Quote m => Name -> m Pat -> m Pat
-asP n p = do p' <- p
-             pure (AsP n p')
-wildP :: Quote m => m Pat
-wildP = pure WildP
-recP :: Quote m => Name -> [m FieldPat] -> m Pat
-recP n fps = do fps' <- sequenceA fps
-                pure (RecP n fps')
-listP :: Quote m => [m Pat] -> m Pat
-listP ps = do ps' <- sequenceA ps
-              pure (ListP ps')
-sigP :: Quote m => m Pat -> m Type -> m Pat
-sigP p t = do p' <- p
-              t' <- t
-              pure (SigP p' t')
-typeP :: Quote m => m Type -> m Pat
-typeP t = do t' <- t
-             pure (TypeP t')
-invisP :: Quote m => m Type -> m Pat
-invisP t = do t' <- t
-              pure (InvisP t')
-viewP :: Quote m => m Exp -> m Pat -> m Pat
-viewP e p = do e' <- e
-               p' <- p
-               pure (ViewP e' p')
-
-
-fieldPat :: Quote m => Name -> m Pat -> m FieldPat
-fieldPat n p = do p' <- p
-                  pure (n, p')
-
-
--------------------------------------------------------------------------------
--- *   Stmt
-
-bindS :: Quote m => m Pat -> m Exp -> m Stmt
-bindS p e = liftA2 BindS p e
-
-letS :: Quote m => [m Dec] -> m Stmt
-letS ds = do { ds1 <- sequenceA ds; pure (LetS ds1) }
-
-noBindS :: Quote m => m Exp -> m Stmt
-noBindS e = do { e1 <- e; pure (NoBindS e1) }
-
-parS :: Quote m => [[m Stmt]] -> m Stmt
-parS sss = do { sss1 <- traverse sequenceA sss; pure (ParS sss1) }
-
-recS :: Quote m => [m Stmt] -> m Stmt
-recS ss = do { ss1 <- sequenceA ss; pure (RecS ss1) }
-
--------------------------------------------------------------------------------
--- *   Range
-
-fromR :: Quote m => m Exp -> m Range
-fromR x = do { a <- x; pure (FromR a) }
-
-fromThenR :: Quote m => m Exp -> m Exp -> m Range
-fromThenR x y = do { a <- x; b <- y; pure (FromThenR a b) }
-
-fromToR :: Quote m => m Exp -> m Exp -> m Range
-fromToR x y = do { a <- x; b <- y; pure (FromToR a b) }
-
-fromThenToR :: Quote m => m Exp -> m Exp -> m Exp -> m Range
-fromThenToR x y z = do { a <- x; b <- y; c <- z;
-                         pure (FromThenToR a b c) }
--------------------------------------------------------------------------------
--- *   Body
-
-normalB :: Quote m => m Exp -> m Body
-normalB e = do { e1 <- e; pure (NormalB e1) }
-
-guardedB :: Quote m => [m (Guard,Exp)] -> m Body
-guardedB ges = do { ges' <- sequenceA ges; pure (GuardedB ges') }
-
--------------------------------------------------------------------------------
--- *   Guard
-
-normalG :: Quote m => m Exp -> m Guard
-normalG e = do { e1 <- e; pure (NormalG e1) }
-
-normalGE :: Quote m => m Exp -> m Exp -> m (Guard, Exp)
-normalGE g e = do { g1 <- g; e1 <- e; pure (NormalG g1, e1) }
-
-patG :: Quote m => [m Stmt] -> m Guard
-patG ss = do { ss' <- sequenceA ss; pure (PatG ss') }
-
-patGE :: Quote m => [m Stmt] -> m Exp -> m (Guard, Exp)
-patGE ss e = do { ss' <- sequenceA ss;
-                  e'  <- e;
-                  pure (PatG ss', e') }
-
--------------------------------------------------------------------------------
--- *   Match and Clause
-
--- | Use with 'caseE'
-match :: Quote m => m Pat -> m Body -> [m Dec] -> m Match
-match p rhs ds = do { p' <- p;
-                      r' <- rhs;
-                      ds' <- sequenceA ds;
-                      pure (Match p' r' ds') }
-
--- | Use with 'funD'
-clause :: Quote m => [m Pat] -> m Body -> [m Dec] -> m Clause
-clause ps r ds = do { ps' <- sequenceA ps;
-                      r' <- r;
-                      ds' <- sequenceA ds;
-                      pure (Clause ps' r' ds') }
-
----------------------------------------------------------------------------
--- *   Exp
-
--- | Dynamically binding a variable (unhygienic)
-dyn :: Quote m => String -> m Exp
-dyn s = pure (VarE (mkName s))
-
-varE :: Quote m => Name -> m Exp
-varE s = pure (VarE s)
-
-conE :: Quote m => Name -> m Exp
-conE s =  pure (ConE s)
-
-litE :: Quote m => Lit -> m Exp
-litE c = pure (LitE c)
-
-appE :: Quote m => m Exp -> m Exp -> m Exp
-appE x y = do { a <- x; b <- y; pure (AppE a b)}
-
-appTypeE :: Quote m => m Exp -> m Type -> m Exp
-appTypeE x t = do { a <- x; s <- t; pure (AppTypeE a s) }
-
-parensE :: Quote m => m Exp -> m Exp
-parensE x = do { x' <- x; pure (ParensE x') }
-
-uInfixE :: Quote m => m Exp -> m Exp -> m Exp -> m Exp
-uInfixE x s y = do { x' <- x; s' <- s; y' <- y;
-                     pure (UInfixE x' s' y') }
-
-infixE :: Quote m => Maybe (m Exp) -> m Exp -> Maybe (m Exp) -> m Exp
-infixE (Just x) s (Just y) = do { a <- x; s' <- s; b <- y;
-                                  pure (InfixE (Just a) s' (Just b))}
-infixE Nothing  s (Just y) = do { s' <- s; b <- y;
-                                  pure (InfixE Nothing s' (Just b))}
-infixE (Just x) s Nothing  = do { a <- x; s' <- s;
-                                  pure (InfixE (Just a) s' Nothing)}
-infixE Nothing  s Nothing  = do { s' <- s; pure (InfixE Nothing s' Nothing) }
-
-infixApp :: Quote m => m Exp -> m Exp -> m Exp -> m Exp
-infixApp x y z = infixE (Just x) y (Just z)
-sectionL :: Quote m => m Exp -> m Exp -> m Exp
-sectionL x y = infixE (Just x) y Nothing
-sectionR :: Quote m => m Exp -> m Exp -> m Exp
-sectionR x y = infixE Nothing x (Just y)
-
-lamE :: Quote m => [m Pat] -> m Exp -> m Exp
-lamE ps e = do ps' <- sequenceA ps
-               e' <- e
-               pure (LamE ps' e')
-
--- | Single-arg lambda
-lam1E :: Quote m => m Pat -> m Exp -> m Exp
-lam1E p e = lamE [p] e
-
--- | Lambda-case (@\case@)
-lamCaseE :: Quote m => [m Match] -> m Exp
-lamCaseE ms = LamCaseE <$> sequenceA ms
-
--- | Lambda-cases (@\cases@)
-lamCasesE :: Quote m => [m Clause] -> m Exp
-lamCasesE ms = LamCasesE <$> sequenceA ms
-
-tupE :: Quote m => [Maybe (m Exp)] -> m Exp
-tupE es = do { es1 <- traverse sequenceA es; pure (TupE es1)}
-
-unboxedTupE :: Quote m => [Maybe (m Exp)] -> m Exp
-unboxedTupE es = do { es1 <- traverse sequenceA es; pure (UnboxedTupE es1)}
-
-unboxedSumE :: Quote m => m Exp -> SumAlt -> SumArity -> m Exp
-unboxedSumE e alt arity = do { e1 <- e; pure (UnboxedSumE e1 alt arity) }
-
-condE :: Quote m => m Exp -> m Exp -> m Exp -> m Exp
-condE x y z =  do { a <- x; b <- y; c <- z; pure (CondE a b c)}
-
-multiIfE :: Quote m => [m (Guard, Exp)] -> m Exp
-multiIfE alts = MultiIfE <$> sequenceA alts
-
-letE :: Quote m => [m Dec] -> m Exp -> m Exp
-letE ds e = do { ds2 <- sequenceA ds; e2 <- e; pure (LetE ds2 e2) }
-
-caseE :: Quote m => m Exp -> [m Match] -> m Exp
-caseE e ms = do { e1 <- e; ms1 <- sequenceA ms; pure (CaseE e1 ms1) }
-
-doE :: Quote m => Maybe ModName -> [m Stmt] -> m Exp
-doE m ss = do { ss1 <- sequenceA ss; pure (DoE m ss1) }
-
-mdoE :: Quote m => Maybe ModName -> [m Stmt] -> m Exp
-mdoE m ss = do { ss1 <- sequenceA ss; pure (MDoE m ss1) }
-
-compE :: Quote m => [m Stmt] -> m Exp
-compE ss = do { ss1 <- sequenceA ss; pure (CompE ss1) }
-
-arithSeqE :: Quote m => m Range -> m Exp
-arithSeqE r = do { r' <- r; pure (ArithSeqE r') }
-
-listE :: Quote m => [m Exp] -> m Exp
-listE es = do { es1 <- sequenceA es; pure (ListE es1) }
-
-sigE :: Quote m => m Exp -> m Type -> m Exp
-sigE e t = do { e1 <- e; t1 <- t; pure (SigE e1 t1) }
-
-recConE :: Quote m => Name -> [m (Name,Exp)] -> m Exp
-recConE c fs = do { flds <- sequenceA fs; pure (RecConE c flds) }
-
-recUpdE :: Quote m => m Exp -> [m (Name,Exp)] -> m Exp
-recUpdE e fs = do { e1 <- e; flds <- sequenceA fs; pure (RecUpdE e1 flds) }
-
-stringE :: Quote m => String -> m Exp
-stringE = litE . stringL
-
-fieldExp :: Quote m => Name -> m Exp -> m (Name, Exp)
-fieldExp s e = do { e' <- e; pure (s,e') }
-
--- | @staticE x = [| static x |]@
-staticE :: Quote m => m Exp -> m Exp
-staticE = fmap StaticE
-
-unboundVarE :: Quote m => Name -> m Exp
-unboundVarE s = pure (UnboundVarE s)
-
-labelE :: Quote m => String -> m Exp
-labelE s = pure (LabelE s)
-
-implicitParamVarE :: Quote m => String -> m Exp
-implicitParamVarE n = pure (ImplicitParamVarE n)
-
-getFieldE :: Quote m => m Exp -> String -> m Exp
-getFieldE e f = do
-  e' <- e
-  pure (GetFieldE e' f)
-
-projectionE :: Quote m => NonEmpty String -> m Exp
-projectionE xs = pure (ProjectionE xs)
-
-typedSpliceE :: Quote m => m Exp -> m Exp
-typedSpliceE = fmap TypedSpliceE
-
-typedBracketE :: Quote m => m Exp -> m Exp
-typedBracketE = fmap TypedBracketE
-
--- ** 'arithSeqE' Shortcuts
-fromE :: Quote m => m Exp -> m Exp
-fromE x = do { a <- x; pure (ArithSeqE (FromR a)) }
-
-fromThenE :: Quote m => m Exp -> m Exp -> m Exp
-fromThenE x y = do { a <- x; b <- y; pure (ArithSeqE (FromThenR a b)) }
-
-fromToE :: Quote m => m Exp -> m Exp -> m Exp
-fromToE x y = do { a <- x; b <- y; pure (ArithSeqE (FromToR a b)) }
-
-fromThenToE :: Quote m => m Exp -> m Exp -> m Exp -> m Exp
-fromThenToE x y z = do { a <- x; b <- y; c <- z;
-                         pure (ArithSeqE (FromThenToR a b c)) }
-
-typeE :: Quote m => m Type -> m Exp
-typeE = fmap TypeE
-
--------------------------------------------------------------------------------
--- *   Dec
-
-valD :: Quote m => m Pat -> m Body -> [m Dec] -> m Dec
-valD p b ds =
-  do { p' <- p
-     ; ds' <- sequenceA ds
-     ; b' <- b
-     ; pure (ValD p' b' ds')
-     }
-
-funD :: Quote m => Name -> [m Clause] -> m Dec
-funD nm cs =
- do { cs1 <- sequenceA cs
-    ; pure (FunD nm cs1)
-    }
-
-tySynD :: Quote m => Name -> [m (TyVarBndr BndrVis)] -> m Type -> m Dec
-tySynD tc tvs rhs =
-  do { tvs1 <- sequenceA tvs
-     ; rhs1 <- rhs
-     ; pure (TySynD tc tvs1 rhs1)
-     }
-
-dataD :: Quote m => m Cxt -> Name -> [m (TyVarBndr BndrVis)] -> Maybe (m Kind) -> [m Con]
-      -> [m DerivClause] -> m Dec
-dataD ctxt tc tvs ksig cons derivs =
-  do
-    ctxt1   <- ctxt
-    tvs1    <- sequenceA tvs
-    ksig1   <- sequenceA ksig
-    cons1   <- sequenceA cons
-    derivs1 <- sequenceA derivs
-    pure (DataD ctxt1 tc tvs1 ksig1 cons1 derivs1)
-
-newtypeD :: Quote m => m Cxt -> Name -> [m (TyVarBndr BndrVis)] -> Maybe (m Kind) -> m Con
-         -> [m DerivClause] -> m Dec
-newtypeD ctxt tc tvs ksig con derivs =
-  do
-    ctxt1   <- ctxt
-    tvs1    <- sequenceA tvs
-    ksig1   <- sequenceA ksig
-    con1    <- con
-    derivs1 <- sequenceA derivs
-    pure (NewtypeD ctxt1 tc tvs1 ksig1 con1 derivs1)
-
-typeDataD :: Quote m => Name -> [m (TyVarBndr BndrVis)] -> Maybe (m Kind) -> [m Con]
-      -> m Dec
-typeDataD tc tvs ksig cons =
-  do
-    tvs1    <- sequenceA tvs
-    ksig1   <- sequenceA ksig
-    cons1   <- sequenceA cons
-    pure (TypeDataD tc tvs1 ksig1 cons1)
-
-classD :: Quote m => m Cxt -> Name -> [m (TyVarBndr BndrVis)] -> [FunDep] -> [m Dec] -> m Dec
-classD ctxt cls tvs fds decs =
-  do
-    tvs1  <- sequenceA tvs
-    decs1 <- sequenceA decs
-    ctxt1 <- ctxt
-    pure $ ClassD ctxt1 cls tvs1 fds decs1
-
-instanceD :: Quote m => m Cxt -> m Type -> [m Dec] -> m Dec
-instanceD = instanceWithOverlapD Nothing
-
-instanceWithOverlapD :: Quote m => Maybe Overlap -> m Cxt -> m Type -> [m Dec] -> m Dec
-instanceWithOverlapD o ctxt ty decs =
-  do
-    ctxt1 <- ctxt
-    decs1 <- sequenceA decs
-    ty1   <- ty
-    pure $ InstanceD o ctxt1 ty1 decs1
-
-
-
-sigD :: Quote m => Name -> m Type -> m Dec
-sigD fun ty = liftA (SigD fun) $ ty
-
-kiSigD :: Quote m => Name -> m Kind -> m Dec
-kiSigD fun ki = liftA (KiSigD fun) $ ki
-
-forImpD :: Quote m => Callconv -> Safety -> String -> Name -> m Type -> m Dec
-forImpD cc s str n ty
- = do ty' <- ty
-      pure $ ForeignD (ImportF cc s str n ty')
-
-infixLD :: Quote m => Int -> Name -> m Dec
-infixLD prec = infixLWithSpecD prec NoNamespaceSpecifier
-
-infixRD :: Quote m => Int -> Name -> m Dec
-infixRD prec = infixRWithSpecD prec NoNamespaceSpecifier
-
-infixND :: Quote m => Int -> Name -> m Dec
-infixND prec = infixNWithSpecD prec NoNamespaceSpecifier
-
-infixLWithSpecD :: Quote m => Int -> NamespaceSpecifier -> Name -> m Dec
-infixLWithSpecD prec ns_spec nm = pure (InfixD (Fixity prec InfixL) ns_spec nm)
-
-infixRWithSpecD :: Quote m => Int -> NamespaceSpecifier -> Name -> m Dec
-infixRWithSpecD prec ns_spec nm = pure (InfixD (Fixity prec InfixR) ns_spec nm)
-
-infixNWithSpecD :: Quote m => Int -> NamespaceSpecifier -> Name -> m Dec
-infixNWithSpecD prec ns_spec nm = pure (InfixD (Fixity prec InfixN) ns_spec nm)
-
-defaultD :: Quote m => [m Type] -> m Dec
-defaultD tys = DefaultD <$> sequenceA tys
-
-pragInlD :: Quote m => Name -> Inline -> RuleMatch -> Phases -> m Dec
-pragInlD name inline rm phases
-  = pure $ PragmaD $ InlineP name inline rm phases
-
-pragOpaqueD :: Quote m => Name -> m Dec
-pragOpaqueD name = pure $ PragmaD $ OpaqueP name
-
-pragSpecD :: Quote m => Name -> m Type -> Phases -> m Dec
-pragSpecD n ty phases
-  = do
-      ty1    <- ty
-      pure $ PragmaD $ SpecialiseP n ty1 Nothing phases
-
-pragSpecInlD :: Quote m => Name -> m Type -> Inline -> Phases -> m Dec
-pragSpecInlD n ty inline phases
-  = do
-      ty1    <- ty
-      pure $ PragmaD $ SpecialiseP n ty1 (Just inline) phases
-
-pragSpecInstD :: Quote m => m Type -> m Dec
-pragSpecInstD ty
-  = do
-      ty1    <- ty
-      pure $ PragmaD $ SpecialiseInstP ty1
-
-pragRuleD :: Quote m => String -> Maybe [m (TyVarBndr ())] -> [m RuleBndr] -> m Exp -> m Exp
-          -> Phases -> m Dec
-pragRuleD n ty_bndrs tm_bndrs lhs rhs phases
-  = do
-      ty_bndrs1 <- traverse sequenceA ty_bndrs
-      tm_bndrs1 <- sequenceA tm_bndrs
-      lhs1   <- lhs
-      rhs1   <- rhs
-      pure $ PragmaD $ RuleP n ty_bndrs1 tm_bndrs1 lhs1 rhs1 phases
-
-pragAnnD :: Quote m => AnnTarget -> m Exp -> m Dec
-pragAnnD target expr
-  = do
-      exp1 <- expr
-      pure $ PragmaD $ AnnP target exp1
-
-pragLineD :: Quote m => Int -> String -> m Dec
-pragLineD line file = pure $ PragmaD $ LineP line file
-
-pragCompleteD :: Quote m => [Name] -> Maybe Name -> m Dec
-pragCompleteD cls mty = pure $ PragmaD $ CompleteP cls mty
-
-pragSCCFunD :: Quote m => Name -> m Dec
-pragSCCFunD nm = pure $ PragmaD $ SCCP nm Nothing
-
-pragSCCFunNamedD :: Quote m => Name -> String -> m Dec
-pragSCCFunNamedD nm str = pure $ PragmaD $ SCCP nm (Just str)
-
-dataInstD :: Quote m => m Cxt -> (Maybe [m (TyVarBndr ())]) -> m Type -> Maybe (m Kind) -> [m Con]
-          -> [m DerivClause] -> m Dec
-dataInstD ctxt mb_bndrs ty ksig cons derivs =
-  do
-    ctxt1   <- ctxt
-    mb_bndrs1 <- traverse sequenceA mb_bndrs
-    ty1    <- ty
-    ksig1   <- sequenceA ksig
-    cons1   <- sequenceA cons
-    derivs1 <- sequenceA derivs
-    pure (DataInstD ctxt1 mb_bndrs1 ty1 ksig1 cons1 derivs1)
-
-newtypeInstD :: Quote m => m Cxt -> (Maybe [m (TyVarBndr ())]) -> m Type -> Maybe (m Kind) -> m Con
-             -> [m DerivClause] -> m Dec
-newtypeInstD ctxt mb_bndrs ty ksig con derivs =
-  do
-    ctxt1   <- ctxt
-    mb_bndrs1 <- traverse sequenceA mb_bndrs
-    ty1    <- ty
-    ksig1   <- sequenceA ksig
-    con1    <- con
-    derivs1 <- sequenceA derivs
-    pure (NewtypeInstD ctxt1 mb_bndrs1 ty1 ksig1 con1 derivs1)
-
-tySynInstD :: Quote m => m TySynEqn -> m Dec
-tySynInstD eqn =
-  do
-    eqn1 <- eqn
-    pure (TySynInstD eqn1)
-
-dataFamilyD :: Quote m => Name -> [m (TyVarBndr BndrVis)] -> Maybe (m Kind) -> m Dec
-dataFamilyD tc tvs kind =
-  do tvs'  <- sequenceA tvs
-     kind' <- sequenceA kind
-     pure $ DataFamilyD tc tvs' kind'
-
-openTypeFamilyD :: Quote m => Name -> [m (TyVarBndr BndrVis)] -> m FamilyResultSig
-                -> Maybe InjectivityAnn -> m Dec
-openTypeFamilyD tc tvs res inj =
-  do tvs' <- sequenceA tvs
-     res' <- res
-     pure $ OpenTypeFamilyD (TypeFamilyHead tc tvs' res' inj)
-
-closedTypeFamilyD :: Quote m => Name -> [m (TyVarBndr BndrVis)] -> m FamilyResultSig
-                  -> Maybe InjectivityAnn -> [m TySynEqn] -> m Dec
-closedTypeFamilyD tc tvs result injectivity eqns =
-  do tvs1    <- sequenceA tvs
-     result1 <- result
-     eqns1   <- sequenceA eqns
-     pure (ClosedTypeFamilyD (TypeFamilyHead tc tvs1 result1 injectivity) eqns1)
-
-roleAnnotD :: Quote m => Name -> [Role] -> m Dec
-roleAnnotD name roles = pure $ RoleAnnotD name roles
-
-standaloneDerivD :: Quote m => m Cxt -> m Type -> m Dec
-standaloneDerivD = standaloneDerivWithStrategyD Nothing
-
-standaloneDerivWithStrategyD :: Quote m => Maybe (m DerivStrategy) -> m Cxt -> m Type -> m Dec
-standaloneDerivWithStrategyD mdsq ctxtq tyq =
-  do
-    mds  <- sequenceA mdsq
-    ctxt <- ctxtq
-    ty   <- tyq
-    pure $ StandaloneDerivD mds ctxt ty
-
-defaultSigD :: Quote m => Name -> m Type -> m Dec
-defaultSigD n tyq =
-  do
-    ty <- tyq
-    pure $ DefaultSigD n ty
-
--- | Pattern synonym declaration
-patSynD :: Quote m => Name -> m PatSynArgs -> m PatSynDir -> m Pat -> m Dec
-patSynD name args dir pat = do
-  args'    <- args
-  dir'     <- dir
-  pat'     <- pat
-  pure (PatSynD name args' dir' pat')
-
--- | Pattern synonym type signature
-patSynSigD :: Quote m => Name -> m Type -> m Dec
-patSynSigD nm ty =
-  do ty' <- ty
-     pure $ PatSynSigD nm ty'
-
--- | Implicit parameter binding declaration. Can only be used in let
--- and where clauses which consist entirely of implicit bindings.
-implicitParamBindD :: Quote m => String -> m Exp -> m Dec
-implicitParamBindD n e =
-  do
-    e' <- e
-    pure $ ImplicitParamBindD n e'
-
-tySynEqn :: Quote m => (Maybe [m (TyVarBndr ())]) -> m Type -> m Type -> m TySynEqn
-tySynEqn mb_bndrs lhs rhs =
-  do
-    mb_bndrs1 <- traverse sequenceA mb_bndrs
-    lhs1 <- lhs
-    rhs1 <- rhs
-    pure (TySynEqn mb_bndrs1 lhs1 rhs1)
-
-cxt :: Quote m => [m Pred] -> m Cxt
-cxt = sequenceA
-
-derivClause :: Quote m => Maybe (m DerivStrategy) -> [m Pred] -> m DerivClause
-derivClause mds p = do mds' <- sequenceA mds
-                       p'   <- cxt p
-                       pure $ DerivClause mds' p'
-
-stockStrategy :: Quote m => m DerivStrategy
-stockStrategy = pure StockStrategy
-
-anyclassStrategy :: Quote m => m DerivStrategy
-anyclassStrategy = pure AnyclassStrategy
-
-newtypeStrategy :: Quote m => m DerivStrategy
-newtypeStrategy = pure NewtypeStrategy
-
-viaStrategy :: Quote m => m Type -> m DerivStrategy
-viaStrategy = fmap ViaStrategy
-
-normalC :: Quote m => Name -> [m BangType] -> m Con
-normalC con strtys = liftA (NormalC con) $ sequenceA strtys
-
-recC :: Quote m => Name -> [m VarBangType] -> m Con
-recC con varstrtys = liftA (RecC con) $ sequenceA varstrtys
-
-infixC :: Quote m => m (Bang, Type) -> Name -> m (Bang, Type) -> m Con
-infixC st1 con st2 = do st1' <- st1
-                        st2' <- st2
-                        pure $ InfixC st1' con st2'
-
-forallC :: Quote m => [m (TyVarBndr Specificity)] -> m Cxt -> m Con -> m Con
-forallC ns ctxt con = do
-  ns'   <- sequenceA ns
-  ctxt' <- ctxt
-  con'  <- con
-  pure $ ForallC ns' ctxt' con'
-
-gadtC :: Quote m => [Name] -> [m StrictType] -> m Type -> m Con
-gadtC cons strtys ty = liftA2 (GadtC cons) (sequenceA strtys) ty
-
-recGadtC :: Quote m => [Name] -> [m VarStrictType] -> m Type -> m Con
-recGadtC cons varstrtys ty = liftA2 (RecGadtC cons) (sequenceA varstrtys) ty
-
--------------------------------------------------------------------------------
--- *   Type
-
-forallT :: Quote m => [m (TyVarBndr Specificity)] -> m Cxt -> m Type -> m Type
-forallT tvars ctxt ty = do
-    tvars1 <- sequenceA tvars
-    ctxt1  <- ctxt
-    ty1    <- ty
-    pure $ ForallT tvars1 ctxt1 ty1
-
-forallVisT :: Quote m => [m (TyVarBndr ())] -> m Type -> m Type
-forallVisT tvars ty = ForallVisT <$> sequenceA tvars <*> ty
-
-varT :: Quote m => Name -> m Type
-varT = pure . VarT
-
-conT :: Quote m => Name -> m Type
-conT = pure . ConT
-
-infixT :: Quote m => m Type -> Name -> m Type -> m Type
-infixT t1 n t2 = do t1' <- t1
-                    t2' <- t2
-                    pure (InfixT t1' n t2')
-
-uInfixT :: Quote m => m Type -> Name -> m Type -> m Type
-uInfixT t1 n t2 = do t1' <- t1
-                     t2' <- t2
-                     pure (UInfixT t1' n t2')
-
-promotedInfixT :: Quote m => m Type -> Name -> m Type -> m Type
-promotedInfixT t1 n t2 = do t1' <- t1
-                            t2' <- t2
-                            pure (PromotedInfixT t1' n t2')
-
-promotedUInfixT :: Quote m => m Type -> Name -> m Type -> m Type
-promotedUInfixT t1 n t2 = do t1' <- t1
-                             t2' <- t2
-                             pure (PromotedUInfixT t1' n t2')
-
-parensT :: Quote m => m Type -> m Type
-parensT t = do t' <- t
-               pure (ParensT t')
-
-appT :: Quote m => m Type -> m Type -> m Type
-appT t1 t2 = do
-           t1' <- t1
-           t2' <- t2
-           pure $ AppT t1' t2'
-
-appKindT :: Quote m => m Type -> m Kind -> m Type
-appKindT ty ki = do
-               ty' <- ty
-               ki' <- ki
-               pure $ AppKindT ty' ki'
-
-arrowT :: Quote m => m Type
-arrowT = pure ArrowT
-
-mulArrowT :: Quote m => m Type
-mulArrowT = pure MulArrowT
-
-listT :: Quote m => m Type
-listT = pure ListT
-
-litT :: Quote m => m TyLit -> m Type
-litT l = fmap LitT l
-
-tupleT :: Quote m => Int -> m Type
-tupleT i = pure (TupleT i)
-
-unboxedTupleT :: Quote m => Int -> m Type
-unboxedTupleT i = pure (UnboxedTupleT i)
-
-unboxedSumT :: Quote m => SumArity -> m Type
-unboxedSumT arity = pure (UnboxedSumT arity)
-
-sigT :: Quote m => m Type -> m Kind -> m Type
-sigT t k
-  = do
-      t' <- t
-      k' <- k
-      pure $ SigT t' k'
-
-equalityT :: Quote m => m Type
-equalityT = pure EqualityT
-
-wildCardT :: Quote m => m Type
-wildCardT = pure WildCardT
-
-implicitParamT :: Quote m => String -> m Type -> m Type
-implicitParamT n t
-  = do
-      t' <- t
-      pure $ ImplicitParamT n t'
-
-{-# DEPRECATED classP "As of template-haskell-2.10, constraint predicates (Pred) are just types (Type), in keeping with ConstraintKinds. Please use 'conT' and 'appT'." #-}
-classP :: Quote m => Name -> [m Type] -> m Pred
-classP cla tys
-  = do
-      tysl <- sequenceA tys
-      pure (foldl AppT (ConT cla) tysl)
-
-{-# DEPRECATED equalP "As of template-haskell-2.10, constraint predicates (Pred) are just types (Type), in keeping with ConstraintKinds. Please see 'equalityT'." #-}
-equalP :: Quote m => m Type -> m Type -> m Pred
-equalP tleft tright
-  = do
-      tleft1  <- tleft
-      tright1 <- tright
-      eqT <- equalityT
-      pure (foldl AppT eqT [tleft1, tright1])
-
-promotedT :: Quote m => Name -> m Type
-promotedT = pure . PromotedT
-
-promotedTupleT :: Quote m => Int -> m Type
-promotedTupleT i = pure (PromotedTupleT i)
-
-promotedNilT :: Quote m => m Type
-promotedNilT = pure PromotedNilT
-
-promotedConsT :: Quote m => m Type
-promotedConsT = pure PromotedConsT
-
-noSourceUnpackedness, sourceNoUnpack, sourceUnpack :: Quote m => m SourceUnpackedness
-noSourceUnpackedness = pure NoSourceUnpackedness
-sourceNoUnpack       = pure SourceNoUnpack
-sourceUnpack         = pure SourceUnpack
-
-noSourceStrictness, sourceLazy, sourceStrict :: Quote m => m SourceStrictness
-noSourceStrictness = pure NoSourceStrictness
-sourceLazy         = pure SourceLazy
-sourceStrict       = pure SourceStrict
-
-{-# DEPRECATED isStrict
-    ["Use 'bang'. See https://gitlab.haskell.org/ghc/ghc/wikis/migration/8.0. ",
-     "Example usage: 'bang noSourceUnpackedness sourceStrict'"] #-}
-{-# DEPRECATED notStrict
-    ["Use 'bang'. See https://gitlab.haskell.org/ghc/ghc/wikis/migration/8.0. ",
-     "Example usage: 'bang noSourceUnpackedness noSourceStrictness'"] #-}
-{-# DEPRECATED unpacked
-    ["Use 'bang'. See https://gitlab.haskell.org/ghc/ghc/wikis/migration/8.0. ",
-     "Example usage: 'bang sourceUnpack sourceStrict'"] #-}
-isStrict, notStrict, unpacked :: Quote m => m Strict
-isStrict = bang noSourceUnpackedness sourceStrict
-notStrict = bang noSourceUnpackedness noSourceStrictness
-unpacked = bang sourceUnpack sourceStrict
-
-bang :: Quote m => m SourceUnpackedness -> m SourceStrictness -> m Bang
-bang u s = do u' <- u
-              s' <- s
-              pure (Bang u' s')
-
-bangType :: Quote m => m Bang -> m Type -> m BangType
-bangType = liftA2 (,)
-
-varBangType :: Quote m => Name -> m BangType -> m VarBangType
-varBangType v bt = (\(b, t) -> (v, b, t)) <$> bt
-
-{-# DEPRECATED strictType
-               "As of @template-haskell-2.11.0.0@, 'StrictType' has been replaced by 'BangType'. Please use 'bangType' instead." #-}
-strictType :: Quote m => m Strict -> m Type -> m StrictType
-strictType = bangType
-
-{-# DEPRECATED varStrictType
-               "As of @template-haskell-2.11.0.0@, 'VarStrictType' has been replaced by 'VarBangType'. Please use 'varBangType' instead." #-}
-varStrictType :: Quote m => Name -> m StrictType -> m VarStrictType
-varStrictType = varBangType
-
--- * Type Literals
-
--- MonadFail here complicates things (a lot) because it would mean we would
--- have to emit a MonadFail constraint during typechecking if there was any
--- chance the desugaring would use numTyLit, which in general is hard to
--- predict.
-numTyLit :: Quote m => Integer -> m TyLit
-numTyLit n = if n >= 0 then pure (NumTyLit n)
-                       else error ("Negative type-level number: " ++ show n)
-
-strTyLit :: Quote m => String -> m TyLit
-strTyLit s = pure (StrTyLit s)
-
-charTyLit :: Quote m => Char -> m TyLit
-charTyLit c = pure (CharTyLit c)
-
--------------------------------------------------------------------------------
--- *   Kind
-
-plainTV :: Quote m => Name -> m (TyVarBndr ())
-plainTV n = pure $ PlainTV n ()
-
-plainInvisTV :: Quote m => Name -> Specificity -> m (TyVarBndr Specificity)
-plainInvisTV n s = pure $ PlainTV n s
-
-plainBndrTV :: Quote m => Name -> BndrVis -> m (TyVarBndr BndrVis)
-plainBndrTV n v = pure $ PlainTV n v
-
-kindedTV :: Quote m => Name -> m Kind -> m (TyVarBndr ())
-kindedTV n = fmap (KindedTV n ())
-
-kindedInvisTV :: Quote m => Name -> Specificity -> m Kind -> m (TyVarBndr Specificity)
-kindedInvisTV n s = fmap (KindedTV n s)
-
-kindedBndrTV :: Quote m => Name -> BndrVis -> m Kind -> m (TyVarBndr BndrVis)
-kindedBndrTV n v = fmap (KindedTV n v)
-
-specifiedSpec :: Specificity
-specifiedSpec = SpecifiedSpec
-
-inferredSpec :: Specificity
-inferredSpec = InferredSpec
-
-bndrReq :: BndrVis
-bndrReq = BndrReq
-
-bndrInvis :: BndrVis
-bndrInvis = BndrInvis
-
-varK :: Name -> Kind
-varK = VarT
-
-conK :: Name -> Kind
-conK = ConT
-
-tupleK :: Int -> Kind
-tupleK = TupleT
-
-arrowK ::  Kind
-arrowK = ArrowT
-
-listK ::  Kind
-listK = ListT
-
-appK :: Kind -> Kind -> Kind
-appK = AppT
-
-starK :: Quote m => m Kind
-starK = pure StarT
-
-constraintK :: Quote m => m Kind
-constraintK = pure ConstraintT
-
--------------------------------------------------------------------------------
--- *   Type family result
-
-noSig :: Quote m => m FamilyResultSig
-noSig = pure NoSig
-
-kindSig :: Quote m => m Kind -> m FamilyResultSig
-kindSig = fmap KindSig
-
-tyVarSig :: Quote m => m (TyVarBndr ()) -> m FamilyResultSig
-tyVarSig = fmap TyVarSig
-
--------------------------------------------------------------------------------
--- *   Injectivity annotation
-
-injectivityAnn :: Name -> [Name] -> InjectivityAnn
-injectivityAnn = TH.InjectivityAnn
-
--------------------------------------------------------------------------------
--- *   Role
-
-nominalR, representationalR, phantomR, inferR :: Role
-nominalR          = NominalR
-representationalR = RepresentationalR
-phantomR          = PhantomR
-inferR            = InferR
-
--------------------------------------------------------------------------------
--- *   Callconv
-
-cCall, stdCall, cApi, prim, javaScript :: Callconv
-cCall      = CCall
-stdCall    = StdCall
-cApi       = CApi
-prim       = Prim
-javaScript = JavaScript
-
--------------------------------------------------------------------------------
--- *   Safety
-
-unsafe, safe, interruptible :: Safety
-unsafe = Unsafe
-safe = Safe
-interruptible = Interruptible
-
--------------------------------------------------------------------------------
--- *   FunDep
-
-funDep ::  [Name] -> [Name] -> FunDep
-funDep = FunDep
-
--------------------------------------------------------------------------------
--- *   RuleBndr
-ruleVar :: Quote m => Name -> m RuleBndr
-ruleVar = pure . RuleVar
-
-typedRuleVar :: Quote m => Name -> m Type -> m RuleBndr
-typedRuleVar n ty = TypedRuleVar n <$> ty
-
--------------------------------------------------------------------------------
--- *   AnnTarget
-valueAnnotation ::  Name -> AnnTarget
-valueAnnotation = ValueAnnotation
-
-typeAnnotation ::  Name -> AnnTarget
-typeAnnotation = TypeAnnotation
-
-moduleAnnotation :: AnnTarget
-moduleAnnotation = ModuleAnnotation
-
--------------------------------------------------------------------------------
--- * Pattern Synonyms (sub constructs)
-
-unidir, implBidir :: Quote m => m PatSynDir
-unidir    = pure Unidir
-implBidir = pure ImplBidir
-
-explBidir :: Quote m => [m Clause] -> m PatSynDir
-explBidir cls = do
-  cls' <- sequenceA cls
-  pure (ExplBidir cls')
-
-prefixPatSyn :: Quote m => [Name] -> m PatSynArgs
-prefixPatSyn args = pure $ PrefixPatSyn args
-
-recordPatSyn :: Quote m => [Name] -> m PatSynArgs
-recordPatSyn sels = pure $ RecordPatSyn sels
-
-infixPatSyn :: Quote m => Name -> Name -> m PatSynArgs
-infixPatSyn arg1 arg2 = pure $ InfixPatSyn arg1 arg2
-
---------------------------------------------------------------
--- * Useful helper function
-
-appsE :: Quote m => [m Exp] -> m Exp
-appsE [] = error "appsE []"
-appsE [x] = x
-appsE (x:y:zs) = appsE ( (appE x y) : zs )
-
--- | pure the Module at the place of splicing.  Can be used as an
--- input for 'reifyModule'.
-thisModule :: Q Module
-thisModule = do
-  loc <- location
-  pure $ Module (mkPkgName $ loc_package loc) (mkModName $ loc_module loc)
-
---------------------------------------------------------------
--- * Documentation combinators
-
--- | Attaches Haddock documentation to the declaration provided. Unlike
--- 'putDoc', the names do not need to be in scope when calling this function so
--- it can be used for quoted declarations and anything else currently being
--- spliced.
--- Not all declarations can have documentation attached to them. For those that
--- can't, 'withDecDoc' will return it unchanged without any side effects.
-withDecDoc :: String -> Q Dec -> Q Dec
-withDecDoc doc dec = do
-  dec' <- dec
-  case doc_loc dec' of
-    Just loc -> qAddModFinalizer $ qPutDoc loc doc
-    Nothing  -> pure ()
-  pure dec'
+module Language.Haskell.TH.Lib.Internal
+  ( module GHC.Internal.TH.Lib )
   where
-    doc_loc (FunD n _)                                     = Just $ DeclDoc n
-    doc_loc (ValD (VarP n) _ _)                            = Just $ DeclDoc n
-    doc_loc (DataD _ n _ _ _ _)                            = Just $ DeclDoc n
-    doc_loc (NewtypeD _ n _ _ _ _)                         = Just $ DeclDoc n
-    doc_loc (TypeDataD n _ _ _)                            = Just $ DeclDoc n
-    doc_loc (TySynD n _ _)                                 = Just $ DeclDoc n
-    doc_loc (ClassD _ n _ _ _)                             = Just $ DeclDoc n
-    doc_loc (SigD n _)                                     = Just $ DeclDoc n
-    doc_loc (ForeignD (ImportF _ _ _ n _))                 = Just $ DeclDoc n
-    doc_loc (ForeignD (ExportF _ _ n _))                   = Just $ DeclDoc n
-    doc_loc (InfixD _ _ n)                                 = Just $ DeclDoc n
-    doc_loc (DataFamilyD n _ _)                            = Just $ DeclDoc n
-    doc_loc (OpenTypeFamilyD (TypeFamilyHead n _ _ _))     = Just $ DeclDoc n
-    doc_loc (ClosedTypeFamilyD (TypeFamilyHead n _ _ _) _) = Just $ DeclDoc n
-    doc_loc (PatSynD n _ _ _)                              = Just $ DeclDoc n
-    doc_loc (PatSynSigD n _)                               = Just $ DeclDoc n
-
-    -- For instances we just pass along the full type
-    doc_loc (InstanceD _ _ t _)           = Just $ InstDoc t
-    doc_loc (DataInstD _ _ t _ _ _)       = Just $ InstDoc t
-    doc_loc (NewtypeInstD _ _ t _ _ _)    = Just $ InstDoc t
-    doc_loc (TySynInstD (TySynEqn _ t _)) = Just $ InstDoc t
-
-    -- Declarations that can't have documentation attached to
-    -- ValDs that aren't a simple variable pattern
-    doc_loc (ValD _ _ _)             = Nothing
-    doc_loc (KiSigD _ _)             = Nothing
-    doc_loc (PragmaD _)              = Nothing
-    doc_loc (RoleAnnotD _ _)         = Nothing
-    doc_loc (StandaloneDerivD _ _ _) = Nothing
-    doc_loc (DefaultSigD _ _)        = Nothing
-    doc_loc (ImplicitParamBindD _ _) = Nothing
-    doc_loc (DefaultD _)             = Nothing
-
--- | Variant of 'withDecDoc' that applies the same documentation to
--- multiple declarations. Useful for documenting quoted declarations.
-withDecsDoc :: String -> Q [Dec] -> Q [Dec]
-withDecsDoc doc decs = decs >>= mapM (withDecDoc doc . pure)
-
--- | Variant of 'funD' that attaches Haddock documentation.
-funD_doc :: Name -> [Q Clause]
-         -> Maybe String -- ^ Documentation to attach to function
-         -> [Maybe String] -- ^ Documentation to attach to arguments
-         -> Q Dec
-funD_doc nm cs mfun_doc arg_docs = do
-  qAddModFinalizer $ sequence_
-    [putDoc (ArgDoc nm i) s | (i, Just s) <- zip [0..] arg_docs]
-  let dec = funD nm cs
-  case mfun_doc of
-    Just fun_doc -> withDecDoc fun_doc dec
-    Nothing -> funD nm cs
-
--- | Variant of 'dataD' that attaches Haddock documentation.
-dataD_doc :: Q Cxt -> Name -> [Q (TyVarBndr BndrVis)] -> Maybe (Q Kind)
-          -> [(Q Con, Maybe String, [Maybe String])]
-          -- ^ List of constructors, documentation for the constructor, and
-          -- documentation for the arguments
-          -> [Q DerivClause]
-          -> Maybe String
-          -- ^ Documentation to attach to the data declaration
-          -> Q Dec
-dataD_doc ctxt tc tvs ksig cons_with_docs derivs mdoc = do
-  qAddModFinalizer $ mapM_ docCons cons_with_docs
-  let dec = dataD ctxt tc tvs ksig (map (\(con, _, _) -> con) cons_with_docs) derivs
-  maybe dec (flip withDecDoc dec) mdoc
-
--- | Variant of 'newtypeD' that attaches Haddock documentation.
-newtypeD_doc :: Q Cxt -> Name -> [Q (TyVarBndr BndrVis)] -> Maybe (Q Kind)
-             -> (Q Con, Maybe String, [Maybe String])
-             -- ^ The constructor, documentation for the constructor, and
-             -- documentation for the arguments
-             -> [Q DerivClause]
-             -> Maybe String
-             -- ^ Documentation to attach to the newtype declaration
-             -> Q Dec
-newtypeD_doc ctxt tc tvs ksig con_with_docs@(con, _, _) derivs mdoc = do
-  qAddModFinalizer $ docCons con_with_docs
-  let dec = newtypeD ctxt tc tvs ksig con derivs
-  maybe dec (flip withDecDoc dec) mdoc
-
--- | Variant of 'typeDataD' that attaches Haddock documentation.
-typeDataD_doc :: Name -> [Q (TyVarBndr BndrVis)] -> Maybe (Q Kind)
-          -> [(Q Con, Maybe String, [Maybe String])]
-          -- ^ List of constructors, documentation for the constructor, and
-          -- documentation for the arguments
-          -> Maybe String
-          -- ^ Documentation to attach to the data declaration
-          -> Q Dec
-typeDataD_doc tc tvs ksig cons_with_docs mdoc = do
-  qAddModFinalizer $ mapM_ docCons cons_with_docs
-  let dec = typeDataD tc tvs ksig (map (\(con, _, _) -> con) cons_with_docs)
-  maybe dec (flip withDecDoc dec) mdoc
-
--- | Variant of 'dataInstD' that attaches Haddock documentation.
-dataInstD_doc :: Q Cxt -> (Maybe [Q (TyVarBndr ())]) -> Q Type -> Maybe (Q Kind)
-              -> [(Q Con, Maybe String, [Maybe String])]
-              -- ^ List of constructors, documentation for the constructor, and
-              -- documentation for the arguments
-              -> [Q DerivClause]
-              -> Maybe String
-              -- ^ Documentation to attach to the instance declaration
-              -> Q Dec
-dataInstD_doc ctxt mb_bndrs ty ksig cons_with_docs derivs mdoc = do
-  qAddModFinalizer $ mapM_ docCons cons_with_docs
-  let dec = dataInstD ctxt mb_bndrs ty ksig (map (\(con, _, _) -> con) cons_with_docs)
-              derivs
-  maybe dec (flip withDecDoc dec) mdoc
-
--- | Variant of 'newtypeInstD' that attaches Haddock documentation.
-newtypeInstD_doc :: Q Cxt -> (Maybe [Q (TyVarBndr ())]) -> Q Type
-                 -> Maybe (Q Kind)
-                 -> (Q Con, Maybe String, [Maybe String])
-                 -- ^ The constructor, documentation for the constructor, and
-                 -- documentation for the arguments
-                 -> [Q DerivClause]
-                 -> Maybe String
-                 -- ^ Documentation to attach to the instance declaration
-                 -> Q Dec
-newtypeInstD_doc ctxt mb_bndrs ty ksig con_with_docs@(con, _, _) derivs mdoc = do
-  qAddModFinalizer $ docCons con_with_docs
-  let dec = newtypeInstD ctxt mb_bndrs ty ksig con derivs
-  maybe dec (flip withDecDoc dec) mdoc
-
--- | Variant of 'patSynD' that attaches Haddock documentation.
-patSynD_doc :: Name -> Q PatSynArgs -> Q PatSynDir -> Q Pat
-            -> Maybe String   -- ^ Documentation to attach to the pattern synonym
-            -> [Maybe String] -- ^ Documentation to attach to the pattern arguments
-            -> Q Dec
-patSynD_doc name args dir pat mdoc arg_docs = do
-  qAddModFinalizer $ sequence_
-    [putDoc (ArgDoc name i) s | (i, Just s) <- zip [0..] arg_docs]
-  let dec = patSynD name args dir pat
-  maybe dec (flip withDecDoc dec) mdoc
 
--- | Document a data/newtype constructor with its arguments.
-docCons :: (Q Con, Maybe String, [Maybe String]) -> Q ()
-docCons (c, md, arg_docs) = do
-  c' <- c
-  -- Attach docs to the constructors
-  sequence_ [ putDoc (DeclDoc nm) d | Just d <- [md], nm <- get_cons_names c' ]
-  -- Attach docs to the arguments
-  case c' of
-    -- Record selector documentation isn't stored in the argument map,
-    -- but in the declaration map instead
-    RecC _ var_bang_types ->
-      sequence_ [ putDoc (DeclDoc nm) arg_doc
-                  | (Just arg_doc, (nm, _, _)) <- zip arg_docs var_bang_types
-                ]
-    _ ->
-      sequence_ [ putDoc (ArgDoc nm i) arg_doc
-                    | nm <- get_cons_names c'
-                    , (i, Just arg_doc) <- zip [0..] arg_docs
-                ]
+import GHC.Internal.TH.Lib
diff --git a/libraries/template-haskell/Language/Haskell/TH/Ppr.hs b/libraries/template-haskell/Language/Haskell/TH/Ppr.hs
index 2801ba2fc1ea742d6d6806c54b0f1f317bfef814..49ed1576466ff4f1159a2d1da611e421d00cdda3 100644
--- a/libraries/template-haskell/Language/Haskell/TH/Ppr.hs
+++ b/libraries/template-haskell/Language/Haskell/TH/Ppr.hs
@@ -1,1075 +1,9 @@
 {-# LANGUAGE Safe #-}
-{-# LANGUAGE LambdaCase #-}
+
 -- | contains a prettyprinter for the
 -- Template Haskell datatypes
-
-module Language.Haskell.TH.Ppr where
-    -- All of the exports from this module should
-    -- be "public" functions.  The main module TH
-    -- re-exports them all.
-
-import Text.PrettyPrint (render)
-import Language.Haskell.TH.PprLib
-import Language.Haskell.TH.Syntax
-import Data.Word ( Word8 )
-import Data.Char ( toLower, chr)
-import GHC.Show  ( showMultiLineString )
-import GHC.Lexeme( isVarSymChar )
-import Data.Ratio ( numerator, denominator )
-import Data.Foldable ( toList )
-import Prelude hiding ((<>))
-
-nestDepth :: Int
-nestDepth = 4
-
-type Precedence = Int
-appPrec, opPrec, unopPrec, funPrec, qualPrec, sigPrec, noPrec :: Precedence
-appPrec  = 6    -- Argument of a function or type application
-opPrec   = 5    -- Argument of an infix operator
-unopPrec = 4    -- Argument of an unresolved infix operator
-funPrec  = 3    -- Argument of a function arrow
-qualPrec = 2    -- Forall-qualified type or result of a function arrow
-sigPrec  = 1    -- Argument of an explicit type signature
-noPrec   = 0    -- Others
-
-parensIf :: Bool -> Doc -> Doc
-parensIf True d = parens d
-parensIf False d = d
-
-------------------------------
-
-pprint :: Ppr a => a -> String
-pprint x = render $ to_HPJ_Doc $ ppr x
-
-class Ppr a where
-    ppr :: a -> Doc
-    ppr_list :: [a] -> Doc
-    ppr_list = vcat . map ppr
-
-instance Ppr a => Ppr [a] where
-    ppr x = ppr_list x
-
-------------------------------
-instance Ppr Name where
-    ppr v = pprName v
-
-------------------------------
-instance Ppr Info where
-    ppr (TyConI d)     = ppr d
-    ppr (ClassI d is)  = ppr d $$ vcat (map ppr is)
-    ppr (FamilyI d is) = ppr d $$ vcat (map ppr is)
-    ppr (PrimTyConI name arity is_unlifted)
-      = text "Primitive"
-        <+> (if is_unlifted then text "unlifted" else empty)
-        <+> text "type constructor" <+> quotes (ppr name)
-        <+> parens (text "arity" <+> int arity)
-    ppr (ClassOpI v ty cls)
-      = text "Class op from" <+> ppr cls <> colon <+> ppr_sig v ty
-    ppr (DataConI v ty tc)
-      = text "Constructor from" <+> ppr tc <> colon <+> ppr_sig v ty
-    ppr (PatSynI nm ty) = pprPatSynSig nm ty
-    ppr (TyVarI v ty)
-      = text "Type variable" <+> ppr v <+> equals <+> ppr ty
-    ppr (VarI v ty mb_d)
-      = vcat [ppr_sig v ty,
-              case mb_d of { Nothing -> empty; Just d -> ppr d }]
-
-ppr_sig :: Name -> Type -> Doc
-ppr_sig v ty = pprName' Applied v <+> dcolon <+> ppr ty
-
-pprFixity :: Name -> Fixity -> NamespaceSpecifier -> Doc
-pprFixity _ f _ | f == defaultFixity = empty
-pprFixity v (Fixity i d) ns_spec
-  = ppr_fix d <+> int i <+> pprNamespaceSpecifier ns_spec <+> pprName' Infix v
-    where ppr_fix InfixR = text "infixr"
-          ppr_fix InfixL = text "infixl"
-          ppr_fix InfixN = text "infix"
-
-pprNamespaceSpecifier :: NamespaceSpecifier -> Doc
-pprNamespaceSpecifier NoNamespaceSpecifier = empty
-pprNamespaceSpecifier TypeNamespaceSpecifier = text "type"
-pprNamespaceSpecifier DataNamespaceSpecifier = text "data"
-
--- | Pretty prints a pattern synonym type signature
-pprPatSynSig :: Name -> PatSynType -> Doc
-pprPatSynSig nm ty
-  = text "pattern" <+> pprPrefixOcc nm <+> dcolon <+> pprPatSynType ty
-
--- | Pretty prints a pattern synonym's type; follows the usual
--- conventions to print a pattern synonym type compactly, yet
--- unambiguously. See the note on 'PatSynType' and the section on
--- pattern synonyms in the GHC user's guide for more information.
-pprPatSynType :: PatSynType -> Doc
-pprPatSynType ty@(ForallT uniTys reqs ty'@(ForallT exTys provs ty''))
-  | null exTys,  null provs = ppr (ForallT uniTys reqs ty'')
-  | null uniTys, null reqs  = noreqs <+> ppr ty'
-  | null reqs               = pprForallBndrs uniTys <+> noreqs <+> ppr ty'
-  | otherwise               = ppr ty
-  where noreqs = text "() =>"
-        pprForallBndrs tvs = text "forall" <+> hsep (map ppr tvs) <+> text "."
-pprPatSynType ty            = ppr ty
-
-------------------------------
-instance Ppr Module where
-  ppr (Module pkg m) = text (pkgString pkg) <+> text (modString m)
-
-instance Ppr ModuleInfo where
-  ppr (ModuleInfo imps) = text "Module" <+> vcat (map ppr imps)
-
-------------------------------
-instance Ppr Exp where
-    ppr = pprExp noPrec
-
-pprPrefixOcc :: Name -> Doc
--- Print operators with parens around them
-pprPrefixOcc n = parensIf (isSymOcc n) (ppr n)
-
-isSymOcc :: Name -> Bool
-isSymOcc n
-  = case nameBase n of
-      []    -> True  -- Empty name; weird
-      (c:_) -> isVarSymChar c
-                   -- c.f. isVarSymChar in GHC itself
-
-pprInfixExp :: Exp -> Doc
-pprInfixExp (VarE v) = pprName' Infix v
-pprInfixExp (ConE v) = pprName' Infix v
-pprInfixExp (UnboundVarE v) = pprName' Infix v
--- This case will only ever be reached in exceptional circumstances.
--- For example, when printing an error message in case of a malformed expression.
-pprInfixExp e = text "`" <> ppr e <> text "`"
-
-pprExp :: Precedence -> Exp -> Doc
-pprExp _ (VarE v)     = pprName' Applied v
-pprExp _ (ConE c)     = pprName' Applied c
-pprExp i (LitE l)     = pprLit i l
-pprExp i (AppE e1 e2) = parensIf (i >= appPrec) $ pprExp opPrec e1
-                                              <+> pprExp appPrec e2
-pprExp i (AppTypeE e t)
- = parensIf (i >= appPrec) $ pprExp opPrec e <+> char '@' <> pprParendType t
-pprExp _ (ParensE e)  = parens (pprExp noPrec e)
-pprExp i (UInfixE e1 op e2)
- = parensIf (i > unopPrec) $ pprExp unopPrec e1
-                         <+> pprInfixExp op
-                         <+> pprExp unopPrec e2
-pprExp i (InfixE (Just e1) op (Just e2))
- = parensIf (i >= opPrec) $ pprExp opPrec e1
-                        <+> pprInfixExp op
-                        <+> pprExp opPrec e2
-pprExp _ (InfixE me1 op me2) = parens $ pprMaybeExp noPrec me1
-                                    <+> pprInfixExp op
-                                    <+> pprMaybeExp noPrec me2
-pprExp i (LamE [] e) = pprExp i e -- #13856
-pprExp i (LamE ps e) = parensIf (i > noPrec) $ char '\\' <> hsep (map (pprPat appPrec) ps)
-                                           <+> text "->" <+> ppr e
-pprExp i (LamCaseE ms)
-  = parensIf (i > noPrec) $ text "\\case" $$ braces (semiSep ms)
-pprExp i (LamCasesE ms)
-  = parensIf (i > noPrec) $ text "\\cases" $$ braces (semi_sep ms)
-  where semi_sep = sep . punctuate semi . map (pprClause False)
-pprExp i (TupE es)
-  | [Just e] <- es
-  = pprExp i (ConE (tupleDataName 1) `AppE` e)
-  | otherwise
-  = parens (commaSepWith (pprMaybeExp noPrec) es)
-pprExp _ (UnboxedTupE es) = hashParens (commaSepWith (pprMaybeExp noPrec) es)
-pprExp _ (UnboxedSumE e alt arity) = unboxedSumBars (ppr e) alt arity
--- Nesting in Cond is to avoid potential problems in do statements
-pprExp i (CondE guard true false)
- = parensIf (i > noPrec) $ sep [text "if"   <+> ppr guard,
-                       nest 1 $ text "then" <+> ppr true,
-                       nest 1 $ text "else" <+> ppr false]
-pprExp i (MultiIfE alts)
-  = parensIf (i > noPrec) $ vcat $
-      case alts of
-        []            -> [text "if {}"]
-        (alt : alts') -> text "if" <+> pprGuarded arrow alt
-                         : map (nest 3 . pprGuarded arrow) alts'
-pprExp i (LetE ds_ e) = parensIf (i > noPrec) $ text "let" <+> pprDecs ds_
-                                             $$ text " in" <+> ppr e
-  where
-    pprDecs []  = empty
-    pprDecs [d] = ppr d
-    pprDecs ds  = braces (semiSep ds)
-
-pprExp i (CaseE e ms)
- = parensIf (i > noPrec) $ text "case" <+> ppr e <+> text "of"
-                        $$ braces (semiSep ms)
-pprExp i (DoE m ss_) = parensIf (i > noPrec) $
-    pprQualifier m <> text "do" <+> pprStms ss_
-  where
-    pprQualifier Nothing = empty
-    pprQualifier (Just modName) = text (modString modName) <> char '.'
-    pprStms []  = empty
-    pprStms [s] = ppr s
-    pprStms ss  = braces (semiSep ss)
-pprExp i (MDoE m ss_) = parensIf (i > noPrec) $
-    pprQualifier m <> text "mdo" <+> pprStms ss_
-  where
-    pprQualifier Nothing = empty
-    pprQualifier (Just modName) = text (modString modName) <> char '.'
-    pprStms []  = empty
-    pprStms [s] = ppr s
-    pprStms ss  = braces (semiSep ss)
-
-pprExp _ (CompE []) = text "<<Empty CompExp>>"
--- This will probably break with fixity declarations - would need a ';'
-pprExp _ (CompE ss) =
-    if null ss'
-       -- If there are no statements in a list comprehension besides the last
-       -- one, we simply treat it like a normal list.
-       then text "[" <> ppr s <> text "]"
-       else text "[" <> ppr s
-        <+> bar
-        <+> commaSep ss'
-         <> text "]"
-  where s = last ss
-        ss' = init ss
-pprExp _ (ArithSeqE d) = ppr d
-pprExp _ (ListE es) = brackets (commaSep es)
-pprExp i (SigE e t) = parensIf (i > noPrec) $ pprExp sigPrec e
-                                          <+> dcolon <+> pprType sigPrec t
-pprExp _ (RecConE nm fs) = pprName' Applied nm <> braces (pprFields fs)
-pprExp _ (RecUpdE e fs) = pprExp appPrec e <> braces (pprFields fs)
-pprExp i (StaticE e) = parensIf (i >= appPrec) $
-                         text "static"<+> pprExp appPrec e
-pprExp _ (UnboundVarE v) = pprName' Applied v
-pprExp _ (LabelE s) = text "#" <> text s
-pprExp _ (ImplicitParamVarE n) = text ('?' : n)
-pprExp _ (GetFieldE e f) = pprExp appPrec e <> text ('.': f)
-pprExp _ (ProjectionE xs) = parens $ hcat $ map ((char '.'<>) . text) $ toList xs
-pprExp _ (TypedBracketE e) = text "[||" <> ppr e <> text "||]"
-pprExp _ (TypedSpliceE e) = text "$$" <> pprExp appPrec e
-pprExp i (TypeE t) = parensIf (i > noPrec) $ text "type" <+> ppr t
-
-pprFields :: [(Name,Exp)] -> Doc
-pprFields = sep . punctuate comma . map (\(s,e) -> pprName' Applied s <+> equals <+> ppr e)
-
-pprMaybeExp :: Precedence -> Maybe Exp -> Doc
-pprMaybeExp _ Nothing = empty
-pprMaybeExp i (Just e) = pprExp i e
-
-------------------------------
-instance Ppr Stmt where
-    ppr (BindS p e) = ppr p <+> text "<-" <+> ppr e
-    ppr (LetS ds) = text "let" <+> (braces (semiSep ds))
-    ppr (NoBindS e) = ppr e
-    ppr (ParS sss) = sep $ punctuate bar
-                         $ map commaSep sss
-    ppr (RecS ss) = text "rec" <+> (braces (semiSep ss))
-
-------------------------------
-instance Ppr Match where
-    ppr (Match p rhs ds) = pprMatchPat p <+> pprBody False rhs
-                        $$ where_clause ds
-
-pprMatchPat :: Pat -> Doc
--- Everything except pattern signatures bind more tightly than (->)
-pprMatchPat p@(SigP {}) = parens (ppr p)
-pprMatchPat p           = ppr p
-
-------------------------------
-pprGuarded :: Doc -> (Guard, Exp) -> Doc
-pprGuarded eqDoc (guard, expr) = case guard of
-  NormalG guardExpr -> bar <+> ppr guardExpr <+> eqDoc <+> ppr expr
-  PatG    stmts     -> bar <+> vcat (punctuate comma $ map ppr stmts) $$
-                         nest nestDepth (eqDoc <+> ppr expr)
-
-------------------------------
-pprBody :: Bool -> Body -> Doc
-pprBody eq body = case body of
-    GuardedB xs -> nest nestDepth $ vcat $ map (pprGuarded eqDoc) xs
-    NormalB  e  -> eqDoc <+> ppr e
-  where eqDoc | eq        = equals
-              | otherwise = arrow
-
-------------------------------
-pprClause :: Bool -> Clause -> Doc
-pprClause eqDoc (Clause ps rhs ds)
-  = hsep (map (pprPat appPrec) ps) <+> pprBody eqDoc rhs
-    $$ where_clause ds
-
-------------------------------
-instance Ppr Lit where
-  ppr = pprLit noPrec
-
-pprLit :: Precedence -> Lit -> Doc
-pprLit i (IntPrimL x)    = parensIf (i > noPrec && x < 0)
-                                    (integer x <> char '#')
-pprLit _ (WordPrimL x)    = integer x <> text "##"
-pprLit i (FloatPrimL x)  = parensIf (i > noPrec && x < 0)
-                                    (float (fromRational x) <> char '#')
-pprLit i (DoublePrimL x) = parensIf (i > noPrec && x < 0)
-                                    (double (fromRational x) <> text "##")
-pprLit i (IntegerL x)    = parensIf (i > noPrec && x < 0) (integer x)
-pprLit _ (CharL c)       = text (show c)
-pprLit _ (CharPrimL c)   = text (show c) <> char '#'
-pprLit _ (StringL s)     = pprString s
-pprLit _ (StringPrimL s) = pprString (bytesToString s) <> char '#'
-pprLit _ (BytesPrimL {}) = pprString "<binary data>"
-pprLit i (RationalL rat)
-  | withoutFactor 2 (withoutFactor 5 $ denominator rat) /= 1
-  -- if the denominator has prime factors other than 2 and 5
-  -- or can't be represented as Double, show as fraction
-  = parensIf (i > noPrec) $
-    integer (numerator rat) <+> char '/' <+> integer (denominator rat)
-  | rat /= 0 && (zeroes < -2 || zeroes > 6),
-    let (n, d) = properFraction (rat / magnitude)
-  -- if < 0.01 or >= 100_000_000, use scientific notation
-  = parensIf (i > noPrec && rat < 0)
-             (integer n
-              <> (if d == 0 then empty else char '.' <> decimals (abs d))
-              <> char 'e' <> integer zeroes)
-  | let (n, d) = properFraction rat
-  = parensIf (i > noPrec && rat < 0)
-             (integer n <> char '.'
-              <> if d == 0 then char '0' else decimals (abs d))
-  where zeroes :: Integer
-        zeroes = log10 (abs rat)
-        log10 :: Rational -> Integer
-        log10 x
-          | x >= 10 = 1 + log10 (x / 10)
-          | x < 1 = -1 + log10 (x * 10)
-          | otherwise = 0
-        magnitude :: Rational
-        magnitude = 10 ^^ zeroes
-        withoutFactor :: Integer -> Integer -> Integer
-        withoutFactor _ 0 = 0
-        withoutFactor p n
-          | (n', 0) <- divMod n p = withoutFactor p n'
-          | otherwise = n
-        -- | Expects the argument 0 <= x < 1
-        decimals :: Rational -> Doc
-        decimals x
-          | x == 0 = empty
-          | otherwise = integer n <> decimals d
-          where (n, d) = properFraction (x * 10)
-
-bytesToString :: [Word8] -> String
-bytesToString = map (chr . fromIntegral)
-
-pprString :: String -> Doc
--- Print newlines as newlines with Haskell string escape notation,
--- not as '\n'.  For other non-printables use regular escape notation.
-pprString s = vcat (map text (showMultiLineString s))
-
-------------------------------
-instance Ppr Pat where
-    ppr = pprPat noPrec
-
-pprPat :: Precedence -> Pat -> Doc
-pprPat i (LitP l)     = pprLit i l
-pprPat _ (VarP v)     = pprName' Applied v
-pprPat i (TupP ps)
-  | [_] <- ps
-  = pprPat i (ConP (tupleDataName 1) [] ps)
-  | otherwise
-  = parens (commaSep ps)
-pprPat _ (UnboxedTupP ps) = hashParens (commaSep ps)
-pprPat _ (UnboxedSumP p alt arity) = unboxedSumBars (ppr p) alt arity
-pprPat i (ConP s ts ps)  = parensIf (i >= appPrec) $
-      pprName' Applied s
-  <+> sep (map (\t -> char '@' <> pprParendType t) ts)
-  <+> sep (map (pprPat appPrec) ps)
-pprPat _ (ParensP p)  = parens $ pprPat noPrec p
-pprPat i (UInfixP p1 n p2)
-                      = parensIf (i > unopPrec) (pprPat unopPrec p1 <+>
-                                                 pprName' Infix n   <+>
-                                                 pprPat unopPrec p2)
-pprPat i (InfixP p1 n p2)
-                      = parensIf (i >= opPrec) (pprPat opPrec p1 <+>
-                                                pprName' Infix n <+>
-                                                pprPat opPrec p2)
-pprPat i (TildeP p)   = parensIf (i > noPrec) $ char '~' <> pprPat appPrec p
-pprPat i (BangP p)    = parensIf (i > noPrec) $ char '!' <> pprPat appPrec p
-pprPat i (AsP v p)    = parensIf (i > noPrec) $ ppr v <> text "@"
-                                                      <> pprPat appPrec p
-pprPat _ WildP        = text "_"
-pprPat _ (RecP nm fs)
- = parens $     pprName' Applied nm
-            <+> braces (sep $ punctuate comma $
-                        map (\(s,p) -> pprName' Applied s <+> equals <+> ppr p) fs)
-pprPat _ (ListP ps) = brackets (commaSep ps)
-pprPat i (SigP p t) = parensIf (i > noPrec) $ ppr p <+> dcolon <+> ppr t
-pprPat _ (ViewP e p) = parens $ pprExp noPrec e <+> text "->" <+> pprPat noPrec p
-pprPat _ (TypeP t) = parens $ text "type" <+> ppr t
-pprPat _ (InvisP t) = parens $ text "@" <+> ppr t
-
-------------------------------
-instance Ppr Dec where
-    ppr = ppr_dec True
-
-ppr_dec :: Bool     -- ^ declaration on the toplevel?
-        -> Dec
-        -> Doc
-ppr_dec isTop (FunD f cs)   = layout $ map (\c -> pprPrefixOcc f <+> ppr c) cs
-  where
-    layout :: [Doc] -> Doc
-    layout = if isTop then vcat else semiSepWith id
-ppr_dec _ (ValD p r ds) = ppr p <+> pprBody True r
-                          $$ where_clause ds
-ppr_dec _ (TySynD t xs rhs)
-  = ppr_tySyn empty (Just t) (hsep (map ppr xs)) rhs
-ppr_dec isTop (DataD ctxt t xs ksig cs decs)
-  = ppr_data isTop empty ctxt (Just t) (hsep (map ppr xs)) ksig cs decs
-ppr_dec isTop (NewtypeD ctxt t xs ksig c decs)
-  = ppr_newtype isTop empty ctxt (Just t) (sep (map ppr xs)) ksig c decs
-ppr_dec isTop (TypeDataD t xs ksig cs)
-  = ppr_type_data isTop empty [] (Just t) (hsep (map ppr xs)) ksig cs []
-ppr_dec _  (ClassD ctxt c xs fds ds)
-  = text "class" <+> pprCxt ctxt <+> pprName' Applied c <+> hsep (map ppr xs) <+> ppr fds
-    $$ where_clause ds
-ppr_dec _ (InstanceD o ctxt i ds) =
-        text "instance" <+> maybe empty ppr_overlap o <+> pprCxt ctxt <+> ppr i
-                                  $$ where_clause ds
-ppr_dec _ (SigD f t)    = pprPrefixOcc f <+> dcolon <+> ppr t
-ppr_dec _ (KiSigD f k)  = text "type" <+> pprPrefixOcc f <+> dcolon <+> ppr k
-ppr_dec _ (ForeignD f)  = ppr f
-ppr_dec _ (InfixD fx ns_spec n) = pprFixity n fx ns_spec
-ppr_dec _ (DefaultD tys) =
-        text "default" <+> parens (sep $ punctuate comma $ map ppr tys)
-ppr_dec _ (PragmaD p)   = ppr p
-ppr_dec isTop (DataFamilyD tc tvs kind)
-  = text "data" <+> maybeFamily <+> pprName' Applied tc <+> hsep (map ppr tvs) <+> maybeKind
-  where
-    maybeFamily | isTop     = text "family"
-                | otherwise = empty
-    maybeKind | (Just k') <- kind = dcolon <+> ppr k'
-              | otherwise = empty
-ppr_dec isTop (DataInstD ctxt bndrs ty ksig cs decs)
-  = ppr_data isTop (maybeInst <+> ppr_bndrs bndrs)
-             ctxt Nothing (ppr ty) ksig cs decs
-  where
-    maybeInst | isTop     = text "instance"
-              | otherwise = empty
-ppr_dec isTop (NewtypeInstD ctxt bndrs ty ksig c decs)
-  = ppr_newtype isTop (maybeInst <+> ppr_bndrs bndrs)
-                ctxt Nothing (ppr ty) ksig c decs
-  where
-    maybeInst | isTop     = text "instance"
-              | otherwise = empty
-ppr_dec isTop (TySynInstD (TySynEqn mb_bndrs ty rhs))
-  = ppr_tySyn (maybeInst <+> ppr_bndrs mb_bndrs)
-              Nothing (ppr ty) rhs
-  where
-    maybeInst | isTop     = text "instance"
-              | otherwise = empty
-ppr_dec isTop (OpenTypeFamilyD tfhead)
-  = text "type" <+> maybeFamily <+> ppr_tf_head tfhead
-  where
-    maybeFamily | isTop     = text "family"
-                | otherwise = empty
-ppr_dec _ (ClosedTypeFamilyD tfhead eqns)
-  = hang (text "type family" <+> ppr_tf_head tfhead <+> text "where")
-      nestDepth (vcat (map ppr_eqn eqns))
-  where
-    ppr_eqn (TySynEqn mb_bndrs lhs rhs)
-      = ppr_bndrs mb_bndrs <+> ppr lhs <+> text "=" <+> ppr rhs
-ppr_dec _ (RoleAnnotD name roles)
-  = hsep [ text "type role", pprName' Applied name ] <+> hsep (map ppr roles)
-ppr_dec _ (StandaloneDerivD ds cxt ty)
-  = hsep [ text "deriving"
-         , maybe empty ppr_deriv_strategy ds
-         , text "instance"
-         , pprCxt cxt
-         , ppr ty ]
-ppr_dec _ (DefaultSigD n ty)
-  = hsep [ text "default", pprPrefixOcc n, dcolon, ppr ty ]
-ppr_dec _ (PatSynD name args dir pat)
-  = text "pattern" <+> pprNameArgs <+> ppr dir <+> pprPatRHS
-  where
-    pprNameArgs | InfixPatSyn a1 a2 <- args = ppr a1 <+> pprName' Infix name <+> ppr a2
-                | otherwise                 = pprName' Applied name <+> ppr args
-    pprPatRHS   | ExplBidir cls <- dir = hang (ppr pat <+> text "where")
-                                              nestDepth
-                                              (vcat $ (pprName' Applied name <+>) . ppr <$> cls)
-                | otherwise            = ppr pat
-ppr_dec _ (PatSynSigD name ty)
-  = pprPatSynSig name ty
-ppr_dec _ (ImplicitParamBindD n e)
-  = hsep [text ('?' : n), text "=", ppr e]
-
-ppr_deriv_strategy :: DerivStrategy -> Doc
-ppr_deriv_strategy ds =
-  case ds of
-    StockStrategy    -> text "stock"
-    AnyclassStrategy -> text "anyclass"
-    NewtypeStrategy  -> text "newtype"
-    ViaStrategy ty   -> text "via" <+> pprParendType ty
-
-ppr_overlap :: Overlap -> Doc
-ppr_overlap o = text $
-  case o of
-    Overlaps      -> "{-# OVERLAPS #-}"
-    Overlappable  -> "{-# OVERLAPPABLE #-}"
-    Overlapping   -> "{-# OVERLAPPING #-}"
-    Incoherent    -> "{-# INCOHERENT #-}"
-
-ppr_data :: Bool     -- ^ declaration on the toplevel?
-         -> Doc -> Cxt -> Maybe Name -> Doc -> Maybe Kind -> [Con] -> [DerivClause]
-         -> Doc
-ppr_data = ppr_typedef "data"
-
-ppr_newtype :: Bool     -- ^ declaration on the toplevel?
-            -> Doc -> Cxt -> Maybe Name -> Doc -> Maybe Kind -> Con -> [DerivClause]
-            -> Doc
-ppr_newtype isTop maybeInst ctxt t argsDoc ksig c decs
-  = ppr_typedef "newtype" isTop maybeInst ctxt t argsDoc ksig [c] decs
-
-ppr_type_data :: Bool     -- ^ declaration on the toplevel?
-              -> Doc -> Cxt -> Maybe Name -> Doc -> Maybe Kind -> [Con] -> [DerivClause]
-              -> Doc
-ppr_type_data = ppr_typedef "type data"
-
-ppr_typedef :: String -> Bool -> Doc -> Cxt -> Maybe Name -> Doc -> Maybe Kind -> [Con] -> [DerivClause] -> Doc
-ppr_typedef data_or_newtype isTop maybeInst ctxt t argsDoc ksig cs decs
-  = sep [text data_or_newtype <+> maybeInst
-            <+> pprCxt ctxt
-            <+> case t of
-                 Just n -> pprName' Applied n <+> argsDoc
-                 Nothing -> argsDoc
-            <+> ksigDoc <+> maybeWhere,
-         nest nestDepth (layout (pref $ map ppr cs)),
-         if null decs
-           then empty
-           else nest nestDepth
-              $ vcat $ map ppr_deriv_clause decs]
-  where
-    pref :: [Doc] -> [Doc]
-    pref xs | isGadtDecl = xs
-    pref []              = []      -- No constructors; can't happen in H98
-    pref (d:ds)          = (char '=' <+> d):map (bar <+>) ds
-
-    layout :: [Doc] -> Doc
-    layout | isGadtDecl && not isTop = braces . semiSepWith id
-           | otherwise = vcat
-
-    maybeWhere :: Doc
-    maybeWhere | isGadtDecl = text "where"
-               | otherwise  = empty
-
-    isGadtDecl :: Bool
-    isGadtDecl = not (null cs) && all isGadtCon cs
-        where isGadtCon (GadtC _ _ _   ) = True
-              isGadtCon (RecGadtC _ _ _) = True
-              isGadtCon (ForallC _ _ x ) = isGadtCon x
-              isGadtCon  _               = False
-
-    ksigDoc = case ksig of
-                Nothing -> empty
-                Just k  -> dcolon <+> ppr k
-
-
-ppr_deriv_clause :: DerivClause -> Doc
-ppr_deriv_clause (DerivClause ds ctxt)
-  = text "deriving" <+> pp_strat_before
-                    <+> ppr_cxt_preds appPrec ctxt
-                    <+> pp_strat_after
-  where
-    -- @via@ is unique in that in comes /after/ the class being derived,
-    -- so we must special-case it.
-    (pp_strat_before, pp_strat_after) =
-      case ds of
-        Just (via@ViaStrategy{}) -> (empty, ppr_deriv_strategy via)
-        _                        -> (maybe empty ppr_deriv_strategy ds, empty)
-
-ppr_tySyn :: Doc -> Maybe Name -> Doc -> Type -> Doc
-ppr_tySyn maybeInst t argsDoc rhs
-  = text "type" <+> maybeInst
-    <+> case t of
-         Just n -> pprName' Applied n <+> argsDoc
-         Nothing -> argsDoc
-    <+> text "=" <+> ppr rhs
-
-ppr_tf_head :: TypeFamilyHead -> Doc
-ppr_tf_head (TypeFamilyHead tc tvs res inj)
-  = pprName' Applied tc <+> hsep (map ppr tvs) <+> ppr res <+> maybeInj
-  where
-    maybeInj | (Just inj') <- inj = ppr inj'
-             | otherwise          = empty
-
-ppr_bndrs :: PprFlag flag => Maybe [TyVarBndr flag] -> Doc
-ppr_bndrs (Just bndrs) = text "forall" <+> sep (map ppr bndrs) <> text "."
-ppr_bndrs Nothing = empty
-
-------------------------------
-instance Ppr FunDep where
-    ppr (FunDep xs ys) = hsep (map ppr xs) <+> text "->" <+> hsep (map ppr ys)
-    ppr_list [] = empty
-    ppr_list xs = bar <+> commaSep xs
-
-------------------------------
-instance Ppr FamilyResultSig where
-    ppr NoSig           = empty
-    ppr (KindSig k)     = dcolon <+> ppr k
-    ppr (TyVarSig bndr) = text "=" <+> ppr bndr
-
-------------------------------
-instance Ppr InjectivityAnn where
-    ppr (InjectivityAnn lhs rhs) =
-        bar <+> ppr lhs <+> text "->" <+> hsep (map ppr rhs)
-
-------------------------------
-instance Ppr Foreign where
-    ppr (ImportF callconv safety impent as typ)
-       = text "foreign import"
-     <+> showtextl callconv
-     <+> showtextl safety
-     <+> text (show impent)
-     <+> pprName' Applied as
-     <+> dcolon <+> ppr typ
-    ppr (ExportF callconv expent as typ)
-        = text "foreign export"
-      <+> showtextl callconv
-      <+> text (show expent)
-      <+> pprName' Applied as
-      <+> dcolon <+> ppr typ
-
-------------------------------
-instance Ppr Pragma where
-    ppr (InlineP n inline rm phases)
-       = text "{-#"
-     <+> ppr inline
-     <+> ppr rm
-     <+> ppr phases
-     <+> pprName' Applied n
-     <+> text "#-}"
-    ppr (OpaqueP n)
-       = text "{-# OPAQUE" <+> pprName' Applied n <+> text "#-}"
-    ppr (SpecialiseP n ty inline phases)
-       =   text "{-# SPECIALISE"
-       <+> maybe empty ppr inline
-       <+> ppr phases
-       <+> sep [ pprName' Applied n <+> dcolon
-               , nest 2 $ ppr ty ]
-       <+> text "#-}"
-    ppr (SpecialiseInstP inst)
-       = text "{-# SPECIALISE instance" <+> ppr inst <+> text "#-}"
-    ppr (RuleP n ty_bndrs tm_bndrs lhs rhs phases)
-       = sep [ text "{-# RULES" <+> pprString n <+> ppr phases
-             , nest 4 $ ppr_ty_forall ty_bndrs <+> ppr_tm_forall ty_bndrs
-                                               <+> ppr lhs
-             , nest 4 $ char '=' <+> ppr rhs <+> text "#-}" ]
-      where ppr_ty_forall Nothing      = empty
-            ppr_ty_forall (Just bndrs) = text "forall"
-                                         <+> fsep (map ppr bndrs)
-                                         <+> char '.'
-            ppr_tm_forall Nothing | null tm_bndrs = empty
-            ppr_tm_forall _ = text "forall"
-                              <+> fsep (map ppr tm_bndrs)
-                              <+> char '.'
-    ppr (AnnP tgt expr)
-       = text "{-# ANN" <+> target1 tgt <+> ppr expr <+> text "#-}"
-      where target1 ModuleAnnotation    = text "module"
-            target1 (TypeAnnotation t)  = text "type" <+> pprName' Applied t
-            target1 (ValueAnnotation v) = pprName' Applied v
-    ppr (LineP line file)
-       = text "{-# LINE" <+> int line <+> text (show file) <+> text "#-}"
-    ppr (CompleteP cls mty)
-       = text "{-# COMPLETE" <+> (fsep $ punctuate comma $ map (pprName' Applied) cls)
-                <+> maybe empty (\ty -> dcolon <+> pprName' Applied ty) mty <+> text "#-}"
-    ppr (SCCP nm str)
-       = text "{-# SCC" <+> pprName' Applied nm <+> maybe empty pprString str <+> text "#-}"
-
-------------------------------
-instance Ppr Inline where
-    ppr NoInline  = text "NOINLINE"
-    ppr Inline    = text "INLINE"
-    ppr Inlinable = text "INLINABLE"
-
-------------------------------
-instance Ppr RuleMatch where
-    ppr ConLike = text "CONLIKE"
-    ppr FunLike = empty
-
-------------------------------
-instance Ppr Phases where
-    ppr AllPhases       = empty
-    ppr (FromPhase i)   = brackets $ int i
-    ppr (BeforePhase i) = brackets $ char '~' <> int i
-
-------------------------------
-instance Ppr RuleBndr where
-    ppr (RuleVar n)         = ppr n
-    ppr (TypedRuleVar n ty) = parens $ ppr n <+> dcolon <+> ppr ty
-
-------------------------------
-instance Ppr Clause where
-    ppr = pprClause True
-
-------------------------------
-instance Ppr Con where
-    ppr (NormalC c sts) = pprName' Applied c <+> sep (map pprBangType sts)
-
-    ppr (RecC c vsts)
-        = pprName' Applied c <+> braces (sep (punctuate comma $ map pprVarBangType vsts))
-
-    ppr (InfixC st1 c st2) = pprBangType st1
-                         <+> pprName' Infix c
-                         <+> pprBangType st2
-
-    ppr (ForallC ns ctxt (GadtC cs sts ty))
-        = commaSepApplied cs <+> dcolon <+> pprForall ns ctxt
-      <+> pprGadtRHS sts ty
-
-    ppr (ForallC ns ctxt (RecGadtC cs vsts ty))
-        = commaSepApplied cs <+> dcolon <+> pprForall ns ctxt
-      <+> pprRecFields vsts ty
-
-    ppr (ForallC ns ctxt con)
-        = pprForall ns ctxt <+> ppr con
-
-    ppr (GadtC cs sts ty)
-        = commaSepApplied cs <+> dcolon <+> pprGadtRHS sts ty
-
-    ppr (RecGadtC cs vsts ty)
-        = commaSepApplied cs <+> dcolon <+> pprRecFields vsts ty
-
-instance Ppr PatSynDir where
-  ppr Unidir        = text "<-"
-  ppr ImplBidir     = text "="
-  ppr (ExplBidir _) = text "<-"
-    -- the ExplBidir's clauses are pretty printed together with the
-    -- entire pattern synonym; so only print the direction here.
-
-instance Ppr PatSynArgs where
-  ppr (PrefixPatSyn args) = sep $ map ppr args
-  ppr (InfixPatSyn a1 a2) = ppr a1 <+> ppr a2
-  ppr (RecordPatSyn sels) = braces $ sep (punctuate comma (map (pprName' Applied) sels))
-
-commaSepApplied :: [Name] -> Doc
-commaSepApplied = commaSepWith (pprName' Applied)
-
-pprForall :: [TyVarBndr Specificity] -> Cxt -> Doc
-pprForall = pprForall' ForallInvis
-
-pprForallVis :: [TyVarBndr ()] -> Cxt -> Doc
-pprForallVis = pprForall' ForallVis
-
-pprForall' :: PprFlag flag => ForallVisFlag -> [TyVarBndr flag] -> Cxt -> Doc
-pprForall' fvf tvs cxt
-  -- even in the case without any tvs, there could be a non-empty
-  -- context cxt (e.g., in the case of pattern synonyms, where there
-  -- are multiple forall binders and contexts).
-  | [] <- tvs = pprCxt cxt
-  | otherwise = text "forall" <+> hsep (map ppr tvs)
-                              <+> separator <+> pprCxt cxt
-  where
-    separator = case fvf of
-                  ForallVis   -> text "->"
-                  ForallInvis -> char '.'
-
-pprRecFields :: [(Name, Strict, Type)] -> Type -> Doc
-pprRecFields vsts ty
-    = braces (sep (punctuate comma $ map pprVarBangType vsts))
-  <+> arrow <+> ppr ty
-
-pprGadtRHS :: [(Strict, Type)] -> Type -> Doc
-pprGadtRHS [] ty
-    = ppr ty
-pprGadtRHS sts ty
-    = sep (punctuate (space <> arrow) (map pprBangType sts))
-  <+> arrow <+> ppr ty
-
-------------------------------
-pprVarBangType :: VarBangType -> Doc
--- Slight infelicity: with print non-atomic type with parens
-pprVarBangType (v, bang, t) = pprName' Applied v <+> dcolon <+> pprBangType (bang, t)
-
-------------------------------
-pprBangType :: BangType -> Doc
--- Make sure we print
---
--- Con {-# UNPACK #-} a
---
--- rather than
---
--- Con {-# UNPACK #-}a
---
--- when there's no strictness annotation. If there is a strictness annotation,
--- it's okay to not put a space between it and the type.
-pprBangType (bt@(Bang _ NoSourceStrictness), t) = ppr bt <+> pprParendType t
-pprBangType (bt, t) = ppr bt <> pprParendType t
-
-------------------------------
-instance Ppr Bang where
-    ppr (Bang su ss) = ppr su <+> ppr ss
-
-------------------------------
-instance Ppr SourceUnpackedness where
-    ppr NoSourceUnpackedness = empty
-    ppr SourceNoUnpack       = text "{-# NOUNPACK #-}"
-    ppr SourceUnpack         = text "{-# UNPACK #-}"
-
-------------------------------
-instance Ppr SourceStrictness where
-    ppr NoSourceStrictness = empty
-    ppr SourceLazy         = char '~'
-    ppr SourceStrict       = char '!'
-
-------------------------------
-instance Ppr DecidedStrictness where
-    ppr DecidedLazy   = empty
-    ppr DecidedStrict = char '!'
-    ppr DecidedUnpack = text "{-# UNPACK #-} !"
-
-------------------------------
-{-# DEPRECATED pprVarStrictType
-               "As of @template-haskell-2.11.0.0@, 'VarStrictType' has been replaced by 'VarBangType'. Please use 'pprVarBangType' instead." #-}
-pprVarStrictType :: (Name, Strict, Type) -> Doc
-pprVarStrictType = pprVarBangType
-
-------------------------------
-{-# DEPRECATED pprStrictType
-               "As of @template-haskell-2.11.0.0@, 'StrictType' has been replaced by 'BangType'. Please use 'pprBangType' instead." #-}
-pprStrictType :: (Strict, Type) -> Doc
-pprStrictType = pprBangType
-
-------------------------------
-pprType :: Precedence -> Type -> Doc
-pprType _ (VarT v)               = pprName' Applied v
--- `Applied` is used here instead of `ppr` because of infix names (#13887)
-pprType _ (ConT c)               = pprName' Applied c
-pprType _ (TupleT 0)             = text "()"
-pprType p (TupleT 1)             = pprType p (ConT (tupleTypeName 1))
-pprType _ (TupleT n)             = parens (hcat (replicate (n-1) comma))
-pprType _ (UnboxedTupleT n)      = hashParens $ hcat $ replicate (n-1) comma
-pprType _ (UnboxedSumT arity)    = hashParens $ hcat $ replicate (arity-1) bar
-pprType _ ArrowT                 = parens (text "->")
-pprType _ MulArrowT              = text "FUN"
-pprType _ ListT                  = text "[]"
-pprType _ (LitT l)               = pprTyLit l
-pprType _ (PromotedT c)          = text "'" <> pprName' Applied c
-pprType _ (PromotedTupleT 0)     = text "'()"
-pprType p (PromotedTupleT 1)     = pprType p (PromotedT (tupleDataName 1))
-pprType _ (PromotedTupleT n)     = quoteParens (hcat (replicate (n-1) comma))
-pprType _ PromotedNilT           = text "'[]"
-pprType _ PromotedConsT          = text "'(:)"
-pprType _ StarT                  = char '*'
-pprType _ ConstraintT            = text "Constraint"
-pprType _ (SigT ty k)            = parens (ppr ty <+> text "::" <+> ppr k)
-pprType _ WildCardT              = char '_'
-pprType p t@(InfixT {})          = pprInfixT p t
-pprType p t@(UInfixT {})         = pprInfixT p t
-pprType p t@(PromotedInfixT {})  = pprInfixT p t
-pprType p t@(PromotedUInfixT {}) = pprInfixT p t
-pprType _ (ParensT t)            = parens (pprType noPrec t)
-pprType p (ImplicitParamT n ty) =
-  parensIf (p >= sigPrec) $ text ('?':n) <+> text "::" <+> pprType sigPrec ty
-pprType _ EqualityT              = text "(~)"
-pprType p (ForallT tvars ctxt ty) =
-  parensIf (p >= funPrec) $ sep [pprForall tvars ctxt, pprType qualPrec ty]
-pprType p (ForallVisT tvars ty) =
-  parensIf (p >= funPrec) $ sep [pprForallVis tvars [], pprType qualPrec ty]
-pprType p t@AppT{}               = pprTyApp p (split t)
-pprType p t@AppKindT{}           = pprTyApp p (split t)
-
-------------------------------
-pprParendType :: Type -> Doc
-pprParendType = pprType appPrec
-
-pprInfixT :: Precedence -> Type -> Doc
-pprInfixT p = \case
-  InfixT x n y          -> with x n y ""  opPrec
-  UInfixT x n y         -> with x n y ""  unopPrec
-  PromotedInfixT x n y  -> with x n y "'" opPrec
-  PromotedUInfixT x n y -> with x n y "'" unopPrec
-  t                     -> pprParendType t
-  where
-    with x n y prefix p' =
-      parensIf
-        (p >= p')
-        (pprType opPrec x <+> text prefix <> pprName' Infix n <+> pprType opPrec y)
-
-instance Ppr Type where
-    ppr = pprType noPrec
-instance Ppr TypeArg where
-    ppr (TANormal ty) = ppr ty
-    ppr (TyArg ki) = char '@' <> parensIf (isStarT ki) (ppr ki)
-
-pprParendTypeArg :: TypeArg -> Doc
-pprParendTypeArg (TANormal ty) = pprParendType ty
-pprParendTypeArg (TyArg ki) = char '@' <> parensIf (isStarT ki) (pprParendType ki)
-
-isStarT :: Type -> Bool
-isStarT StarT = True
-isStarT _ = False
-
-{- Note [Pretty-printing kind signatures]
-~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
-GHC's parser only recognises a kind signature in a type when there are
-parens around it.  E.g. the parens are required here:
-   f :: (Int :: *)
-   type instance F Int = (Bool :: *)
-So we always print a SigT with parens (see #10050). -}
-
-pprTyApp :: Precedence -> (Type, [TypeArg]) -> Doc
-pprTyApp p app@(MulArrowT, [TANormal (PromotedT c), TANormal arg1, TANormal arg2])
-  | p >= funPrec  = parens (pprTyApp noPrec app)
-  | c == oneName  = sep [pprFunArgType arg1 <+> text "%1 ->", pprType qualPrec arg2]
-  | c == manyName = sep [pprFunArgType arg1 <+> text "->", pprType qualPrec arg2]
-pprTyApp p (MulArrowT, [TANormal argm, TANormal arg1, TANormal arg2]) =
-  parensIf (p >= funPrec) $
-    sep [pprFunArgType arg1 <+> text "%" <> pprType appPrec argm <+> text "->",
-         pprType qualPrec arg2]
-pprTyApp p (ArrowT, [TANormal arg1, TANormal arg2]) =
-  parensIf (p >= funPrec) $
-    sep [pprFunArgType arg1 <+> text "->", pprType qualPrec arg2]
-pprTyApp p (EqualityT, [TANormal arg1, TANormal arg2]) =
-  parensIf (p >= opPrec) $
-    sep [pprType opPrec arg1 <+> text "~", pprType opPrec arg2]
-pprTyApp _ (ListT, [TANormal arg]) = brackets (pprType noPrec arg)
-pprTyApp p (TupleT 1, args) = pprTyApp p (ConT (tupleTypeName 1), args)
-pprTyApp _ (TupleT n, args)
- | length args == n, Just args' <- traverse fromTANormal args
- = parens (commaSep args')
-pprTyApp p (PromotedTupleT 1, args) = pprTyApp p (PromotedT (tupleDataName 1), args)
-pprTyApp _ (PromotedTupleT n, args)
- | length args == n, Just args' <- traverse fromTANormal args
- = quoteParens (commaSep args')
-pprTyApp p (fun, args) =
-  parensIf (p >= appPrec) $ pprParendType fun <+> sep (map pprParendTypeArg args)
-
-fromTANormal :: TypeArg -> Maybe Type
-fromTANormal (TANormal arg) = Just arg
-fromTANormal (TyArg _) = Nothing
-
--- Print the type to the left of @->@. Everything except forall and (->) binds more tightly than (->).
-pprFunArgType :: Type -> Doc
-pprFunArgType = pprType funPrec
-
-data ForallVisFlag = ForallVis   -- forall a -> {...}
-                   | ForallInvis -- forall a.   {...}
-  deriving Show
-
-data TypeArg = TANormal Type
-             | TyArg Kind
-
-split :: Type -> (Type, [TypeArg])    -- Split into function and args
-split t = go t []
-    where go (AppT t1 t2) args = go t1 (TANormal t2:args)
-          go (AppKindT ty ki) args = go ty (TyArg ki:args)
-          go ty           args = (ty, args)
-
-pprTyLit :: TyLit -> Doc
-pprTyLit (NumTyLit n) = integer n
-pprTyLit (StrTyLit s) = text (show s)
-pprTyLit (CharTyLit c) = text (show c)
-
-instance Ppr TyLit where
-  ppr = pprTyLit
-
-------------------------------
-class PprFlag flag where
-    pprTyVarBndr :: (TyVarBndr flag) -> Doc
-
-instance PprFlag () where
-    pprTyVarBndr (PlainTV nm ())    = ppr nm
-    pprTyVarBndr (KindedTV nm () k) = parens (ppr nm <+> dcolon <+> ppr k)
-
-instance PprFlag Specificity where
-    pprTyVarBndr (PlainTV nm SpecifiedSpec)    = ppr nm
-    pprTyVarBndr (PlainTV nm InferredSpec)     = braces (ppr nm)
-    pprTyVarBndr (KindedTV nm SpecifiedSpec k) = parens (ppr nm <+> dcolon <+> ppr k)
-    pprTyVarBndr (KindedTV nm InferredSpec  k) = braces (ppr nm <+> dcolon <+> ppr k)
-
-instance PprFlag BndrVis where
-    pprTyVarBndr (PlainTV nm vis)    = pprBndrVis vis (ppr nm)
-    pprTyVarBndr (KindedTV nm vis k) = pprBndrVis vis (parens (ppr nm <+> dcolon <+> ppr k))
-
-pprBndrVis :: BndrVis -> Doc -> Doc
-pprBndrVis BndrReq   d = d
-pprBndrVis BndrInvis d = char '@' <> d
-
-instance PprFlag flag => Ppr (TyVarBndr flag) where
-    ppr bndr = pprTyVarBndr bndr
-
-instance Ppr Role where
-    ppr NominalR          = text "nominal"
-    ppr RepresentationalR = text "representational"
-    ppr PhantomR          = text "phantom"
-    ppr InferR            = text "_"
-
-------------------------------
-pprCxt :: Cxt -> Doc
-pprCxt [] = empty
-pprCxt ts = ppr_cxt_preds funPrec ts <+> text "=>"
-
-ppr_cxt_preds :: Precedence -> Cxt -> Doc
-ppr_cxt_preds _ [] = text "()"
-ppr_cxt_preds p [t] = pprType p t
-ppr_cxt_preds _ ts = parens (commaSep ts)
-
-------------------------------
-instance Ppr Range where
-    ppr = brackets . pprRange
-        where pprRange :: Range -> Doc
-              pprRange (FromR e) = ppr e <+> text ".."
-              pprRange (FromThenR e1 e2) = ppr e1 <> text ","
-                                           <+> ppr e2 <+> text ".."
-              pprRange (FromToR e1 e2) = ppr e1 <+> text ".." <+> ppr e2
-              pprRange (FromThenToR e1 e2 e3) = ppr e1 <> text ","
-                                             <+> ppr e2 <+> text ".."
-                                             <+> ppr e3
-
-------------------------------
-where_clause :: [Dec] -> Doc
-where_clause [] = empty
-where_clause ds = nest nestDepth $ text "where" <+> braces (semiSepWith (ppr_dec False) ds)
-
-showtextl :: Show a => a -> Doc
-showtextl = text . map toLower . show
-
-hashParens :: Doc -> Doc
-hashParens d = text "(# " <> d <> text " #)"
-
-quoteParens :: Doc -> Doc
-quoteParens d = text "'(" <> d <> text ")"
-
------------------------------
-instance Ppr Loc where
-  ppr (Loc { loc_module = md
-           , loc_package = pkg
-           , loc_start = (start_ln, start_col)
-           , loc_end = (end_ln, end_col) })
-    = hcat [ text pkg, colon, text md, colon
-           , parens $ int start_ln <> comma <> int start_col
-           , text "-"
-           , parens $ int end_ln <> comma <> int end_col ]
-
--- Takes a separator and a pretty-printing function and prints a list of things
--- separated by the separator followed by space.
-sepWith :: Doc -> (a -> Doc) -> [a] -> Doc
-sepWith sepDoc pprFun = sep . punctuate sepDoc . map pprFun
-
--- Takes a list of printable things and prints them separated by commas followed
--- by space.
-commaSep :: Ppr a => [a] -> Doc
-commaSep = commaSepWith ppr
-
--- Takes a list of things and prints them with the given pretty-printing
--- function, separated by commas followed by space.
-commaSepWith :: (a -> Doc) -> [a] -> Doc
-commaSepWith pprFun = sepWith comma pprFun
-
--- Takes a list of printable things and prints them separated by semicolons
--- followed by space.
-semiSep :: Ppr a => [a] -> Doc
-semiSep = sep . punctuate semi . map ppr
-
--- Takes a list of things and prints them with the given pretty-printing
--- function, separated by semicolons followed by space.
-semiSepWith :: (a -> Doc) -> [a] -> Doc
-semiSepWith pprFun = sepWith semi pprFun
-
--- Prints out the series of vertical bars that wraps an expression or pattern
--- used in an unboxed sum.
-unboxedSumBars :: Doc -> SumAlt -> SumArity -> Doc
-unboxedSumBars d alt arity = hashParens $
-    bars (alt-1) <> d <> bars (arity - alt)
+module Language.Haskell.TH.Ppr
+  ( module GHC.Internal.TH.Ppr )
   where
-    bars i = hsep (replicate i bar)
 
--- Text containing the vertical bar character.
-bar :: Doc
-bar = char '|'
+import GHC.Internal.TH.Ppr
diff --git a/libraries/template-haskell/Language/Haskell/TH/PprLib.hs b/libraries/template-haskell/Language/Haskell/TH/PprLib.hs
index 84315ac63b527eecc9bffdec9b6dd0c65ddbe721..5d40557a77ff8a91202ddd12734dca1571f84851 100644
--- a/libraries/template-haskell/Language/Haskell/TH/PprLib.hs
+++ b/libraries/template-haskell/Language/Haskell/TH/PprLib.hs
@@ -1,226 +1,8 @@
-{-# LANGUAGE FlexibleInstances, Safe #-}
+{-# LANGUAGE Safe #-}
 
 -- | Monadic front-end to Text.PrettyPrint
+module Language.Haskell.TH.PprLib
+  ( module GHC.Internal.TH.PprLib )
+  where
 
-module Language.Haskell.TH.PprLib (
-
-        -- * The document type
-        Doc,            -- Abstract, instance of Show
-        PprM,
-
-        -- * Primitive Documents
-        empty,
-        semi, comma, colon, dcolon, space, equals, arrow,
-        lparen, rparen, lbrack, rbrack, lbrace, rbrace,
-
-        -- * Converting values into documents
-        text, char, ptext,
-        int, integer, float, double, rational,
-
-        -- * Wrapping documents in delimiters
-        parens, brackets, braces, quotes, doubleQuotes,
-
-        -- * Combining documents
-        (<>), (<+>), hcat, hsep,
-        ($$), ($+$), vcat,
-        sep, cat,
-        fsep, fcat,
-        nest,
-        hang, punctuate,
-
-        -- * Predicates on documents
-        isEmpty,
-
-    to_HPJ_Doc, pprName, pprName'
-  ) where
-
-
-import Language.Haskell.TH.Syntax
-    (Uniq, Name(..), showName', NameFlavour(..), NameIs(..))
-import qualified Text.PrettyPrint as HPJ
-import Control.Monad (liftM, liftM2, ap)
-import Language.Haskell.TH.Lib.Map ( Map )
-import qualified Language.Haskell.TH.Lib.Map as Map ( lookup, insert, empty )
-import Prelude hiding ((<>))
-
-infixl 6 <>
-infixl 6 <+>
-infixl 5 $$, $+$
-
--- ---------------------------------------------------------------------------
--- The interface
-
--- The primitive Doc values
-
-instance Show Doc where
-   show d = HPJ.render (to_HPJ_Doc d)
-
-isEmpty :: Doc    -> PprM Bool;  -- ^ Returns 'True' if the document is empty
-
-empty   :: Doc;                 -- ^ An empty document
-semi    :: Doc;                 -- ^ A ';' character
-comma   :: Doc;                 -- ^ A ',' character
-colon   :: Doc;                 -- ^ A ':' character
-dcolon  :: Doc;                 -- ^ A "::" string
-space   :: Doc;                 -- ^ A space character
-equals  :: Doc;                 -- ^ A '=' character
-arrow   :: Doc;                 -- ^ A "->" string
-lparen  :: Doc;                 -- ^ A '(' character
-rparen  :: Doc;                 -- ^ A ')' character
-lbrack  :: Doc;                 -- ^ A '[' character
-rbrack  :: Doc;                 -- ^ A ']' character
-lbrace  :: Doc;                 -- ^ A '{' character
-rbrace  :: Doc;                 -- ^ A '}' character
-
-text     :: String   -> Doc
-ptext    :: String   -> Doc
-char     :: Char     -> Doc
-int      :: Int      -> Doc
-integer  :: Integer  -> Doc
-float    :: Float    -> Doc
-double   :: Double   -> Doc
-rational :: Rational -> Doc
-
-
-parens       :: Doc -> Doc;     -- ^ Wrap document in @(...)@
-brackets     :: Doc -> Doc;     -- ^ Wrap document in @[...]@
-braces       :: Doc -> Doc;     -- ^ Wrap document in @{...}@
-quotes       :: Doc -> Doc;     -- ^ Wrap document in @\'...\'@
-doubleQuotes :: Doc -> Doc;     -- ^ Wrap document in @\"...\"@
-
--- Combining @Doc@ values
-
-(<>)   :: Doc -> Doc -> Doc;     -- ^Beside
-hcat   :: [Doc] -> Doc;          -- ^List version of '<>'
-(<+>)  :: Doc -> Doc -> Doc;     -- ^Beside, separated by space
-hsep   :: [Doc] -> Doc;          -- ^List version of '<+>'
-
-($$)   :: Doc -> Doc -> Doc;     -- ^Above; if there is no
-                                 -- overlap it \"dovetails\" the two
-($+$)  :: Doc -> Doc -> Doc;     -- ^Above, without dovetailing.
-vcat   :: [Doc] -> Doc;          -- ^List version of '$$'
-
-cat    :: [Doc] -> Doc;          -- ^ Either hcat or vcat
-sep    :: [Doc] -> Doc;          -- ^ Either hsep or vcat
-fcat   :: [Doc] -> Doc;          -- ^ \"Paragraph fill\" version of cat
-fsep   :: [Doc] -> Doc;          -- ^ \"Paragraph fill\" version of sep
-
-nest   :: Int -> Doc -> Doc;     -- ^ Nested
-
-
--- GHC-specific ones.
-
-hang :: Doc -> Int -> Doc -> Doc;      -- ^ @hang d1 n d2 = sep [d1, nest n d2]@
-punctuate :: Doc -> [Doc] -> [Doc]
-   -- ^ @punctuate p [d1, ... dn] = [d1 \<> p, d2 \<> p, ... dn-1 \<> p, dn]@
-
--- ---------------------------------------------------------------------------
--- The "implementation"
-
-type State = (Map Name Name, Uniq)
-data PprM a = PprM { runPprM :: State -> (a, State) }
-
-pprName :: Name -> Doc
-pprName = pprName' Alone
-
-pprName' :: NameIs -> Name -> Doc
-pprName' ni n@(Name o (NameU _))
- = PprM $ \s@(fm, i)
-        -> let (n', s') = case Map.lookup n fm of
-                         Just d -> (d, s)
-                         Nothing -> let n'' = Name o (NameU i)
-                                    in (n'', (Map.insert n n'' fm, i + 1))
-           in (HPJ.text $ showName' ni n', s')
-pprName' ni n = text $ showName' ni n
-
-{-
-instance Show Name where
-  show (Name occ (NameU u))    = occString occ ++ "_" ++ show (I# u)
-  show (Name occ NameS)        = occString occ
-  show (Name occ (NameG ns m)) = modString m ++ "." ++ occString occ
-
-data Name = Name OccName NameFlavour
-
-data NameFlavour
-  | NameU Int#                  -- A unique local name
--}
-
-to_HPJ_Doc :: Doc -> HPJ.Doc
-to_HPJ_Doc d = fst $ runPprM d (Map.empty, 0)
-
-instance Functor PprM where
-      fmap = liftM
-
-instance Applicative PprM where
-      pure x = PprM $ \s -> (x, s)
-      (<*>) = ap
-
-instance Monad PprM where
-    m >>= k  = PprM $ \s -> let (x, s') = runPprM m s
-                            in runPprM (k x) s'
-
-type Doc = PprM HPJ.Doc
-
--- The primitive Doc values
-
-isEmpty = liftM HPJ.isEmpty
-
-empty = return HPJ.empty
-semi = return HPJ.semi
-comma = return HPJ.comma
-colon = return HPJ.colon
-dcolon = return $ HPJ.text "::"
-space = return HPJ.space
-equals = return HPJ.equals
-arrow = return $ HPJ.text "->"
-lparen = return HPJ.lparen
-rparen = return HPJ.rparen
-lbrack = return HPJ.lbrack
-rbrack = return HPJ.rbrack
-lbrace = return HPJ.lbrace
-rbrace = return HPJ.rbrace
-
-text = return . HPJ.text
-ptext = return . HPJ.ptext
-char = return . HPJ.char
-int = return . HPJ.int
-integer = return . HPJ.integer
-float = return . HPJ.float
-double = return . HPJ.double
-rational = return . HPJ.rational
-
-
-parens = liftM HPJ.parens
-brackets = liftM HPJ.brackets
-braces = liftM HPJ.braces
-quotes = liftM HPJ.quotes
-doubleQuotes = liftM HPJ.doubleQuotes
-
--- Combining @Doc@ values
-
-(<>) = liftM2 (HPJ.<>)
-hcat = liftM HPJ.hcat . sequence
-(<+>) = liftM2 (HPJ.<+>)
-hsep = liftM HPJ.hsep . sequence
-
-($$) = liftM2 (HPJ.$$)
-($+$) = liftM2 (HPJ.$+$)
-vcat = liftM HPJ.vcat . sequence
-
-cat  = liftM HPJ.cat . sequence
-sep  = liftM HPJ.sep . sequence
-fcat = liftM HPJ.fcat . sequence
-fsep = liftM HPJ.fsep . sequence
-
-nest n = liftM (HPJ.nest n)
-
-hang d1 n d2 = do d1' <- d1
-                  d2' <- d2
-                  return (HPJ.hang d1' n d2')
-
--- punctuate uses the same definition as Text.PrettyPrint
-punctuate _ []     = []
-punctuate p (d:ds) = go d ds
-                   where
-                     go d' [] = [d']
-                     go d' (e:es) = (d' <> p) : go e es
+import GHC.Internal.TH.PprLib
diff --git a/libraries/template-haskell/Language/Haskell/TH/Quote.hs b/libraries/template-haskell/Language/Haskell/TH/Quote.hs
index 329741ebe901b08696f377f6edf6af0b51528f99..fc9560945f934fc2883290b205a7d7bb419c0861 100644
--- a/libraries/template-haskell/Language/Haskell/TH/Quote.hs
+++ b/libraries/template-haskell/Language/Haskell/TH/Quote.hs
@@ -1,4 +1,4 @@
-{-# LANGUAGE RankNTypes, ScopedTypeVariables, Safe #-}
+{-# LANGUAGE Safe #-}
 {- |
 Module : Language.Haskell.TH.Quote
 Description : Quasi-quoting support for Template Haskell
@@ -13,33 +13,17 @@ extension is enabled, and some utility functions for manipulating
 quasiquoters.  Nota bene: this package does not define any parsers,
 that is up to you.
 -}
-module Language.Haskell.TH.Quote(
-        QuasiQuoter(..),
-        quoteFile,
-        -- * For backwards compatibility
-        dataToQa, dataToExpQ, dataToPatQ
-    ) where
+module Language.Haskell.TH.Quote
+  ( QuasiQuoter(..)
+  , quoteFile
+  -- * For backwards compatibility
+  ,dataToQa, dataToExpQ, dataToPatQ
+  ) where
 
-import Language.Haskell.TH.Syntax
-import Prelude
+import GHC.Internal.TH.Syntax
+import GHC.Internal.TH.Quote
+import GHC.Internal.TH.Lift
 
--- | The 'QuasiQuoter' type, a value @q@ of this type can be used
--- in the syntax @[q| ... string to parse ...|]@.  In fact, for
--- convenience, a 'QuasiQuoter' actually defines multiple quasiquoters
--- to be used in different splice contexts; if you are only interested
--- in defining a quasiquoter to be used for expressions, you would
--- define a 'QuasiQuoter' with only 'quoteExp', and leave the other
--- fields stubbed out with errors.
-data QuasiQuoter = QuasiQuoter {
-    -- | Quasi-quoter for expressions, invoked by quotes like @lhs = $[q|...]@
-    quoteExp  :: String -> Q Exp,
-    -- | Quasi-quoter for patterns, invoked by quotes like @f $[q|...] = rhs@
-    quotePat  :: String -> Q Pat,
-    -- | Quasi-quoter for types, invoked by quotes like @f :: $[q|...]@
-    quoteType :: String -> Q Type,
-    -- | Quasi-quoter for declarations, invoked by top-level quotes
-    quoteDec  :: String -> Q [Dec]
-    }
 
 -- | 'quoteFile' takes a 'QuasiQuoter' and lifts it into one that read
 -- the data out of a file.  For example, suppose @asmq@ is an
@@ -48,10 +32,10 @@ data QuasiQuoter = QuasiQuoter {
 -- the quote [asmq_f|foo.s|] will take input from file @"foo.s"@ instead
 -- of the inline text
 quoteFile :: QuasiQuoter -> QuasiQuoter
-quoteFile (QuasiQuoter { quoteExp = qe, quotePat = qp, quoteType = qt, quoteDec = qd }) 
+quoteFile (QuasiQuoter { quoteExp = qe, quotePat = qp, quoteType = qt, quoteDec = qd })
   = QuasiQuoter { quoteExp = get qe, quotePat = get qp, quoteType = get qt, quoteDec = get qd }
   where
    get :: (String -> Q a) -> String -> Q a
-   get old_quoter file_name = do { file_cts <- runIO (readFile file_name) 
+   get old_quoter file_name = do { file_cts <- runIO (readFile file_name)
                                  ; addDependentFile file_name
                                  ; old_quoter file_cts }
diff --git a/libraries/template-haskell/Language/Haskell/TH/Syntax.hs b/libraries/template-haskell/Language/Haskell/TH/Syntax.hs
index 95aba3e034b2725c513329432278994d8d53f1a0..22e92e6c5fe61652026cfdd65867b8839718f492 100644
--- a/libraries/template-haskell/Language/Haskell/TH/Syntax.hs
+++ b/libraries/template-haskell/Language/Haskell/TH/Syntax.hs
@@ -1,20 +1,44 @@
+{-# LANGUAGE MagicHash #-}
+{-# LANGUAGE UnboxedTuples #-}
+{-# LANGUAGE TemplateHaskellQuotes #-}
+{-# LANGUAGE Trustworthy #-}
 module Language.Haskell.TH.Syntax
-  ( module Language.Haskell.TH.Lib.Syntax
+  ( module GHC.Internal.TH.Syntax
+  , makeRelativeToProject
+  , module GHC.Internal.TH.Lift
+  , addrToByteArrayName
+  , addrToByteArray
   )
 where
 
-import Language.Haskell.TH.Lib.Syntax
+import GHC.Internal.TH.Syntax
+import GHC.Internal.TH.Lift
+import System.FilePath
+import Data.Array.Byte
+import GHC.Exts
+import GHC.ST
+
+-- This module completely re-exports 'GHC.Internal.TH.Syntax',
+-- and exports additionally functions that depend on filepath.
+
+-- | The input is a filepath, which if relative is offset by the package root.
+makeRelativeToProject :: FilePath -> Q FilePath
+makeRelativeToProject fp | isRelative fp = do
+  root <- getPackageRoot
+  return (root </> fp)
+makeRelativeToProject fp = return fp
+
+-- The following two defintions are copied from 'Data.Byte.Array'
+-- in order to preserve the old export list of 'TH.Syntax'.
+-- They will soon be removed as part of #24782.
+
+addrToByteArrayName :: Name
+addrToByteArrayName = 'addrToByteArray
+
+addrToByteArray :: Int -> Addr# -> ByteArray
+addrToByteArray (I# len) addr = runST $ ST $
+  \s -> case newByteArray# len s of
+    (# s', mb #) -> case copyAddrToByteArray# addr mb 0# len s' of
+      s'' -> case unsafeFreezeByteArray# mb s'' of
+        (# s''', ret #) -> (# s''', ByteArray ret #)
 
--- The only difference between this module and Language.Haskell.TH.Lib.Syntax
--- (which it reexports fully) is that this module depends on the Internal
--- module.
---
--- We did this to fix #22229: a module importing the Syntax module to use
--- DeriveLift (Lift is defined there) would lead GHC to load the
--- interface file for the Internal module (where wired-in TH things live),
--- but the Internal module might not be built yet at this point. Adding an
--- explicit dependency from Syntax to Internal fixes this. We do this with a
--- module reexport because Internal actually depends on Syntax.
---
--- See Note [Tracking dependencies on primitives] in GHC.Internal.Base, wrinkle W4.
-import Language.Haskell.TH.Lib.Internal ()
diff --git a/libraries/template-haskell/template-haskell.cabal.in b/libraries/template-haskell/template-haskell.cabal.in
index 6b2061c12f8c766d48d7221451f2503215aeda23..2d1d9cdd28abd532bd155160c7cae64a8bd38bd5 100644
--- a/libraries/template-haskell/template-haskell.cabal.in
+++ b/libraries/template-haskell/template-haskell.cabal.in
@@ -1,8 +1,8 @@
--- WARNING: template-haskell@Suffix@.cabal is automatically generated from ../template-haskell/template-haskell.cabal.in by
+-- WARNING: template-haskell.cabal is automatically generated from template-haskell.cabal.in by
 -- ../../configure.  Make sure you are editing template-haskell.cabal.in, not
--- template-haskell@Suffix@.cabal.
+-- template-haskell.cabal.
 
-name:           template-haskell@Suffix@
+name:           template-haskell
 version:        2.22.0.0
 -- NOTE: Don't forget to update ./changelog.md
 license:        BSD3
@@ -20,15 +20,6 @@ description:
     See <http://www.haskell.org/haskellwiki/Template_Haskell> for more
     information.
 
-Flag bootstrap
-        Description:
-          Enabled when building the stage1 compiler in order to vendor the in-tree
-          `template-haskell` library (including its dependency `ghc-boot-th`), while
-          allowing dependencies to depend on the boot `template-haskell` library.
-          See Note [Bootstrapping Template Haskell]
-        Default: False
-        Manual: True
-
 extra-source-files: changelog.md
 
 source-repository head
@@ -52,37 +43,24 @@ Library
     exposed-modules:
         Language.Haskell.TH
         Language.Haskell.TH.Lib
+        Language.Haskell.TH.Lib.Internal
         Language.Haskell.TH.Ppr
         Language.Haskell.TH.PprLib
         Language.Haskell.TH.Quote
         Language.Haskell.TH.Syntax
         Language.Haskell.TH.LanguageExtensions
         Language.Haskell.TH.CodeDo
-        Language.Haskell.TH.Lib.Internal
-        Language.Haskell.TH.Lib.Syntax
-
-    other-modules:
-        Language.Haskell.TH.Lib.Map
 
     build-depends:
         base        >= 4.11 && < 4.21,
-        ghc-boot-th@Suffix@ == @ProjectVersionMunged@,
-        ghc-prim,
-        pretty      == 1.1.*
+        ghc-boot-th == @ProjectVersionMunged@
 
     other-modules:
       System.FilePath
       System.FilePath.Posix
       System.FilePath.Windows
-    hs-source-dirs: @SourceRoot@/vendored-filepath @SourceRoot@
+    hs-source-dirs: ./vendored-filepath .
     default-extensions:
       ImplicitPrelude
 
     ghc-options: -Wall
-
-    if flag(bootstrap)
-        cpp-options: -DBOOTSTRAP_TH
-    else
-        -- We need to set the unit ID to template-haskell (without a
-        -- version number) as it's magic.
-        ghc-options: -this-unit-id template-haskell
diff --git a/testsuite/tests/deriving/should_compile/T14682.stderr b/testsuite/tests/deriving/should_compile/T14682.stderr
index 6ca6b90f76c295fc2e934513409b0991f1ef2f03..94aa8ae46f25161fe4e4a7ba8f49196da6623f4d 100644
--- a/testsuite/tests/deriving/should_compile/T14682.stderr
+++ b/testsuite/tests/deriving/should_compile/T14682.stderr
@@ -12,17 +12,16 @@ Derived class instances:
                 ((GHC.Internal.Base..)
                    GHC.Internal.Show.showSpace (GHC.Internal.Show.showsPrec 11 b2))))
   
-  instance Language.Haskell.TH.Lib.Syntax.Lift T14682.Foo where
-    Language.Haskell.TH.Lib.Syntax.lift (T14682.Foo a1 a2)
+  instance GHC.Internal.TH.Lift.Lift T14682.Foo where
+    GHC.Internal.TH.Lift.lift (T14682.Foo a1 a2)
       = [| T14682.Foo
-             $(Language.Haskell.TH.Lib.Syntax.lift a1)
-             $(Language.Haskell.TH.Lib.Syntax.lift a2) |]
-        pending(rn) [<spn, Language.Haskell.TH.Lib.Syntax.lift a2>,
-                     <spn, Language.Haskell.TH.Lib.Syntax.lift a1>]
-    Language.Haskell.TH.Lib.Syntax.liftTyped (T14682.Foo a1 a2)
+             $(GHC.Internal.TH.Lift.lift a1) $(GHC.Internal.TH.Lift.lift a2) |]
+        pending(rn) [<spn, GHC.Internal.TH.Lift.lift a2>,
+                     <spn, GHC.Internal.TH.Lift.lift a1>]
+    GHC.Internal.TH.Lift.liftTyped (T14682.Foo a1 a2)
       = [|| T14682.Foo
-              $$(Language.Haskell.TH.Lib.Syntax.liftTyped a1)
-              $$(Language.Haskell.TH.Lib.Syntax.liftTyped a2) ||]
+              $$(GHC.Internal.TH.Lift.liftTyped a1)
+              $$(GHC.Internal.TH.Lift.liftTyped a2) ||]
   
   instance GHC.Internal.Data.Data.Data T14682.Foo where
     GHC.Internal.Data.Data.gfoldl k z (T14682.Foo a1 a2)
diff --git a/testsuite/tests/deriving/should_compile/drv-empty-data.stderr b/testsuite/tests/deriving/should_compile/drv-empty-data.stderr
index 0fb0d6a6c41a969050f2b4f0d937967708ce7e21..77b8f7388a15b93a6679a6419063361475178a34 100644
--- a/testsuite/tests/deriving/should_compile/drv-empty-data.stderr
+++ b/testsuite/tests/deriving/should_compile/drv-empty-data.stderr
@@ -52,12 +52,10 @@ Derived class instances:
     GHC.Internal.Generics.to1 (GHC.Internal.Generics.M1 x)
       = case x of x -> case x of {}
   
-  instance Language.Haskell.TH.Lib.Syntax.Lift
-             (DrvEmptyData.Void a) where
-    Language.Haskell.TH.Lib.Syntax.lift z
-      = GHC.Internal.Base.pure (case z of {})
-    Language.Haskell.TH.Lib.Syntax.liftTyped z
-      = Language.Haskell.TH.Lib.Syntax.unsafeCodeCoerce
+  instance GHC.Internal.TH.Lift.Lift (DrvEmptyData.Void a) where
+    GHC.Internal.TH.Lift.lift z = GHC.Internal.Base.pure (case z of {})
+    GHC.Internal.TH.Lift.liftTyped z
+      = GHC.Internal.TH.Syntax.unsafeCodeCoerce
           (GHC.Internal.Base.pure (case z of {}))
   
   $tVoid :: GHC.Internal.Data.Data.DataType
diff --git a/testsuite/tests/driver/T20604/T20604.stdout b/testsuite/tests/driver/T20604/T20604.stdout
index 83e89b07e851e49a430af765ab94802860e8dfb6..59e41d640c745f22b345ab9f4f4c1edb81e00fd3 100644
--- a/testsuite/tests/driver/T20604/T20604.stdout
+++ b/testsuite/tests/driver/T20604/T20604.stdout
@@ -1,11 +1,5 @@
 A1
 A
-addDependentFile "/home/ben/ghc/ghc-compare-2/_build/stage1/lib/../lib/x86_64-linux-ghc-9.9.20230815/libHSghc-prim-0.10.0-inplace-ghc9.9.20230815.so" 1403aed32fb9af243c4cc949007c846c
-addDependentFile "/home/ben/ghc/ghc-compare-2/_build/stage1/lib/../lib/x86_64-linux-ghc-9.9.20230815/libHSghc-bignum-1.3-inplace-ghc9.9.20230815.so" 54293f8faab737bac998f6e1a1248db8
-addDependentFile "/home/ben/ghc/ghc-compare-2/_build/stage1/lib/../lib/x86_64-linux-ghc-9.9.20230815/libHSghc-internal-0.1.0.0-inplace-ghc9.9.20230815.so" a5c0e962d84d9044d44df4698becddcc
-addDependentFile "/home/ben/ghc/ghc-compare-2/_build/stage1/lib/../lib/x86_64-linux-ghc-9.9.20230815/libHSbase-4.19.0.0-inplace-ghc9.9.20230815.so" 4a90ed136fe0f89e5d0360daded517bd
-addDependentFile "/home/ben/ghc/ghc-compare-2/_build/stage1/lib/../lib/x86_64-linux-ghc-9.9.20230815/libHSghc-boot-th-9.9-inplace-ghc9.9.20230815.so" e338655f71b1d37fdfdd2504b7de6e76
-addDependentFile "/home/ben/ghc/ghc-compare-2/_build/stage1/lib/../lib/x86_64-linux-ghc-9.9.20230815/libHSarray-0.5.6.0-inplace-ghc9.9.20230815.so" 6943478e8adaa043abf7a2b38dd435a2
-addDependentFile "/home/ben/ghc/ghc-compare-2/_build/stage1/lib/../lib/x86_64-linux-ghc-9.9.20230815/libHSdeepseq-1.5.0.0-inplace-ghc9.9.20230815.so" 9974eb196694990ac6bb3c2591405de0
-addDependentFile "/home/ben/ghc/ghc-compare-2/_build/stage1/lib/../lib/x86_64-linux-ghc-9.9.20230815/libHSpretty-1.1.3.6-inplace-ghc9.9.20230815.so" 1eefc21514f5584086f62b70aa554b7d
-addDependentFile "/home/ben/ghc/ghc-compare-2/_build/stage1/lib/../lib/x86_64-linux-ghc-9.9.20230815/libHStemplate-haskell-2.21.0.0-inplace-ghc9.9.20230815.so" f85c86eb94dcce1eacd739b6e991ba2d
+addDependentFile "/home/teo/git/ghc/_build/stage1/lib/../lib/x86_64-linux-ghc-9.11.20240508/libHSghc-prim-0.11.0-inplace-ghc9.11.20240508.so" a63ccfcae8455a0abc22cfbd2ee0fee4
+addDependentFile "/home/teo/git/ghc/_build/stage1/lib/../lib/x86_64-linux-ghc-9.11.20240508/libHSghc-bignum-1.3-inplace-ghc9.11.20240508.so" fe8ae214b210d7ae50739f9b74c6d3bc
+addDependentFile "/home/teo/git/ghc/_build/stage1/lib/../lib/x86_64-linux-ghc-9.11.20240508/libHSghc-internal-9.1001.0-inplace-ghc9.11.20240508.so" cce9e35d3fb6c65a080cdb8a570f3caf
diff --git a/testsuite/tests/interface-stability/base-exports.stdout b/testsuite/tests/interface-stability/base-exports.stdout
index 467ab80b9ca327ddd1e96fd0e8b435e9b311529e..968f297ea5289bcad9f6311cd6a2ee6f97369cdd 100644
--- a/testsuite/tests/interface-stability/base-exports.stdout
+++ b/testsuite/tests/interface-stability/base-exports.stdout
@@ -10891,7 +10891,6 @@ module Unsafe.Coerce where
 
 
 -- Instances:
-instance Control.Monad.IO.Class.MonadIO GHC.Types.IO -- Defined in ‘Control.Monad.IO.Class’
 instance [safe] Control.Monad.Zip.MonadZip GHC.Internal.Data.Ord.Down -- Defined in ‘Control.Monad.Zip’
 instance [safe] Control.Monad.Zip.MonadZip GHC.Internal.Data.Semigroup.Internal.Dual -- Defined in ‘Control.Monad.Zip’
 instance [safe] Control.Monad.Zip.MonadZip GHC.Internal.Data.Monoid.First -- Defined in ‘Control.Monad.Zip’
@@ -11391,6 +11390,7 @@ instance GHC.Internal.Control.Monad.Fix.MonadFix Data.Semigroup.First -- Defined
 instance GHC.Internal.Control.Monad.Fix.MonadFix Data.Semigroup.Last -- Defined in ‘Data.Semigroup’
 instance GHC.Internal.Control.Monad.Fix.MonadFix Data.Semigroup.Max -- Defined in ‘Data.Semigroup’
 instance GHC.Internal.Control.Monad.Fix.MonadFix Data.Semigroup.Min -- Defined in ‘Data.Semigroup’
+instance GHC.Internal.Control.Monad.IO.Class.MonadIO GHC.Types.IO -- Defined in ‘GHC.Internal.Control.Monad.IO.Class’
 instance forall (a :: * -> * -> *) b c. (ghc-internal-9.1001.0:GHC.Internal.Data.Typeable.Internal.Typeable a, ghc-internal-9.1001.0:GHC.Internal.Data.Typeable.Internal.Typeable b, ghc-internal-9.1001.0:GHC.Internal.Data.Typeable.Internal.Typeable c, GHC.Internal.Data.Data.Data (a b c)) => GHC.Internal.Data.Data.Data (Control.Applicative.WrappedArrow a b c) -- Defined in ‘Control.Applicative’
 instance forall (m :: * -> *) a. (ghc-internal-9.1001.0:GHC.Internal.Data.Typeable.Internal.Typeable m, ghc-internal-9.1001.0:GHC.Internal.Data.Typeable.Internal.Typeable a, GHC.Internal.Data.Data.Data (m a)) => GHC.Internal.Data.Data.Data (Control.Applicative.WrappedMonad m a) -- Defined in ‘Control.Applicative’
 instance forall a. GHC.Internal.Data.Data.Data a => GHC.Internal.Data.Data.Data (GHC.Internal.Functor.ZipList.ZipList a) -- Defined in ‘GHC.Internal.Functor.ZipList’
@@ -12535,6 +12535,8 @@ instance [safe] GHC.Internal.Show.Show System.Timeout.Timeout -- Defined in ‘S
 instance GHC.Internal.Show.Show GHC.Internal.Text.Read.Lex.Lexeme -- Defined in ‘GHC.Internal.Text.Read.Lex’
 instance GHC.Internal.Show.Show GHC.Internal.Text.Read.Lex.Number -- Defined in ‘GHC.Internal.Text.Read.Lex’
 instance GHC.Internal.StaticPtr.IsStatic GHC.Internal.StaticPtr.StaticPtr -- Defined in ‘GHC.Internal.StaticPtr’
+instance GHC.Internal.TH.Lift.Lift Data.Array.Byte.ByteArray -- Defined in ‘Data.Array.Byte’
+instance forall k (a :: k). GHC.Internal.TH.Lift.Lift (Data.Fixed.Fixed a) -- Defined in ‘Data.Fixed’
 instance forall a. GHC.Classes.Eq a => GHC.Classes.Eq (GHC.Internal.Base.NonEmpty a) -- Defined in ‘GHC.Internal.Base’
 instance GHC.Classes.Eq GHC.Internal.Base.Void -- Defined in ‘GHC.Internal.Base’
 instance forall a k (b :: k). GHC.Classes.Eq a => GHC.Classes.Eq (GHC.Internal.Data.Functor.Const.Const a b) -- Defined in ‘GHC.Internal.Data.Functor.Const’
diff --git a/testsuite/tests/interface-stability/base-exports.stdout-javascript-unknown-ghcjs b/testsuite/tests/interface-stability/base-exports.stdout-javascript-unknown-ghcjs
index 9941a4915634be4b4548ad935c6b6c0aced32a83..ef4bcf866fa6149877f34fd9a937e58b59b29708 100644
--- a/testsuite/tests/interface-stability/base-exports.stdout-javascript-unknown-ghcjs
+++ b/testsuite/tests/interface-stability/base-exports.stdout-javascript-unknown-ghcjs
@@ -13932,7 +13932,6 @@ module Unsafe.Coerce where
 
 
 -- Instances:
-instance Control.Monad.IO.Class.MonadIO GHC.Types.IO -- Defined in ‘Control.Monad.IO.Class’
 instance [safe] Control.Monad.Zip.MonadZip GHC.Internal.Data.Ord.Down -- Defined in ‘Control.Monad.Zip’
 instance [safe] Control.Monad.Zip.MonadZip GHC.Internal.Data.Semigroup.Internal.Dual -- Defined in ‘Control.Monad.Zip’
 instance [safe] Control.Monad.Zip.MonadZip GHC.Internal.Data.Monoid.First -- Defined in ‘Control.Monad.Zip’
@@ -14426,6 +14425,7 @@ instance GHC.Internal.Control.Monad.Fix.MonadFix Data.Semigroup.First -- Defined
 instance GHC.Internal.Control.Monad.Fix.MonadFix Data.Semigroup.Last -- Defined in ‘Data.Semigroup’
 instance GHC.Internal.Control.Monad.Fix.MonadFix Data.Semigroup.Max -- Defined in ‘Data.Semigroup’
 instance GHC.Internal.Control.Monad.Fix.MonadFix Data.Semigroup.Min -- Defined in ‘Data.Semigroup’
+instance GHC.Internal.Control.Monad.IO.Class.MonadIO GHC.Types.IO -- Defined in ‘GHC.Internal.Control.Monad.IO.Class’
 instance forall (a :: * -> * -> *) b c. (ghc-internal-0.1.0.0:GHC.Internal.Data.Typeable.Internal.Typeable a, ghc-internal-0.1.0.0:GHC.Internal.Data.Typeable.Internal.Typeable b, ghc-internal-0.1.0.0:GHC.Internal.Data.Typeable.Internal.Typeable c, GHC.Internal.Data.Data.Data (a b c)) => GHC.Internal.Data.Data.Data (Control.Applicative.WrappedArrow a b c) -- Defined in ‘Control.Applicative’
 instance forall (m :: * -> *) a. (ghc-internal-0.1.0.0:GHC.Internal.Data.Typeable.Internal.Typeable m, ghc-internal-0.1.0.0:GHC.Internal.Data.Typeable.Internal.Typeable a, GHC.Internal.Data.Data.Data (m a)) => GHC.Internal.Data.Data.Data (Control.Applicative.WrappedMonad m a) -- Defined in ‘Control.Applicative’
 instance forall a. GHC.Internal.Data.Data.Data a => GHC.Internal.Data.Data.Data (GHC.Internal.Functor.ZipList.ZipList a) -- Defined in ‘GHC.Internal.Functor.ZipList’
@@ -15567,6 +15567,8 @@ instance [safe] GHC.Internal.Show.Show System.Timeout.Timeout -- Defined in ‘S
 instance GHC.Internal.Show.Show GHC.Internal.Text.Read.Lex.Lexeme -- Defined in ‘GHC.Internal.Text.Read.Lex’
 instance GHC.Internal.Show.Show GHC.Internal.Text.Read.Lex.Number -- Defined in ‘GHC.Internal.Text.Read.Lex’
 instance GHC.Internal.StaticPtr.IsStatic GHC.Internal.StaticPtr.StaticPtr -- Defined in ‘GHC.Internal.StaticPtr’
+instance GHC.Internal.TH.Lift.Lift Data.Array.Byte.ByteArray -- Defined in ‘Data.Array.Byte’
+instance forall k (a :: k). GHC.Internal.TH.Lift.Lift (Data.Fixed.Fixed a) -- Defined in ‘Data.Fixed’
 instance forall a. GHC.Classes.Eq a => GHC.Classes.Eq (GHC.Internal.Base.NonEmpty a) -- Defined in ‘GHC.Internal.Base’
 instance GHC.Classes.Eq GHC.Internal.Base.Void -- Defined in ‘GHC.Internal.Base’
 instance forall a k (b :: k). GHC.Classes.Eq a => GHC.Classes.Eq (GHC.Internal.Data.Functor.Const.Const a b) -- Defined in ‘GHC.Internal.Data.Functor.Const’
diff --git a/testsuite/tests/interface-stability/base-exports.stdout-mingw32 b/testsuite/tests/interface-stability/base-exports.stdout-mingw32
index 37720c2871aed330826ed2d12daa43aeaa79822f..b288c0684ff2e9458b6711e2ae2d8ebffc8d683d 100644
--- a/testsuite/tests/interface-stability/base-exports.stdout-mingw32
+++ b/testsuite/tests/interface-stability/base-exports.stdout-mingw32
@@ -11159,7 +11159,6 @@ module Unsafe.Coerce where
 
 
 -- Instances:
-instance Control.Monad.IO.Class.MonadIO GHC.Types.IO -- Defined in ‘Control.Monad.IO.Class’
 instance [safe] Control.Monad.Zip.MonadZip GHC.Internal.Data.Ord.Down -- Defined in ‘Control.Monad.Zip’
 instance [safe] Control.Monad.Zip.MonadZip GHC.Internal.Data.Semigroup.Internal.Dual -- Defined in ‘Control.Monad.Zip’
 instance [safe] Control.Monad.Zip.MonadZip GHC.Internal.Data.Monoid.First -- Defined in ‘Control.Monad.Zip’
@@ -11655,6 +11654,7 @@ instance GHC.Internal.Control.Monad.Fix.MonadFix Data.Semigroup.First -- Defined
 instance GHC.Internal.Control.Monad.Fix.MonadFix Data.Semigroup.Last -- Defined in ‘Data.Semigroup’
 instance GHC.Internal.Control.Monad.Fix.MonadFix Data.Semigroup.Max -- Defined in ‘Data.Semigroup’
 instance GHC.Internal.Control.Monad.Fix.MonadFix Data.Semigroup.Min -- Defined in ‘Data.Semigroup’
+instance GHC.Internal.Control.Monad.IO.Class.MonadIO GHC.Types.IO -- Defined in ‘GHC.Internal.Control.Monad.IO.Class’
 instance forall (a :: * -> * -> *) b c. (ghc-internal-0.1.0.0:GHC.Internal.Data.Typeable.Internal.Typeable a, ghc-internal-0.1.0.0:GHC.Internal.Data.Typeable.Internal.Typeable b, ghc-internal-0.1.0.0:GHC.Internal.Data.Typeable.Internal.Typeable c, GHC.Internal.Data.Data.Data (a b c)) => GHC.Internal.Data.Data.Data (Control.Applicative.WrappedArrow a b c) -- Defined in ‘Control.Applicative’
 instance forall (m :: * -> *) a. (ghc-internal-0.1.0.0:GHC.Internal.Data.Typeable.Internal.Typeable m, ghc-internal-0.1.0.0:GHC.Internal.Data.Typeable.Internal.Typeable a, GHC.Internal.Data.Data.Data (m a)) => GHC.Internal.Data.Data.Data (Control.Applicative.WrappedMonad m a) -- Defined in ‘Control.Applicative’
 instance forall a. GHC.Internal.Data.Data.Data a => GHC.Internal.Data.Data.Data (GHC.Internal.Functor.ZipList.ZipList a) -- Defined in ‘GHC.Internal.Functor.ZipList’
@@ -12813,6 +12813,8 @@ instance [safe] GHC.Internal.Show.Show System.Timeout.Timeout -- Defined in ‘S
 instance GHC.Internal.Show.Show GHC.Internal.Text.Read.Lex.Lexeme -- Defined in ‘GHC.Internal.Text.Read.Lex’
 instance GHC.Internal.Show.Show GHC.Internal.Text.Read.Lex.Number -- Defined in ‘GHC.Internal.Text.Read.Lex’
 instance GHC.Internal.StaticPtr.IsStatic GHC.Internal.StaticPtr.StaticPtr -- Defined in ‘GHC.Internal.StaticPtr’
+instance GHC.Internal.TH.Lift.Lift Data.Array.Byte.ByteArray -- Defined in ‘Data.Array.Byte’
+instance forall k (a :: k). GHC.Internal.TH.Lift.Lift (Data.Fixed.Fixed a) -- Defined in ‘Data.Fixed’
 instance forall a. GHC.Classes.Eq a => GHC.Classes.Eq (GHC.Internal.Base.NonEmpty a) -- Defined in ‘GHC.Internal.Base’
 instance GHC.Classes.Eq GHC.Internal.Base.Void -- Defined in ‘GHC.Internal.Base’
 instance forall a k (b :: k). GHC.Classes.Eq a => GHC.Classes.Eq (GHC.Internal.Data.Functor.Const.Const a b) -- Defined in ‘GHC.Internal.Data.Functor.Const’
diff --git a/testsuite/tests/interface-stability/base-exports.stdout-ws-32 b/testsuite/tests/interface-stability/base-exports.stdout-ws-32
index 467ab80b9ca327ddd1e96fd0e8b435e9b311529e..968f297ea5289bcad9f6311cd6a2ee6f97369cdd 100644
--- a/testsuite/tests/interface-stability/base-exports.stdout-ws-32
+++ b/testsuite/tests/interface-stability/base-exports.stdout-ws-32
@@ -10891,7 +10891,6 @@ module Unsafe.Coerce where
 
 
 -- Instances:
-instance Control.Monad.IO.Class.MonadIO GHC.Types.IO -- Defined in ‘Control.Monad.IO.Class’
 instance [safe] Control.Monad.Zip.MonadZip GHC.Internal.Data.Ord.Down -- Defined in ‘Control.Monad.Zip’
 instance [safe] Control.Monad.Zip.MonadZip GHC.Internal.Data.Semigroup.Internal.Dual -- Defined in ‘Control.Monad.Zip’
 instance [safe] Control.Monad.Zip.MonadZip GHC.Internal.Data.Monoid.First -- Defined in ‘Control.Monad.Zip’
@@ -11391,6 +11390,7 @@ instance GHC.Internal.Control.Monad.Fix.MonadFix Data.Semigroup.First -- Defined
 instance GHC.Internal.Control.Monad.Fix.MonadFix Data.Semigroup.Last -- Defined in ‘Data.Semigroup’
 instance GHC.Internal.Control.Monad.Fix.MonadFix Data.Semigroup.Max -- Defined in ‘Data.Semigroup’
 instance GHC.Internal.Control.Monad.Fix.MonadFix Data.Semigroup.Min -- Defined in ‘Data.Semigroup’
+instance GHC.Internal.Control.Monad.IO.Class.MonadIO GHC.Types.IO -- Defined in ‘GHC.Internal.Control.Monad.IO.Class’
 instance forall (a :: * -> * -> *) b c. (ghc-internal-9.1001.0:GHC.Internal.Data.Typeable.Internal.Typeable a, ghc-internal-9.1001.0:GHC.Internal.Data.Typeable.Internal.Typeable b, ghc-internal-9.1001.0:GHC.Internal.Data.Typeable.Internal.Typeable c, GHC.Internal.Data.Data.Data (a b c)) => GHC.Internal.Data.Data.Data (Control.Applicative.WrappedArrow a b c) -- Defined in ‘Control.Applicative’
 instance forall (m :: * -> *) a. (ghc-internal-9.1001.0:GHC.Internal.Data.Typeable.Internal.Typeable m, ghc-internal-9.1001.0:GHC.Internal.Data.Typeable.Internal.Typeable a, GHC.Internal.Data.Data.Data (m a)) => GHC.Internal.Data.Data.Data (Control.Applicative.WrappedMonad m a) -- Defined in ‘Control.Applicative’
 instance forall a. GHC.Internal.Data.Data.Data a => GHC.Internal.Data.Data.Data (GHC.Internal.Functor.ZipList.ZipList a) -- Defined in ‘GHC.Internal.Functor.ZipList’
@@ -12535,6 +12535,8 @@ instance [safe] GHC.Internal.Show.Show System.Timeout.Timeout -- Defined in ‘S
 instance GHC.Internal.Show.Show GHC.Internal.Text.Read.Lex.Lexeme -- Defined in ‘GHC.Internal.Text.Read.Lex’
 instance GHC.Internal.Show.Show GHC.Internal.Text.Read.Lex.Number -- Defined in ‘GHC.Internal.Text.Read.Lex’
 instance GHC.Internal.StaticPtr.IsStatic GHC.Internal.StaticPtr.StaticPtr -- Defined in ‘GHC.Internal.StaticPtr’
+instance GHC.Internal.TH.Lift.Lift Data.Array.Byte.ByteArray -- Defined in ‘Data.Array.Byte’
+instance forall k (a :: k). GHC.Internal.TH.Lift.Lift (Data.Fixed.Fixed a) -- Defined in ‘Data.Fixed’
 instance forall a. GHC.Classes.Eq a => GHC.Classes.Eq (GHC.Internal.Base.NonEmpty a) -- Defined in ‘GHC.Internal.Base’
 instance GHC.Classes.Eq GHC.Internal.Base.Void -- Defined in ‘GHC.Internal.Base’
 instance forall a k (b :: k). GHC.Classes.Eq a => GHC.Classes.Eq (GHC.Internal.Data.Functor.Const.Const a b) -- Defined in ‘GHC.Internal.Data.Functor.Const’
diff --git a/testsuite/tests/interface-stability/template-haskell-exports.stdout b/testsuite/tests/interface-stability/template-haskell-exports.stdout
index 3c2bda6976cc526e8ead6449f87baa6f167f1b5b..ac5865c5f07db771c8ac0058f8b950eefbbd5cdc 100644
--- a/testsuite/tests/interface-stability/template-haskell-exports.stdout
+++ b/testsuite/tests/interface-stability/template-haskell-exports.stdout
@@ -2,7 +2,7 @@
 module Language.Haskell.TH where
   -- Safety: Safe
   type AnnLookup :: *
-  data AnnLookup = AnnLookupModule Language.Haskell.TH.Lib.Syntax.Module | AnnLookupName Name
+  data AnnLookup = AnnLookupModule GHC.Internal.TH.Syntax.Module | AnnLookupName Name
   type AnnTarget :: *
   data AnnTarget = ModuleAnnotation | TypeAnnotation Name | ValueAnnotation Name
   type Arity :: *
@@ -108,8 +108,8 @@ module Language.Haskell.TH where
     | MultiIfE [(Guard, Exp)]
     | LetE [Dec] Exp
     | CaseE Exp [Match]
-    | DoE (GHC.Internal.Maybe.Maybe Language.Haskell.TH.Lib.Syntax.ModName) [Stmt]
-    | MDoE (GHC.Internal.Maybe.Maybe Language.Haskell.TH.Lib.Syntax.ModName) [Stmt]
+    | DoE (GHC.Internal.Maybe.Maybe GHC.Internal.TH.Syntax.ModName) [Stmt]
+    | MDoE (GHC.Internal.Maybe.Maybe GHC.Internal.TH.Syntax.ModName) [Stmt]
     | CompE [Stmt]
     | ArithSeqE Range
     | ListE [Exp]
@@ -298,15 +298,15 @@ module Language.Haskell.TH where
   type KindQ :: *
   type KindQ = Q Kind
   type Lit :: *
-  data Lit = CharL GHC.Types.Char | StringL GHC.Internal.Base.String | IntegerL GHC.Num.Integer.Integer | RationalL GHC.Internal.Real.Rational | IntPrimL GHC.Num.Integer.Integer | WordPrimL GHC.Num.Integer.Integer | FloatPrimL GHC.Internal.Real.Rational | DoublePrimL GHC.Internal.Real.Rational | StringPrimL [GHC.Internal.Word.Word8] | BytesPrimL Language.Haskell.TH.Lib.Syntax.Bytes | CharPrimL GHC.Types.Char
+  data Lit = CharL GHC.Types.Char | StringL GHC.Internal.Base.String | IntegerL GHC.Num.Integer.Integer | RationalL GHC.Internal.Real.Rational | IntPrimL GHC.Num.Integer.Integer | WordPrimL GHC.Num.Integer.Integer | FloatPrimL GHC.Internal.Real.Rational | DoublePrimL GHC.Internal.Real.Rational | StringPrimL [GHC.Internal.Word.Word8] | BytesPrimL GHC.Internal.TH.Syntax.Bytes | CharPrimL GHC.Types.Char
   type Loc :: *
-  data Loc = Loc {loc_filename :: GHC.Internal.Base.String, loc_package :: GHC.Internal.Base.String, loc_module :: GHC.Internal.Base.String, loc_start :: Language.Haskell.TH.Lib.Syntax.CharPos, loc_end :: Language.Haskell.TH.Lib.Syntax.CharPos}
+  data Loc = Loc {loc_filename :: GHC.Internal.Base.String, loc_package :: GHC.Internal.Base.String, loc_module :: GHC.Internal.Base.String, loc_start :: GHC.Internal.TH.Syntax.CharPos, loc_end :: GHC.Internal.TH.Syntax.CharPos}
   type Match :: *
   data Match = Match Pat Body [Dec]
   type MatchQ :: *
   type MatchQ = Q Match
   type ModuleInfo :: *
-  data ModuleInfo = ModuleInfo [Language.Haskell.TH.Lib.Syntax.Module]
+  data ModuleInfo = ModuleInfo [GHC.Internal.TH.Syntax.Module]
   type Name :: *
   data Name = ...
   type NameSpace :: *
@@ -335,8 +335,8 @@ module Language.Haskell.TH where
   data Phases = AllPhases | FromPhase GHC.Types.Int | BeforePhase GHC.Types.Int
   type Ppr :: * -> Constraint
   class Ppr a where
-    ppr :: a -> Language.Haskell.TH.PprLib.Doc
-    ppr_list :: [a] -> Language.Haskell.TH.PprLib.Doc
+    ppr :: a -> GHC.Internal.TH.PprLib.Doc
+    ppr_list :: [a] -> GHC.Internal.TH.PprLib.Doc
     {-# MINIMAL ppr #-}
   type Pragma :: *
   data Pragma = InlineP Name Inline RuleMatch Phases | OpaqueP Name | SpecialiseP Name Type (GHC.Internal.Maybe.Maybe Inline) Phases | SpecialiseInstP Type | RuleP GHC.Internal.Base.String (GHC.Internal.Maybe.Maybe [TyVarBndr ()]) [RuleBndr] Exp Exp Phases | AnnP AnnTarget Exp | LineP GHC.Types.Int GHC.Internal.Base.String | CompleteP [Name] (GHC.Internal.Maybe.Maybe Name) | SCCP Name (GHC.Internal.Maybe.Maybe GHC.Internal.Base.String)
@@ -382,14 +382,14 @@ module Language.Haskell.TH where
   type Strict :: *
   type Strict = Bang
   type StrictTypeQ :: *
-  type StrictTypeQ = Q Language.Haskell.TH.Lib.Syntax.StrictType
+  type StrictTypeQ = Q GHC.Internal.TH.Syntax.StrictType
   type SumAlt :: *
   type SumAlt = GHC.Types.Int
   type SumArity :: *
   type SumArity = GHC.Types.Int
   type role TExp nominal
   type TExp :: forall (r :: GHC.Types.RuntimeRep). TYPE r -> *
-  newtype TExp a = Language.Haskell.TH.Lib.Syntax.TExp {unType :: Exp}
+  newtype TExp a = GHC.Internal.TH.Syntax.TExp {unType :: Exp}
   type TExpQ :: forall (r :: GHC.Types.RuntimeRep). TYPE r -> *
   type TExpQ a = Q (TExp a)
   type TyLit :: *
@@ -421,7 +421,7 @@ module Language.Haskell.TH where
   type VarBangTypeQ :: *
   type VarBangTypeQ = Q VarBangType
   type VarStrictTypeQ :: *
-  type VarStrictTypeQ = Q Language.Haskell.TH.Lib.Syntax.VarStrictType
+  type VarStrictTypeQ = Q GHC.Internal.TH.Syntax.VarStrictType
   anyclassStrategy :: forall (m :: * -> *). Quote m => m DerivStrategy
   appE :: forall (m :: * -> *). Quote m => m Exp -> m Exp -> m Exp
   appK :: Kind -> Kind -> Kind
@@ -441,7 +441,7 @@ module Language.Haskell.TH where
   bindS :: forall (m :: * -> *). Quote m => m Pat -> m Exp -> m Stmt
   bndrInvis :: BndrVis
   bndrReq :: BndrVis
-  bytesPrimL :: Language.Haskell.TH.Lib.Syntax.Bytes -> Lit
+  bytesPrimL :: GHC.Internal.TH.Syntax.Bytes -> Lit
   cApi :: Callconv
   cCall :: Callconv
   caseE :: forall (m :: * -> *). Quote m => m Exp -> [m Match] -> m Exp
@@ -494,7 +494,7 @@ module Language.Haskell.TH where
   funD :: forall (m :: * -> *). Quote m => Name -> [m Clause] -> m Dec
   funD_doc :: Name -> [Q Clause] -> GHC.Internal.Maybe.Maybe GHC.Internal.Base.String -> [GHC.Internal.Maybe.Maybe GHC.Internal.Base.String] -> Q Dec
   funDep :: [Name] -> [Name] -> FunDep
-  gadtC :: forall (m :: * -> *). Quote m => [Name] -> [m Language.Haskell.TH.Lib.Syntax.StrictType] -> m Type -> m Con
+  gadtC :: forall (m :: * -> *). Quote m => [Name] -> [m GHC.Internal.TH.Syntax.StrictType] -> m Type -> m Con
   getDoc :: DocLoc -> Q (GHC.Internal.Maybe.Maybe GHC.Internal.Base.String)
   getFieldE :: forall (m :: * -> *). Quote m => m Exp -> GHC.Internal.Base.String -> m Exp
   guardedB :: forall (m :: * -> *). Quote m => [m (Guard, Exp)] -> m Body
@@ -503,7 +503,7 @@ module Language.Haskell.TH where
   implicitParamBindD :: forall (m :: * -> *). Quote m => GHC.Internal.Base.String -> m Exp -> m Dec
   implicitParamT :: forall (m :: * -> *). Quote m => GHC.Internal.Base.String -> m Type -> m Type
   implicitParamVarE :: forall (m :: * -> *). Quote m => GHC.Internal.Base.String -> m Exp
-  inferR :: Language.Haskell.TH.Lib.Internal.Role
+  inferR :: GHC.Internal.TH.Lib.Role
   inferredSpec :: Specificity
   infixApp :: forall (m :: * -> *). Quote m => m Exp -> m Exp -> m Exp -> m Exp
   infixC :: forall (m :: * -> *). Quote m => m (Bang, Type) -> Name -> m (Bang, Type) -> m Con
@@ -514,7 +514,7 @@ module Language.Haskell.TH where
   infixPatSyn :: forall (m :: * -> *). Quote m => Name -> Name -> m PatSynArgs
   infixRD :: forall (m :: * -> *). Quote m => GHC.Types.Int -> Name -> m Dec
   infixT :: forall (m :: * -> *). Quote m => m Type -> Name -> m Type -> m Type
-  injectivityAnn :: Name -> [Name] -> Language.Haskell.TH.Lib.Internal.InjectivityAnn
+  injectivityAnn :: Name -> [Name] -> GHC.Internal.TH.Lib.InjectivityAnn
   instanceD :: forall (m :: * -> *). Quote m => m Cxt -> m Type -> [m Dec] -> m Dec
   instanceWithOverlapD :: forall (m :: * -> *). Quote m => GHC.Internal.Maybe.Maybe Overlap -> m Cxt -> m Type -> [m Dec] -> m Dec
   intPrimL :: GHC.Num.Integer.Integer -> Lit
@@ -552,7 +552,7 @@ module Language.Haskell.TH where
   match :: forall (m :: * -> *). Quote m => m Pat -> m Body -> [m Dec] -> m Match
   maxPrecedence :: GHC.Types.Int
   mdoE :: forall (m :: * -> *). Quote m => [m Stmt] -> m Exp
-  mkBytes :: GHC.Internal.ForeignPtr.ForeignPtr GHC.Internal.Word.Word8 -> GHC.Types.Word -> GHC.Types.Word -> Language.Haskell.TH.Lib.Syntax.Bytes
+  mkBytes :: GHC.Internal.ForeignPtr.ForeignPtr GHC.Internal.Word.Word8 -> GHC.Types.Word -> GHC.Types.Word -> GHC.Internal.TH.Syntax.Bytes
   mkName :: GHC.Internal.Base.String -> Name
   moduleAnnotation :: AnnTarget
   mulArrowT :: forall (m :: * -> *). Quote m => m Type
@@ -571,7 +571,7 @@ module Language.Haskell.TH where
   noSig :: FamilyResultSig
   noSourceStrictness :: forall (m :: * -> *). Quote m => m SourceStrictness
   noSourceUnpackedness :: forall (m :: * -> *). Quote m => m SourceUnpackedness
-  nominalR :: Language.Haskell.TH.Lib.Internal.Role
+  nominalR :: GHC.Internal.TH.Lib.Role
   normalB :: forall (m :: * -> *). Quote m => m Exp -> m Body
   normalC :: forall (m :: * -> *). Quote m => Name -> [m BangType] -> m Con
   normalG :: forall (m :: * -> *). Quote m => m Exp -> m Guard
@@ -588,14 +588,14 @@ module Language.Haskell.TH where
   patSynD :: forall (m :: * -> *). Quote m => Name -> m PatSynArgs -> m PatSynDir -> m Pat -> m Dec
   patSynD_doc :: Name -> Q PatSynArgs -> Q PatSynDir -> Q Pat -> GHC.Internal.Maybe.Maybe GHC.Internal.Base.String -> [GHC.Internal.Maybe.Maybe GHC.Internal.Base.String] -> Q Dec
   patSynSigD :: forall (m :: * -> *). Quote m => Name -> m Type -> m Dec
-  phantomR :: Language.Haskell.TH.Lib.Internal.Role
+  phantomR :: GHC.Internal.TH.Lib.Role
   plainBndrTV :: forall (m :: * -> *). Quote m => Name -> BndrVis -> m (TyVarBndr BndrVis)
   plainInvisTV :: forall (m :: * -> *). Quote m => Name -> Specificity -> m (TyVarBndr Specificity)
   plainTV :: forall flag. DefaultBndrFlag flag => Name -> TyVarBndr flag
-  pprExp :: Language.Haskell.TH.Ppr.Precedence -> Exp -> Language.Haskell.TH.PprLib.Doc
-  pprLit :: Language.Haskell.TH.Ppr.Precedence -> Lit -> Language.Haskell.TH.PprLib.Doc
-  pprParendType :: Type -> Language.Haskell.TH.PprLib.Doc
-  pprPat :: Language.Haskell.TH.Ppr.Precedence -> Pat -> Language.Haskell.TH.PprLib.Doc
+  pprExp :: GHC.Internal.TH.Ppr.Precedence -> Exp -> GHC.Internal.TH.PprLib.Doc
+  pprLit :: GHC.Internal.TH.Ppr.Precedence -> Lit -> GHC.Internal.TH.PprLib.Doc
+  pprParendType :: Type -> GHC.Internal.TH.PprLib.Doc
+  pprPat :: GHC.Internal.TH.Ppr.Precedence -> Pat -> GHC.Internal.TH.PprLib.Doc
   pprint :: forall a. Ppr a => a -> GHC.Internal.Base.String
   pragAnnD :: forall (m :: * -> *). Quote m => AnnTarget -> m Exp -> m Dec
   pragCompleteD :: forall (m :: * -> *). Quote m => [Name] -> GHC.Internal.Maybe.Maybe Name -> m Dec
@@ -618,7 +618,7 @@ module Language.Haskell.TH where
   rationalL :: GHC.Internal.Real.Rational -> Lit
   recC :: forall (m :: * -> *). Quote m => Name -> [m VarBangType] -> m Con
   recConE :: forall (m :: * -> *). Quote m => Name -> [m (Name, Exp)] -> m Exp
-  recGadtC :: forall (m :: * -> *). Quote m => [Name] -> [m Language.Haskell.TH.Lib.Syntax.VarStrictType] -> m Type -> m Con
+  recGadtC :: forall (m :: * -> *). Quote m => [Name] -> [m GHC.Internal.TH.Syntax.VarStrictType] -> m Type -> m Con
   recP :: forall (m :: * -> *). Quote m => Name -> [m FieldPat] -> m Pat
   recS :: forall (m :: * -> *). Quote m => [m Stmt] -> m Stmt
   recUpdE :: forall (m :: * -> *). Quote m => m Exp -> [m (Name, Exp)] -> m Exp
@@ -629,17 +629,17 @@ module Language.Haskell.TH where
   reifyConStrictness :: Name -> Q [DecidedStrictness]
   reifyFixity :: Name -> Q (GHC.Internal.Maybe.Maybe Fixity)
   reifyInstances :: Name -> [Type] -> Q [InstanceDec]
-  reifyModule :: Language.Haskell.TH.Lib.Syntax.Module -> Q ModuleInfo
+  reifyModule :: GHC.Internal.TH.Syntax.Module -> Q ModuleInfo
   reifyRoles :: Name -> Q [Role]
   reifyType :: Name -> Q Type
   report :: GHC.Types.Bool -> GHC.Internal.Base.String -> Q ()
   reportError :: GHC.Internal.Base.String -> Q ()
   reportWarning :: GHC.Internal.Base.String -> Q ()
-  representationalR :: Language.Haskell.TH.Lib.Internal.Role
-  roleAnnotD :: forall (m :: * -> *). Quote m => Name -> [Language.Haskell.TH.Lib.Internal.Role] -> m Dec
+  representationalR :: GHC.Internal.TH.Lib.Role
+  roleAnnotD :: forall (m :: * -> *). Quote m => Name -> [GHC.Internal.TH.Lib.Role] -> m Dec
   ruleVar :: forall (m :: * -> *). Quote m => Name -> m RuleBndr
   runIO :: forall a. GHC.Types.IO a -> Q a
-  runQ :: forall (m :: * -> *) a. Language.Haskell.TH.Lib.Syntax.Quasi m => Q a -> m a
+  runQ :: forall (m :: * -> *) a. GHC.Internal.TH.Syntax.Quasi m => Q a -> m a
   safe :: Safety
   sectionL :: forall (m :: * -> *). Quote m => m Exp -> m Exp -> m Exp
   sectionR :: forall (m :: * -> *). Quote m => m Exp -> m Exp -> m Exp
@@ -659,11 +659,11 @@ module Language.Haskell.TH where
   stdCall :: Callconv
   stockStrategy :: forall (m :: * -> *). Quote m => m DerivStrategy
   strTyLit :: forall (m :: * -> *). Quote m => GHC.Internal.Base.String -> m TyLit
-  strictType :: forall (m :: * -> *). Quote m => m Strict -> m Type -> m Language.Haskell.TH.Lib.Syntax.StrictType
+  strictType :: forall (m :: * -> *). Quote m => m Strict -> m Type -> m GHC.Internal.TH.Syntax.StrictType
   stringE :: forall (m :: * -> *). Quote m => GHC.Internal.Base.String -> m Exp
   stringL :: GHC.Internal.Base.String -> Lit
   stringPrimL :: [GHC.Internal.Word.Word8] -> Lit
-  thisModule :: Q Language.Haskell.TH.Lib.Syntax.Module
+  thisModule :: Q GHC.Internal.TH.Syntax.Module
   tildeP :: forall (m :: * -> *). Quote m => m Pat -> m Pat
   tupE :: forall (m :: * -> *). Quote m => [m Exp] -> m Exp
   tupP :: forall (m :: * -> *). Quote m => [m Pat] -> m Pat
@@ -708,7 +708,7 @@ module Language.Haskell.TH where
   varE :: forall (m :: * -> *). Quote m => Name -> m Exp
   varK :: Name -> Kind
   varP :: forall (m :: * -> *). Quote m => Name -> m Pat
-  varStrictType :: forall (m :: * -> *). Quote m => Name -> m Language.Haskell.TH.Lib.Syntax.StrictType -> m Language.Haskell.TH.Lib.Syntax.VarStrictType
+  varStrictType :: forall (m :: * -> *). Quote m => Name -> m GHC.Internal.TH.Syntax.StrictType -> m GHC.Internal.TH.Syntax.VarStrictType
   varT :: forall (m :: * -> *). Quote m => Name -> m Type
   viaStrategy :: forall (m :: * -> *). Quote m => m Type -> m DerivStrategy
   viewP :: forall (m :: * -> *). Quote m => m Exp -> m Pat -> m Pat
@@ -720,8 +720,8 @@ module Language.Haskell.TH where
 
 module Language.Haskell.TH.CodeDo where
   -- Safety: Safe-Inferred
-  (>>) :: forall (m :: * -> *) a b. GHC.Internal.Base.Monad m => m a -> Language.Haskell.TH.Lib.Syntax.Code m b -> Language.Haskell.TH.Lib.Syntax.Code m b
-  (>>=) :: forall (m :: * -> *) a b. GHC.Internal.Base.Monad m => m a -> (a -> Language.Haskell.TH.Lib.Syntax.Code m b) -> Language.Haskell.TH.Lib.Syntax.Code m b
+  (>>) :: forall (m :: * -> *) a b. GHC.Internal.Base.Monad m => m a -> GHC.Internal.TH.Syntax.Code m b -> GHC.Internal.TH.Syntax.Code m b
+  (>>=) :: forall (m :: * -> *) a b. GHC.Internal.Base.Monad m => m a -> (a -> GHC.Internal.TH.Syntax.Code m b) -> GHC.Internal.TH.Syntax.Code m b
 
 module Language.Haskell.TH.LanguageExtensions where
   -- Safety: Safe
@@ -861,1193 +861,676 @@ module Language.Haskell.TH.LanguageExtensions where
 module Language.Haskell.TH.Lib where
   -- Safety: Safe
   type BangQ :: *
-  type BangQ = Language.Haskell.TH.Lib.Syntax.Q Language.Haskell.TH.Lib.Syntax.Bang
+  type BangQ = GHC.Internal.TH.Syntax.Q GHC.Internal.TH.Syntax.Bang
   type BangTypeQ :: *
-  type BangTypeQ = Language.Haskell.TH.Lib.Syntax.Q Language.Haskell.TH.Lib.Syntax.BangType
+  type BangTypeQ = GHC.Internal.TH.Syntax.Q GHC.Internal.TH.Syntax.BangType
   type BodyQ :: *
-  type BodyQ = Language.Haskell.TH.Lib.Syntax.Q Language.Haskell.TH.Lib.Syntax.Body
+  type BodyQ = GHC.Internal.TH.Syntax.Q GHC.Internal.TH.Syntax.Body
   type ClauseQ :: *
-  type ClauseQ = Language.Haskell.TH.Lib.Syntax.Q Language.Haskell.TH.Lib.Syntax.Clause
+  type ClauseQ = GHC.Internal.TH.Syntax.Q GHC.Internal.TH.Syntax.Clause
   type CodeQ :: forall (r :: GHC.Types.RuntimeRep). TYPE r -> *
-  type CodeQ = Language.Haskell.TH.Lib.Syntax.Code Language.Haskell.TH.Lib.Syntax.Q :: forall (r :: GHC.Types.RuntimeRep). TYPE r -> *
+  type CodeQ = GHC.Internal.TH.Syntax.Code GHC.Internal.TH.Syntax.Q :: forall (r :: GHC.Types.RuntimeRep). TYPE r -> *
   type ConQ :: *
-  type ConQ = Language.Haskell.TH.Lib.Syntax.Q Language.Haskell.TH.Lib.Syntax.Con
+  type ConQ = GHC.Internal.TH.Syntax.Q GHC.Internal.TH.Syntax.Con
   type CxtQ :: *
-  type CxtQ = Language.Haskell.TH.Lib.Syntax.Q Language.Haskell.TH.Lib.Syntax.Cxt
+  type CxtQ = GHC.Internal.TH.Syntax.Q GHC.Internal.TH.Syntax.Cxt
   type DecQ :: *
-  type DecQ = Language.Haskell.TH.Lib.Syntax.Q Language.Haskell.TH.Lib.Syntax.Dec
+  type DecQ = GHC.Internal.TH.Syntax.Q GHC.Internal.TH.Syntax.Dec
   type DecsQ :: *
-  type DecsQ = Language.Haskell.TH.Lib.Syntax.Q [Language.Haskell.TH.Lib.Syntax.Dec]
+  type DecsQ = GHC.Internal.TH.Syntax.Q [GHC.Internal.TH.Syntax.Dec]
   type DefaultBndrFlag :: * -> Constraint
   class DefaultBndrFlag flag where
     defaultBndrFlag :: flag
     {-# MINIMAL defaultBndrFlag #-}
   type DerivClause :: *
-  data DerivClause = DerivClause (GHC.Internal.Maybe.Maybe DerivStrategy) Language.Haskell.TH.Lib.Syntax.Cxt
+  data DerivClause = DerivClause (GHC.Internal.Maybe.Maybe DerivStrategy) GHC.Internal.TH.Syntax.Cxt
   type DerivClauseQ :: *
-  type DerivClauseQ = Language.Haskell.TH.Lib.Syntax.Q DerivClause
+  type DerivClauseQ = GHC.Internal.TH.Syntax.Q DerivClause
   type DerivStrategy :: *
-  data DerivStrategy = StockStrategy | AnyclassStrategy | NewtypeStrategy | ViaStrategy Language.Haskell.TH.Lib.Syntax.Type
+  data DerivStrategy = StockStrategy | AnyclassStrategy | NewtypeStrategy | ViaStrategy GHC.Internal.TH.Syntax.Type
   type DerivStrategyQ :: *
-  type DerivStrategyQ = Language.Haskell.TH.Lib.Syntax.Q DerivStrategy
+  type DerivStrategyQ = GHC.Internal.TH.Syntax.Q DerivStrategy
   type ExpQ :: *
-  type ExpQ = Language.Haskell.TH.Lib.Syntax.Q Language.Haskell.TH.Lib.Syntax.Exp
+  type ExpQ = GHC.Internal.TH.Syntax.Q GHC.Internal.TH.Syntax.Exp
   type FamilyResultSigQ :: *
-  type FamilyResultSigQ = Language.Haskell.TH.Lib.Syntax.Q Language.Haskell.TH.Lib.Syntax.FamilyResultSig
+  type FamilyResultSigQ = GHC.Internal.TH.Syntax.Q GHC.Internal.TH.Syntax.FamilyResultSig
   type FieldExpQ :: *
-  type FieldExpQ = Language.Haskell.TH.Lib.Syntax.Q Language.Haskell.TH.Lib.Syntax.FieldExp
+  type FieldExpQ = GHC.Internal.TH.Syntax.Q GHC.Internal.TH.Syntax.FieldExp
   type FieldPatQ :: *
-  type FieldPatQ = Language.Haskell.TH.Lib.Syntax.Q Language.Haskell.TH.Lib.Syntax.FieldPat
+  type FieldPatQ = GHC.Internal.TH.Syntax.Q GHC.Internal.TH.Syntax.FieldPat
   type GuardQ :: *
-  type GuardQ = Language.Haskell.TH.Lib.Syntax.Q Language.Haskell.TH.Lib.Syntax.Guard
+  type GuardQ = GHC.Internal.TH.Syntax.Q GHC.Internal.TH.Syntax.Guard
   type InfoQ :: *
-  type InfoQ = Language.Haskell.TH.Lib.Syntax.Q Language.Haskell.TH.Lib.Syntax.Info
+  type InfoQ = GHC.Internal.TH.Syntax.Q GHC.Internal.TH.Syntax.Info
   type KindQ :: *
-  type KindQ = Language.Haskell.TH.Lib.Syntax.Q Language.Haskell.TH.Lib.Syntax.Kind
+  type KindQ = GHC.Internal.TH.Syntax.Q GHC.Internal.TH.Syntax.Kind
   type MatchQ :: *
-  type MatchQ = Language.Haskell.TH.Lib.Syntax.Q Language.Haskell.TH.Lib.Syntax.Match
+  type MatchQ = GHC.Internal.TH.Syntax.Q GHC.Internal.TH.Syntax.Match
   type Overlap :: *
   data Overlap = Overlappable | Overlapping | Overlaps | Incoherent
   type PatQ :: *
-  type PatQ = Language.Haskell.TH.Lib.Syntax.Q Language.Haskell.TH.Lib.Syntax.Pat
+  type PatQ = GHC.Internal.TH.Syntax.Q GHC.Internal.TH.Syntax.Pat
   type PatSynArgsQ :: *
-  type PatSynArgsQ = Language.Haskell.TH.Lib.Syntax.Q Language.Haskell.TH.Lib.Syntax.PatSynArgs
+  type PatSynArgsQ = GHC.Internal.TH.Syntax.Q GHC.Internal.TH.Syntax.PatSynArgs
   type PatSynDirQ :: *
-  type PatSynDirQ = Language.Haskell.TH.Lib.Syntax.Q Language.Haskell.TH.Lib.Syntax.PatSynDir
+  type PatSynDirQ = GHC.Internal.TH.Syntax.Q GHC.Internal.TH.Syntax.PatSynDir
   type PredQ :: *
-  type PredQ = Language.Haskell.TH.Lib.Syntax.Q Language.Haskell.TH.Lib.Syntax.Pred
+  type PredQ = GHC.Internal.TH.Syntax.Q GHC.Internal.TH.Syntax.Pred
   type RangeQ :: *
-  type RangeQ = Language.Haskell.TH.Lib.Syntax.Q Language.Haskell.TH.Lib.Syntax.Range
+  type RangeQ = GHC.Internal.TH.Syntax.Q GHC.Internal.TH.Syntax.Range
   type RuleBndrQ :: *
-  type RuleBndrQ = Language.Haskell.TH.Lib.Syntax.Q Language.Haskell.TH.Lib.Syntax.RuleBndr
+  type RuleBndrQ = GHC.Internal.TH.Syntax.Q GHC.Internal.TH.Syntax.RuleBndr
   type SourceStrictnessQ :: *
-  type SourceStrictnessQ = Language.Haskell.TH.Lib.Syntax.Q Language.Haskell.TH.Lib.Syntax.SourceStrictness
+  type SourceStrictnessQ = GHC.Internal.TH.Syntax.Q GHC.Internal.TH.Syntax.SourceStrictness
   type SourceUnpackednessQ :: *
-  type SourceUnpackednessQ = Language.Haskell.TH.Lib.Syntax.Q Language.Haskell.TH.Lib.Syntax.SourceUnpackedness
+  type SourceUnpackednessQ = GHC.Internal.TH.Syntax.Q GHC.Internal.TH.Syntax.SourceUnpackedness
   type StmtQ :: *
-  type StmtQ = Language.Haskell.TH.Lib.Syntax.Q Language.Haskell.TH.Lib.Syntax.Stmt
+  type StmtQ = GHC.Internal.TH.Syntax.Q GHC.Internal.TH.Syntax.Stmt
   type StrictTypeQ :: *
-  type StrictTypeQ = Language.Haskell.TH.Lib.Syntax.Q Language.Haskell.TH.Lib.Syntax.StrictType
+  type StrictTypeQ = GHC.Internal.TH.Syntax.Q GHC.Internal.TH.Syntax.StrictType
   type TExpQ :: forall (r :: GHC.Types.RuntimeRep). TYPE r -> *
-  type TExpQ a = Language.Haskell.TH.Lib.Syntax.Q (Language.Haskell.TH.Lib.Syntax.TExp a)
+  type TExpQ a = GHC.Internal.TH.Syntax.Q (GHC.Internal.TH.Syntax.TExp a)
   type TyLitQ :: *
-  type TyLitQ = Language.Haskell.TH.Lib.Syntax.Q Language.Haskell.TH.Lib.Syntax.TyLit
+  type TyLitQ = GHC.Internal.TH.Syntax.Q GHC.Internal.TH.Syntax.TyLit
   type TySynEqnQ :: *
-  type TySynEqnQ = Language.Haskell.TH.Lib.Syntax.Q Language.Haskell.TH.Lib.Syntax.TySynEqn
+  type TySynEqnQ = GHC.Internal.TH.Syntax.Q GHC.Internal.TH.Syntax.TySynEqn
   type TyVarBndrSpec :: *
-  type TyVarBndrSpec = Language.Haskell.TH.Lib.Syntax.TyVarBndr Language.Haskell.TH.Lib.Syntax.Specificity
+  type TyVarBndrSpec = GHC.Internal.TH.Syntax.TyVarBndr GHC.Internal.TH.Syntax.Specificity
   type TyVarBndrUnit :: *
-  type TyVarBndrUnit = Language.Haskell.TH.Lib.Syntax.TyVarBndr ()
+  type TyVarBndrUnit = GHC.Internal.TH.Syntax.TyVarBndr ()
   type TyVarBndrVis :: *
-  type TyVarBndrVis = Language.Haskell.TH.Lib.Syntax.TyVarBndr Language.Haskell.TH.Lib.Syntax.BndrVis
+  type TyVarBndrVis = GHC.Internal.TH.Syntax.TyVarBndr GHC.Internal.TH.Syntax.BndrVis
   type TypeQ :: *
-  type TypeQ = Language.Haskell.TH.Lib.Syntax.Q Language.Haskell.TH.Lib.Syntax.Type
+  type TypeQ = GHC.Internal.TH.Syntax.Q GHC.Internal.TH.Syntax.Type
   type VarBangTypeQ :: *
-  type VarBangTypeQ = Language.Haskell.TH.Lib.Syntax.Q Language.Haskell.TH.Lib.Syntax.VarBangType
+  type VarBangTypeQ = GHC.Internal.TH.Syntax.Q GHC.Internal.TH.Syntax.VarBangType
   type VarStrictTypeQ :: *
-  type VarStrictTypeQ = Language.Haskell.TH.Lib.Syntax.Q Language.Haskell.TH.Lib.Syntax.VarStrictType
-  anyclassStrategy :: forall (m :: * -> *). Language.Haskell.TH.Lib.Syntax.Quote m => m DerivStrategy
-  appE :: forall (m :: * -> *). Language.Haskell.TH.Lib.Syntax.Quote m => m Language.Haskell.TH.Lib.Syntax.Exp -> m Language.Haskell.TH.Lib.Syntax.Exp -> m Language.Haskell.TH.Lib.Syntax.Exp
-  appK :: Language.Haskell.TH.Lib.Syntax.Kind -> Language.Haskell.TH.Lib.Syntax.Kind -> Language.Haskell.TH.Lib.Syntax.Kind
-  appKindT :: forall (m :: * -> *). Language.Haskell.TH.Lib.Syntax.Quote m => m Language.Haskell.TH.Lib.Syntax.Type -> m Language.Haskell.TH.Lib.Syntax.Kind -> m Language.Haskell.TH.Lib.Syntax.Type
-  appT :: forall (m :: * -> *). Language.Haskell.TH.Lib.Syntax.Quote m => m Language.Haskell.TH.Lib.Syntax.Type -> m Language.Haskell.TH.Lib.Syntax.Type -> m Language.Haskell.TH.Lib.Syntax.Type
-  appTypeE :: forall (m :: * -> *). Language.Haskell.TH.Lib.Syntax.Quote m => m Language.Haskell.TH.Lib.Syntax.Exp -> m Language.Haskell.TH.Lib.Syntax.Type -> m Language.Haskell.TH.Lib.Syntax.Exp
-  appsE :: forall (m :: * -> *). Language.Haskell.TH.Lib.Syntax.Quote m => [m Language.Haskell.TH.Lib.Syntax.Exp] -> m Language.Haskell.TH.Lib.Syntax.Exp
-  arithSeqE :: forall (m :: * -> *). Language.Haskell.TH.Lib.Syntax.Quote m => m Language.Haskell.TH.Lib.Syntax.Range -> m Language.Haskell.TH.Lib.Syntax.Exp
-  arrowK :: Language.Haskell.TH.Lib.Syntax.Kind
-  arrowT :: forall (m :: * -> *). Language.Haskell.TH.Lib.Syntax.Quote m => m Language.Haskell.TH.Lib.Syntax.Type
-  asP :: forall (m :: * -> *). Language.Haskell.TH.Lib.Syntax.Quote m => Language.Haskell.TH.Lib.Syntax.Name -> m Language.Haskell.TH.Lib.Syntax.Pat -> m Language.Haskell.TH.Lib.Syntax.Pat
-  bang :: forall (m :: * -> *). Language.Haskell.TH.Lib.Syntax.Quote m => m Language.Haskell.TH.Lib.Syntax.SourceUnpackedness -> m Language.Haskell.TH.Lib.Syntax.SourceStrictness -> m Language.Haskell.TH.Lib.Syntax.Bang
-  bangP :: forall (m :: * -> *). Language.Haskell.TH.Lib.Syntax.Quote m => m Language.Haskell.TH.Lib.Syntax.Pat -> m Language.Haskell.TH.Lib.Syntax.Pat
-  bangType :: forall (m :: * -> *). Language.Haskell.TH.Lib.Syntax.Quote m => m Language.Haskell.TH.Lib.Syntax.Bang -> m Language.Haskell.TH.Lib.Syntax.Type -> m Language.Haskell.TH.Lib.Syntax.BangType
-  bindS :: forall (m :: * -> *). Language.Haskell.TH.Lib.Syntax.Quote m => m Language.Haskell.TH.Lib.Syntax.Pat -> m Language.Haskell.TH.Lib.Syntax.Exp -> m Language.Haskell.TH.Lib.Syntax.Stmt
-  bndrInvis :: Language.Haskell.TH.Lib.Syntax.BndrVis
-  bndrReq :: Language.Haskell.TH.Lib.Syntax.BndrVis
-  bytesPrimL :: Language.Haskell.TH.Lib.Syntax.Bytes -> Language.Haskell.TH.Lib.Syntax.Lit
-  cApi :: Language.Haskell.TH.Lib.Syntax.Callconv
-  cCall :: Language.Haskell.TH.Lib.Syntax.Callconv
-  caseE :: forall (m :: * -> *). Language.Haskell.TH.Lib.Syntax.Quote m => m Language.Haskell.TH.Lib.Syntax.Exp -> [m Language.Haskell.TH.Lib.Syntax.Match] -> m Language.Haskell.TH.Lib.Syntax.Exp
-  charL :: GHC.Types.Char -> Language.Haskell.TH.Lib.Syntax.Lit
-  charPrimL :: GHC.Types.Char -> Language.Haskell.TH.Lib.Syntax.Lit
-  charTyLit :: forall (m :: * -> *). Language.Haskell.TH.Lib.Syntax.Quote m => GHC.Types.Char -> m Language.Haskell.TH.Lib.Syntax.TyLit
-  classD :: forall (m :: * -> *). Language.Haskell.TH.Lib.Syntax.Quote m => m Language.Haskell.TH.Lib.Syntax.Cxt -> Language.Haskell.TH.Lib.Syntax.Name -> [Language.Haskell.TH.Lib.Syntax.TyVarBndr Language.Haskell.TH.Lib.Syntax.BndrVis] -> [Language.Haskell.TH.Lib.Syntax.FunDep] -> [m Language.Haskell.TH.Lib.Syntax.Dec] -> m Language.Haskell.TH.Lib.Syntax.Dec
-  classP :: forall (m :: * -> *). Language.Haskell.TH.Lib.Syntax.Quote m => Language.Haskell.TH.Lib.Syntax.Name -> [m Language.Haskell.TH.Lib.Syntax.Type] -> m Language.Haskell.TH.Lib.Syntax.Pred
-  clause :: forall (m :: * -> *). Language.Haskell.TH.Lib.Syntax.Quote m => [m Language.Haskell.TH.Lib.Syntax.Pat] -> m Language.Haskell.TH.Lib.Syntax.Body -> [m Language.Haskell.TH.Lib.Syntax.Dec] -> m Language.Haskell.TH.Lib.Syntax.Clause
-  closedTypeFamilyD :: forall (m :: * -> *). Language.Haskell.TH.Lib.Syntax.Quote m => Language.Haskell.TH.Lib.Syntax.Name -> [Language.Haskell.TH.Lib.Syntax.TyVarBndr Language.Haskell.TH.Lib.Syntax.BndrVis] -> Language.Haskell.TH.Lib.Syntax.FamilyResultSig -> GHC.Internal.Maybe.Maybe Language.Haskell.TH.Lib.Syntax.InjectivityAnn -> [m Language.Haskell.TH.Lib.Syntax.TySynEqn] -> m Language.Haskell.TH.Lib.Syntax.Dec
-  compE :: forall (m :: * -> *). Language.Haskell.TH.Lib.Syntax.Quote m => [m Language.Haskell.TH.Lib.Syntax.Stmt] -> m Language.Haskell.TH.Lib.Syntax.Exp
-  conE :: forall (m :: * -> *). Language.Haskell.TH.Lib.Syntax.Quote m => Language.Haskell.TH.Lib.Syntax.Name -> m Language.Haskell.TH.Lib.Syntax.Exp
-  conK :: Language.Haskell.TH.Lib.Syntax.Name -> Language.Haskell.TH.Lib.Syntax.Kind
-  conP :: forall (m :: * -> *). Language.Haskell.TH.Lib.Syntax.Quote m => Language.Haskell.TH.Lib.Syntax.Name -> [m Language.Haskell.TH.Lib.Syntax.Pat] -> m Language.Haskell.TH.Lib.Syntax.Pat
-  conT :: forall (m :: * -> *). Language.Haskell.TH.Lib.Syntax.Quote m => Language.Haskell.TH.Lib.Syntax.Name -> m Language.Haskell.TH.Lib.Syntax.Type
-  condE :: forall (m :: * -> *). Language.Haskell.TH.Lib.Syntax.Quote m => m Language.Haskell.TH.Lib.Syntax.Exp -> m Language.Haskell.TH.Lib.Syntax.Exp -> m Language.Haskell.TH.Lib.Syntax.Exp -> m Language.Haskell.TH.Lib.Syntax.Exp
-  constraintK :: Language.Haskell.TH.Lib.Syntax.Kind
-  cxt :: forall (m :: * -> *). Language.Haskell.TH.Lib.Syntax.Quote m => [m Language.Haskell.TH.Lib.Syntax.Pred] -> m Language.Haskell.TH.Lib.Syntax.Cxt
-  dataD :: forall (m :: * -> *). Language.Haskell.TH.Lib.Syntax.Quote m => m Language.Haskell.TH.Lib.Syntax.Cxt -> Language.Haskell.TH.Lib.Syntax.Name -> [Language.Haskell.TH.Lib.Syntax.TyVarBndr Language.Haskell.TH.Lib.Syntax.BndrVis] -> GHC.Internal.Maybe.Maybe Language.Haskell.TH.Lib.Syntax.Kind -> [m Language.Haskell.TH.Lib.Syntax.Con] -> [m DerivClause] -> m Language.Haskell.TH.Lib.Syntax.Dec
-  dataD_doc ::
-    Language.Haskell.TH.Lib.Syntax.Q Language.Haskell.TH.Lib.Syntax.Cxt
-    -> Language.Haskell.TH.Lib.Syntax.Name -> [Language.Haskell.TH.Lib.Syntax.Q (Language.Haskell.TH.Lib.Syntax.TyVarBndr Language.Haskell.TH.Lib.Syntax.BndrVis)] -> GHC.Internal.Maybe.Maybe (Language.Haskell.TH.Lib.Syntax.Q Language.Haskell.TH.Lib.Syntax.Kind) -> [(Language.Haskell.TH.Lib.Syntax.Q Language.Haskell.TH.Lib.Syntax.Con, GHC.Internal.Maybe.Maybe GHC.Internal.Base.String, [GHC.Internal.Maybe.Maybe GHC.Internal.Base.String])] -> [Language.Haskell.TH.Lib.Syntax.Q DerivClause] -> GHC.Internal.Maybe.Maybe GHC.Internal.Base.String -> Language.Haskell.TH.Lib.Syntax.Q Language.Haskell.TH.Lib.Syntax.Dec
-  dataFamilyD :: forall (m :: * -> *). Language.Haskell.TH.Lib.Syntax.Quote m => Language.Haskell.TH.Lib.Syntax.Name -> [Language.Haskell.TH.Lib.Syntax.TyVarBndr Language.Haskell.TH.Lib.Syntax.BndrVis] -> GHC.Internal.Maybe.Maybe Language.Haskell.TH.Lib.Syntax.Kind -> m Language.Haskell.TH.Lib.Syntax.Dec
-  dataInstD :: forall (m :: * -> *). Language.Haskell.TH.Lib.Syntax.Quote m => m Language.Haskell.TH.Lib.Syntax.Cxt -> Language.Haskell.TH.Lib.Syntax.Name -> [m Language.Haskell.TH.Lib.Syntax.Type] -> GHC.Internal.Maybe.Maybe Language.Haskell.TH.Lib.Syntax.Kind -> [m Language.Haskell.TH.Lib.Syntax.Con] -> [m DerivClause] -> m Language.Haskell.TH.Lib.Syntax.Dec
-  dataInstD_doc ::
-    Language.Haskell.TH.Lib.Syntax.Q Language.Haskell.TH.Lib.Syntax.Cxt
-    -> GHC.Internal.Maybe.Maybe [Language.Haskell.TH.Lib.Syntax.Q (Language.Haskell.TH.Lib.Syntax.TyVarBndr ())] -> Language.Haskell.TH.Lib.Syntax.Q Language.Haskell.TH.Lib.Syntax.Type -> GHC.Internal.Maybe.Maybe (Language.Haskell.TH.Lib.Syntax.Q Language.Haskell.TH.Lib.Syntax.Kind) -> [(Language.Haskell.TH.Lib.Syntax.Q Language.Haskell.TH.Lib.Syntax.Con, GHC.Internal.Maybe.Maybe GHC.Internal.Base.String, [GHC.Internal.Maybe.Maybe GHC.Internal.Base.String])] -> [Language.Haskell.TH.Lib.Syntax.Q DerivClause] -> GHC.Internal.Maybe.Maybe GHC.Internal.Base.String -> Language.Haskell.TH.Lib.Syntax.Q Language.Haskell.TH.Lib.Syntax.Dec
-  defaultD :: forall (m :: * -> *). Language.Haskell.TH.Lib.Syntax.Quote m => [m Language.Haskell.TH.Lib.Syntax.Type] -> m Language.Haskell.TH.Lib.Syntax.Dec
-  defaultSigD :: forall (m :: * -> *). Language.Haskell.TH.Lib.Syntax.Quote m => Language.Haskell.TH.Lib.Syntax.Name -> m Language.Haskell.TH.Lib.Syntax.Type -> m Language.Haskell.TH.Lib.Syntax.Dec
-  derivClause :: forall (m :: * -> *). Language.Haskell.TH.Lib.Syntax.Quote m => GHC.Internal.Maybe.Maybe DerivStrategy -> [m Language.Haskell.TH.Lib.Syntax.Pred] -> m DerivClause
-  doE :: forall (m :: * -> *). Language.Haskell.TH.Lib.Syntax.Quote m => [m Language.Haskell.TH.Lib.Syntax.Stmt] -> m Language.Haskell.TH.Lib.Syntax.Exp
-  doublePrimL :: GHC.Internal.Real.Rational -> Language.Haskell.TH.Lib.Syntax.Lit
-  dyn :: forall (m :: * -> *). Language.Haskell.TH.Lib.Syntax.Quote m => GHC.Internal.Base.String -> m Language.Haskell.TH.Lib.Syntax.Exp
-  equalP :: forall (m :: * -> *). Language.Haskell.TH.Lib.Syntax.Quote m => m Language.Haskell.TH.Lib.Syntax.Type -> m Language.Haskell.TH.Lib.Syntax.Type -> m Language.Haskell.TH.Lib.Syntax.Pred
-  equalityT :: forall (m :: * -> *). Language.Haskell.TH.Lib.Syntax.Quote m => m Language.Haskell.TH.Lib.Syntax.Type
-  explBidir :: forall (m :: * -> *). Language.Haskell.TH.Lib.Syntax.Quote m => [m Language.Haskell.TH.Lib.Syntax.Clause] -> m Language.Haskell.TH.Lib.Syntax.PatSynDir
-  fieldExp :: forall (m :: * -> *). Language.Haskell.TH.Lib.Syntax.Quote m => Language.Haskell.TH.Lib.Syntax.Name -> m Language.Haskell.TH.Lib.Syntax.Exp -> m (Language.Haskell.TH.Lib.Syntax.Name, Language.Haskell.TH.Lib.Syntax.Exp)
-  fieldPat :: forall (m :: * -> *). Language.Haskell.TH.Lib.Syntax.Quote m => Language.Haskell.TH.Lib.Syntax.Name -> m Language.Haskell.TH.Lib.Syntax.Pat -> m Language.Haskell.TH.Lib.Syntax.FieldPat
-  floatPrimL :: GHC.Internal.Real.Rational -> Language.Haskell.TH.Lib.Syntax.Lit
-  forImpD :: forall (m :: * -> *). Language.Haskell.TH.Lib.Syntax.Quote m => Language.Haskell.TH.Lib.Syntax.Callconv -> Language.Haskell.TH.Lib.Syntax.Safety -> GHC.Internal.Base.String -> Language.Haskell.TH.Lib.Syntax.Name -> m Language.Haskell.TH.Lib.Syntax.Type -> m Language.Haskell.TH.Lib.Syntax.Dec
-  forallC :: forall (m :: * -> *). Language.Haskell.TH.Lib.Syntax.Quote m => [Language.Haskell.TH.Lib.Syntax.TyVarBndr Language.Haskell.TH.Lib.Syntax.Specificity] -> m Language.Haskell.TH.Lib.Syntax.Cxt -> m Language.Haskell.TH.Lib.Syntax.Con -> m Language.Haskell.TH.Lib.Syntax.Con
-  forallT :: forall (m :: * -> *). Language.Haskell.TH.Lib.Syntax.Quote m => [Language.Haskell.TH.Lib.Syntax.TyVarBndr Language.Haskell.TH.Lib.Syntax.Specificity] -> m Language.Haskell.TH.Lib.Syntax.Cxt -> m Language.Haskell.TH.Lib.Syntax.Type -> m Language.Haskell.TH.Lib.Syntax.Type
-  forallVisT :: forall (m :: * -> *). Language.Haskell.TH.Lib.Syntax.Quote m => [m (Language.Haskell.TH.Lib.Syntax.TyVarBndr ())] -> m Language.Haskell.TH.Lib.Syntax.Type -> m Language.Haskell.TH.Lib.Syntax.Type
-  fromE :: forall (m :: * -> *). Language.Haskell.TH.Lib.Syntax.Quote m => m Language.Haskell.TH.Lib.Syntax.Exp -> m Language.Haskell.TH.Lib.Syntax.Exp
-  fromR :: forall (m :: * -> *). Language.Haskell.TH.Lib.Syntax.Quote m => m Language.Haskell.TH.Lib.Syntax.Exp -> m Language.Haskell.TH.Lib.Syntax.Range
-  fromThenE :: forall (m :: * -> *). Language.Haskell.TH.Lib.Syntax.Quote m => m Language.Haskell.TH.Lib.Syntax.Exp -> m Language.Haskell.TH.Lib.Syntax.Exp -> m Language.Haskell.TH.Lib.Syntax.Exp
-  fromThenR :: forall (m :: * -> *). Language.Haskell.TH.Lib.Syntax.Quote m => m Language.Haskell.TH.Lib.Syntax.Exp -> m Language.Haskell.TH.Lib.Syntax.Exp -> m Language.Haskell.TH.Lib.Syntax.Range
-  fromThenToE :: forall (m :: * -> *). Language.Haskell.TH.Lib.Syntax.Quote m => m Language.Haskell.TH.Lib.Syntax.Exp -> m Language.Haskell.TH.Lib.Syntax.Exp -> m Language.Haskell.TH.Lib.Syntax.Exp -> m Language.Haskell.TH.Lib.Syntax.Exp
-  fromThenToR :: forall (m :: * -> *). Language.Haskell.TH.Lib.Syntax.Quote m => m Language.Haskell.TH.Lib.Syntax.Exp -> m Language.Haskell.TH.Lib.Syntax.Exp -> m Language.Haskell.TH.Lib.Syntax.Exp -> m Language.Haskell.TH.Lib.Syntax.Range
-  fromToE :: forall (m :: * -> *). Language.Haskell.TH.Lib.Syntax.Quote m => m Language.Haskell.TH.Lib.Syntax.Exp -> m Language.Haskell.TH.Lib.Syntax.Exp -> m Language.Haskell.TH.Lib.Syntax.Exp
-  fromToR :: forall (m :: * -> *). Language.Haskell.TH.Lib.Syntax.Quote m => m Language.Haskell.TH.Lib.Syntax.Exp -> m Language.Haskell.TH.Lib.Syntax.Exp -> m Language.Haskell.TH.Lib.Syntax.Range
-  funD :: forall (m :: * -> *). Language.Haskell.TH.Lib.Syntax.Quote m => Language.Haskell.TH.Lib.Syntax.Name -> [m Language.Haskell.TH.Lib.Syntax.Clause] -> m Language.Haskell.TH.Lib.Syntax.Dec
-  funD_doc :: Language.Haskell.TH.Lib.Syntax.Name -> [Language.Haskell.TH.Lib.Syntax.Q Language.Haskell.TH.Lib.Syntax.Clause] -> GHC.Internal.Maybe.Maybe GHC.Internal.Base.String -> [GHC.Internal.Maybe.Maybe GHC.Internal.Base.String] -> Language.Haskell.TH.Lib.Syntax.Q Language.Haskell.TH.Lib.Syntax.Dec
-  funDep :: [Language.Haskell.TH.Lib.Syntax.Name] -> [Language.Haskell.TH.Lib.Syntax.Name] -> Language.Haskell.TH.Lib.Syntax.FunDep
-  gadtC :: forall (m :: * -> *). Language.Haskell.TH.Lib.Syntax.Quote m => [Language.Haskell.TH.Lib.Syntax.Name] -> [m Language.Haskell.TH.Lib.Syntax.StrictType] -> m Language.Haskell.TH.Lib.Syntax.Type -> m Language.Haskell.TH.Lib.Syntax.Con
-  getFieldE :: forall (m :: * -> *). Language.Haskell.TH.Lib.Syntax.Quote m => m Language.Haskell.TH.Lib.Syntax.Exp -> GHC.Internal.Base.String -> m Language.Haskell.TH.Lib.Syntax.Exp
-  guardedB :: forall (m :: * -> *). Language.Haskell.TH.Lib.Syntax.Quote m => [m (Language.Haskell.TH.Lib.Syntax.Guard, Language.Haskell.TH.Lib.Syntax.Exp)] -> m Language.Haskell.TH.Lib.Syntax.Body
-  implBidir :: forall (m :: * -> *). Language.Haskell.TH.Lib.Syntax.Quote m => m Language.Haskell.TH.Lib.Syntax.PatSynDir
-  implicitParamBindD :: forall (m :: * -> *). Language.Haskell.TH.Lib.Syntax.Quote m => GHC.Internal.Base.String -> m Language.Haskell.TH.Lib.Syntax.Exp -> m Language.Haskell.TH.Lib.Syntax.Dec
-  implicitParamT :: forall (m :: * -> *). Language.Haskell.TH.Lib.Syntax.Quote m => GHC.Internal.Base.String -> m Language.Haskell.TH.Lib.Syntax.Type -> m Language.Haskell.TH.Lib.Syntax.Type
-  implicitParamVarE :: forall (m :: * -> *). Language.Haskell.TH.Lib.Syntax.Quote m => GHC.Internal.Base.String -> m Language.Haskell.TH.Lib.Syntax.Exp
-  inferR :: Language.Haskell.TH.Lib.Internal.Role
-  inferredSpec :: Language.Haskell.TH.Lib.Syntax.Specificity
-  infixApp :: forall (m :: * -> *). Language.Haskell.TH.Lib.Syntax.Quote m => m Language.Haskell.TH.Lib.Syntax.Exp -> m Language.Haskell.TH.Lib.Syntax.Exp -> m Language.Haskell.TH.Lib.Syntax.Exp -> m Language.Haskell.TH.Lib.Syntax.Exp
-  infixC :: forall (m :: * -> *). Language.Haskell.TH.Lib.Syntax.Quote m => m (Language.Haskell.TH.Lib.Syntax.Bang, Language.Haskell.TH.Lib.Syntax.Type) -> Language.Haskell.TH.Lib.Syntax.Name -> m (Language.Haskell.TH.Lib.Syntax.Bang, Language.Haskell.TH.Lib.Syntax.Type) -> m Language.Haskell.TH.Lib.Syntax.Con
-  infixE :: forall (m :: * -> *). Language.Haskell.TH.Lib.Syntax.Quote m => GHC.Internal.Maybe.Maybe (m Language.Haskell.TH.Lib.Syntax.Exp) -> m Language.Haskell.TH.Lib.Syntax.Exp -> GHC.Internal.Maybe.Maybe (m Language.Haskell.TH.Lib.Syntax.Exp) -> m Language.Haskell.TH.Lib.Syntax.Exp
-  infixLD :: forall (m :: * -> *). Language.Haskell.TH.Lib.Syntax.Quote m => GHC.Types.Int -> Language.Haskell.TH.Lib.Syntax.Name -> m Language.Haskell.TH.Lib.Syntax.Dec
-  infixND :: forall (m :: * -> *). Language.Haskell.TH.Lib.Syntax.Quote m => GHC.Types.Int -> Language.Haskell.TH.Lib.Syntax.Name -> m Language.Haskell.TH.Lib.Syntax.Dec
-  infixP :: forall (m :: * -> *). Language.Haskell.TH.Lib.Syntax.Quote m => m Language.Haskell.TH.Lib.Syntax.Pat -> Language.Haskell.TH.Lib.Syntax.Name -> m Language.Haskell.TH.Lib.Syntax.Pat -> m Language.Haskell.TH.Lib.Syntax.Pat
-  infixPatSyn :: forall (m :: * -> *). Language.Haskell.TH.Lib.Syntax.Quote m => Language.Haskell.TH.Lib.Syntax.Name -> Language.Haskell.TH.Lib.Syntax.Name -> m Language.Haskell.TH.Lib.Syntax.PatSynArgs
-  infixRD :: forall (m :: * -> *). Language.Haskell.TH.Lib.Syntax.Quote m => GHC.Types.Int -> Language.Haskell.TH.Lib.Syntax.Name -> m Language.Haskell.TH.Lib.Syntax.Dec
-  infixT :: forall (m :: * -> *). Language.Haskell.TH.Lib.Syntax.Quote m => m Language.Haskell.TH.Lib.Syntax.Type -> Language.Haskell.TH.Lib.Syntax.Name -> m Language.Haskell.TH.Lib.Syntax.Type -> m Language.Haskell.TH.Lib.Syntax.Type
-  injectivityAnn :: Language.Haskell.TH.Lib.Syntax.Name -> [Language.Haskell.TH.Lib.Syntax.Name] -> Language.Haskell.TH.Lib.Internal.InjectivityAnn
-  instanceD :: forall (m :: * -> *). Language.Haskell.TH.Lib.Syntax.Quote m => m Language.Haskell.TH.Lib.Syntax.Cxt -> m Language.Haskell.TH.Lib.Syntax.Type -> [m Language.Haskell.TH.Lib.Syntax.Dec] -> m Language.Haskell.TH.Lib.Syntax.Dec
-  instanceWithOverlapD :: forall (m :: * -> *). Language.Haskell.TH.Lib.Syntax.Quote m => GHC.Internal.Maybe.Maybe Overlap -> m Language.Haskell.TH.Lib.Syntax.Cxt -> m Language.Haskell.TH.Lib.Syntax.Type -> [m Language.Haskell.TH.Lib.Syntax.Dec] -> m Language.Haskell.TH.Lib.Syntax.Dec
-  intPrimL :: GHC.Num.Integer.Integer -> Language.Haskell.TH.Lib.Syntax.Lit
-  integerL :: GHC.Num.Integer.Integer -> Language.Haskell.TH.Lib.Syntax.Lit
-  interruptible :: Language.Haskell.TH.Lib.Syntax.Safety
-  invisP :: forall (m :: * -> *). Language.Haskell.TH.Lib.Syntax.Quote m => m Language.Haskell.TH.Lib.Syntax.Type -> m Language.Haskell.TH.Lib.Syntax.Pat
-  isStrict :: forall (m :: * -> *). Language.Haskell.TH.Lib.Syntax.Quote m => m Language.Haskell.TH.Lib.Syntax.Strict
-  javaScript :: Language.Haskell.TH.Lib.Syntax.Callconv
-  kiSigD :: forall (m :: * -> *). Language.Haskell.TH.Lib.Syntax.Quote m => Language.Haskell.TH.Lib.Syntax.Name -> m Language.Haskell.TH.Lib.Syntax.Kind -> m Language.Haskell.TH.Lib.Syntax.Dec
-  kindSig :: Language.Haskell.TH.Lib.Syntax.Kind -> Language.Haskell.TH.Lib.Syntax.FamilyResultSig
-  kindedBndrTV :: forall (m :: * -> *). Language.Haskell.TH.Lib.Syntax.Quote m => Language.Haskell.TH.Lib.Syntax.Name -> Language.Haskell.TH.Lib.Syntax.BndrVis -> m Language.Haskell.TH.Lib.Syntax.Kind -> m (Language.Haskell.TH.Lib.Syntax.TyVarBndr Language.Haskell.TH.Lib.Syntax.BndrVis)
-  kindedInvisTV :: forall (m :: * -> *). Language.Haskell.TH.Lib.Syntax.Quote m => Language.Haskell.TH.Lib.Syntax.Name -> Language.Haskell.TH.Lib.Syntax.Specificity -> m Language.Haskell.TH.Lib.Syntax.Kind -> m (Language.Haskell.TH.Lib.Syntax.TyVarBndr Language.Haskell.TH.Lib.Syntax.Specificity)
-  kindedTV :: forall flag. DefaultBndrFlag flag => Language.Haskell.TH.Lib.Syntax.Name -> Language.Haskell.TH.Lib.Syntax.Kind -> Language.Haskell.TH.Lib.Syntax.TyVarBndr flag
-  labelE :: forall (m :: * -> *). Language.Haskell.TH.Lib.Syntax.Quote m => GHC.Internal.Base.String -> m Language.Haskell.TH.Lib.Syntax.Exp
-  lam1E :: forall (m :: * -> *). Language.Haskell.TH.Lib.Syntax.Quote m => m Language.Haskell.TH.Lib.Syntax.Pat -> m Language.Haskell.TH.Lib.Syntax.Exp -> m Language.Haskell.TH.Lib.Syntax.Exp
-  lamCaseE :: forall (m :: * -> *). Language.Haskell.TH.Lib.Syntax.Quote m => [m Language.Haskell.TH.Lib.Syntax.Match] -> m Language.Haskell.TH.Lib.Syntax.Exp
-  lamCasesE :: forall (m :: * -> *). Language.Haskell.TH.Lib.Syntax.Quote m => [m Language.Haskell.TH.Lib.Syntax.Clause] -> m Language.Haskell.TH.Lib.Syntax.Exp
-  lamE :: forall (m :: * -> *). Language.Haskell.TH.Lib.Syntax.Quote m => [m Language.Haskell.TH.Lib.Syntax.Pat] -> m Language.Haskell.TH.Lib.Syntax.Exp -> m Language.Haskell.TH.Lib.Syntax.Exp
-  letE :: forall (m :: * -> *). Language.Haskell.TH.Lib.Syntax.Quote m => [m Language.Haskell.TH.Lib.Syntax.Dec] -> m Language.Haskell.TH.Lib.Syntax.Exp -> m Language.Haskell.TH.Lib.Syntax.Exp
-  letS :: forall (m :: * -> *). Language.Haskell.TH.Lib.Syntax.Quote m => [m Language.Haskell.TH.Lib.Syntax.Dec] -> m Language.Haskell.TH.Lib.Syntax.Stmt
-  listE :: forall (m :: * -> *). Language.Haskell.TH.Lib.Syntax.Quote m => [m Language.Haskell.TH.Lib.Syntax.Exp] -> m Language.Haskell.TH.Lib.Syntax.Exp
-  listK :: Language.Haskell.TH.Lib.Syntax.Kind
-  listP :: forall (m :: * -> *). Language.Haskell.TH.Lib.Syntax.Quote m => [m Language.Haskell.TH.Lib.Syntax.Pat] -> m Language.Haskell.TH.Lib.Syntax.Pat
-  listT :: forall (m :: * -> *). Language.Haskell.TH.Lib.Syntax.Quote m => m Language.Haskell.TH.Lib.Syntax.Type
-  litE :: forall (m :: * -> *). Language.Haskell.TH.Lib.Syntax.Quote m => Language.Haskell.TH.Lib.Syntax.Lit -> m Language.Haskell.TH.Lib.Syntax.Exp
-  litP :: forall (m :: * -> *). Language.Haskell.TH.Lib.Syntax.Quote m => Language.Haskell.TH.Lib.Syntax.Lit -> m Language.Haskell.TH.Lib.Syntax.Pat
-  litT :: forall (m :: * -> *). Language.Haskell.TH.Lib.Syntax.Quote m => m Language.Haskell.TH.Lib.Syntax.TyLit -> m Language.Haskell.TH.Lib.Syntax.Type
-  match :: forall (m :: * -> *). Language.Haskell.TH.Lib.Syntax.Quote m => m Language.Haskell.TH.Lib.Syntax.Pat -> m Language.Haskell.TH.Lib.Syntax.Body -> [m Language.Haskell.TH.Lib.Syntax.Dec] -> m Language.Haskell.TH.Lib.Syntax.Match
-  mdoE :: forall (m :: * -> *). Language.Haskell.TH.Lib.Syntax.Quote m => [m Language.Haskell.TH.Lib.Syntax.Stmt] -> m Language.Haskell.TH.Lib.Syntax.Exp
-  mkBytes :: GHC.Internal.ForeignPtr.ForeignPtr GHC.Internal.Word.Word8 -> GHC.Types.Word -> GHC.Types.Word -> Language.Haskell.TH.Lib.Syntax.Bytes
-  moduleAnnotation :: Language.Haskell.TH.Lib.Syntax.AnnTarget
-  mulArrowT :: forall (m :: * -> *). Language.Haskell.TH.Lib.Syntax.Quote m => m Language.Haskell.TH.Lib.Syntax.Type
-  multiIfE :: forall (m :: * -> *). Language.Haskell.TH.Lib.Syntax.Quote m => [m (Language.Haskell.TH.Lib.Syntax.Guard, Language.Haskell.TH.Lib.Syntax.Exp)] -> m Language.Haskell.TH.Lib.Syntax.Exp
-  newtypeD :: forall (m :: * -> *). Language.Haskell.TH.Lib.Syntax.Quote m => m Language.Haskell.TH.Lib.Syntax.Cxt -> Language.Haskell.TH.Lib.Syntax.Name -> [Language.Haskell.TH.Lib.Syntax.TyVarBndr Language.Haskell.TH.Lib.Syntax.BndrVis] -> GHC.Internal.Maybe.Maybe Language.Haskell.TH.Lib.Syntax.Kind -> m Language.Haskell.TH.Lib.Syntax.Con -> [m DerivClause] -> m Language.Haskell.TH.Lib.Syntax.Dec
-  newtypeD_doc ::
-    Language.Haskell.TH.Lib.Syntax.Q Language.Haskell.TH.Lib.Syntax.Cxt
-    -> Language.Haskell.TH.Lib.Syntax.Name -> [Language.Haskell.TH.Lib.Syntax.Q (Language.Haskell.TH.Lib.Syntax.TyVarBndr Language.Haskell.TH.Lib.Syntax.BndrVis)] -> GHC.Internal.Maybe.Maybe (Language.Haskell.TH.Lib.Syntax.Q Language.Haskell.TH.Lib.Syntax.Kind) -> (Language.Haskell.TH.Lib.Syntax.Q Language.Haskell.TH.Lib.Syntax.Con, GHC.Internal.Maybe.Maybe GHC.Internal.Base.String, [GHC.Internal.Maybe.Maybe GHC.Internal.Base.String]) -> [Language.Haskell.TH.Lib.Syntax.Q DerivClause] -> GHC.Internal.Maybe.Maybe GHC.Internal.Base.String -> Language.Haskell.TH.Lib.Syntax.Q Language.Haskell.TH.Lib.Syntax.Dec
-  newtypeInstD :: forall (m :: * -> *). Language.Haskell.TH.Lib.Syntax.Quote m => m Language.Haskell.TH.Lib.Syntax.Cxt -> Language.Haskell.TH.Lib.Syntax.Name -> [m Language.Haskell.TH.Lib.Syntax.Type] -> GHC.Internal.Maybe.Maybe Language.Haskell.TH.Lib.Syntax.Kind -> m Language.Haskell.TH.Lib.Syntax.Con -> [m DerivClause] -> m Language.Haskell.TH.Lib.Syntax.Dec
-  newtypeInstD_doc ::
-    Language.Haskell.TH.Lib.Syntax.Q Language.Haskell.TH.Lib.Syntax.Cxt
-    -> GHC.Internal.Maybe.Maybe [Language.Haskell.TH.Lib.Syntax.Q (Language.Haskell.TH.Lib.Syntax.TyVarBndr ())] -> Language.Haskell.TH.Lib.Syntax.Q Language.Haskell.TH.Lib.Syntax.Type -> GHC.Internal.Maybe.Maybe (Language.Haskell.TH.Lib.Syntax.Q Language.Haskell.TH.Lib.Syntax.Kind) -> (Language.Haskell.TH.Lib.Syntax.Q Language.Haskell.TH.Lib.Syntax.Con, GHC.Internal.Maybe.Maybe GHC.Internal.Base.String, [GHC.Internal.Maybe.Maybe GHC.Internal.Base.String]) -> [Language.Haskell.TH.Lib.Syntax.Q DerivClause] -> GHC.Internal.Maybe.Maybe GHC.Internal.Base.String -> Language.Haskell.TH.Lib.Syntax.Q Language.Haskell.TH.Lib.Syntax.Dec
-  newtypeStrategy :: forall (m :: * -> *). Language.Haskell.TH.Lib.Syntax.Quote m => m DerivStrategy
-  noBindS :: forall (m :: * -> *). Language.Haskell.TH.Lib.Syntax.Quote m => m Language.Haskell.TH.Lib.Syntax.Exp -> m Language.Haskell.TH.Lib.Syntax.Stmt
-  noSig :: Language.Haskell.TH.Lib.Syntax.FamilyResultSig
-  noSourceStrictness :: forall (m :: * -> *). Language.Haskell.TH.Lib.Syntax.Quote m => m Language.Haskell.TH.Lib.Syntax.SourceStrictness
-  noSourceUnpackedness :: forall (m :: * -> *). Language.Haskell.TH.Lib.Syntax.Quote m => m Language.Haskell.TH.Lib.Syntax.SourceUnpackedness
-  nominalR :: Language.Haskell.TH.Lib.Internal.Role
-  normalB :: forall (m :: * -> *). Language.Haskell.TH.Lib.Syntax.Quote m => m Language.Haskell.TH.Lib.Syntax.Exp -> m Language.Haskell.TH.Lib.Syntax.Body
-  normalC :: forall (m :: * -> *). Language.Haskell.TH.Lib.Syntax.Quote m => Language.Haskell.TH.Lib.Syntax.Name -> [m Language.Haskell.TH.Lib.Syntax.BangType] -> m Language.Haskell.TH.Lib.Syntax.Con
-  normalG :: forall (m :: * -> *). Language.Haskell.TH.Lib.Syntax.Quote m => m Language.Haskell.TH.Lib.Syntax.Exp -> m Language.Haskell.TH.Lib.Syntax.Guard
-  normalGE :: forall (m :: * -> *). Language.Haskell.TH.Lib.Syntax.Quote m => m Language.Haskell.TH.Lib.Syntax.Exp -> m Language.Haskell.TH.Lib.Syntax.Exp -> m (Language.Haskell.TH.Lib.Syntax.Guard, Language.Haskell.TH.Lib.Syntax.Exp)
-  notStrict :: forall (m :: * -> *). Language.Haskell.TH.Lib.Syntax.Quote m => m Language.Haskell.TH.Lib.Syntax.Strict
-  numTyLit :: forall (m :: * -> *). Language.Haskell.TH.Lib.Syntax.Quote m => GHC.Num.Integer.Integer -> m Language.Haskell.TH.Lib.Syntax.TyLit
-  openTypeFamilyD :: forall (m :: * -> *). Language.Haskell.TH.Lib.Syntax.Quote m => Language.Haskell.TH.Lib.Syntax.Name -> [Language.Haskell.TH.Lib.Syntax.TyVarBndr Language.Haskell.TH.Lib.Syntax.BndrVis] -> Language.Haskell.TH.Lib.Syntax.FamilyResultSig -> GHC.Internal.Maybe.Maybe Language.Haskell.TH.Lib.Syntax.InjectivityAnn -> m Language.Haskell.TH.Lib.Syntax.Dec
-  parS :: forall (m :: * -> *). Language.Haskell.TH.Lib.Syntax.Quote m => [[m Language.Haskell.TH.Lib.Syntax.Stmt]] -> m Language.Haskell.TH.Lib.Syntax.Stmt
-  parensE :: forall (m :: * -> *). Language.Haskell.TH.Lib.Syntax.Quote m => m Language.Haskell.TH.Lib.Syntax.Exp -> m Language.Haskell.TH.Lib.Syntax.Exp
-  parensP :: forall (m :: * -> *). Language.Haskell.TH.Lib.Syntax.Quote m => m Language.Haskell.TH.Lib.Syntax.Pat -> m Language.Haskell.TH.Lib.Syntax.Pat
-  parensT :: forall (m :: * -> *). Language.Haskell.TH.Lib.Syntax.Quote m => m Language.Haskell.TH.Lib.Syntax.Type -> m Language.Haskell.TH.Lib.Syntax.Type
-  patG :: forall (m :: * -> *). Language.Haskell.TH.Lib.Syntax.Quote m => [m Language.Haskell.TH.Lib.Syntax.Stmt] -> m Language.Haskell.TH.Lib.Syntax.Guard
-  patGE :: forall (m :: * -> *). Language.Haskell.TH.Lib.Syntax.Quote m => [m Language.Haskell.TH.Lib.Syntax.Stmt] -> m Language.Haskell.TH.Lib.Syntax.Exp -> m (Language.Haskell.TH.Lib.Syntax.Guard, Language.Haskell.TH.Lib.Syntax.Exp)
-  patSynD :: forall (m :: * -> *). Language.Haskell.TH.Lib.Syntax.Quote m => Language.Haskell.TH.Lib.Syntax.Name -> m Language.Haskell.TH.Lib.Syntax.PatSynArgs -> m Language.Haskell.TH.Lib.Syntax.PatSynDir -> m Language.Haskell.TH.Lib.Syntax.Pat -> m Language.Haskell.TH.Lib.Syntax.Dec
-  patSynD_doc :: Language.Haskell.TH.Lib.Syntax.Name -> Language.Haskell.TH.Lib.Syntax.Q Language.Haskell.TH.Lib.Syntax.PatSynArgs -> Language.Haskell.TH.Lib.Syntax.Q Language.Haskell.TH.Lib.Syntax.PatSynDir -> Language.Haskell.TH.Lib.Syntax.Q Language.Haskell.TH.Lib.Syntax.Pat -> GHC.Internal.Maybe.Maybe GHC.Internal.Base.String -> [GHC.Internal.Maybe.Maybe GHC.Internal.Base.String] -> Language.Haskell.TH.Lib.Syntax.Q Language.Haskell.TH.Lib.Syntax.Dec
-  patSynSigD :: forall (m :: * -> *). Language.Haskell.TH.Lib.Syntax.Quote m => Language.Haskell.TH.Lib.Syntax.Name -> m Language.Haskell.TH.Lib.Syntax.Type -> m Language.Haskell.TH.Lib.Syntax.Dec
-  phantomR :: Language.Haskell.TH.Lib.Internal.Role
-  plainBndrTV :: forall (m :: * -> *). Language.Haskell.TH.Lib.Syntax.Quote m => Language.Haskell.TH.Lib.Syntax.Name -> Language.Haskell.TH.Lib.Syntax.BndrVis -> m (Language.Haskell.TH.Lib.Syntax.TyVarBndr Language.Haskell.TH.Lib.Syntax.BndrVis)
-  plainInvisTV :: forall (m :: * -> *). Language.Haskell.TH.Lib.Syntax.Quote m => Language.Haskell.TH.Lib.Syntax.Name -> Language.Haskell.TH.Lib.Syntax.Specificity -> m (Language.Haskell.TH.Lib.Syntax.TyVarBndr Language.Haskell.TH.Lib.Syntax.Specificity)
-  plainTV :: forall flag. DefaultBndrFlag flag => Language.Haskell.TH.Lib.Syntax.Name -> Language.Haskell.TH.Lib.Syntax.TyVarBndr flag
-  pragAnnD :: forall (m :: * -> *). Language.Haskell.TH.Lib.Syntax.Quote m => Language.Haskell.TH.Lib.Syntax.AnnTarget -> m Language.Haskell.TH.Lib.Syntax.Exp -> m Language.Haskell.TH.Lib.Syntax.Dec
-  pragCompleteD :: forall (m :: * -> *). Language.Haskell.TH.Lib.Syntax.Quote m => [Language.Haskell.TH.Lib.Syntax.Name] -> GHC.Internal.Maybe.Maybe Language.Haskell.TH.Lib.Syntax.Name -> m Language.Haskell.TH.Lib.Syntax.Dec
-  pragInlD :: forall (m :: * -> *). Language.Haskell.TH.Lib.Syntax.Quote m => Language.Haskell.TH.Lib.Syntax.Name -> Language.Haskell.TH.Lib.Syntax.Inline -> Language.Haskell.TH.Lib.Syntax.RuleMatch -> Language.Haskell.TH.Lib.Syntax.Phases -> m Language.Haskell.TH.Lib.Syntax.Dec
-  pragLineD :: forall (m :: * -> *). Language.Haskell.TH.Lib.Syntax.Quote m => GHC.Types.Int -> GHC.Internal.Base.String -> m Language.Haskell.TH.Lib.Syntax.Dec
-  pragRuleD :: forall (m :: * -> *). Language.Haskell.TH.Lib.Syntax.Quote m => GHC.Internal.Base.String -> [m Language.Haskell.TH.Lib.Syntax.RuleBndr] -> m Language.Haskell.TH.Lib.Syntax.Exp -> m Language.Haskell.TH.Lib.Syntax.Exp -> Language.Haskell.TH.Lib.Syntax.Phases -> m Language.Haskell.TH.Lib.Syntax.Dec
-  pragSpecD :: forall (m :: * -> *). Language.Haskell.TH.Lib.Syntax.Quote m => Language.Haskell.TH.Lib.Syntax.Name -> m Language.Haskell.TH.Lib.Syntax.Type -> Language.Haskell.TH.Lib.Syntax.Phases -> m Language.Haskell.TH.Lib.Syntax.Dec
-  pragSpecInlD :: forall (m :: * -> *). Language.Haskell.TH.Lib.Syntax.Quote m => Language.Haskell.TH.Lib.Syntax.Name -> m Language.Haskell.TH.Lib.Syntax.Type -> Language.Haskell.TH.Lib.Syntax.Inline -> Language.Haskell.TH.Lib.Syntax.Phases -> m Language.Haskell.TH.Lib.Syntax.Dec
-  pragSpecInstD :: forall (m :: * -> *). Language.Haskell.TH.Lib.Syntax.Quote m => m Language.Haskell.TH.Lib.Syntax.Type -> m Language.Haskell.TH.Lib.Syntax.Dec
-  prefixPatSyn :: forall (m :: * -> *). Language.Haskell.TH.Lib.Syntax.Quote m => [Language.Haskell.TH.Lib.Syntax.Name] -> m Language.Haskell.TH.Lib.Syntax.PatSynArgs
-  prim :: Language.Haskell.TH.Lib.Syntax.Callconv
-  projectionE :: forall (m :: * -> *). Language.Haskell.TH.Lib.Syntax.Quote m => GHC.Internal.Base.NonEmpty GHC.Internal.Base.String -> m Language.Haskell.TH.Lib.Syntax.Exp
-  promotedConsT :: forall (m :: * -> *). Language.Haskell.TH.Lib.Syntax.Quote m => m Language.Haskell.TH.Lib.Syntax.Type
-  promotedInfixT :: forall (m :: * -> *). Language.Haskell.TH.Lib.Syntax.Quote m => m Language.Haskell.TH.Lib.Syntax.Type -> Language.Haskell.TH.Lib.Syntax.Name -> m Language.Haskell.TH.Lib.Syntax.Type -> m Language.Haskell.TH.Lib.Syntax.Type
-  promotedNilT :: forall (m :: * -> *). Language.Haskell.TH.Lib.Syntax.Quote m => m Language.Haskell.TH.Lib.Syntax.Type
-  promotedT :: forall (m :: * -> *). Language.Haskell.TH.Lib.Syntax.Quote m => Language.Haskell.TH.Lib.Syntax.Name -> m Language.Haskell.TH.Lib.Syntax.Type
-  promotedTupleT :: forall (m :: * -> *). Language.Haskell.TH.Lib.Syntax.Quote m => GHC.Types.Int -> m Language.Haskell.TH.Lib.Syntax.Type
-  promotedUInfixT :: forall (m :: * -> *). Language.Haskell.TH.Lib.Syntax.Quote m => m Language.Haskell.TH.Lib.Syntax.Type -> Language.Haskell.TH.Lib.Syntax.Name -> m Language.Haskell.TH.Lib.Syntax.Type -> m Language.Haskell.TH.Lib.Syntax.Type
-  rationalL :: GHC.Internal.Real.Rational -> Language.Haskell.TH.Lib.Syntax.Lit
-  recC :: forall (m :: * -> *). Language.Haskell.TH.Lib.Syntax.Quote m => Language.Haskell.TH.Lib.Syntax.Name -> [m Language.Haskell.TH.Lib.Syntax.VarBangType] -> m Language.Haskell.TH.Lib.Syntax.Con
-  recConE :: forall (m :: * -> *). Language.Haskell.TH.Lib.Syntax.Quote m => Language.Haskell.TH.Lib.Syntax.Name -> [m (Language.Haskell.TH.Lib.Syntax.Name, Language.Haskell.TH.Lib.Syntax.Exp)] -> m Language.Haskell.TH.Lib.Syntax.Exp
-  recGadtC :: forall (m :: * -> *). Language.Haskell.TH.Lib.Syntax.Quote m => [Language.Haskell.TH.Lib.Syntax.Name] -> [m Language.Haskell.TH.Lib.Syntax.VarStrictType] -> m Language.Haskell.TH.Lib.Syntax.Type -> m Language.Haskell.TH.Lib.Syntax.Con
-  recP :: forall (m :: * -> *). Language.Haskell.TH.Lib.Syntax.Quote m => Language.Haskell.TH.Lib.Syntax.Name -> [m Language.Haskell.TH.Lib.Syntax.FieldPat] -> m Language.Haskell.TH.Lib.Syntax.Pat
-  recS :: forall (m :: * -> *). Language.Haskell.TH.Lib.Syntax.Quote m => [m Language.Haskell.TH.Lib.Syntax.Stmt] -> m Language.Haskell.TH.Lib.Syntax.Stmt
-  recUpdE :: forall (m :: * -> *). Language.Haskell.TH.Lib.Syntax.Quote m => m Language.Haskell.TH.Lib.Syntax.Exp -> [m (Language.Haskell.TH.Lib.Syntax.Name, Language.Haskell.TH.Lib.Syntax.Exp)] -> m Language.Haskell.TH.Lib.Syntax.Exp
-  recordPatSyn :: forall (m :: * -> *). Language.Haskell.TH.Lib.Syntax.Quote m => [Language.Haskell.TH.Lib.Syntax.Name] -> m Language.Haskell.TH.Lib.Syntax.PatSynArgs
-  representationalR :: Language.Haskell.TH.Lib.Internal.Role
-  roleAnnotD :: forall (m :: * -> *). Language.Haskell.TH.Lib.Syntax.Quote m => Language.Haskell.TH.Lib.Syntax.Name -> [Language.Haskell.TH.Lib.Internal.Role] -> m Language.Haskell.TH.Lib.Syntax.Dec
-  ruleVar :: forall (m :: * -> *). Language.Haskell.TH.Lib.Syntax.Quote m => Language.Haskell.TH.Lib.Syntax.Name -> m Language.Haskell.TH.Lib.Syntax.RuleBndr
-  safe :: Language.Haskell.TH.Lib.Syntax.Safety
-  sectionL :: forall (m :: * -> *). Language.Haskell.TH.Lib.Syntax.Quote m => m Language.Haskell.TH.Lib.Syntax.Exp -> m Language.Haskell.TH.Lib.Syntax.Exp -> m Language.Haskell.TH.Lib.Syntax.Exp
-  sectionR :: forall (m :: * -> *). Language.Haskell.TH.Lib.Syntax.Quote m => m Language.Haskell.TH.Lib.Syntax.Exp -> m Language.Haskell.TH.Lib.Syntax.Exp -> m Language.Haskell.TH.Lib.Syntax.Exp
-  sigD :: forall (m :: * -> *). Language.Haskell.TH.Lib.Syntax.Quote m => Language.Haskell.TH.Lib.Syntax.Name -> m Language.Haskell.TH.Lib.Syntax.Type -> m Language.Haskell.TH.Lib.Syntax.Dec
-  sigE :: forall (m :: * -> *). Language.Haskell.TH.Lib.Syntax.Quote m => m Language.Haskell.TH.Lib.Syntax.Exp -> m Language.Haskell.TH.Lib.Syntax.Type -> m Language.Haskell.TH.Lib.Syntax.Exp
-  sigP :: forall (m :: * -> *). Language.Haskell.TH.Lib.Syntax.Quote m => m Language.Haskell.TH.Lib.Syntax.Pat -> m Language.Haskell.TH.Lib.Syntax.Type -> m Language.Haskell.TH.Lib.Syntax.Pat
-  sigT :: forall (m :: * -> *). Language.Haskell.TH.Lib.Syntax.Quote m => m Language.Haskell.TH.Lib.Syntax.Type -> Language.Haskell.TH.Lib.Syntax.Kind -> m Language.Haskell.TH.Lib.Syntax.Type
-  sourceLazy :: forall (m :: * -> *). Language.Haskell.TH.Lib.Syntax.Quote m => m Language.Haskell.TH.Lib.Syntax.SourceStrictness
-  sourceNoUnpack :: forall (m :: * -> *). Language.Haskell.TH.Lib.Syntax.Quote m => m Language.Haskell.TH.Lib.Syntax.SourceUnpackedness
-  sourceStrict :: forall (m :: * -> *). Language.Haskell.TH.Lib.Syntax.Quote m => m Language.Haskell.TH.Lib.Syntax.SourceStrictness
-  sourceUnpack :: forall (m :: * -> *). Language.Haskell.TH.Lib.Syntax.Quote m => m Language.Haskell.TH.Lib.Syntax.SourceUnpackedness
-  specifiedSpec :: Language.Haskell.TH.Lib.Syntax.Specificity
-  standaloneDerivD :: forall (m :: * -> *). Language.Haskell.TH.Lib.Syntax.Quote m => m Language.Haskell.TH.Lib.Syntax.Cxt -> m Language.Haskell.TH.Lib.Syntax.Type -> m Language.Haskell.TH.Lib.Syntax.Dec
-  standaloneDerivWithStrategyD :: forall (m :: * -> *). Language.Haskell.TH.Lib.Syntax.Quote m => GHC.Internal.Maybe.Maybe DerivStrategy -> m Language.Haskell.TH.Lib.Syntax.Cxt -> m Language.Haskell.TH.Lib.Syntax.Type -> m Language.Haskell.TH.Lib.Syntax.Dec
-  starK :: Language.Haskell.TH.Lib.Syntax.Kind
-  staticE :: forall (m :: * -> *). Language.Haskell.TH.Lib.Syntax.Quote m => m Language.Haskell.TH.Lib.Syntax.Exp -> m Language.Haskell.TH.Lib.Syntax.Exp
-  stdCall :: Language.Haskell.TH.Lib.Syntax.Callconv
-  stockStrategy :: forall (m :: * -> *). Language.Haskell.TH.Lib.Syntax.Quote m => m DerivStrategy
-  strTyLit :: forall (m :: * -> *). Language.Haskell.TH.Lib.Syntax.Quote m => GHC.Internal.Base.String -> m Language.Haskell.TH.Lib.Syntax.TyLit
-  strictType :: forall (m :: * -> *). Language.Haskell.TH.Lib.Syntax.Quote m => m Language.Haskell.TH.Lib.Syntax.Strict -> m Language.Haskell.TH.Lib.Syntax.Type -> m Language.Haskell.TH.Lib.Syntax.StrictType
-  stringE :: forall (m :: * -> *). Language.Haskell.TH.Lib.Syntax.Quote m => GHC.Internal.Base.String -> m Language.Haskell.TH.Lib.Syntax.Exp
-  stringL :: GHC.Internal.Base.String -> Language.Haskell.TH.Lib.Syntax.Lit
-  stringPrimL :: [GHC.Internal.Word.Word8] -> Language.Haskell.TH.Lib.Syntax.Lit
-  thisModule :: Language.Haskell.TH.Lib.Syntax.Q Language.Haskell.TH.Lib.Syntax.Module
-  tildeP :: forall (m :: * -> *). Language.Haskell.TH.Lib.Syntax.Quote m => m Language.Haskell.TH.Lib.Syntax.Pat -> m Language.Haskell.TH.Lib.Syntax.Pat
-  tupE :: forall (m :: * -> *). Language.Haskell.TH.Lib.Syntax.Quote m => [m Language.Haskell.TH.Lib.Syntax.Exp] -> m Language.Haskell.TH.Lib.Syntax.Exp
-  tupP :: forall (m :: * -> *). Language.Haskell.TH.Lib.Syntax.Quote m => [m Language.Haskell.TH.Lib.Syntax.Pat] -> m Language.Haskell.TH.Lib.Syntax.Pat
-  tupleK :: GHC.Types.Int -> Language.Haskell.TH.Lib.Syntax.Kind
-  tupleT :: forall (m :: * -> *). Language.Haskell.TH.Lib.Syntax.Quote m => GHC.Types.Int -> m Language.Haskell.TH.Lib.Syntax.Type
-  tySynD :: forall (m :: * -> *). Language.Haskell.TH.Lib.Syntax.Quote m => Language.Haskell.TH.Lib.Syntax.Name -> [Language.Haskell.TH.Lib.Syntax.TyVarBndr Language.Haskell.TH.Lib.Syntax.BndrVis] -> m Language.Haskell.TH.Lib.Syntax.Type -> m Language.Haskell.TH.Lib.Syntax.Dec
-  tySynEqn :: forall (m :: * -> *). Language.Haskell.TH.Lib.Syntax.Quote m => GHC.Internal.Maybe.Maybe [Language.Haskell.TH.Lib.Syntax.TyVarBndr ()] -> m Language.Haskell.TH.Lib.Syntax.Type -> m Language.Haskell.TH.Lib.Syntax.Type -> m Language.Haskell.TH.Lib.Syntax.TySynEqn
-  tySynInstD :: forall (m :: * -> *). Language.Haskell.TH.Lib.Syntax.Quote m => m Language.Haskell.TH.Lib.Syntax.TySynEqn -> m Language.Haskell.TH.Lib.Syntax.Dec
-  tyVarSig :: Language.Haskell.TH.Lib.Syntax.TyVarBndr () -> Language.Haskell.TH.Lib.Syntax.FamilyResultSig
-  typeAnnotation :: Language.Haskell.TH.Lib.Syntax.Name -> Language.Haskell.TH.Lib.Syntax.AnnTarget
-  typeDataD :: forall (m :: * -> *). Language.Haskell.TH.Lib.Syntax.Quote m => Language.Haskell.TH.Lib.Syntax.Name -> [Language.Haskell.TH.Lib.Syntax.TyVarBndr Language.Haskell.TH.Lib.Syntax.BndrVis] -> GHC.Internal.Maybe.Maybe Language.Haskell.TH.Lib.Syntax.Kind -> [m Language.Haskell.TH.Lib.Syntax.Con] -> m Language.Haskell.TH.Lib.Syntax.Dec
-  typeDataD_doc :: Language.Haskell.TH.Lib.Syntax.Name -> [Language.Haskell.TH.Lib.Syntax.Q (Language.Haskell.TH.Lib.Syntax.TyVarBndr Language.Haskell.TH.Lib.Syntax.BndrVis)] -> GHC.Internal.Maybe.Maybe (Language.Haskell.TH.Lib.Syntax.Q Language.Haskell.TH.Lib.Syntax.Kind) -> [(Language.Haskell.TH.Lib.Syntax.Q Language.Haskell.TH.Lib.Syntax.Con, GHC.Internal.Maybe.Maybe GHC.Internal.Base.String, [GHC.Internal.Maybe.Maybe GHC.Internal.Base.String])] -> GHC.Internal.Maybe.Maybe GHC.Internal.Base.String -> Language.Haskell.TH.Lib.Syntax.Q Language.Haskell.TH.Lib.Syntax.Dec
-  typeE :: forall (m :: * -> *). Language.Haskell.TH.Lib.Syntax.Quote m => m Language.Haskell.TH.Lib.Syntax.Type -> m Language.Haskell.TH.Lib.Syntax.Exp
-  typeP :: forall (m :: * -> *). Language.Haskell.TH.Lib.Syntax.Quote m => m Language.Haskell.TH.Lib.Syntax.Type -> m Language.Haskell.TH.Lib.Syntax.Pat
-  typedBracketE :: forall (m :: * -> *). Language.Haskell.TH.Lib.Syntax.Quote m => m Language.Haskell.TH.Lib.Syntax.Exp -> m Language.Haskell.TH.Lib.Syntax.Exp
-  typedRuleVar :: forall (m :: * -> *). Language.Haskell.TH.Lib.Syntax.Quote m => Language.Haskell.TH.Lib.Syntax.Name -> m Language.Haskell.TH.Lib.Syntax.Type -> m Language.Haskell.TH.Lib.Syntax.RuleBndr
-  typedSpliceE :: forall (m :: * -> *). Language.Haskell.TH.Lib.Syntax.Quote m => m Language.Haskell.TH.Lib.Syntax.Exp -> m Language.Haskell.TH.Lib.Syntax.Exp
-  uInfixE :: forall (m :: * -> *). Language.Haskell.TH.Lib.Syntax.Quote m => m Language.Haskell.TH.Lib.Syntax.Exp -> m Language.Haskell.TH.Lib.Syntax.Exp -> m Language.Haskell.TH.Lib.Syntax.Exp -> m Language.Haskell.TH.Lib.Syntax.Exp
-  uInfixP :: forall (m :: * -> *). Language.Haskell.TH.Lib.Syntax.Quote m => m Language.Haskell.TH.Lib.Syntax.Pat -> Language.Haskell.TH.Lib.Syntax.Name -> m Language.Haskell.TH.Lib.Syntax.Pat -> m Language.Haskell.TH.Lib.Syntax.Pat
-  uInfixT :: forall (m :: * -> *). Language.Haskell.TH.Lib.Syntax.Quote m => m Language.Haskell.TH.Lib.Syntax.Type -> Language.Haskell.TH.Lib.Syntax.Name -> m Language.Haskell.TH.Lib.Syntax.Type -> m Language.Haskell.TH.Lib.Syntax.Type
-  unboundVarE :: forall (m :: * -> *). Language.Haskell.TH.Lib.Syntax.Quote m => Language.Haskell.TH.Lib.Syntax.Name -> m Language.Haskell.TH.Lib.Syntax.Exp
-  unboxedSumE :: forall (m :: * -> *). Language.Haskell.TH.Lib.Syntax.Quote m => m Language.Haskell.TH.Lib.Syntax.Exp -> Language.Haskell.TH.Lib.Syntax.SumAlt -> Language.Haskell.TH.Lib.Syntax.SumArity -> m Language.Haskell.TH.Lib.Syntax.Exp
-  unboxedSumP :: forall (m :: * -> *). Language.Haskell.TH.Lib.Syntax.Quote m => m Language.Haskell.TH.Lib.Syntax.Pat -> Language.Haskell.TH.Lib.Syntax.SumAlt -> Language.Haskell.TH.Lib.Syntax.SumArity -> m Language.Haskell.TH.Lib.Syntax.Pat
-  unboxedSumT :: forall (m :: * -> *). Language.Haskell.TH.Lib.Syntax.Quote m => Language.Haskell.TH.Lib.Syntax.SumArity -> m Language.Haskell.TH.Lib.Syntax.Type
-  unboxedTupE :: forall (m :: * -> *). Language.Haskell.TH.Lib.Syntax.Quote m => [m Language.Haskell.TH.Lib.Syntax.Exp] -> m Language.Haskell.TH.Lib.Syntax.Exp
-  unboxedTupP :: forall (m :: * -> *). Language.Haskell.TH.Lib.Syntax.Quote m => [m Language.Haskell.TH.Lib.Syntax.Pat] -> m Language.Haskell.TH.Lib.Syntax.Pat
-  unboxedTupleT :: forall (m :: * -> *). Language.Haskell.TH.Lib.Syntax.Quote m => GHC.Types.Int -> m Language.Haskell.TH.Lib.Syntax.Type
-  unidir :: forall (m :: * -> *). Language.Haskell.TH.Lib.Syntax.Quote m => m Language.Haskell.TH.Lib.Syntax.PatSynDir
-  unpacked :: forall (m :: * -> *). Language.Haskell.TH.Lib.Syntax.Quote m => m Language.Haskell.TH.Lib.Syntax.Strict
-  unsafe :: Language.Haskell.TH.Lib.Syntax.Safety
-  valD :: forall (m :: * -> *). Language.Haskell.TH.Lib.Syntax.Quote m => m Language.Haskell.TH.Lib.Syntax.Pat -> m Language.Haskell.TH.Lib.Syntax.Body -> [m Language.Haskell.TH.Lib.Syntax.Dec] -> m Language.Haskell.TH.Lib.Syntax.Dec
-  valueAnnotation :: Language.Haskell.TH.Lib.Syntax.Name -> Language.Haskell.TH.Lib.Syntax.AnnTarget
-  varBangType :: forall (m :: * -> *). Language.Haskell.TH.Lib.Syntax.Quote m => Language.Haskell.TH.Lib.Syntax.Name -> m Language.Haskell.TH.Lib.Syntax.BangType -> m Language.Haskell.TH.Lib.Syntax.VarBangType
-  varE :: forall (m :: * -> *). Language.Haskell.TH.Lib.Syntax.Quote m => Language.Haskell.TH.Lib.Syntax.Name -> m Language.Haskell.TH.Lib.Syntax.Exp
-  varK :: Language.Haskell.TH.Lib.Syntax.Name -> Language.Haskell.TH.Lib.Syntax.Kind
-  varP :: forall (m :: * -> *). Language.Haskell.TH.Lib.Syntax.Quote m => Language.Haskell.TH.Lib.Syntax.Name -> m Language.Haskell.TH.Lib.Syntax.Pat
-  varStrictType :: forall (m :: * -> *). Language.Haskell.TH.Lib.Syntax.Quote m => Language.Haskell.TH.Lib.Syntax.Name -> m Language.Haskell.TH.Lib.Syntax.StrictType -> m Language.Haskell.TH.Lib.Syntax.VarStrictType
-  varT :: forall (m :: * -> *). Language.Haskell.TH.Lib.Syntax.Quote m => Language.Haskell.TH.Lib.Syntax.Name -> m Language.Haskell.TH.Lib.Syntax.Type
-  viaStrategy :: forall (m :: * -> *). Language.Haskell.TH.Lib.Syntax.Quote m => m Language.Haskell.TH.Lib.Syntax.Type -> m DerivStrategy
-  viewP :: forall (m :: * -> *). Language.Haskell.TH.Lib.Syntax.Quote m => m Language.Haskell.TH.Lib.Syntax.Exp -> m Language.Haskell.TH.Lib.Syntax.Pat -> m Language.Haskell.TH.Lib.Syntax.Pat
-  wildCardT :: forall (m :: * -> *). Language.Haskell.TH.Lib.Syntax.Quote m => m Language.Haskell.TH.Lib.Syntax.Type
-  wildP :: forall (m :: * -> *). Language.Haskell.TH.Lib.Syntax.Quote m => m Language.Haskell.TH.Lib.Syntax.Pat
-  withDecDoc :: GHC.Internal.Base.String -> Language.Haskell.TH.Lib.Syntax.Q Language.Haskell.TH.Lib.Syntax.Dec -> Language.Haskell.TH.Lib.Syntax.Q Language.Haskell.TH.Lib.Syntax.Dec
-  withDecsDoc :: GHC.Internal.Base.String -> Language.Haskell.TH.Lib.Syntax.Q [Language.Haskell.TH.Lib.Syntax.Dec] -> Language.Haskell.TH.Lib.Syntax.Q [Language.Haskell.TH.Lib.Syntax.Dec]
-  wordPrimL :: GHC.Num.Integer.Integer -> Language.Haskell.TH.Lib.Syntax.Lit
+  type VarStrictTypeQ = GHC.Internal.TH.Syntax.Q GHC.Internal.TH.Syntax.VarStrictType
+  anyclassStrategy :: forall (m :: * -> *). GHC.Internal.TH.Syntax.Quote m => m DerivStrategy
+  appE :: forall (m :: * -> *). GHC.Internal.TH.Syntax.Quote m => m GHC.Internal.TH.Syntax.Exp -> m GHC.Internal.TH.Syntax.Exp -> m GHC.Internal.TH.Syntax.Exp
+  appK :: GHC.Internal.TH.Syntax.Kind -> GHC.Internal.TH.Syntax.Kind -> GHC.Internal.TH.Syntax.Kind
+  appKindT :: forall (m :: * -> *). GHC.Internal.TH.Syntax.Quote m => m GHC.Internal.TH.Syntax.Type -> m GHC.Internal.TH.Syntax.Kind -> m GHC.Internal.TH.Syntax.Type
+  appT :: forall (m :: * -> *). GHC.Internal.TH.Syntax.Quote m => m GHC.Internal.TH.Syntax.Type -> m GHC.Internal.TH.Syntax.Type -> m GHC.Internal.TH.Syntax.Type
+  appTypeE :: forall (m :: * -> *). GHC.Internal.TH.Syntax.Quote m => m GHC.Internal.TH.Syntax.Exp -> m GHC.Internal.TH.Syntax.Type -> m GHC.Internal.TH.Syntax.Exp
+  appsE :: forall (m :: * -> *). GHC.Internal.TH.Syntax.Quote m => [m GHC.Internal.TH.Syntax.Exp] -> m GHC.Internal.TH.Syntax.Exp
+  arithSeqE :: forall (m :: * -> *). GHC.Internal.TH.Syntax.Quote m => m GHC.Internal.TH.Syntax.Range -> m GHC.Internal.TH.Syntax.Exp
+  arrowK :: GHC.Internal.TH.Syntax.Kind
+  arrowT :: forall (m :: * -> *). GHC.Internal.TH.Syntax.Quote m => m GHC.Internal.TH.Syntax.Type
+  asP :: forall (m :: * -> *). GHC.Internal.TH.Syntax.Quote m => GHC.Internal.TH.Syntax.Name -> m GHC.Internal.TH.Syntax.Pat -> m GHC.Internal.TH.Syntax.Pat
+  bang :: forall (m :: * -> *). GHC.Internal.TH.Syntax.Quote m => m GHC.Internal.TH.Syntax.SourceUnpackedness -> m GHC.Internal.TH.Syntax.SourceStrictness -> m GHC.Internal.TH.Syntax.Bang
+  bangP :: forall (m :: * -> *). GHC.Internal.TH.Syntax.Quote m => m GHC.Internal.TH.Syntax.Pat -> m GHC.Internal.TH.Syntax.Pat
+  bangType :: forall (m :: * -> *). GHC.Internal.TH.Syntax.Quote m => m GHC.Internal.TH.Syntax.Bang -> m GHC.Internal.TH.Syntax.Type -> m GHC.Internal.TH.Syntax.BangType
+  bindS :: forall (m :: * -> *). GHC.Internal.TH.Syntax.Quote m => m GHC.Internal.TH.Syntax.Pat -> m GHC.Internal.TH.Syntax.Exp -> m GHC.Internal.TH.Syntax.Stmt
+  bndrInvis :: GHC.Internal.TH.Syntax.BndrVis
+  bndrReq :: GHC.Internal.TH.Syntax.BndrVis
+  bytesPrimL :: GHC.Internal.TH.Syntax.Bytes -> GHC.Internal.TH.Syntax.Lit
+  cApi :: GHC.Internal.TH.Syntax.Callconv
+  cCall :: GHC.Internal.TH.Syntax.Callconv
+  caseE :: forall (m :: * -> *). GHC.Internal.TH.Syntax.Quote m => m GHC.Internal.TH.Syntax.Exp -> [m GHC.Internal.TH.Syntax.Match] -> m GHC.Internal.TH.Syntax.Exp
+  charL :: GHC.Types.Char -> GHC.Internal.TH.Syntax.Lit
+  charPrimL :: GHC.Types.Char -> GHC.Internal.TH.Syntax.Lit
+  charTyLit :: forall (m :: * -> *). GHC.Internal.TH.Syntax.Quote m => GHC.Types.Char -> m GHC.Internal.TH.Syntax.TyLit
+  classD :: forall (m :: * -> *). GHC.Internal.TH.Syntax.Quote m => m GHC.Internal.TH.Syntax.Cxt -> GHC.Internal.TH.Syntax.Name -> [GHC.Internal.TH.Syntax.TyVarBndr GHC.Internal.TH.Syntax.BndrVis] -> [GHC.Internal.TH.Syntax.FunDep] -> [m GHC.Internal.TH.Syntax.Dec] -> m GHC.Internal.TH.Syntax.Dec
+  classP :: forall (m :: * -> *). GHC.Internal.TH.Syntax.Quote m => GHC.Internal.TH.Syntax.Name -> [m GHC.Internal.TH.Syntax.Type] -> m GHC.Internal.TH.Syntax.Pred
+  clause :: forall (m :: * -> *). GHC.Internal.TH.Syntax.Quote m => [m GHC.Internal.TH.Syntax.Pat] -> m GHC.Internal.TH.Syntax.Body -> [m GHC.Internal.TH.Syntax.Dec] -> m GHC.Internal.TH.Syntax.Clause
+  closedTypeFamilyD :: forall (m :: * -> *). GHC.Internal.TH.Syntax.Quote m => GHC.Internal.TH.Syntax.Name -> [GHC.Internal.TH.Syntax.TyVarBndr GHC.Internal.TH.Syntax.BndrVis] -> GHC.Internal.TH.Syntax.FamilyResultSig -> GHC.Internal.Maybe.Maybe GHC.Internal.TH.Syntax.InjectivityAnn -> [m GHC.Internal.TH.Syntax.TySynEqn] -> m GHC.Internal.TH.Syntax.Dec
+  compE :: forall (m :: * -> *). GHC.Internal.TH.Syntax.Quote m => [m GHC.Internal.TH.Syntax.Stmt] -> m GHC.Internal.TH.Syntax.Exp
+  conE :: forall (m :: * -> *). GHC.Internal.TH.Syntax.Quote m => GHC.Internal.TH.Syntax.Name -> m GHC.Internal.TH.Syntax.Exp
+  conK :: GHC.Internal.TH.Syntax.Name -> GHC.Internal.TH.Syntax.Kind
+  conP :: forall (m :: * -> *). GHC.Internal.TH.Syntax.Quote m => GHC.Internal.TH.Syntax.Name -> [m GHC.Internal.TH.Syntax.Pat] -> m GHC.Internal.TH.Syntax.Pat
+  conT :: forall (m :: * -> *). GHC.Internal.TH.Syntax.Quote m => GHC.Internal.TH.Syntax.Name -> m GHC.Internal.TH.Syntax.Type
+  condE :: forall (m :: * -> *). GHC.Internal.TH.Syntax.Quote m => m GHC.Internal.TH.Syntax.Exp -> m GHC.Internal.TH.Syntax.Exp -> m GHC.Internal.TH.Syntax.Exp -> m GHC.Internal.TH.Syntax.Exp
+  constraintK :: GHC.Internal.TH.Syntax.Kind
+  cxt :: forall (m :: * -> *). GHC.Internal.TH.Syntax.Quote m => [m GHC.Internal.TH.Syntax.Pred] -> m GHC.Internal.TH.Syntax.Cxt
+  dataD :: forall (m :: * -> *). GHC.Internal.TH.Syntax.Quote m => m GHC.Internal.TH.Syntax.Cxt -> GHC.Internal.TH.Syntax.Name -> [GHC.Internal.TH.Syntax.TyVarBndr GHC.Internal.TH.Syntax.BndrVis] -> GHC.Internal.Maybe.Maybe GHC.Internal.TH.Syntax.Kind -> [m GHC.Internal.TH.Syntax.Con] -> [m DerivClause] -> m GHC.Internal.TH.Syntax.Dec
+  dataD_doc :: GHC.Internal.TH.Syntax.Q GHC.Internal.TH.Syntax.Cxt -> GHC.Internal.TH.Syntax.Name -> [GHC.Internal.TH.Syntax.Q (GHC.Internal.TH.Syntax.TyVarBndr GHC.Internal.TH.Syntax.BndrVis)] -> GHC.Internal.Maybe.Maybe (GHC.Internal.TH.Syntax.Q GHC.Internal.TH.Syntax.Kind) -> [(GHC.Internal.TH.Syntax.Q GHC.Internal.TH.Syntax.Con, GHC.Internal.Maybe.Maybe GHC.Internal.Base.String, [GHC.Internal.Maybe.Maybe GHC.Internal.Base.String])] -> [GHC.Internal.TH.Syntax.Q DerivClause] -> GHC.Internal.Maybe.Maybe GHC.Internal.Base.String -> GHC.Internal.TH.Syntax.Q GHC.Internal.TH.Syntax.Dec
+  dataFamilyD :: forall (m :: * -> *). GHC.Internal.TH.Syntax.Quote m => GHC.Internal.TH.Syntax.Name -> [GHC.Internal.TH.Syntax.TyVarBndr GHC.Internal.TH.Syntax.BndrVis] -> GHC.Internal.Maybe.Maybe GHC.Internal.TH.Syntax.Kind -> m GHC.Internal.TH.Syntax.Dec
+  dataInstD :: forall (m :: * -> *). GHC.Internal.TH.Syntax.Quote m => m GHC.Internal.TH.Syntax.Cxt -> GHC.Internal.TH.Syntax.Name -> [m GHC.Internal.TH.Syntax.Type] -> GHC.Internal.Maybe.Maybe GHC.Internal.TH.Syntax.Kind -> [m GHC.Internal.TH.Syntax.Con] -> [m DerivClause] -> m GHC.Internal.TH.Syntax.Dec
+  dataInstD_doc :: GHC.Internal.TH.Syntax.Q GHC.Internal.TH.Syntax.Cxt -> GHC.Internal.Maybe.Maybe [GHC.Internal.TH.Syntax.Q (GHC.Internal.TH.Syntax.TyVarBndr ())] -> GHC.Internal.TH.Syntax.Q GHC.Internal.TH.Syntax.Type -> GHC.Internal.Maybe.Maybe (GHC.Internal.TH.Syntax.Q GHC.Internal.TH.Syntax.Kind) -> [(GHC.Internal.TH.Syntax.Q GHC.Internal.TH.Syntax.Con, GHC.Internal.Maybe.Maybe GHC.Internal.Base.String, [GHC.Internal.Maybe.Maybe GHC.Internal.Base.String])] -> [GHC.Internal.TH.Syntax.Q DerivClause] -> GHC.Internal.Maybe.Maybe GHC.Internal.Base.String -> GHC.Internal.TH.Syntax.Q GHC.Internal.TH.Syntax.Dec
+  defaultD :: forall (m :: * -> *). GHC.Internal.TH.Syntax.Quote m => [m GHC.Internal.TH.Syntax.Type] -> m GHC.Internal.TH.Syntax.Dec
+  defaultSigD :: forall (m :: * -> *). GHC.Internal.TH.Syntax.Quote m => GHC.Internal.TH.Syntax.Name -> m GHC.Internal.TH.Syntax.Type -> m GHC.Internal.TH.Syntax.Dec
+  derivClause :: forall (m :: * -> *). GHC.Internal.TH.Syntax.Quote m => GHC.Internal.Maybe.Maybe DerivStrategy -> [m GHC.Internal.TH.Syntax.Pred] -> m DerivClause
+  doE :: forall (m :: * -> *). GHC.Internal.TH.Syntax.Quote m => [m GHC.Internal.TH.Syntax.Stmt] -> m GHC.Internal.TH.Syntax.Exp
+  doublePrimL :: GHC.Internal.Real.Rational -> GHC.Internal.TH.Syntax.Lit
+  dyn :: forall (m :: * -> *). GHC.Internal.TH.Syntax.Quote m => GHC.Internal.Base.String -> m GHC.Internal.TH.Syntax.Exp
+  equalP :: forall (m :: * -> *). GHC.Internal.TH.Syntax.Quote m => m GHC.Internal.TH.Syntax.Type -> m GHC.Internal.TH.Syntax.Type -> m GHC.Internal.TH.Syntax.Pred
+  equalityT :: forall (m :: * -> *). GHC.Internal.TH.Syntax.Quote m => m GHC.Internal.TH.Syntax.Type
+  explBidir :: forall (m :: * -> *). GHC.Internal.TH.Syntax.Quote m => [m GHC.Internal.TH.Syntax.Clause] -> m GHC.Internal.TH.Syntax.PatSynDir
+  fieldExp :: forall (m :: * -> *). GHC.Internal.TH.Syntax.Quote m => GHC.Internal.TH.Syntax.Name -> m GHC.Internal.TH.Syntax.Exp -> m (GHC.Internal.TH.Syntax.Name, GHC.Internal.TH.Syntax.Exp)
+  fieldPat :: forall (m :: * -> *). GHC.Internal.TH.Syntax.Quote m => GHC.Internal.TH.Syntax.Name -> m GHC.Internal.TH.Syntax.Pat -> m GHC.Internal.TH.Syntax.FieldPat
+  floatPrimL :: GHC.Internal.Real.Rational -> GHC.Internal.TH.Syntax.Lit
+  forImpD :: forall (m :: * -> *). GHC.Internal.TH.Syntax.Quote m => GHC.Internal.TH.Syntax.Callconv -> GHC.Internal.TH.Syntax.Safety -> GHC.Internal.Base.String -> GHC.Internal.TH.Syntax.Name -> m GHC.Internal.TH.Syntax.Type -> m GHC.Internal.TH.Syntax.Dec
+  forallC :: forall (m :: * -> *). GHC.Internal.TH.Syntax.Quote m => [GHC.Internal.TH.Syntax.TyVarBndr GHC.Internal.TH.Syntax.Specificity] -> m GHC.Internal.TH.Syntax.Cxt -> m GHC.Internal.TH.Syntax.Con -> m GHC.Internal.TH.Syntax.Con
+  forallT :: forall (m :: * -> *). GHC.Internal.TH.Syntax.Quote m => [GHC.Internal.TH.Syntax.TyVarBndr GHC.Internal.TH.Syntax.Specificity] -> m GHC.Internal.TH.Syntax.Cxt -> m GHC.Internal.TH.Syntax.Type -> m GHC.Internal.TH.Syntax.Type
+  forallVisT :: forall (m :: * -> *). GHC.Internal.TH.Syntax.Quote m => [m (GHC.Internal.TH.Syntax.TyVarBndr ())] -> m GHC.Internal.TH.Syntax.Type -> m GHC.Internal.TH.Syntax.Type
+  fromE :: forall (m :: * -> *). GHC.Internal.TH.Syntax.Quote m => m GHC.Internal.TH.Syntax.Exp -> m GHC.Internal.TH.Syntax.Exp
+  fromR :: forall (m :: * -> *). GHC.Internal.TH.Syntax.Quote m => m GHC.Internal.TH.Syntax.Exp -> m GHC.Internal.TH.Syntax.Range
+  fromThenE :: forall (m :: * -> *). GHC.Internal.TH.Syntax.Quote m => m GHC.Internal.TH.Syntax.Exp -> m GHC.Internal.TH.Syntax.Exp -> m GHC.Internal.TH.Syntax.Exp
+  fromThenR :: forall (m :: * -> *). GHC.Internal.TH.Syntax.Quote m => m GHC.Internal.TH.Syntax.Exp -> m GHC.Internal.TH.Syntax.Exp -> m GHC.Internal.TH.Syntax.Range
+  fromThenToE :: forall (m :: * -> *). GHC.Internal.TH.Syntax.Quote m => m GHC.Internal.TH.Syntax.Exp -> m GHC.Internal.TH.Syntax.Exp -> m GHC.Internal.TH.Syntax.Exp -> m GHC.Internal.TH.Syntax.Exp
+  fromThenToR :: forall (m :: * -> *). GHC.Internal.TH.Syntax.Quote m => m GHC.Internal.TH.Syntax.Exp -> m GHC.Internal.TH.Syntax.Exp -> m GHC.Internal.TH.Syntax.Exp -> m GHC.Internal.TH.Syntax.Range
+  fromToE :: forall (m :: * -> *). GHC.Internal.TH.Syntax.Quote m => m GHC.Internal.TH.Syntax.Exp -> m GHC.Internal.TH.Syntax.Exp -> m GHC.Internal.TH.Syntax.Exp
+  fromToR :: forall (m :: * -> *). GHC.Internal.TH.Syntax.Quote m => m GHC.Internal.TH.Syntax.Exp -> m GHC.Internal.TH.Syntax.Exp -> m GHC.Internal.TH.Syntax.Range
+  funD :: forall (m :: * -> *). GHC.Internal.TH.Syntax.Quote m => GHC.Internal.TH.Syntax.Name -> [m GHC.Internal.TH.Syntax.Clause] -> m GHC.Internal.TH.Syntax.Dec
+  funD_doc :: GHC.Internal.TH.Syntax.Name -> [GHC.Internal.TH.Syntax.Q GHC.Internal.TH.Syntax.Clause] -> GHC.Internal.Maybe.Maybe GHC.Internal.Base.String -> [GHC.Internal.Maybe.Maybe GHC.Internal.Base.String] -> GHC.Internal.TH.Syntax.Q GHC.Internal.TH.Syntax.Dec
+  funDep :: [GHC.Internal.TH.Syntax.Name] -> [GHC.Internal.TH.Syntax.Name] -> GHC.Internal.TH.Syntax.FunDep
+  gadtC :: forall (m :: * -> *). GHC.Internal.TH.Syntax.Quote m => [GHC.Internal.TH.Syntax.Name] -> [m GHC.Internal.TH.Syntax.StrictType] -> m GHC.Internal.TH.Syntax.Type -> m GHC.Internal.TH.Syntax.Con
+  getFieldE :: forall (m :: * -> *). GHC.Internal.TH.Syntax.Quote m => m GHC.Internal.TH.Syntax.Exp -> GHC.Internal.Base.String -> m GHC.Internal.TH.Syntax.Exp
+  guardedB :: forall (m :: * -> *). GHC.Internal.TH.Syntax.Quote m => [m (GHC.Internal.TH.Syntax.Guard, GHC.Internal.TH.Syntax.Exp)] -> m GHC.Internal.TH.Syntax.Body
+  implBidir :: forall (m :: * -> *). GHC.Internal.TH.Syntax.Quote m => m GHC.Internal.TH.Syntax.PatSynDir
+  implicitParamBindD :: forall (m :: * -> *). GHC.Internal.TH.Syntax.Quote m => GHC.Internal.Base.String -> m GHC.Internal.TH.Syntax.Exp -> m GHC.Internal.TH.Syntax.Dec
+  implicitParamT :: forall (m :: * -> *). GHC.Internal.TH.Syntax.Quote m => GHC.Internal.Base.String -> m GHC.Internal.TH.Syntax.Type -> m GHC.Internal.TH.Syntax.Type
+  implicitParamVarE :: forall (m :: * -> *). GHC.Internal.TH.Syntax.Quote m => GHC.Internal.Base.String -> m GHC.Internal.TH.Syntax.Exp
+  inferR :: GHC.Internal.TH.Lib.Role
+  inferredSpec :: GHC.Internal.TH.Syntax.Specificity
+  infixApp :: forall (m :: * -> *). GHC.Internal.TH.Syntax.Quote m => m GHC.Internal.TH.Syntax.Exp -> m GHC.Internal.TH.Syntax.Exp -> m GHC.Internal.TH.Syntax.Exp -> m GHC.Internal.TH.Syntax.Exp
+  infixC :: forall (m :: * -> *). GHC.Internal.TH.Syntax.Quote m => m (GHC.Internal.TH.Syntax.Bang, GHC.Internal.TH.Syntax.Type) -> GHC.Internal.TH.Syntax.Name -> m (GHC.Internal.TH.Syntax.Bang, GHC.Internal.TH.Syntax.Type) -> m GHC.Internal.TH.Syntax.Con
+  infixE :: forall (m :: * -> *). GHC.Internal.TH.Syntax.Quote m => GHC.Internal.Maybe.Maybe (m GHC.Internal.TH.Syntax.Exp) -> m GHC.Internal.TH.Syntax.Exp -> GHC.Internal.Maybe.Maybe (m GHC.Internal.TH.Syntax.Exp) -> m GHC.Internal.TH.Syntax.Exp
+  infixLD :: forall (m :: * -> *). GHC.Internal.TH.Syntax.Quote m => GHC.Types.Int -> GHC.Internal.TH.Syntax.Name -> m GHC.Internal.TH.Syntax.Dec
+  infixND :: forall (m :: * -> *). GHC.Internal.TH.Syntax.Quote m => GHC.Types.Int -> GHC.Internal.TH.Syntax.Name -> m GHC.Internal.TH.Syntax.Dec
+  infixP :: forall (m :: * -> *). GHC.Internal.TH.Syntax.Quote m => m GHC.Internal.TH.Syntax.Pat -> GHC.Internal.TH.Syntax.Name -> m GHC.Internal.TH.Syntax.Pat -> m GHC.Internal.TH.Syntax.Pat
+  infixPatSyn :: forall (m :: * -> *). GHC.Internal.TH.Syntax.Quote m => GHC.Internal.TH.Syntax.Name -> GHC.Internal.TH.Syntax.Name -> m GHC.Internal.TH.Syntax.PatSynArgs
+  infixRD :: forall (m :: * -> *). GHC.Internal.TH.Syntax.Quote m => GHC.Types.Int -> GHC.Internal.TH.Syntax.Name -> m GHC.Internal.TH.Syntax.Dec
+  infixT :: forall (m :: * -> *). GHC.Internal.TH.Syntax.Quote m => m GHC.Internal.TH.Syntax.Type -> GHC.Internal.TH.Syntax.Name -> m GHC.Internal.TH.Syntax.Type -> m GHC.Internal.TH.Syntax.Type
+  injectivityAnn :: GHC.Internal.TH.Syntax.Name -> [GHC.Internal.TH.Syntax.Name] -> GHC.Internal.TH.Lib.InjectivityAnn
+  instanceD :: forall (m :: * -> *). GHC.Internal.TH.Syntax.Quote m => m GHC.Internal.TH.Syntax.Cxt -> m GHC.Internal.TH.Syntax.Type -> [m GHC.Internal.TH.Syntax.Dec] -> m GHC.Internal.TH.Syntax.Dec
+  instanceWithOverlapD :: forall (m :: * -> *). GHC.Internal.TH.Syntax.Quote m => GHC.Internal.Maybe.Maybe Overlap -> m GHC.Internal.TH.Syntax.Cxt -> m GHC.Internal.TH.Syntax.Type -> [m GHC.Internal.TH.Syntax.Dec] -> m GHC.Internal.TH.Syntax.Dec
+  intPrimL :: GHC.Num.Integer.Integer -> GHC.Internal.TH.Syntax.Lit
+  integerL :: GHC.Num.Integer.Integer -> GHC.Internal.TH.Syntax.Lit
+  interruptible :: GHC.Internal.TH.Syntax.Safety
+  invisP :: forall (m :: * -> *). GHC.Internal.TH.Syntax.Quote m => m GHC.Internal.TH.Syntax.Type -> m GHC.Internal.TH.Syntax.Pat
+  isStrict :: forall (m :: * -> *). GHC.Internal.TH.Syntax.Quote m => m GHC.Internal.TH.Syntax.Strict
+  javaScript :: GHC.Internal.TH.Syntax.Callconv
+  kiSigD :: forall (m :: * -> *). GHC.Internal.TH.Syntax.Quote m => GHC.Internal.TH.Syntax.Name -> m GHC.Internal.TH.Syntax.Kind -> m GHC.Internal.TH.Syntax.Dec
+  kindSig :: GHC.Internal.TH.Syntax.Kind -> GHC.Internal.TH.Syntax.FamilyResultSig
+  kindedBndrTV :: forall (m :: * -> *). GHC.Internal.TH.Syntax.Quote m => GHC.Internal.TH.Syntax.Name -> GHC.Internal.TH.Syntax.BndrVis -> m GHC.Internal.TH.Syntax.Kind -> m (GHC.Internal.TH.Syntax.TyVarBndr GHC.Internal.TH.Syntax.BndrVis)
+  kindedInvisTV :: forall (m :: * -> *). GHC.Internal.TH.Syntax.Quote m => GHC.Internal.TH.Syntax.Name -> GHC.Internal.TH.Syntax.Specificity -> m GHC.Internal.TH.Syntax.Kind -> m (GHC.Internal.TH.Syntax.TyVarBndr GHC.Internal.TH.Syntax.Specificity)
+  kindedTV :: forall flag. DefaultBndrFlag flag => GHC.Internal.TH.Syntax.Name -> GHC.Internal.TH.Syntax.Kind -> GHC.Internal.TH.Syntax.TyVarBndr flag
+  labelE :: forall (m :: * -> *). GHC.Internal.TH.Syntax.Quote m => GHC.Internal.Base.String -> m GHC.Internal.TH.Syntax.Exp
+  lam1E :: forall (m :: * -> *). GHC.Internal.TH.Syntax.Quote m => m GHC.Internal.TH.Syntax.Pat -> m GHC.Internal.TH.Syntax.Exp -> m GHC.Internal.TH.Syntax.Exp
+  lamCaseE :: forall (m :: * -> *). GHC.Internal.TH.Syntax.Quote m => [m GHC.Internal.TH.Syntax.Match] -> m GHC.Internal.TH.Syntax.Exp
+  lamCasesE :: forall (m :: * -> *). GHC.Internal.TH.Syntax.Quote m => [m GHC.Internal.TH.Syntax.Clause] -> m GHC.Internal.TH.Syntax.Exp
+  lamE :: forall (m :: * -> *). GHC.Internal.TH.Syntax.Quote m => [m GHC.Internal.TH.Syntax.Pat] -> m GHC.Internal.TH.Syntax.Exp -> m GHC.Internal.TH.Syntax.Exp
+  letE :: forall (m :: * -> *). GHC.Internal.TH.Syntax.Quote m => [m GHC.Internal.TH.Syntax.Dec] -> m GHC.Internal.TH.Syntax.Exp -> m GHC.Internal.TH.Syntax.Exp
+  letS :: forall (m :: * -> *). GHC.Internal.TH.Syntax.Quote m => [m GHC.Internal.TH.Syntax.Dec] -> m GHC.Internal.TH.Syntax.Stmt
+  listE :: forall (m :: * -> *). GHC.Internal.TH.Syntax.Quote m => [m GHC.Internal.TH.Syntax.Exp] -> m GHC.Internal.TH.Syntax.Exp
+  listK :: GHC.Internal.TH.Syntax.Kind
+  listP :: forall (m :: * -> *). GHC.Internal.TH.Syntax.Quote m => [m GHC.Internal.TH.Syntax.Pat] -> m GHC.Internal.TH.Syntax.Pat
+  listT :: forall (m :: * -> *). GHC.Internal.TH.Syntax.Quote m => m GHC.Internal.TH.Syntax.Type
+  litE :: forall (m :: * -> *). GHC.Internal.TH.Syntax.Quote m => GHC.Internal.TH.Syntax.Lit -> m GHC.Internal.TH.Syntax.Exp
+  litP :: forall (m :: * -> *). GHC.Internal.TH.Syntax.Quote m => GHC.Internal.TH.Syntax.Lit -> m GHC.Internal.TH.Syntax.Pat
+  litT :: forall (m :: * -> *). GHC.Internal.TH.Syntax.Quote m => m GHC.Internal.TH.Syntax.TyLit -> m GHC.Internal.TH.Syntax.Type
+  match :: forall (m :: * -> *). GHC.Internal.TH.Syntax.Quote m => m GHC.Internal.TH.Syntax.Pat -> m GHC.Internal.TH.Syntax.Body -> [m GHC.Internal.TH.Syntax.Dec] -> m GHC.Internal.TH.Syntax.Match
+  mdoE :: forall (m :: * -> *). GHC.Internal.TH.Syntax.Quote m => [m GHC.Internal.TH.Syntax.Stmt] -> m GHC.Internal.TH.Syntax.Exp
+  mkBytes :: GHC.Internal.ForeignPtr.ForeignPtr GHC.Internal.Word.Word8 -> GHC.Types.Word -> GHC.Types.Word -> GHC.Internal.TH.Syntax.Bytes
+  moduleAnnotation :: GHC.Internal.TH.Syntax.AnnTarget
+  mulArrowT :: forall (m :: * -> *). GHC.Internal.TH.Syntax.Quote m => m GHC.Internal.TH.Syntax.Type
+  multiIfE :: forall (m :: * -> *). GHC.Internal.TH.Syntax.Quote m => [m (GHC.Internal.TH.Syntax.Guard, GHC.Internal.TH.Syntax.Exp)] -> m GHC.Internal.TH.Syntax.Exp
+  newtypeD :: forall (m :: * -> *). GHC.Internal.TH.Syntax.Quote m => m GHC.Internal.TH.Syntax.Cxt -> GHC.Internal.TH.Syntax.Name -> [GHC.Internal.TH.Syntax.TyVarBndr GHC.Internal.TH.Syntax.BndrVis] -> GHC.Internal.Maybe.Maybe GHC.Internal.TH.Syntax.Kind -> m GHC.Internal.TH.Syntax.Con -> [m DerivClause] -> m GHC.Internal.TH.Syntax.Dec
+  newtypeD_doc :: GHC.Internal.TH.Syntax.Q GHC.Internal.TH.Syntax.Cxt -> GHC.Internal.TH.Syntax.Name -> [GHC.Internal.TH.Syntax.Q (GHC.Internal.TH.Syntax.TyVarBndr GHC.Internal.TH.Syntax.BndrVis)] -> GHC.Internal.Maybe.Maybe (GHC.Internal.TH.Syntax.Q GHC.Internal.TH.Syntax.Kind) -> (GHC.Internal.TH.Syntax.Q GHC.Internal.TH.Syntax.Con, GHC.Internal.Maybe.Maybe GHC.Internal.Base.String, [GHC.Internal.Maybe.Maybe GHC.Internal.Base.String]) -> [GHC.Internal.TH.Syntax.Q DerivClause] -> GHC.Internal.Maybe.Maybe GHC.Internal.Base.String -> GHC.Internal.TH.Syntax.Q GHC.Internal.TH.Syntax.Dec
+  newtypeInstD :: forall (m :: * -> *). GHC.Internal.TH.Syntax.Quote m => m GHC.Internal.TH.Syntax.Cxt -> GHC.Internal.TH.Syntax.Name -> [m GHC.Internal.TH.Syntax.Type] -> GHC.Internal.Maybe.Maybe GHC.Internal.TH.Syntax.Kind -> m GHC.Internal.TH.Syntax.Con -> [m DerivClause] -> m GHC.Internal.TH.Syntax.Dec
+  newtypeInstD_doc :: GHC.Internal.TH.Syntax.Q GHC.Internal.TH.Syntax.Cxt -> GHC.Internal.Maybe.Maybe [GHC.Internal.TH.Syntax.Q (GHC.Internal.TH.Syntax.TyVarBndr ())] -> GHC.Internal.TH.Syntax.Q GHC.Internal.TH.Syntax.Type -> GHC.Internal.Maybe.Maybe (GHC.Internal.TH.Syntax.Q GHC.Internal.TH.Syntax.Kind) -> (GHC.Internal.TH.Syntax.Q GHC.Internal.TH.Syntax.Con, GHC.Internal.Maybe.Maybe GHC.Internal.Base.String, [GHC.Internal.Maybe.Maybe GHC.Internal.Base.String]) -> [GHC.Internal.TH.Syntax.Q DerivClause] -> GHC.Internal.Maybe.Maybe GHC.Internal.Base.String -> GHC.Internal.TH.Syntax.Q GHC.Internal.TH.Syntax.Dec
+  newtypeStrategy :: forall (m :: * -> *). GHC.Internal.TH.Syntax.Quote m => m DerivStrategy
+  noBindS :: forall (m :: * -> *). GHC.Internal.TH.Syntax.Quote m => m GHC.Internal.TH.Syntax.Exp -> m GHC.Internal.TH.Syntax.Stmt
+  noSig :: GHC.Internal.TH.Syntax.FamilyResultSig
+  noSourceStrictness :: forall (m :: * -> *). GHC.Internal.TH.Syntax.Quote m => m GHC.Internal.TH.Syntax.SourceStrictness
+  noSourceUnpackedness :: forall (m :: * -> *). GHC.Internal.TH.Syntax.Quote m => m GHC.Internal.TH.Syntax.SourceUnpackedness
+  nominalR :: GHC.Internal.TH.Lib.Role
+  normalB :: forall (m :: * -> *). GHC.Internal.TH.Syntax.Quote m => m GHC.Internal.TH.Syntax.Exp -> m GHC.Internal.TH.Syntax.Body
+  normalC :: forall (m :: * -> *). GHC.Internal.TH.Syntax.Quote m => GHC.Internal.TH.Syntax.Name -> [m GHC.Internal.TH.Syntax.BangType] -> m GHC.Internal.TH.Syntax.Con
+  normalG :: forall (m :: * -> *). GHC.Internal.TH.Syntax.Quote m => m GHC.Internal.TH.Syntax.Exp -> m GHC.Internal.TH.Syntax.Guard
+  normalGE :: forall (m :: * -> *). GHC.Internal.TH.Syntax.Quote m => m GHC.Internal.TH.Syntax.Exp -> m GHC.Internal.TH.Syntax.Exp -> m (GHC.Internal.TH.Syntax.Guard, GHC.Internal.TH.Syntax.Exp)
+  notStrict :: forall (m :: * -> *). GHC.Internal.TH.Syntax.Quote m => m GHC.Internal.TH.Syntax.Strict
+  numTyLit :: forall (m :: * -> *). GHC.Internal.TH.Syntax.Quote m => GHC.Num.Integer.Integer -> m GHC.Internal.TH.Syntax.TyLit
+  openTypeFamilyD :: forall (m :: * -> *). GHC.Internal.TH.Syntax.Quote m => GHC.Internal.TH.Syntax.Name -> [GHC.Internal.TH.Syntax.TyVarBndr GHC.Internal.TH.Syntax.BndrVis] -> GHC.Internal.TH.Syntax.FamilyResultSig -> GHC.Internal.Maybe.Maybe GHC.Internal.TH.Syntax.InjectivityAnn -> m GHC.Internal.TH.Syntax.Dec
+  parS :: forall (m :: * -> *). GHC.Internal.TH.Syntax.Quote m => [[m GHC.Internal.TH.Syntax.Stmt]] -> m GHC.Internal.TH.Syntax.Stmt
+  parensE :: forall (m :: * -> *). GHC.Internal.TH.Syntax.Quote m => m GHC.Internal.TH.Syntax.Exp -> m GHC.Internal.TH.Syntax.Exp
+  parensP :: forall (m :: * -> *). GHC.Internal.TH.Syntax.Quote m => m GHC.Internal.TH.Syntax.Pat -> m GHC.Internal.TH.Syntax.Pat
+  parensT :: forall (m :: * -> *). GHC.Internal.TH.Syntax.Quote m => m GHC.Internal.TH.Syntax.Type -> m GHC.Internal.TH.Syntax.Type
+  patG :: forall (m :: * -> *). GHC.Internal.TH.Syntax.Quote m => [m GHC.Internal.TH.Syntax.Stmt] -> m GHC.Internal.TH.Syntax.Guard
+  patGE :: forall (m :: * -> *). GHC.Internal.TH.Syntax.Quote m => [m GHC.Internal.TH.Syntax.Stmt] -> m GHC.Internal.TH.Syntax.Exp -> m (GHC.Internal.TH.Syntax.Guard, GHC.Internal.TH.Syntax.Exp)
+  patSynD :: forall (m :: * -> *). GHC.Internal.TH.Syntax.Quote m => GHC.Internal.TH.Syntax.Name -> m GHC.Internal.TH.Syntax.PatSynArgs -> m GHC.Internal.TH.Syntax.PatSynDir -> m GHC.Internal.TH.Syntax.Pat -> m GHC.Internal.TH.Syntax.Dec
+  patSynD_doc :: GHC.Internal.TH.Syntax.Name -> GHC.Internal.TH.Syntax.Q GHC.Internal.TH.Syntax.PatSynArgs -> GHC.Internal.TH.Syntax.Q GHC.Internal.TH.Syntax.PatSynDir -> GHC.Internal.TH.Syntax.Q GHC.Internal.TH.Syntax.Pat -> GHC.Internal.Maybe.Maybe GHC.Internal.Base.String -> [GHC.Internal.Maybe.Maybe GHC.Internal.Base.String] -> GHC.Internal.TH.Syntax.Q GHC.Internal.TH.Syntax.Dec
+  patSynSigD :: forall (m :: * -> *). GHC.Internal.TH.Syntax.Quote m => GHC.Internal.TH.Syntax.Name -> m GHC.Internal.TH.Syntax.Type -> m GHC.Internal.TH.Syntax.Dec
+  phantomR :: GHC.Internal.TH.Lib.Role
+  plainBndrTV :: forall (m :: * -> *). GHC.Internal.TH.Syntax.Quote m => GHC.Internal.TH.Syntax.Name -> GHC.Internal.TH.Syntax.BndrVis -> m (GHC.Internal.TH.Syntax.TyVarBndr GHC.Internal.TH.Syntax.BndrVis)
+  plainInvisTV :: forall (m :: * -> *). GHC.Internal.TH.Syntax.Quote m => GHC.Internal.TH.Syntax.Name -> GHC.Internal.TH.Syntax.Specificity -> m (GHC.Internal.TH.Syntax.TyVarBndr GHC.Internal.TH.Syntax.Specificity)
+  plainTV :: forall flag. DefaultBndrFlag flag => GHC.Internal.TH.Syntax.Name -> GHC.Internal.TH.Syntax.TyVarBndr flag
+  pragAnnD :: forall (m :: * -> *). GHC.Internal.TH.Syntax.Quote m => GHC.Internal.TH.Syntax.AnnTarget -> m GHC.Internal.TH.Syntax.Exp -> m GHC.Internal.TH.Syntax.Dec
+  pragCompleteD :: forall (m :: * -> *). GHC.Internal.TH.Syntax.Quote m => [GHC.Internal.TH.Syntax.Name] -> GHC.Internal.Maybe.Maybe GHC.Internal.TH.Syntax.Name -> m GHC.Internal.TH.Syntax.Dec
+  pragInlD :: forall (m :: * -> *). GHC.Internal.TH.Syntax.Quote m => GHC.Internal.TH.Syntax.Name -> GHC.Internal.TH.Syntax.Inline -> GHC.Internal.TH.Syntax.RuleMatch -> GHC.Internal.TH.Syntax.Phases -> m GHC.Internal.TH.Syntax.Dec
+  pragLineD :: forall (m :: * -> *). GHC.Internal.TH.Syntax.Quote m => GHC.Types.Int -> GHC.Internal.Base.String -> m GHC.Internal.TH.Syntax.Dec
+  pragRuleD :: forall (m :: * -> *). GHC.Internal.TH.Syntax.Quote m => GHC.Internal.Base.String -> [m GHC.Internal.TH.Syntax.RuleBndr] -> m GHC.Internal.TH.Syntax.Exp -> m GHC.Internal.TH.Syntax.Exp -> GHC.Internal.TH.Syntax.Phases -> m GHC.Internal.TH.Syntax.Dec
+  pragSpecD :: forall (m :: * -> *). GHC.Internal.TH.Syntax.Quote m => GHC.Internal.TH.Syntax.Name -> m GHC.Internal.TH.Syntax.Type -> GHC.Internal.TH.Syntax.Phases -> m GHC.Internal.TH.Syntax.Dec
+  pragSpecInlD :: forall (m :: * -> *). GHC.Internal.TH.Syntax.Quote m => GHC.Internal.TH.Syntax.Name -> m GHC.Internal.TH.Syntax.Type -> GHC.Internal.TH.Syntax.Inline -> GHC.Internal.TH.Syntax.Phases -> m GHC.Internal.TH.Syntax.Dec
+  pragSpecInstD :: forall (m :: * -> *). GHC.Internal.TH.Syntax.Quote m => m GHC.Internal.TH.Syntax.Type -> m GHC.Internal.TH.Syntax.Dec
+  prefixPatSyn :: forall (m :: * -> *). GHC.Internal.TH.Syntax.Quote m => [GHC.Internal.TH.Syntax.Name] -> m GHC.Internal.TH.Syntax.PatSynArgs
+  prim :: GHC.Internal.TH.Syntax.Callconv
+  projectionE :: forall (m :: * -> *). GHC.Internal.TH.Syntax.Quote m => GHC.Internal.Base.NonEmpty GHC.Internal.Base.String -> m GHC.Internal.TH.Syntax.Exp
+  promotedConsT :: forall (m :: * -> *). GHC.Internal.TH.Syntax.Quote m => m GHC.Internal.TH.Syntax.Type
+  promotedInfixT :: forall (m :: * -> *). GHC.Internal.TH.Syntax.Quote m => m GHC.Internal.TH.Syntax.Type -> GHC.Internal.TH.Syntax.Name -> m GHC.Internal.TH.Syntax.Type -> m GHC.Internal.TH.Syntax.Type
+  promotedNilT :: forall (m :: * -> *). GHC.Internal.TH.Syntax.Quote m => m GHC.Internal.TH.Syntax.Type
+  promotedT :: forall (m :: * -> *). GHC.Internal.TH.Syntax.Quote m => GHC.Internal.TH.Syntax.Name -> m GHC.Internal.TH.Syntax.Type
+  promotedTupleT :: forall (m :: * -> *). GHC.Internal.TH.Syntax.Quote m => GHC.Types.Int -> m GHC.Internal.TH.Syntax.Type
+  promotedUInfixT :: forall (m :: * -> *). GHC.Internal.TH.Syntax.Quote m => m GHC.Internal.TH.Syntax.Type -> GHC.Internal.TH.Syntax.Name -> m GHC.Internal.TH.Syntax.Type -> m GHC.Internal.TH.Syntax.Type
+  rationalL :: GHC.Internal.Real.Rational -> GHC.Internal.TH.Syntax.Lit
+  recC :: forall (m :: * -> *). GHC.Internal.TH.Syntax.Quote m => GHC.Internal.TH.Syntax.Name -> [m GHC.Internal.TH.Syntax.VarBangType] -> m GHC.Internal.TH.Syntax.Con
+  recConE :: forall (m :: * -> *). GHC.Internal.TH.Syntax.Quote m => GHC.Internal.TH.Syntax.Name -> [m (GHC.Internal.TH.Syntax.Name, GHC.Internal.TH.Syntax.Exp)] -> m GHC.Internal.TH.Syntax.Exp
+  recGadtC :: forall (m :: * -> *). GHC.Internal.TH.Syntax.Quote m => [GHC.Internal.TH.Syntax.Name] -> [m GHC.Internal.TH.Syntax.VarStrictType] -> m GHC.Internal.TH.Syntax.Type -> m GHC.Internal.TH.Syntax.Con
+  recP :: forall (m :: * -> *). GHC.Internal.TH.Syntax.Quote m => GHC.Internal.TH.Syntax.Name -> [m GHC.Internal.TH.Syntax.FieldPat] -> m GHC.Internal.TH.Syntax.Pat
+  recS :: forall (m :: * -> *). GHC.Internal.TH.Syntax.Quote m => [m GHC.Internal.TH.Syntax.Stmt] -> m GHC.Internal.TH.Syntax.Stmt
+  recUpdE :: forall (m :: * -> *). GHC.Internal.TH.Syntax.Quote m => m GHC.Internal.TH.Syntax.Exp -> [m (GHC.Internal.TH.Syntax.Name, GHC.Internal.TH.Syntax.Exp)] -> m GHC.Internal.TH.Syntax.Exp
+  recordPatSyn :: forall (m :: * -> *). GHC.Internal.TH.Syntax.Quote m => [GHC.Internal.TH.Syntax.Name] -> m GHC.Internal.TH.Syntax.PatSynArgs
+  representationalR :: GHC.Internal.TH.Lib.Role
+  roleAnnotD :: forall (m :: * -> *). GHC.Internal.TH.Syntax.Quote m => GHC.Internal.TH.Syntax.Name -> [GHC.Internal.TH.Lib.Role] -> m GHC.Internal.TH.Syntax.Dec
+  ruleVar :: forall (m :: * -> *). GHC.Internal.TH.Syntax.Quote m => GHC.Internal.TH.Syntax.Name -> m GHC.Internal.TH.Syntax.RuleBndr
+  safe :: GHC.Internal.TH.Syntax.Safety
+  sectionL :: forall (m :: * -> *). GHC.Internal.TH.Syntax.Quote m => m GHC.Internal.TH.Syntax.Exp -> m GHC.Internal.TH.Syntax.Exp -> m GHC.Internal.TH.Syntax.Exp
+  sectionR :: forall (m :: * -> *). GHC.Internal.TH.Syntax.Quote m => m GHC.Internal.TH.Syntax.Exp -> m GHC.Internal.TH.Syntax.Exp -> m GHC.Internal.TH.Syntax.Exp
+  sigD :: forall (m :: * -> *). GHC.Internal.TH.Syntax.Quote m => GHC.Internal.TH.Syntax.Name -> m GHC.Internal.TH.Syntax.Type -> m GHC.Internal.TH.Syntax.Dec
+  sigE :: forall (m :: * -> *). GHC.Internal.TH.Syntax.Quote m => m GHC.Internal.TH.Syntax.Exp -> m GHC.Internal.TH.Syntax.Type -> m GHC.Internal.TH.Syntax.Exp
+  sigP :: forall (m :: * -> *). GHC.Internal.TH.Syntax.Quote m => m GHC.Internal.TH.Syntax.Pat -> m GHC.Internal.TH.Syntax.Type -> m GHC.Internal.TH.Syntax.Pat
+  sigT :: forall (m :: * -> *). GHC.Internal.TH.Syntax.Quote m => m GHC.Internal.TH.Syntax.Type -> GHC.Internal.TH.Syntax.Kind -> m GHC.Internal.TH.Syntax.Type
+  sourceLazy :: forall (m :: * -> *). GHC.Internal.TH.Syntax.Quote m => m GHC.Internal.TH.Syntax.SourceStrictness
+  sourceNoUnpack :: forall (m :: * -> *). GHC.Internal.TH.Syntax.Quote m => m GHC.Internal.TH.Syntax.SourceUnpackedness
+  sourceStrict :: forall (m :: * -> *). GHC.Internal.TH.Syntax.Quote m => m GHC.Internal.TH.Syntax.SourceStrictness
+  sourceUnpack :: forall (m :: * -> *). GHC.Internal.TH.Syntax.Quote m => m GHC.Internal.TH.Syntax.SourceUnpackedness
+  specifiedSpec :: GHC.Internal.TH.Syntax.Specificity
+  standaloneDerivD :: forall (m :: * -> *). GHC.Internal.TH.Syntax.Quote m => m GHC.Internal.TH.Syntax.Cxt -> m GHC.Internal.TH.Syntax.Type -> m GHC.Internal.TH.Syntax.Dec
+  standaloneDerivWithStrategyD :: forall (m :: * -> *). GHC.Internal.TH.Syntax.Quote m => GHC.Internal.Maybe.Maybe DerivStrategy -> m GHC.Internal.TH.Syntax.Cxt -> m GHC.Internal.TH.Syntax.Type -> m GHC.Internal.TH.Syntax.Dec
+  starK :: GHC.Internal.TH.Syntax.Kind
+  staticE :: forall (m :: * -> *). GHC.Internal.TH.Syntax.Quote m => m GHC.Internal.TH.Syntax.Exp -> m GHC.Internal.TH.Syntax.Exp
+  stdCall :: GHC.Internal.TH.Syntax.Callconv
+  stockStrategy :: forall (m :: * -> *). GHC.Internal.TH.Syntax.Quote m => m DerivStrategy
+  strTyLit :: forall (m :: * -> *). GHC.Internal.TH.Syntax.Quote m => GHC.Internal.Base.String -> m GHC.Internal.TH.Syntax.TyLit
+  strictType :: forall (m :: * -> *). GHC.Internal.TH.Syntax.Quote m => m GHC.Internal.TH.Syntax.Strict -> m GHC.Internal.TH.Syntax.Type -> m GHC.Internal.TH.Syntax.StrictType
+  stringE :: forall (m :: * -> *). GHC.Internal.TH.Syntax.Quote m => GHC.Internal.Base.String -> m GHC.Internal.TH.Syntax.Exp
+  stringL :: GHC.Internal.Base.String -> GHC.Internal.TH.Syntax.Lit
+  stringPrimL :: [GHC.Internal.Word.Word8] -> GHC.Internal.TH.Syntax.Lit
+  thisModule :: GHC.Internal.TH.Syntax.Q GHC.Internal.TH.Syntax.Module
+  tildeP :: forall (m :: * -> *). GHC.Internal.TH.Syntax.Quote m => m GHC.Internal.TH.Syntax.Pat -> m GHC.Internal.TH.Syntax.Pat
+  tupE :: forall (m :: * -> *). GHC.Internal.TH.Syntax.Quote m => [m GHC.Internal.TH.Syntax.Exp] -> m GHC.Internal.TH.Syntax.Exp
+  tupP :: forall (m :: * -> *). GHC.Internal.TH.Syntax.Quote m => [m GHC.Internal.TH.Syntax.Pat] -> m GHC.Internal.TH.Syntax.Pat
+  tupleK :: GHC.Types.Int -> GHC.Internal.TH.Syntax.Kind
+  tupleT :: forall (m :: * -> *). GHC.Internal.TH.Syntax.Quote m => GHC.Types.Int -> m GHC.Internal.TH.Syntax.Type
+  tySynD :: forall (m :: * -> *). GHC.Internal.TH.Syntax.Quote m => GHC.Internal.TH.Syntax.Name -> [GHC.Internal.TH.Syntax.TyVarBndr GHC.Internal.TH.Syntax.BndrVis] -> m GHC.Internal.TH.Syntax.Type -> m GHC.Internal.TH.Syntax.Dec
+  tySynEqn :: forall (m :: * -> *). GHC.Internal.TH.Syntax.Quote m => GHC.Internal.Maybe.Maybe [GHC.Internal.TH.Syntax.TyVarBndr ()] -> m GHC.Internal.TH.Syntax.Type -> m GHC.Internal.TH.Syntax.Type -> m GHC.Internal.TH.Syntax.TySynEqn
+  tySynInstD :: forall (m :: * -> *). GHC.Internal.TH.Syntax.Quote m => m GHC.Internal.TH.Syntax.TySynEqn -> m GHC.Internal.TH.Syntax.Dec
+  tyVarSig :: GHC.Internal.TH.Syntax.TyVarBndr () -> GHC.Internal.TH.Syntax.FamilyResultSig
+  typeAnnotation :: GHC.Internal.TH.Syntax.Name -> GHC.Internal.TH.Syntax.AnnTarget
+  typeDataD :: forall (m :: * -> *). GHC.Internal.TH.Syntax.Quote m => GHC.Internal.TH.Syntax.Name -> [GHC.Internal.TH.Syntax.TyVarBndr GHC.Internal.TH.Syntax.BndrVis] -> GHC.Internal.Maybe.Maybe GHC.Internal.TH.Syntax.Kind -> [m GHC.Internal.TH.Syntax.Con] -> m GHC.Internal.TH.Syntax.Dec
+  typeDataD_doc :: GHC.Internal.TH.Syntax.Name -> [GHC.Internal.TH.Syntax.Q (GHC.Internal.TH.Syntax.TyVarBndr GHC.Internal.TH.Syntax.BndrVis)] -> GHC.Internal.Maybe.Maybe (GHC.Internal.TH.Syntax.Q GHC.Internal.TH.Syntax.Kind) -> [(GHC.Internal.TH.Syntax.Q GHC.Internal.TH.Syntax.Con, GHC.Internal.Maybe.Maybe GHC.Internal.Base.String, [GHC.Internal.Maybe.Maybe GHC.Internal.Base.String])] -> GHC.Internal.Maybe.Maybe GHC.Internal.Base.String -> GHC.Internal.TH.Syntax.Q GHC.Internal.TH.Syntax.Dec
+  typeE :: forall (m :: * -> *). GHC.Internal.TH.Syntax.Quote m => m GHC.Internal.TH.Syntax.Type -> m GHC.Internal.TH.Syntax.Exp
+  typeP :: forall (m :: * -> *). GHC.Internal.TH.Syntax.Quote m => m GHC.Internal.TH.Syntax.Type -> m GHC.Internal.TH.Syntax.Pat
+  typedBracketE :: forall (m :: * -> *). GHC.Internal.TH.Syntax.Quote m => m GHC.Internal.TH.Syntax.Exp -> m GHC.Internal.TH.Syntax.Exp
+  typedRuleVar :: forall (m :: * -> *). GHC.Internal.TH.Syntax.Quote m => GHC.Internal.TH.Syntax.Name -> m GHC.Internal.TH.Syntax.Type -> m GHC.Internal.TH.Syntax.RuleBndr
+  typedSpliceE :: forall (m :: * -> *). GHC.Internal.TH.Syntax.Quote m => m GHC.Internal.TH.Syntax.Exp -> m GHC.Internal.TH.Syntax.Exp
+  uInfixE :: forall (m :: * -> *). GHC.Internal.TH.Syntax.Quote m => m GHC.Internal.TH.Syntax.Exp -> m GHC.Internal.TH.Syntax.Exp -> m GHC.Internal.TH.Syntax.Exp -> m GHC.Internal.TH.Syntax.Exp
+  uInfixP :: forall (m :: * -> *). GHC.Internal.TH.Syntax.Quote m => m GHC.Internal.TH.Syntax.Pat -> GHC.Internal.TH.Syntax.Name -> m GHC.Internal.TH.Syntax.Pat -> m GHC.Internal.TH.Syntax.Pat
+  uInfixT :: forall (m :: * -> *). GHC.Internal.TH.Syntax.Quote m => m GHC.Internal.TH.Syntax.Type -> GHC.Internal.TH.Syntax.Name -> m GHC.Internal.TH.Syntax.Type -> m GHC.Internal.TH.Syntax.Type
+  unboundVarE :: forall (m :: * -> *). GHC.Internal.TH.Syntax.Quote m => GHC.Internal.TH.Syntax.Name -> m GHC.Internal.TH.Syntax.Exp
+  unboxedSumE :: forall (m :: * -> *). GHC.Internal.TH.Syntax.Quote m => m GHC.Internal.TH.Syntax.Exp -> GHC.Internal.TH.Syntax.SumAlt -> GHC.Internal.TH.Syntax.SumArity -> m GHC.Internal.TH.Syntax.Exp
+  unboxedSumP :: forall (m :: * -> *). GHC.Internal.TH.Syntax.Quote m => m GHC.Internal.TH.Syntax.Pat -> GHC.Internal.TH.Syntax.SumAlt -> GHC.Internal.TH.Syntax.SumArity -> m GHC.Internal.TH.Syntax.Pat
+  unboxedSumT :: forall (m :: * -> *). GHC.Internal.TH.Syntax.Quote m => GHC.Internal.TH.Syntax.SumArity -> m GHC.Internal.TH.Syntax.Type
+  unboxedTupE :: forall (m :: * -> *). GHC.Internal.TH.Syntax.Quote m => [m GHC.Internal.TH.Syntax.Exp] -> m GHC.Internal.TH.Syntax.Exp
+  unboxedTupP :: forall (m :: * -> *). GHC.Internal.TH.Syntax.Quote m => [m GHC.Internal.TH.Syntax.Pat] -> m GHC.Internal.TH.Syntax.Pat
+  unboxedTupleT :: forall (m :: * -> *). GHC.Internal.TH.Syntax.Quote m => GHC.Types.Int -> m GHC.Internal.TH.Syntax.Type
+  unidir :: forall (m :: * -> *). GHC.Internal.TH.Syntax.Quote m => m GHC.Internal.TH.Syntax.PatSynDir
+  unpacked :: forall (m :: * -> *). GHC.Internal.TH.Syntax.Quote m => m GHC.Internal.TH.Syntax.Strict
+  unsafe :: GHC.Internal.TH.Syntax.Safety
+  valD :: forall (m :: * -> *). GHC.Internal.TH.Syntax.Quote m => m GHC.Internal.TH.Syntax.Pat -> m GHC.Internal.TH.Syntax.Body -> [m GHC.Internal.TH.Syntax.Dec] -> m GHC.Internal.TH.Syntax.Dec
+  valueAnnotation :: GHC.Internal.TH.Syntax.Name -> GHC.Internal.TH.Syntax.AnnTarget
+  varBangType :: forall (m :: * -> *). GHC.Internal.TH.Syntax.Quote m => GHC.Internal.TH.Syntax.Name -> m GHC.Internal.TH.Syntax.BangType -> m GHC.Internal.TH.Syntax.VarBangType
+  varE :: forall (m :: * -> *). GHC.Internal.TH.Syntax.Quote m => GHC.Internal.TH.Syntax.Name -> m GHC.Internal.TH.Syntax.Exp
+  varK :: GHC.Internal.TH.Syntax.Name -> GHC.Internal.TH.Syntax.Kind
+  varP :: forall (m :: * -> *). GHC.Internal.TH.Syntax.Quote m => GHC.Internal.TH.Syntax.Name -> m GHC.Internal.TH.Syntax.Pat
+  varStrictType :: forall (m :: * -> *). GHC.Internal.TH.Syntax.Quote m => GHC.Internal.TH.Syntax.Name -> m GHC.Internal.TH.Syntax.StrictType -> m GHC.Internal.TH.Syntax.VarStrictType
+  varT :: forall (m :: * -> *). GHC.Internal.TH.Syntax.Quote m => GHC.Internal.TH.Syntax.Name -> m GHC.Internal.TH.Syntax.Type
+  viaStrategy :: forall (m :: * -> *). GHC.Internal.TH.Syntax.Quote m => m GHC.Internal.TH.Syntax.Type -> m DerivStrategy
+  viewP :: forall (m :: * -> *). GHC.Internal.TH.Syntax.Quote m => m GHC.Internal.TH.Syntax.Exp -> m GHC.Internal.TH.Syntax.Pat -> m GHC.Internal.TH.Syntax.Pat
+  wildCardT :: forall (m :: * -> *). GHC.Internal.TH.Syntax.Quote m => m GHC.Internal.TH.Syntax.Type
+  wildP :: forall (m :: * -> *). GHC.Internal.TH.Syntax.Quote m => m GHC.Internal.TH.Syntax.Pat
+  withDecDoc :: GHC.Internal.Base.String -> GHC.Internal.TH.Syntax.Q GHC.Internal.TH.Syntax.Dec -> GHC.Internal.TH.Syntax.Q GHC.Internal.TH.Syntax.Dec
+  withDecsDoc :: GHC.Internal.Base.String -> GHC.Internal.TH.Syntax.Q [GHC.Internal.TH.Syntax.Dec] -> GHC.Internal.TH.Syntax.Q [GHC.Internal.TH.Syntax.Dec]
+  wordPrimL :: GHC.Num.Integer.Integer -> GHC.Internal.TH.Syntax.Lit
 
 module Language.Haskell.TH.Lib.Internal where
-  -- Safety: Trustworthy
+  -- Safety: Safe
   type BangQ :: *
-  type BangQ = Language.Haskell.TH.Lib.Syntax.Q Language.Haskell.TH.Lib.Syntax.Bang
+  type BangQ = GHC.Internal.TH.Syntax.Q GHC.Internal.TH.Syntax.Bang
   type BangTypeQ :: *
-  type BangTypeQ = Language.Haskell.TH.Lib.Syntax.Q Language.Haskell.TH.Lib.Syntax.BangType
+  type BangTypeQ = GHC.Internal.TH.Syntax.Q GHC.Internal.TH.Syntax.BangType
   type BodyQ :: *
-  type BodyQ = Language.Haskell.TH.Lib.Syntax.Q Language.Haskell.TH.Lib.Syntax.Body
+  type BodyQ = GHC.Internal.TH.Syntax.Q GHC.Internal.TH.Syntax.Body
   type ClauseQ :: *
-  type ClauseQ = Language.Haskell.TH.Lib.Syntax.Q Language.Haskell.TH.Lib.Syntax.Clause
+  type ClauseQ = GHC.Internal.TH.Syntax.Q GHC.Internal.TH.Syntax.Clause
   type CodeQ :: forall (r :: GHC.Types.RuntimeRep). TYPE r -> *
-  type CodeQ = Language.Haskell.TH.Lib.Syntax.Code Language.Haskell.TH.Lib.Syntax.Q :: forall (r :: GHC.Types.RuntimeRep). TYPE r -> *
+  type CodeQ = GHC.Internal.TH.Syntax.Code GHC.Internal.TH.Syntax.Q :: forall (r :: GHC.Types.RuntimeRep). TYPE r -> *
   type ConQ :: *
-  type ConQ = Language.Haskell.TH.Lib.Syntax.Q Language.Haskell.TH.Lib.Syntax.Con
+  type ConQ = GHC.Internal.TH.Syntax.Q GHC.Internal.TH.Syntax.Con
   type CxtQ :: *
-  type CxtQ = Language.Haskell.TH.Lib.Syntax.Q Language.Haskell.TH.Lib.Syntax.Cxt
+  type CxtQ = GHC.Internal.TH.Syntax.Q GHC.Internal.TH.Syntax.Cxt
   type DecQ :: *
-  type DecQ = Language.Haskell.TH.Lib.Syntax.Q Language.Haskell.TH.Lib.Syntax.Dec
+  type DecQ = GHC.Internal.TH.Syntax.Q GHC.Internal.TH.Syntax.Dec
   type Decs :: *
-  type Decs = [Language.Haskell.TH.Lib.Syntax.Dec]
+  type Decs = [GHC.Internal.TH.Syntax.Dec]
   type DecsQ :: *
-  type DecsQ = Language.Haskell.TH.Lib.Syntax.Q [Language.Haskell.TH.Lib.Syntax.Dec]
+  type DecsQ = GHC.Internal.TH.Syntax.Q [GHC.Internal.TH.Syntax.Dec]
   type DerivClauseQ :: *
-  type DerivClauseQ = Language.Haskell.TH.Lib.Syntax.Q Language.Haskell.TH.Lib.Syntax.DerivClause
+  type DerivClauseQ = GHC.Internal.TH.Syntax.Q GHC.Internal.TH.Syntax.DerivClause
   type DerivStrategyQ :: *
-  type DerivStrategyQ = Language.Haskell.TH.Lib.Syntax.Q Language.Haskell.TH.Lib.Syntax.DerivStrategy
+  type DerivStrategyQ = GHC.Internal.TH.Syntax.Q GHC.Internal.TH.Syntax.DerivStrategy
   type ExpQ :: *
-  type ExpQ = Language.Haskell.TH.Lib.Syntax.Q Language.Haskell.TH.Lib.Syntax.Exp
+  type ExpQ = GHC.Internal.TH.Syntax.Q GHC.Internal.TH.Syntax.Exp
   type FamilyResultSigQ :: *
-  type FamilyResultSigQ = Language.Haskell.TH.Lib.Syntax.Q Language.Haskell.TH.Lib.Syntax.FamilyResultSig
+  type FamilyResultSigQ = GHC.Internal.TH.Syntax.Q GHC.Internal.TH.Syntax.FamilyResultSig
   type FieldExpQ :: *
-  type FieldExpQ = Language.Haskell.TH.Lib.Syntax.Q Language.Haskell.TH.Lib.Syntax.FieldExp
+  type FieldExpQ = GHC.Internal.TH.Syntax.Q GHC.Internal.TH.Syntax.FieldExp
   type FieldPatQ :: *
-  type FieldPatQ = Language.Haskell.TH.Lib.Syntax.Q Language.Haskell.TH.Lib.Syntax.FieldPat
+  type FieldPatQ = GHC.Internal.TH.Syntax.Q GHC.Internal.TH.Syntax.FieldPat
   type GuardQ :: *
-  type GuardQ = Language.Haskell.TH.Lib.Syntax.Q Language.Haskell.TH.Lib.Syntax.Guard
+  type GuardQ = GHC.Internal.TH.Syntax.Q GHC.Internal.TH.Syntax.Guard
   type InfoQ :: *
-  type InfoQ = Language.Haskell.TH.Lib.Syntax.Q Language.Haskell.TH.Lib.Syntax.Info
+  type InfoQ = GHC.Internal.TH.Syntax.Q GHC.Internal.TH.Syntax.Info
   type InjectivityAnn :: *
-  type InjectivityAnn = Language.Haskell.TH.Lib.Syntax.InjectivityAnn
+  type InjectivityAnn = GHC.Internal.TH.Syntax.InjectivityAnn
   type KindQ :: *
-  type KindQ = Language.Haskell.TH.Lib.Syntax.Q Language.Haskell.TH.Lib.Syntax.Kind
+  type KindQ = GHC.Internal.TH.Syntax.Q GHC.Internal.TH.Syntax.Kind
   type MatchQ :: *
-  type MatchQ = Language.Haskell.TH.Lib.Syntax.Q Language.Haskell.TH.Lib.Syntax.Match
+  type MatchQ = GHC.Internal.TH.Syntax.Q GHC.Internal.TH.Syntax.Match
   type PatQ :: *
-  type PatQ = Language.Haskell.TH.Lib.Syntax.Q Language.Haskell.TH.Lib.Syntax.Pat
+  type PatQ = GHC.Internal.TH.Syntax.Q GHC.Internal.TH.Syntax.Pat
   type PatSynArgsQ :: *
-  type PatSynArgsQ = Language.Haskell.TH.Lib.Syntax.Q Language.Haskell.TH.Lib.Syntax.PatSynArgs
+  type PatSynArgsQ = GHC.Internal.TH.Syntax.Q GHC.Internal.TH.Syntax.PatSynArgs
   type PatSynDirQ :: *
-  type PatSynDirQ = Language.Haskell.TH.Lib.Syntax.Q Language.Haskell.TH.Lib.Syntax.PatSynDir
+  type PatSynDirQ = GHC.Internal.TH.Syntax.Q GHC.Internal.TH.Syntax.PatSynDir
   type PredQ :: *
-  type PredQ = Language.Haskell.TH.Lib.Syntax.Q Language.Haskell.TH.Lib.Syntax.Pred
+  type PredQ = GHC.Internal.TH.Syntax.Q GHC.Internal.TH.Syntax.Pred
   type RangeQ :: *
-  type RangeQ = Language.Haskell.TH.Lib.Syntax.Q Language.Haskell.TH.Lib.Syntax.Range
+  type RangeQ = GHC.Internal.TH.Syntax.Q GHC.Internal.TH.Syntax.Range
   type Role :: *
-  type Role = Language.Haskell.TH.Lib.Syntax.Role
+  type Role = GHC.Internal.TH.Syntax.Role
   type RuleBndrQ :: *
-  type RuleBndrQ = Language.Haskell.TH.Lib.Syntax.Q Language.Haskell.TH.Lib.Syntax.RuleBndr
+  type RuleBndrQ = GHC.Internal.TH.Syntax.Q GHC.Internal.TH.Syntax.RuleBndr
   type SourceStrictnessQ :: *
-  type SourceStrictnessQ = Language.Haskell.TH.Lib.Syntax.Q Language.Haskell.TH.Lib.Syntax.SourceStrictness
+  type SourceStrictnessQ = GHC.Internal.TH.Syntax.Q GHC.Internal.TH.Syntax.SourceStrictness
   type SourceUnpackednessQ :: *
-  type SourceUnpackednessQ = Language.Haskell.TH.Lib.Syntax.Q Language.Haskell.TH.Lib.Syntax.SourceUnpackedness
+  type SourceUnpackednessQ = GHC.Internal.TH.Syntax.Q GHC.Internal.TH.Syntax.SourceUnpackedness
   type StmtQ :: *
-  type StmtQ = Language.Haskell.TH.Lib.Syntax.Q Language.Haskell.TH.Lib.Syntax.Stmt
+  type StmtQ = GHC.Internal.TH.Syntax.Q GHC.Internal.TH.Syntax.Stmt
   type StrictTypeQ :: *
-  type StrictTypeQ = Language.Haskell.TH.Lib.Syntax.Q Language.Haskell.TH.Lib.Syntax.StrictType
+  type StrictTypeQ = GHC.Internal.TH.Syntax.Q GHC.Internal.TH.Syntax.StrictType
   type TExpQ :: forall (r :: GHC.Types.RuntimeRep). TYPE r -> *
-  type TExpQ a = Language.Haskell.TH.Lib.Syntax.Q (Language.Haskell.TH.Lib.Syntax.TExp a)
+  type TExpQ a = GHC.Internal.TH.Syntax.Q (GHC.Internal.TH.Syntax.TExp a)
   type TyLitQ :: *
-  type TyLitQ = Language.Haskell.TH.Lib.Syntax.Q Language.Haskell.TH.Lib.Syntax.TyLit
+  type TyLitQ = GHC.Internal.TH.Syntax.Q GHC.Internal.TH.Syntax.TyLit
   type TySynEqnQ :: *
-  type TySynEqnQ = Language.Haskell.TH.Lib.Syntax.Q Language.Haskell.TH.Lib.Syntax.TySynEqn
+  type TySynEqnQ = GHC.Internal.TH.Syntax.Q GHC.Internal.TH.Syntax.TySynEqn
   type TyVarBndrSpec :: *
-  type TyVarBndrSpec = Language.Haskell.TH.Lib.Syntax.TyVarBndr Language.Haskell.TH.Lib.Syntax.Specificity
+  type TyVarBndrSpec = GHC.Internal.TH.Syntax.TyVarBndr GHC.Internal.TH.Syntax.Specificity
   type TyVarBndrUnit :: *
-  type TyVarBndrUnit = Language.Haskell.TH.Lib.Syntax.TyVarBndr ()
+  type TyVarBndrUnit = GHC.Internal.TH.Syntax.TyVarBndr ()
   type TyVarBndrVis :: *
-  type TyVarBndrVis = Language.Haskell.TH.Lib.Syntax.TyVarBndr Language.Haskell.TH.Lib.Syntax.BndrVis
+  type TyVarBndrVis = GHC.Internal.TH.Syntax.TyVarBndr GHC.Internal.TH.Syntax.BndrVis
   type TypeQ :: *
-  type TypeQ = Language.Haskell.TH.Lib.Syntax.Q Language.Haskell.TH.Lib.Syntax.Type
+  type TypeQ = GHC.Internal.TH.Syntax.Q GHC.Internal.TH.Syntax.Type
   type VarBangTypeQ :: *
-  type VarBangTypeQ = Language.Haskell.TH.Lib.Syntax.Q Language.Haskell.TH.Lib.Syntax.VarBangType
+  type VarBangTypeQ = GHC.Internal.TH.Syntax.Q GHC.Internal.TH.Syntax.VarBangType
   type VarStrictTypeQ :: *
-  type VarStrictTypeQ = Language.Haskell.TH.Lib.Syntax.Q Language.Haskell.TH.Lib.Syntax.VarStrictType
-  anyclassStrategy :: forall (m :: * -> *). Language.Haskell.TH.Lib.Syntax.Quote m => m Language.Haskell.TH.Lib.Syntax.DerivStrategy
-  appE :: forall (m :: * -> *). Language.Haskell.TH.Lib.Syntax.Quote m => m Language.Haskell.TH.Lib.Syntax.Exp -> m Language.Haskell.TH.Lib.Syntax.Exp -> m Language.Haskell.TH.Lib.Syntax.Exp
-  appK :: Language.Haskell.TH.Lib.Syntax.Kind -> Language.Haskell.TH.Lib.Syntax.Kind -> Language.Haskell.TH.Lib.Syntax.Kind
-  appKindT :: forall (m :: * -> *). Language.Haskell.TH.Lib.Syntax.Quote m => m Language.Haskell.TH.Lib.Syntax.Type -> m Language.Haskell.TH.Lib.Syntax.Kind -> m Language.Haskell.TH.Lib.Syntax.Type
-  appT :: forall (m :: * -> *). Language.Haskell.TH.Lib.Syntax.Quote m => m Language.Haskell.TH.Lib.Syntax.Type -> m Language.Haskell.TH.Lib.Syntax.Type -> m Language.Haskell.TH.Lib.Syntax.Type
-  appTypeE :: forall (m :: * -> *). Language.Haskell.TH.Lib.Syntax.Quote m => m Language.Haskell.TH.Lib.Syntax.Exp -> m Language.Haskell.TH.Lib.Syntax.Type -> m Language.Haskell.TH.Lib.Syntax.Exp
-  appsE :: forall (m :: * -> *). Language.Haskell.TH.Lib.Syntax.Quote m => [m Language.Haskell.TH.Lib.Syntax.Exp] -> m Language.Haskell.TH.Lib.Syntax.Exp
-  arithSeqE :: forall (m :: * -> *). Language.Haskell.TH.Lib.Syntax.Quote m => m Language.Haskell.TH.Lib.Syntax.Range -> m Language.Haskell.TH.Lib.Syntax.Exp
-  arrowK :: Language.Haskell.TH.Lib.Syntax.Kind
-  arrowT :: forall (m :: * -> *). Language.Haskell.TH.Lib.Syntax.Quote m => m Language.Haskell.TH.Lib.Syntax.Type
-  asP :: forall (m :: * -> *). Language.Haskell.TH.Lib.Syntax.Quote m => Language.Haskell.TH.Lib.Syntax.Name -> m Language.Haskell.TH.Lib.Syntax.Pat -> m Language.Haskell.TH.Lib.Syntax.Pat
-  bang :: forall (m :: * -> *). Language.Haskell.TH.Lib.Syntax.Quote m => m Language.Haskell.TH.Lib.Syntax.SourceUnpackedness -> m Language.Haskell.TH.Lib.Syntax.SourceStrictness -> m Language.Haskell.TH.Lib.Syntax.Bang
-  bangP :: forall (m :: * -> *). Language.Haskell.TH.Lib.Syntax.Quote m => m Language.Haskell.TH.Lib.Syntax.Pat -> m Language.Haskell.TH.Lib.Syntax.Pat
-  bangType :: forall (m :: * -> *). Language.Haskell.TH.Lib.Syntax.Quote m => m Language.Haskell.TH.Lib.Syntax.Bang -> m Language.Haskell.TH.Lib.Syntax.Type -> m Language.Haskell.TH.Lib.Syntax.BangType
-  bindS :: forall (m :: * -> *). Language.Haskell.TH.Lib.Syntax.Quote m => m Language.Haskell.TH.Lib.Syntax.Pat -> m Language.Haskell.TH.Lib.Syntax.Exp -> m Language.Haskell.TH.Lib.Syntax.Stmt
-  bndrInvis :: Language.Haskell.TH.Lib.Syntax.BndrVis
-  bndrReq :: Language.Haskell.TH.Lib.Syntax.BndrVis
-  bytesPrimL :: Language.Haskell.TH.Lib.Syntax.Bytes -> Language.Haskell.TH.Lib.Syntax.Lit
-  cApi :: Language.Haskell.TH.Lib.Syntax.Callconv
-  cCall :: Language.Haskell.TH.Lib.Syntax.Callconv
-  caseE :: forall (m :: * -> *). Language.Haskell.TH.Lib.Syntax.Quote m => m Language.Haskell.TH.Lib.Syntax.Exp -> [m Language.Haskell.TH.Lib.Syntax.Match] -> m Language.Haskell.TH.Lib.Syntax.Exp
-  charL :: GHC.Types.Char -> Language.Haskell.TH.Lib.Syntax.Lit
-  charPrimL :: GHC.Types.Char -> Language.Haskell.TH.Lib.Syntax.Lit
-  charTyLit :: forall (m :: * -> *). Language.Haskell.TH.Lib.Syntax.Quote m => GHC.Types.Char -> m Language.Haskell.TH.Lib.Syntax.TyLit
-  classD :: forall (m :: * -> *). Language.Haskell.TH.Lib.Syntax.Quote m => m Language.Haskell.TH.Lib.Syntax.Cxt -> Language.Haskell.TH.Lib.Syntax.Name -> [m (Language.Haskell.TH.Lib.Syntax.TyVarBndr Language.Haskell.TH.Lib.Syntax.BndrVis)] -> [Language.Haskell.TH.Lib.Syntax.FunDep] -> [m Language.Haskell.TH.Lib.Syntax.Dec] -> m Language.Haskell.TH.Lib.Syntax.Dec
-  classP :: forall (m :: * -> *). Language.Haskell.TH.Lib.Syntax.Quote m => Language.Haskell.TH.Lib.Syntax.Name -> [m Language.Haskell.TH.Lib.Syntax.Type] -> m Language.Haskell.TH.Lib.Syntax.Pred
-  clause :: forall (m :: * -> *). Language.Haskell.TH.Lib.Syntax.Quote m => [m Language.Haskell.TH.Lib.Syntax.Pat] -> m Language.Haskell.TH.Lib.Syntax.Body -> [m Language.Haskell.TH.Lib.Syntax.Dec] -> m Language.Haskell.TH.Lib.Syntax.Clause
-  closedTypeFamilyD :: forall (m :: * -> *). Language.Haskell.TH.Lib.Syntax.Quote m => Language.Haskell.TH.Lib.Syntax.Name -> [m (Language.Haskell.TH.Lib.Syntax.TyVarBndr Language.Haskell.TH.Lib.Syntax.BndrVis)] -> m Language.Haskell.TH.Lib.Syntax.FamilyResultSig -> GHC.Internal.Maybe.Maybe InjectivityAnn -> [m Language.Haskell.TH.Lib.Syntax.TySynEqn] -> m Language.Haskell.TH.Lib.Syntax.Dec
-  compE :: forall (m :: * -> *). Language.Haskell.TH.Lib.Syntax.Quote m => [m Language.Haskell.TH.Lib.Syntax.Stmt] -> m Language.Haskell.TH.Lib.Syntax.Exp
-  conE :: forall (m :: * -> *). Language.Haskell.TH.Lib.Syntax.Quote m => Language.Haskell.TH.Lib.Syntax.Name -> m Language.Haskell.TH.Lib.Syntax.Exp
-  conK :: Language.Haskell.TH.Lib.Syntax.Name -> Language.Haskell.TH.Lib.Syntax.Kind
-  conP :: forall (m :: * -> *). Language.Haskell.TH.Lib.Syntax.Quote m => Language.Haskell.TH.Lib.Syntax.Name -> [m Language.Haskell.TH.Lib.Syntax.Type] -> [m Language.Haskell.TH.Lib.Syntax.Pat] -> m Language.Haskell.TH.Lib.Syntax.Pat
-  conT :: forall (m :: * -> *). Language.Haskell.TH.Lib.Syntax.Quote m => Language.Haskell.TH.Lib.Syntax.Name -> m Language.Haskell.TH.Lib.Syntax.Type
-  condE :: forall (m :: * -> *). Language.Haskell.TH.Lib.Syntax.Quote m => m Language.Haskell.TH.Lib.Syntax.Exp -> m Language.Haskell.TH.Lib.Syntax.Exp -> m Language.Haskell.TH.Lib.Syntax.Exp -> m Language.Haskell.TH.Lib.Syntax.Exp
-  constraintK :: forall (m :: * -> *). Language.Haskell.TH.Lib.Syntax.Quote m => m Language.Haskell.TH.Lib.Syntax.Kind
-  cxt :: forall (m :: * -> *). Language.Haskell.TH.Lib.Syntax.Quote m => [m Language.Haskell.TH.Lib.Syntax.Pred] -> m Language.Haskell.TH.Lib.Syntax.Cxt
-  dataD :: forall (m :: * -> *). Language.Haskell.TH.Lib.Syntax.Quote m => m Language.Haskell.TH.Lib.Syntax.Cxt -> Language.Haskell.TH.Lib.Syntax.Name -> [m (Language.Haskell.TH.Lib.Syntax.TyVarBndr Language.Haskell.TH.Lib.Syntax.BndrVis)] -> GHC.Internal.Maybe.Maybe (m Language.Haskell.TH.Lib.Syntax.Kind) -> [m Language.Haskell.TH.Lib.Syntax.Con] -> [m Language.Haskell.TH.Lib.Syntax.DerivClause] -> m Language.Haskell.TH.Lib.Syntax.Dec
-  dataD_doc ::
-    Language.Haskell.TH.Lib.Syntax.Q Language.Haskell.TH.Lib.Syntax.Cxt
-    -> Language.Haskell.TH.Lib.Syntax.Name -> [Language.Haskell.TH.Lib.Syntax.Q (Language.Haskell.TH.Lib.Syntax.TyVarBndr Language.Haskell.TH.Lib.Syntax.BndrVis)] -> GHC.Internal.Maybe.Maybe (Language.Haskell.TH.Lib.Syntax.Q Language.Haskell.TH.Lib.Syntax.Kind) -> [(Language.Haskell.TH.Lib.Syntax.Q Language.Haskell.TH.Lib.Syntax.Con, GHC.Internal.Maybe.Maybe GHC.Internal.Base.String, [GHC.Internal.Maybe.Maybe GHC.Internal.Base.String])] -> [Language.Haskell.TH.Lib.Syntax.Q Language.Haskell.TH.Lib.Syntax.DerivClause] -> GHC.Internal.Maybe.Maybe GHC.Internal.Base.String -> Language.Haskell.TH.Lib.Syntax.Q Language.Haskell.TH.Lib.Syntax.Dec
-  dataFamilyD :: forall (m :: * -> *). Language.Haskell.TH.Lib.Syntax.Quote m => Language.Haskell.TH.Lib.Syntax.Name -> [m (Language.Haskell.TH.Lib.Syntax.TyVarBndr Language.Haskell.TH.Lib.Syntax.BndrVis)] -> GHC.Internal.Maybe.Maybe (m Language.Haskell.TH.Lib.Syntax.Kind) -> m Language.Haskell.TH.Lib.Syntax.Dec
-  dataInstD :: forall (m :: * -> *). Language.Haskell.TH.Lib.Syntax.Quote m => m Language.Haskell.TH.Lib.Syntax.Cxt -> GHC.Internal.Maybe.Maybe [m (Language.Haskell.TH.Lib.Syntax.TyVarBndr ())] -> m Language.Haskell.TH.Lib.Syntax.Type -> GHC.Internal.Maybe.Maybe (m Language.Haskell.TH.Lib.Syntax.Kind) -> [m Language.Haskell.TH.Lib.Syntax.Con] -> [m Language.Haskell.TH.Lib.Syntax.DerivClause] -> m Language.Haskell.TH.Lib.Syntax.Dec
-  dataInstD_doc ::
-    Language.Haskell.TH.Lib.Syntax.Q Language.Haskell.TH.Lib.Syntax.Cxt
-    -> GHC.Internal.Maybe.Maybe [Language.Haskell.TH.Lib.Syntax.Q (Language.Haskell.TH.Lib.Syntax.TyVarBndr ())] -> Language.Haskell.TH.Lib.Syntax.Q Language.Haskell.TH.Lib.Syntax.Type -> GHC.Internal.Maybe.Maybe (Language.Haskell.TH.Lib.Syntax.Q Language.Haskell.TH.Lib.Syntax.Kind) -> [(Language.Haskell.TH.Lib.Syntax.Q Language.Haskell.TH.Lib.Syntax.Con, GHC.Internal.Maybe.Maybe GHC.Internal.Base.String, [GHC.Internal.Maybe.Maybe GHC.Internal.Base.String])] -> [Language.Haskell.TH.Lib.Syntax.Q Language.Haskell.TH.Lib.Syntax.DerivClause] -> GHC.Internal.Maybe.Maybe GHC.Internal.Base.String -> Language.Haskell.TH.Lib.Syntax.Q Language.Haskell.TH.Lib.Syntax.Dec
-  defaultD :: forall (m :: * -> *). Language.Haskell.TH.Lib.Syntax.Quote m => [m Language.Haskell.TH.Lib.Syntax.Type] -> m Language.Haskell.TH.Lib.Syntax.Dec
-  defaultSigD :: forall (m :: * -> *). Language.Haskell.TH.Lib.Syntax.Quote m => Language.Haskell.TH.Lib.Syntax.Name -> m Language.Haskell.TH.Lib.Syntax.Type -> m Language.Haskell.TH.Lib.Syntax.Dec
-  derivClause :: forall (m :: * -> *). Language.Haskell.TH.Lib.Syntax.Quote m => GHC.Internal.Maybe.Maybe (m Language.Haskell.TH.Lib.Syntax.DerivStrategy) -> [m Language.Haskell.TH.Lib.Syntax.Pred] -> m Language.Haskell.TH.Lib.Syntax.DerivClause
-  doE :: forall (m :: * -> *). Language.Haskell.TH.Lib.Syntax.Quote m => GHC.Internal.Maybe.Maybe Language.Haskell.TH.Lib.Syntax.ModName -> [m Language.Haskell.TH.Lib.Syntax.Stmt] -> m Language.Haskell.TH.Lib.Syntax.Exp
-  docCons :: (Language.Haskell.TH.Lib.Syntax.Q Language.Haskell.TH.Lib.Syntax.Con, GHC.Internal.Maybe.Maybe GHC.Internal.Base.String, [GHC.Internal.Maybe.Maybe GHC.Internal.Base.String]) -> Language.Haskell.TH.Lib.Syntax.Q ()
-  doublePrimL :: GHC.Internal.Real.Rational -> Language.Haskell.TH.Lib.Syntax.Lit
-  dyn :: forall (m :: * -> *). Language.Haskell.TH.Lib.Syntax.Quote m => GHC.Internal.Base.String -> m Language.Haskell.TH.Lib.Syntax.Exp
-  equalP :: forall (m :: * -> *). Language.Haskell.TH.Lib.Syntax.Quote m => m Language.Haskell.TH.Lib.Syntax.Type -> m Language.Haskell.TH.Lib.Syntax.Type -> m Language.Haskell.TH.Lib.Syntax.Pred
-  equalityT :: forall (m :: * -> *). Language.Haskell.TH.Lib.Syntax.Quote m => m Language.Haskell.TH.Lib.Syntax.Type
-  explBidir :: forall (m :: * -> *). Language.Haskell.TH.Lib.Syntax.Quote m => [m Language.Haskell.TH.Lib.Syntax.Clause] -> m Language.Haskell.TH.Lib.Syntax.PatSynDir
-  fieldExp :: forall (m :: * -> *). Language.Haskell.TH.Lib.Syntax.Quote m => Language.Haskell.TH.Lib.Syntax.Name -> m Language.Haskell.TH.Lib.Syntax.Exp -> m (Language.Haskell.TH.Lib.Syntax.Name, Language.Haskell.TH.Lib.Syntax.Exp)
-  fieldPat :: forall (m :: * -> *). Language.Haskell.TH.Lib.Syntax.Quote m => Language.Haskell.TH.Lib.Syntax.Name -> m Language.Haskell.TH.Lib.Syntax.Pat -> m Language.Haskell.TH.Lib.Syntax.FieldPat
-  floatPrimL :: GHC.Internal.Real.Rational -> Language.Haskell.TH.Lib.Syntax.Lit
-  forImpD :: forall (m :: * -> *). Language.Haskell.TH.Lib.Syntax.Quote m => Language.Haskell.TH.Lib.Syntax.Callconv -> Language.Haskell.TH.Lib.Syntax.Safety -> GHC.Internal.Base.String -> Language.Haskell.TH.Lib.Syntax.Name -> m Language.Haskell.TH.Lib.Syntax.Type -> m Language.Haskell.TH.Lib.Syntax.Dec
-  forallC :: forall (m :: * -> *). Language.Haskell.TH.Lib.Syntax.Quote m => [m (Language.Haskell.TH.Lib.Syntax.TyVarBndr Language.Haskell.TH.Lib.Syntax.Specificity)] -> m Language.Haskell.TH.Lib.Syntax.Cxt -> m Language.Haskell.TH.Lib.Syntax.Con -> m Language.Haskell.TH.Lib.Syntax.Con
-  forallT :: forall (m :: * -> *). Language.Haskell.TH.Lib.Syntax.Quote m => [m (Language.Haskell.TH.Lib.Syntax.TyVarBndr Language.Haskell.TH.Lib.Syntax.Specificity)] -> m Language.Haskell.TH.Lib.Syntax.Cxt -> m Language.Haskell.TH.Lib.Syntax.Type -> m Language.Haskell.TH.Lib.Syntax.Type
-  forallVisT :: forall (m :: * -> *). Language.Haskell.TH.Lib.Syntax.Quote m => [m (Language.Haskell.TH.Lib.Syntax.TyVarBndr ())] -> m Language.Haskell.TH.Lib.Syntax.Type -> m Language.Haskell.TH.Lib.Syntax.Type
-  fromE :: forall (m :: * -> *). Language.Haskell.TH.Lib.Syntax.Quote m => m Language.Haskell.TH.Lib.Syntax.Exp -> m Language.Haskell.TH.Lib.Syntax.Exp
-  fromR :: forall (m :: * -> *). Language.Haskell.TH.Lib.Syntax.Quote m => m Language.Haskell.TH.Lib.Syntax.Exp -> m Language.Haskell.TH.Lib.Syntax.Range
-  fromThenE :: forall (m :: * -> *). Language.Haskell.TH.Lib.Syntax.Quote m => m Language.Haskell.TH.Lib.Syntax.Exp -> m Language.Haskell.TH.Lib.Syntax.Exp -> m Language.Haskell.TH.Lib.Syntax.Exp
-  fromThenR :: forall (m :: * -> *). Language.Haskell.TH.Lib.Syntax.Quote m => m Language.Haskell.TH.Lib.Syntax.Exp -> m Language.Haskell.TH.Lib.Syntax.Exp -> m Language.Haskell.TH.Lib.Syntax.Range
-  fromThenToE :: forall (m :: * -> *). Language.Haskell.TH.Lib.Syntax.Quote m => m Language.Haskell.TH.Lib.Syntax.Exp -> m Language.Haskell.TH.Lib.Syntax.Exp -> m Language.Haskell.TH.Lib.Syntax.Exp -> m Language.Haskell.TH.Lib.Syntax.Exp
-  fromThenToR :: forall (m :: * -> *). Language.Haskell.TH.Lib.Syntax.Quote m => m Language.Haskell.TH.Lib.Syntax.Exp -> m Language.Haskell.TH.Lib.Syntax.Exp -> m Language.Haskell.TH.Lib.Syntax.Exp -> m Language.Haskell.TH.Lib.Syntax.Range
-  fromToE :: forall (m :: * -> *). Language.Haskell.TH.Lib.Syntax.Quote m => m Language.Haskell.TH.Lib.Syntax.Exp -> m Language.Haskell.TH.Lib.Syntax.Exp -> m Language.Haskell.TH.Lib.Syntax.Exp
-  fromToR :: forall (m :: * -> *). Language.Haskell.TH.Lib.Syntax.Quote m => m Language.Haskell.TH.Lib.Syntax.Exp -> m Language.Haskell.TH.Lib.Syntax.Exp -> m Language.Haskell.TH.Lib.Syntax.Range
-  funD :: forall (m :: * -> *). Language.Haskell.TH.Lib.Syntax.Quote m => Language.Haskell.TH.Lib.Syntax.Name -> [m Language.Haskell.TH.Lib.Syntax.Clause] -> m Language.Haskell.TH.Lib.Syntax.Dec
-  funD_doc :: Language.Haskell.TH.Lib.Syntax.Name -> [Language.Haskell.TH.Lib.Syntax.Q Language.Haskell.TH.Lib.Syntax.Clause] -> GHC.Internal.Maybe.Maybe GHC.Internal.Base.String -> [GHC.Internal.Maybe.Maybe GHC.Internal.Base.String] -> Language.Haskell.TH.Lib.Syntax.Q Language.Haskell.TH.Lib.Syntax.Dec
-  funDep :: [Language.Haskell.TH.Lib.Syntax.Name] -> [Language.Haskell.TH.Lib.Syntax.Name] -> Language.Haskell.TH.Lib.Syntax.FunDep
-  gadtC :: forall (m :: * -> *). Language.Haskell.TH.Lib.Syntax.Quote m => [Language.Haskell.TH.Lib.Syntax.Name] -> [m Language.Haskell.TH.Lib.Syntax.StrictType] -> m Language.Haskell.TH.Lib.Syntax.Type -> m Language.Haskell.TH.Lib.Syntax.Con
-  getFieldE :: forall (m :: * -> *). Language.Haskell.TH.Lib.Syntax.Quote m => m Language.Haskell.TH.Lib.Syntax.Exp -> GHC.Internal.Base.String -> m Language.Haskell.TH.Lib.Syntax.Exp
-  guardedB :: forall (m :: * -> *). Language.Haskell.TH.Lib.Syntax.Quote m => [m (Language.Haskell.TH.Lib.Syntax.Guard, Language.Haskell.TH.Lib.Syntax.Exp)] -> m Language.Haskell.TH.Lib.Syntax.Body
-  implBidir :: forall (m :: * -> *). Language.Haskell.TH.Lib.Syntax.Quote m => m Language.Haskell.TH.Lib.Syntax.PatSynDir
-  implicitParamBindD :: forall (m :: * -> *). Language.Haskell.TH.Lib.Syntax.Quote m => GHC.Internal.Base.String -> m Language.Haskell.TH.Lib.Syntax.Exp -> m Language.Haskell.TH.Lib.Syntax.Dec
-  implicitParamT :: forall (m :: * -> *). Language.Haskell.TH.Lib.Syntax.Quote m => GHC.Internal.Base.String -> m Language.Haskell.TH.Lib.Syntax.Type -> m Language.Haskell.TH.Lib.Syntax.Type
-  implicitParamVarE :: forall (m :: * -> *). Language.Haskell.TH.Lib.Syntax.Quote m => GHC.Internal.Base.String -> m Language.Haskell.TH.Lib.Syntax.Exp
+  type VarStrictTypeQ = GHC.Internal.TH.Syntax.Q GHC.Internal.TH.Syntax.VarStrictType
+  anyclassStrategy :: forall (m :: * -> *). GHC.Internal.TH.Syntax.Quote m => m GHC.Internal.TH.Syntax.DerivStrategy
+  appE :: forall (m :: * -> *). GHC.Internal.TH.Syntax.Quote m => m GHC.Internal.TH.Syntax.Exp -> m GHC.Internal.TH.Syntax.Exp -> m GHC.Internal.TH.Syntax.Exp
+  appK :: GHC.Internal.TH.Syntax.Kind -> GHC.Internal.TH.Syntax.Kind -> GHC.Internal.TH.Syntax.Kind
+  appKindT :: forall (m :: * -> *). GHC.Internal.TH.Syntax.Quote m => m GHC.Internal.TH.Syntax.Type -> m GHC.Internal.TH.Syntax.Kind -> m GHC.Internal.TH.Syntax.Type
+  appT :: forall (m :: * -> *). GHC.Internal.TH.Syntax.Quote m => m GHC.Internal.TH.Syntax.Type -> m GHC.Internal.TH.Syntax.Type -> m GHC.Internal.TH.Syntax.Type
+  appTypeE :: forall (m :: * -> *). GHC.Internal.TH.Syntax.Quote m => m GHC.Internal.TH.Syntax.Exp -> m GHC.Internal.TH.Syntax.Type -> m GHC.Internal.TH.Syntax.Exp
+  appsE :: forall (m :: * -> *). GHC.Internal.TH.Syntax.Quote m => [m GHC.Internal.TH.Syntax.Exp] -> m GHC.Internal.TH.Syntax.Exp
+  arithSeqE :: forall (m :: * -> *). GHC.Internal.TH.Syntax.Quote m => m GHC.Internal.TH.Syntax.Range -> m GHC.Internal.TH.Syntax.Exp
+  arrowK :: GHC.Internal.TH.Syntax.Kind
+  arrowT :: forall (m :: * -> *). GHC.Internal.TH.Syntax.Quote m => m GHC.Internal.TH.Syntax.Type
+  asP :: forall (m :: * -> *). GHC.Internal.TH.Syntax.Quote m => GHC.Internal.TH.Syntax.Name -> m GHC.Internal.TH.Syntax.Pat -> m GHC.Internal.TH.Syntax.Pat
+  bang :: forall (m :: * -> *). GHC.Internal.TH.Syntax.Quote m => m GHC.Internal.TH.Syntax.SourceUnpackedness -> m GHC.Internal.TH.Syntax.SourceStrictness -> m GHC.Internal.TH.Syntax.Bang
+  bangP :: forall (m :: * -> *). GHC.Internal.TH.Syntax.Quote m => m GHC.Internal.TH.Syntax.Pat -> m GHC.Internal.TH.Syntax.Pat
+  bangType :: forall (m :: * -> *). GHC.Internal.TH.Syntax.Quote m => m GHC.Internal.TH.Syntax.Bang -> m GHC.Internal.TH.Syntax.Type -> m GHC.Internal.TH.Syntax.BangType
+  bindS :: forall (m :: * -> *). GHC.Internal.TH.Syntax.Quote m => m GHC.Internal.TH.Syntax.Pat -> m GHC.Internal.TH.Syntax.Exp -> m GHC.Internal.TH.Syntax.Stmt
+  bndrInvis :: GHC.Internal.TH.Syntax.BndrVis
+  bndrReq :: GHC.Internal.TH.Syntax.BndrVis
+  bytesPrimL :: GHC.Internal.TH.Syntax.Bytes -> GHC.Internal.TH.Syntax.Lit
+  cApi :: GHC.Internal.TH.Syntax.Callconv
+  cCall :: GHC.Internal.TH.Syntax.Callconv
+  caseE :: forall (m :: * -> *). GHC.Internal.TH.Syntax.Quote m => m GHC.Internal.TH.Syntax.Exp -> [m GHC.Internal.TH.Syntax.Match] -> m GHC.Internal.TH.Syntax.Exp
+  charL :: GHC.Types.Char -> GHC.Internal.TH.Syntax.Lit
+  charPrimL :: GHC.Types.Char -> GHC.Internal.TH.Syntax.Lit
+  charTyLit :: forall (m :: * -> *). GHC.Internal.TH.Syntax.Quote m => GHC.Types.Char -> m GHC.Internal.TH.Syntax.TyLit
+  classD :: forall (m :: * -> *). GHC.Internal.TH.Syntax.Quote m => m GHC.Internal.TH.Syntax.Cxt -> GHC.Internal.TH.Syntax.Name -> [m (GHC.Internal.TH.Syntax.TyVarBndr GHC.Internal.TH.Syntax.BndrVis)] -> [GHC.Internal.TH.Syntax.FunDep] -> [m GHC.Internal.TH.Syntax.Dec] -> m GHC.Internal.TH.Syntax.Dec
+  classP :: forall (m :: * -> *). GHC.Internal.TH.Syntax.Quote m => GHC.Internal.TH.Syntax.Name -> [m GHC.Internal.TH.Syntax.Type] -> m GHC.Internal.TH.Syntax.Pred
+  clause :: forall (m :: * -> *). GHC.Internal.TH.Syntax.Quote m => [m GHC.Internal.TH.Syntax.Pat] -> m GHC.Internal.TH.Syntax.Body -> [m GHC.Internal.TH.Syntax.Dec] -> m GHC.Internal.TH.Syntax.Clause
+  closedTypeFamilyD :: forall (m :: * -> *). GHC.Internal.TH.Syntax.Quote m => GHC.Internal.TH.Syntax.Name -> [m (GHC.Internal.TH.Syntax.TyVarBndr GHC.Internal.TH.Syntax.BndrVis)] -> m GHC.Internal.TH.Syntax.FamilyResultSig -> GHC.Internal.Maybe.Maybe InjectivityAnn -> [m GHC.Internal.TH.Syntax.TySynEqn] -> m GHC.Internal.TH.Syntax.Dec
+  compE :: forall (m :: * -> *). GHC.Internal.TH.Syntax.Quote m => [m GHC.Internal.TH.Syntax.Stmt] -> m GHC.Internal.TH.Syntax.Exp
+  conE :: forall (m :: * -> *). GHC.Internal.TH.Syntax.Quote m => GHC.Internal.TH.Syntax.Name -> m GHC.Internal.TH.Syntax.Exp
+  conK :: GHC.Internal.TH.Syntax.Name -> GHC.Internal.TH.Syntax.Kind
+  conP :: forall (m :: * -> *). GHC.Internal.TH.Syntax.Quote m => GHC.Internal.TH.Syntax.Name -> [m GHC.Internal.TH.Syntax.Type] -> [m GHC.Internal.TH.Syntax.Pat] -> m GHC.Internal.TH.Syntax.Pat
+  conT :: forall (m :: * -> *). GHC.Internal.TH.Syntax.Quote m => GHC.Internal.TH.Syntax.Name -> m GHC.Internal.TH.Syntax.Type
+  condE :: forall (m :: * -> *). GHC.Internal.TH.Syntax.Quote m => m GHC.Internal.TH.Syntax.Exp -> m GHC.Internal.TH.Syntax.Exp -> m GHC.Internal.TH.Syntax.Exp -> m GHC.Internal.TH.Syntax.Exp
+  constraintK :: forall (m :: * -> *). GHC.Internal.TH.Syntax.Quote m => m GHC.Internal.TH.Syntax.Kind
+  cxt :: forall (m :: * -> *). GHC.Internal.TH.Syntax.Quote m => [m GHC.Internal.TH.Syntax.Pred] -> m GHC.Internal.TH.Syntax.Cxt
+  dataD :: forall (m :: * -> *). GHC.Internal.TH.Syntax.Quote m => m GHC.Internal.TH.Syntax.Cxt -> GHC.Internal.TH.Syntax.Name -> [m (GHC.Internal.TH.Syntax.TyVarBndr GHC.Internal.TH.Syntax.BndrVis)] -> GHC.Internal.Maybe.Maybe (m GHC.Internal.TH.Syntax.Kind) -> [m GHC.Internal.TH.Syntax.Con] -> [m GHC.Internal.TH.Syntax.DerivClause] -> m GHC.Internal.TH.Syntax.Dec
+  dataD_doc :: GHC.Internal.TH.Syntax.Q GHC.Internal.TH.Syntax.Cxt -> GHC.Internal.TH.Syntax.Name -> [GHC.Internal.TH.Syntax.Q (GHC.Internal.TH.Syntax.TyVarBndr GHC.Internal.TH.Syntax.BndrVis)] -> GHC.Internal.Maybe.Maybe (GHC.Internal.TH.Syntax.Q GHC.Internal.TH.Syntax.Kind) -> [(GHC.Internal.TH.Syntax.Q GHC.Internal.TH.Syntax.Con, GHC.Internal.Maybe.Maybe GHC.Internal.Base.String, [GHC.Internal.Maybe.Maybe GHC.Internal.Base.String])] -> [GHC.Internal.TH.Syntax.Q GHC.Internal.TH.Syntax.DerivClause] -> GHC.Internal.Maybe.Maybe GHC.Internal.Base.String -> GHC.Internal.TH.Syntax.Q GHC.Internal.TH.Syntax.Dec
+  dataFamilyD :: forall (m :: * -> *). GHC.Internal.TH.Syntax.Quote m => GHC.Internal.TH.Syntax.Name -> [m (GHC.Internal.TH.Syntax.TyVarBndr GHC.Internal.TH.Syntax.BndrVis)] -> GHC.Internal.Maybe.Maybe (m GHC.Internal.TH.Syntax.Kind) -> m GHC.Internal.TH.Syntax.Dec
+  dataInstD :: forall (m :: * -> *). GHC.Internal.TH.Syntax.Quote m => m GHC.Internal.TH.Syntax.Cxt -> GHC.Internal.Maybe.Maybe [m (GHC.Internal.TH.Syntax.TyVarBndr ())] -> m GHC.Internal.TH.Syntax.Type -> GHC.Internal.Maybe.Maybe (m GHC.Internal.TH.Syntax.Kind) -> [m GHC.Internal.TH.Syntax.Con] -> [m GHC.Internal.TH.Syntax.DerivClause] -> m GHC.Internal.TH.Syntax.Dec
+  dataInstD_doc :: GHC.Internal.TH.Syntax.Q GHC.Internal.TH.Syntax.Cxt -> GHC.Internal.Maybe.Maybe [GHC.Internal.TH.Syntax.Q (GHC.Internal.TH.Syntax.TyVarBndr ())] -> GHC.Internal.TH.Syntax.Q GHC.Internal.TH.Syntax.Type -> GHC.Internal.Maybe.Maybe (GHC.Internal.TH.Syntax.Q GHC.Internal.TH.Syntax.Kind) -> [(GHC.Internal.TH.Syntax.Q GHC.Internal.TH.Syntax.Con, GHC.Internal.Maybe.Maybe GHC.Internal.Base.String, [GHC.Internal.Maybe.Maybe GHC.Internal.Base.String])] -> [GHC.Internal.TH.Syntax.Q GHC.Internal.TH.Syntax.DerivClause] -> GHC.Internal.Maybe.Maybe GHC.Internal.Base.String -> GHC.Internal.TH.Syntax.Q GHC.Internal.TH.Syntax.Dec
+  defaultD :: forall (m :: * -> *). GHC.Internal.TH.Syntax.Quote m => [m GHC.Internal.TH.Syntax.Type] -> m GHC.Internal.TH.Syntax.Dec
+  defaultSigD :: forall (m :: * -> *). GHC.Internal.TH.Syntax.Quote m => GHC.Internal.TH.Syntax.Name -> m GHC.Internal.TH.Syntax.Type -> m GHC.Internal.TH.Syntax.Dec
+  derivClause :: forall (m :: * -> *). GHC.Internal.TH.Syntax.Quote m => GHC.Internal.Maybe.Maybe (m GHC.Internal.TH.Syntax.DerivStrategy) -> [m GHC.Internal.TH.Syntax.Pred] -> m GHC.Internal.TH.Syntax.DerivClause
+  doE :: forall (m :: * -> *). GHC.Internal.TH.Syntax.Quote m => GHC.Internal.Maybe.Maybe GHC.Internal.TH.Syntax.ModName -> [m GHC.Internal.TH.Syntax.Stmt] -> m GHC.Internal.TH.Syntax.Exp
+  docCons :: (GHC.Internal.TH.Syntax.Q GHC.Internal.TH.Syntax.Con, GHC.Internal.Maybe.Maybe GHC.Internal.Base.String, [GHC.Internal.Maybe.Maybe GHC.Internal.Base.String]) -> GHC.Internal.TH.Syntax.Q ()
+  doublePrimL :: GHC.Internal.Real.Rational -> GHC.Internal.TH.Syntax.Lit
+  dyn :: forall (m :: * -> *). GHC.Internal.TH.Syntax.Quote m => GHC.Internal.Base.String -> m GHC.Internal.TH.Syntax.Exp
+  equalP :: forall (m :: * -> *). GHC.Internal.TH.Syntax.Quote m => m GHC.Internal.TH.Syntax.Type -> m GHC.Internal.TH.Syntax.Type -> m GHC.Internal.TH.Syntax.Pred
+  equalityT :: forall (m :: * -> *). GHC.Internal.TH.Syntax.Quote m => m GHC.Internal.TH.Syntax.Type
+  explBidir :: forall (m :: * -> *). GHC.Internal.TH.Syntax.Quote m => [m GHC.Internal.TH.Syntax.Clause] -> m GHC.Internal.TH.Syntax.PatSynDir
+  fieldExp :: forall (m :: * -> *). GHC.Internal.TH.Syntax.Quote m => GHC.Internal.TH.Syntax.Name -> m GHC.Internal.TH.Syntax.Exp -> m (GHC.Internal.TH.Syntax.Name, GHC.Internal.TH.Syntax.Exp)
+  fieldPat :: forall (m :: * -> *). GHC.Internal.TH.Syntax.Quote m => GHC.Internal.TH.Syntax.Name -> m GHC.Internal.TH.Syntax.Pat -> m GHC.Internal.TH.Syntax.FieldPat
+  floatPrimL :: GHC.Internal.Real.Rational -> GHC.Internal.TH.Syntax.Lit
+  forImpD :: forall (m :: * -> *). GHC.Internal.TH.Syntax.Quote m => GHC.Internal.TH.Syntax.Callconv -> GHC.Internal.TH.Syntax.Safety -> GHC.Internal.Base.String -> GHC.Internal.TH.Syntax.Name -> m GHC.Internal.TH.Syntax.Type -> m GHC.Internal.TH.Syntax.Dec
+  forallC :: forall (m :: * -> *). GHC.Internal.TH.Syntax.Quote m => [m (GHC.Internal.TH.Syntax.TyVarBndr GHC.Internal.TH.Syntax.Specificity)] -> m GHC.Internal.TH.Syntax.Cxt -> m GHC.Internal.TH.Syntax.Con -> m GHC.Internal.TH.Syntax.Con
+  forallT :: forall (m :: * -> *). GHC.Internal.TH.Syntax.Quote m => [m (GHC.Internal.TH.Syntax.TyVarBndr GHC.Internal.TH.Syntax.Specificity)] -> m GHC.Internal.TH.Syntax.Cxt -> m GHC.Internal.TH.Syntax.Type -> m GHC.Internal.TH.Syntax.Type
+  forallVisT :: forall (m :: * -> *). GHC.Internal.TH.Syntax.Quote m => [m (GHC.Internal.TH.Syntax.TyVarBndr ())] -> m GHC.Internal.TH.Syntax.Type -> m GHC.Internal.TH.Syntax.Type
+  fromE :: forall (m :: * -> *). GHC.Internal.TH.Syntax.Quote m => m GHC.Internal.TH.Syntax.Exp -> m GHC.Internal.TH.Syntax.Exp
+  fromR :: forall (m :: * -> *). GHC.Internal.TH.Syntax.Quote m => m GHC.Internal.TH.Syntax.Exp -> m GHC.Internal.TH.Syntax.Range
+  fromThenE :: forall (m :: * -> *). GHC.Internal.TH.Syntax.Quote m => m GHC.Internal.TH.Syntax.Exp -> m GHC.Internal.TH.Syntax.Exp -> m GHC.Internal.TH.Syntax.Exp
+  fromThenR :: forall (m :: * -> *). GHC.Internal.TH.Syntax.Quote m => m GHC.Internal.TH.Syntax.Exp -> m GHC.Internal.TH.Syntax.Exp -> m GHC.Internal.TH.Syntax.Range
+  fromThenToE :: forall (m :: * -> *). GHC.Internal.TH.Syntax.Quote m => m GHC.Internal.TH.Syntax.Exp -> m GHC.Internal.TH.Syntax.Exp -> m GHC.Internal.TH.Syntax.Exp -> m GHC.Internal.TH.Syntax.Exp
+  fromThenToR :: forall (m :: * -> *). GHC.Internal.TH.Syntax.Quote m => m GHC.Internal.TH.Syntax.Exp -> m GHC.Internal.TH.Syntax.Exp -> m GHC.Internal.TH.Syntax.Exp -> m GHC.Internal.TH.Syntax.Range
+  fromToE :: forall (m :: * -> *). GHC.Internal.TH.Syntax.Quote m => m GHC.Internal.TH.Syntax.Exp -> m GHC.Internal.TH.Syntax.Exp -> m GHC.Internal.TH.Syntax.Exp
+  fromToR :: forall (m :: * -> *). GHC.Internal.TH.Syntax.Quote m => m GHC.Internal.TH.Syntax.Exp -> m GHC.Internal.TH.Syntax.Exp -> m GHC.Internal.TH.Syntax.Range
+  funD :: forall (m :: * -> *). GHC.Internal.TH.Syntax.Quote m => GHC.Internal.TH.Syntax.Name -> [m GHC.Internal.TH.Syntax.Clause] -> m GHC.Internal.TH.Syntax.Dec
+  funD_doc :: GHC.Internal.TH.Syntax.Name -> [GHC.Internal.TH.Syntax.Q GHC.Internal.TH.Syntax.Clause] -> GHC.Internal.Maybe.Maybe GHC.Internal.Base.String -> [GHC.Internal.Maybe.Maybe GHC.Internal.Base.String] -> GHC.Internal.TH.Syntax.Q GHC.Internal.TH.Syntax.Dec
+  funDep :: [GHC.Internal.TH.Syntax.Name] -> [GHC.Internal.TH.Syntax.Name] -> GHC.Internal.TH.Syntax.FunDep
+  gadtC :: forall (m :: * -> *). GHC.Internal.TH.Syntax.Quote m => [GHC.Internal.TH.Syntax.Name] -> [m GHC.Internal.TH.Syntax.StrictType] -> m GHC.Internal.TH.Syntax.Type -> m GHC.Internal.TH.Syntax.Con
+  getFieldE :: forall (m :: * -> *). GHC.Internal.TH.Syntax.Quote m => m GHC.Internal.TH.Syntax.Exp -> GHC.Internal.Base.String -> m GHC.Internal.TH.Syntax.Exp
+  guardedB :: forall (m :: * -> *). GHC.Internal.TH.Syntax.Quote m => [m (GHC.Internal.TH.Syntax.Guard, GHC.Internal.TH.Syntax.Exp)] -> m GHC.Internal.TH.Syntax.Body
+  implBidir :: forall (m :: * -> *). GHC.Internal.TH.Syntax.Quote m => m GHC.Internal.TH.Syntax.PatSynDir
+  implicitParamBindD :: forall (m :: * -> *). GHC.Internal.TH.Syntax.Quote m => GHC.Internal.Base.String -> m GHC.Internal.TH.Syntax.Exp -> m GHC.Internal.TH.Syntax.Dec
+  implicitParamT :: forall (m :: * -> *). GHC.Internal.TH.Syntax.Quote m => GHC.Internal.Base.String -> m GHC.Internal.TH.Syntax.Type -> m GHC.Internal.TH.Syntax.Type
+  implicitParamVarE :: forall (m :: * -> *). GHC.Internal.TH.Syntax.Quote m => GHC.Internal.Base.String -> m GHC.Internal.TH.Syntax.Exp
   inferR :: Role
-  inferredSpec :: Language.Haskell.TH.Lib.Syntax.Specificity
-  infixApp :: forall (m :: * -> *). Language.Haskell.TH.Lib.Syntax.Quote m => m Language.Haskell.TH.Lib.Syntax.Exp -> m Language.Haskell.TH.Lib.Syntax.Exp -> m Language.Haskell.TH.Lib.Syntax.Exp -> m Language.Haskell.TH.Lib.Syntax.Exp
-  infixC :: forall (m :: * -> *). Language.Haskell.TH.Lib.Syntax.Quote m => m (Language.Haskell.TH.Lib.Syntax.Bang, Language.Haskell.TH.Lib.Syntax.Type) -> Language.Haskell.TH.Lib.Syntax.Name -> m (Language.Haskell.TH.Lib.Syntax.Bang, Language.Haskell.TH.Lib.Syntax.Type) -> m Language.Haskell.TH.Lib.Syntax.Con
-  infixE :: forall (m :: * -> *). Language.Haskell.TH.Lib.Syntax.Quote m => GHC.Internal.Maybe.Maybe (m Language.Haskell.TH.Lib.Syntax.Exp) -> m Language.Haskell.TH.Lib.Syntax.Exp -> GHC.Internal.Maybe.Maybe (m Language.Haskell.TH.Lib.Syntax.Exp) -> m Language.Haskell.TH.Lib.Syntax.Exp
-  infixLD :: forall (m :: * -> *). Language.Haskell.TH.Lib.Syntax.Quote m => GHC.Types.Int -> Language.Haskell.TH.Lib.Syntax.Name -> m Language.Haskell.TH.Lib.Syntax.Dec
-  infixLWithSpecD :: forall (m :: * -> *). Language.Haskell.TH.Lib.Syntax.Quote m => GHC.Types.Int -> Language.Haskell.TH.Lib.Syntax.NamespaceSpecifier -> Language.Haskell.TH.Lib.Syntax.Name -> m Language.Haskell.TH.Lib.Syntax.Dec
-  infixND :: forall (m :: * -> *). Language.Haskell.TH.Lib.Syntax.Quote m => GHC.Types.Int -> Language.Haskell.TH.Lib.Syntax.Name -> m Language.Haskell.TH.Lib.Syntax.Dec
-  infixNWithSpecD :: forall (m :: * -> *). Language.Haskell.TH.Lib.Syntax.Quote m => GHC.Types.Int -> Language.Haskell.TH.Lib.Syntax.NamespaceSpecifier -> Language.Haskell.TH.Lib.Syntax.Name -> m Language.Haskell.TH.Lib.Syntax.Dec
-  infixP :: forall (m :: * -> *). Language.Haskell.TH.Lib.Syntax.Quote m => m Language.Haskell.TH.Lib.Syntax.Pat -> Language.Haskell.TH.Lib.Syntax.Name -> m Language.Haskell.TH.Lib.Syntax.Pat -> m Language.Haskell.TH.Lib.Syntax.Pat
-  infixPatSyn :: forall (m :: * -> *). Language.Haskell.TH.Lib.Syntax.Quote m => Language.Haskell.TH.Lib.Syntax.Name -> Language.Haskell.TH.Lib.Syntax.Name -> m Language.Haskell.TH.Lib.Syntax.PatSynArgs
-  infixRD :: forall (m :: * -> *). Language.Haskell.TH.Lib.Syntax.Quote m => GHC.Types.Int -> Language.Haskell.TH.Lib.Syntax.Name -> m Language.Haskell.TH.Lib.Syntax.Dec
-  infixRWithSpecD :: forall (m :: * -> *). Language.Haskell.TH.Lib.Syntax.Quote m => GHC.Types.Int -> Language.Haskell.TH.Lib.Syntax.NamespaceSpecifier -> Language.Haskell.TH.Lib.Syntax.Name -> m Language.Haskell.TH.Lib.Syntax.Dec
-  infixT :: forall (m :: * -> *). Language.Haskell.TH.Lib.Syntax.Quote m => m Language.Haskell.TH.Lib.Syntax.Type -> Language.Haskell.TH.Lib.Syntax.Name -> m Language.Haskell.TH.Lib.Syntax.Type -> m Language.Haskell.TH.Lib.Syntax.Type
-  injectivityAnn :: Language.Haskell.TH.Lib.Syntax.Name -> [Language.Haskell.TH.Lib.Syntax.Name] -> InjectivityAnn
-  instanceD :: forall (m :: * -> *). Language.Haskell.TH.Lib.Syntax.Quote m => m Language.Haskell.TH.Lib.Syntax.Cxt -> m Language.Haskell.TH.Lib.Syntax.Type -> [m Language.Haskell.TH.Lib.Syntax.Dec] -> m Language.Haskell.TH.Lib.Syntax.Dec
-  instanceWithOverlapD :: forall (m :: * -> *). Language.Haskell.TH.Lib.Syntax.Quote m => GHC.Internal.Maybe.Maybe Language.Haskell.TH.Lib.Syntax.Overlap -> m Language.Haskell.TH.Lib.Syntax.Cxt -> m Language.Haskell.TH.Lib.Syntax.Type -> [m Language.Haskell.TH.Lib.Syntax.Dec] -> m Language.Haskell.TH.Lib.Syntax.Dec
-  intPrimL :: GHC.Num.Integer.Integer -> Language.Haskell.TH.Lib.Syntax.Lit
-  integerL :: GHC.Num.Integer.Integer -> Language.Haskell.TH.Lib.Syntax.Lit
-  interruptible :: Language.Haskell.TH.Lib.Syntax.Safety
-  invisP :: forall (m :: * -> *). Language.Haskell.TH.Lib.Syntax.Quote m => m Language.Haskell.TH.Lib.Syntax.Type -> m Language.Haskell.TH.Lib.Syntax.Pat
-  isStrict :: forall (m :: * -> *). Language.Haskell.TH.Lib.Syntax.Quote m => m Language.Haskell.TH.Lib.Syntax.Strict
-  javaScript :: Language.Haskell.TH.Lib.Syntax.Callconv
-  kiSigD :: forall (m :: * -> *). Language.Haskell.TH.Lib.Syntax.Quote m => Language.Haskell.TH.Lib.Syntax.Name -> m Language.Haskell.TH.Lib.Syntax.Kind -> m Language.Haskell.TH.Lib.Syntax.Dec
-  kindSig :: forall (m :: * -> *). Language.Haskell.TH.Lib.Syntax.Quote m => m Language.Haskell.TH.Lib.Syntax.Kind -> m Language.Haskell.TH.Lib.Syntax.FamilyResultSig
-  kindedBndrTV :: forall (m :: * -> *). Language.Haskell.TH.Lib.Syntax.Quote m => Language.Haskell.TH.Lib.Syntax.Name -> Language.Haskell.TH.Lib.Syntax.BndrVis -> m Language.Haskell.TH.Lib.Syntax.Kind -> m (Language.Haskell.TH.Lib.Syntax.TyVarBndr Language.Haskell.TH.Lib.Syntax.BndrVis)
-  kindedInvisTV :: forall (m :: * -> *). Language.Haskell.TH.Lib.Syntax.Quote m => Language.Haskell.TH.Lib.Syntax.Name -> Language.Haskell.TH.Lib.Syntax.Specificity -> m Language.Haskell.TH.Lib.Syntax.Kind -> m (Language.Haskell.TH.Lib.Syntax.TyVarBndr Language.Haskell.TH.Lib.Syntax.Specificity)
-  kindedTV :: forall (m :: * -> *). Language.Haskell.TH.Lib.Syntax.Quote m => Language.Haskell.TH.Lib.Syntax.Name -> m Language.Haskell.TH.Lib.Syntax.Kind -> m (Language.Haskell.TH.Lib.Syntax.TyVarBndr ())
-  labelE :: forall (m :: * -> *). Language.Haskell.TH.Lib.Syntax.Quote m => GHC.Internal.Base.String -> m Language.Haskell.TH.Lib.Syntax.Exp
-  lam1E :: forall (m :: * -> *). Language.Haskell.TH.Lib.Syntax.Quote m => m Language.Haskell.TH.Lib.Syntax.Pat -> m Language.Haskell.TH.Lib.Syntax.Exp -> m Language.Haskell.TH.Lib.Syntax.Exp
-  lamCaseE :: forall (m :: * -> *). Language.Haskell.TH.Lib.Syntax.Quote m => [m Language.Haskell.TH.Lib.Syntax.Match] -> m Language.Haskell.TH.Lib.Syntax.Exp
-  lamCasesE :: forall (m :: * -> *). Language.Haskell.TH.Lib.Syntax.Quote m => [m Language.Haskell.TH.Lib.Syntax.Clause] -> m Language.Haskell.TH.Lib.Syntax.Exp
-  lamE :: forall (m :: * -> *). Language.Haskell.TH.Lib.Syntax.Quote m => [m Language.Haskell.TH.Lib.Syntax.Pat] -> m Language.Haskell.TH.Lib.Syntax.Exp -> m Language.Haskell.TH.Lib.Syntax.Exp
-  letE :: forall (m :: * -> *). Language.Haskell.TH.Lib.Syntax.Quote m => [m Language.Haskell.TH.Lib.Syntax.Dec] -> m Language.Haskell.TH.Lib.Syntax.Exp -> m Language.Haskell.TH.Lib.Syntax.Exp
-  letS :: forall (m :: * -> *). Language.Haskell.TH.Lib.Syntax.Quote m => [m Language.Haskell.TH.Lib.Syntax.Dec] -> m Language.Haskell.TH.Lib.Syntax.Stmt
-  listE :: forall (m :: * -> *). Language.Haskell.TH.Lib.Syntax.Quote m => [m Language.Haskell.TH.Lib.Syntax.Exp] -> m Language.Haskell.TH.Lib.Syntax.Exp
-  listK :: Language.Haskell.TH.Lib.Syntax.Kind
-  listP :: forall (m :: * -> *). Language.Haskell.TH.Lib.Syntax.Quote m => [m Language.Haskell.TH.Lib.Syntax.Pat] -> m Language.Haskell.TH.Lib.Syntax.Pat
-  listT :: forall (m :: * -> *). Language.Haskell.TH.Lib.Syntax.Quote m => m Language.Haskell.TH.Lib.Syntax.Type
-  litE :: forall (m :: * -> *). Language.Haskell.TH.Lib.Syntax.Quote m => Language.Haskell.TH.Lib.Syntax.Lit -> m Language.Haskell.TH.Lib.Syntax.Exp
-  litP :: forall (m :: * -> *). Language.Haskell.TH.Lib.Syntax.Quote m => Language.Haskell.TH.Lib.Syntax.Lit -> m Language.Haskell.TH.Lib.Syntax.Pat
-  litT :: forall (m :: * -> *). Language.Haskell.TH.Lib.Syntax.Quote m => m Language.Haskell.TH.Lib.Syntax.TyLit -> m Language.Haskell.TH.Lib.Syntax.Type
-  match :: forall (m :: * -> *). Language.Haskell.TH.Lib.Syntax.Quote m => m Language.Haskell.TH.Lib.Syntax.Pat -> m Language.Haskell.TH.Lib.Syntax.Body -> [m Language.Haskell.TH.Lib.Syntax.Dec] -> m Language.Haskell.TH.Lib.Syntax.Match
-  mdoE :: forall (m :: * -> *). Language.Haskell.TH.Lib.Syntax.Quote m => GHC.Internal.Maybe.Maybe Language.Haskell.TH.Lib.Syntax.ModName -> [m Language.Haskell.TH.Lib.Syntax.Stmt] -> m Language.Haskell.TH.Lib.Syntax.Exp
-  moduleAnnotation :: Language.Haskell.TH.Lib.Syntax.AnnTarget
-  mulArrowT :: forall (m :: * -> *). Language.Haskell.TH.Lib.Syntax.Quote m => m Language.Haskell.TH.Lib.Syntax.Type
-  multiIfE :: forall (m :: * -> *). Language.Haskell.TH.Lib.Syntax.Quote m => [m (Language.Haskell.TH.Lib.Syntax.Guard, Language.Haskell.TH.Lib.Syntax.Exp)] -> m Language.Haskell.TH.Lib.Syntax.Exp
-  newtypeD :: forall (m :: * -> *). Language.Haskell.TH.Lib.Syntax.Quote m => m Language.Haskell.TH.Lib.Syntax.Cxt -> Language.Haskell.TH.Lib.Syntax.Name -> [m (Language.Haskell.TH.Lib.Syntax.TyVarBndr Language.Haskell.TH.Lib.Syntax.BndrVis)] -> GHC.Internal.Maybe.Maybe (m Language.Haskell.TH.Lib.Syntax.Kind) -> m Language.Haskell.TH.Lib.Syntax.Con -> [m Language.Haskell.TH.Lib.Syntax.DerivClause] -> m Language.Haskell.TH.Lib.Syntax.Dec
-  newtypeD_doc ::
-    Language.Haskell.TH.Lib.Syntax.Q Language.Haskell.TH.Lib.Syntax.Cxt
-    -> Language.Haskell.TH.Lib.Syntax.Name -> [Language.Haskell.TH.Lib.Syntax.Q (Language.Haskell.TH.Lib.Syntax.TyVarBndr Language.Haskell.TH.Lib.Syntax.BndrVis)] -> GHC.Internal.Maybe.Maybe (Language.Haskell.TH.Lib.Syntax.Q Language.Haskell.TH.Lib.Syntax.Kind) -> (Language.Haskell.TH.Lib.Syntax.Q Language.Haskell.TH.Lib.Syntax.Con, GHC.Internal.Maybe.Maybe GHC.Internal.Base.String, [GHC.Internal.Maybe.Maybe GHC.Internal.Base.String]) -> [Language.Haskell.TH.Lib.Syntax.Q Language.Haskell.TH.Lib.Syntax.DerivClause] -> GHC.Internal.Maybe.Maybe GHC.Internal.Base.String -> Language.Haskell.TH.Lib.Syntax.Q Language.Haskell.TH.Lib.Syntax.Dec
-  newtypeInstD :: forall (m :: * -> *). Language.Haskell.TH.Lib.Syntax.Quote m => m Language.Haskell.TH.Lib.Syntax.Cxt -> GHC.Internal.Maybe.Maybe [m (Language.Haskell.TH.Lib.Syntax.TyVarBndr ())] -> m Language.Haskell.TH.Lib.Syntax.Type -> GHC.Internal.Maybe.Maybe (m Language.Haskell.TH.Lib.Syntax.Kind) -> m Language.Haskell.TH.Lib.Syntax.Con -> [m Language.Haskell.TH.Lib.Syntax.DerivClause] -> m Language.Haskell.TH.Lib.Syntax.Dec
-  newtypeInstD_doc ::
-    Language.Haskell.TH.Lib.Syntax.Q Language.Haskell.TH.Lib.Syntax.Cxt
-    -> GHC.Internal.Maybe.Maybe [Language.Haskell.TH.Lib.Syntax.Q (Language.Haskell.TH.Lib.Syntax.TyVarBndr ())] -> Language.Haskell.TH.Lib.Syntax.Q Language.Haskell.TH.Lib.Syntax.Type -> GHC.Internal.Maybe.Maybe (Language.Haskell.TH.Lib.Syntax.Q Language.Haskell.TH.Lib.Syntax.Kind) -> (Language.Haskell.TH.Lib.Syntax.Q Language.Haskell.TH.Lib.Syntax.Con, GHC.Internal.Maybe.Maybe GHC.Internal.Base.String, [GHC.Internal.Maybe.Maybe GHC.Internal.Base.String]) -> [Language.Haskell.TH.Lib.Syntax.Q Language.Haskell.TH.Lib.Syntax.DerivClause] -> GHC.Internal.Maybe.Maybe GHC.Internal.Base.String -> Language.Haskell.TH.Lib.Syntax.Q Language.Haskell.TH.Lib.Syntax.Dec
-  newtypeStrategy :: forall (m :: * -> *). Language.Haskell.TH.Lib.Syntax.Quote m => m Language.Haskell.TH.Lib.Syntax.DerivStrategy
-  noBindS :: forall (m :: * -> *). Language.Haskell.TH.Lib.Syntax.Quote m => m Language.Haskell.TH.Lib.Syntax.Exp -> m Language.Haskell.TH.Lib.Syntax.Stmt
-  noSig :: forall (m :: * -> *). Language.Haskell.TH.Lib.Syntax.Quote m => m Language.Haskell.TH.Lib.Syntax.FamilyResultSig
-  noSourceStrictness :: forall (m :: * -> *). Language.Haskell.TH.Lib.Syntax.Quote m => m Language.Haskell.TH.Lib.Syntax.SourceStrictness
-  noSourceUnpackedness :: forall (m :: * -> *). Language.Haskell.TH.Lib.Syntax.Quote m => m Language.Haskell.TH.Lib.Syntax.SourceUnpackedness
+  inferredSpec :: GHC.Internal.TH.Syntax.Specificity
+  infixApp :: forall (m :: * -> *). GHC.Internal.TH.Syntax.Quote m => m GHC.Internal.TH.Syntax.Exp -> m GHC.Internal.TH.Syntax.Exp -> m GHC.Internal.TH.Syntax.Exp -> m GHC.Internal.TH.Syntax.Exp
+  infixC :: forall (m :: * -> *). GHC.Internal.TH.Syntax.Quote m => m (GHC.Internal.TH.Syntax.Bang, GHC.Internal.TH.Syntax.Type) -> GHC.Internal.TH.Syntax.Name -> m (GHC.Internal.TH.Syntax.Bang, GHC.Internal.TH.Syntax.Type) -> m GHC.Internal.TH.Syntax.Con
+  infixE :: forall (m :: * -> *). GHC.Internal.TH.Syntax.Quote m => GHC.Internal.Maybe.Maybe (m GHC.Internal.TH.Syntax.Exp) -> m GHC.Internal.TH.Syntax.Exp -> GHC.Internal.Maybe.Maybe (m GHC.Internal.TH.Syntax.Exp) -> m GHC.Internal.TH.Syntax.Exp
+  infixLD :: forall (m :: * -> *). GHC.Internal.TH.Syntax.Quote m => GHC.Types.Int -> GHC.Internal.TH.Syntax.Name -> m GHC.Internal.TH.Syntax.Dec
+  infixLWithSpecD :: forall (m :: * -> *). GHC.Internal.TH.Syntax.Quote m => GHC.Types.Int -> GHC.Internal.TH.Syntax.NamespaceSpecifier -> GHC.Internal.TH.Syntax.Name -> m GHC.Internal.TH.Syntax.Dec
+  infixND :: forall (m :: * -> *). GHC.Internal.TH.Syntax.Quote m => GHC.Types.Int -> GHC.Internal.TH.Syntax.Name -> m GHC.Internal.TH.Syntax.Dec
+  infixNWithSpecD :: forall (m :: * -> *). GHC.Internal.TH.Syntax.Quote m => GHC.Types.Int -> GHC.Internal.TH.Syntax.NamespaceSpecifier -> GHC.Internal.TH.Syntax.Name -> m GHC.Internal.TH.Syntax.Dec
+  infixP :: forall (m :: * -> *). GHC.Internal.TH.Syntax.Quote m => m GHC.Internal.TH.Syntax.Pat -> GHC.Internal.TH.Syntax.Name -> m GHC.Internal.TH.Syntax.Pat -> m GHC.Internal.TH.Syntax.Pat
+  infixPatSyn :: forall (m :: * -> *). GHC.Internal.TH.Syntax.Quote m => GHC.Internal.TH.Syntax.Name -> GHC.Internal.TH.Syntax.Name -> m GHC.Internal.TH.Syntax.PatSynArgs
+  infixRD :: forall (m :: * -> *). GHC.Internal.TH.Syntax.Quote m => GHC.Types.Int -> GHC.Internal.TH.Syntax.Name -> m GHC.Internal.TH.Syntax.Dec
+  infixRWithSpecD :: forall (m :: * -> *). GHC.Internal.TH.Syntax.Quote m => GHC.Types.Int -> GHC.Internal.TH.Syntax.NamespaceSpecifier -> GHC.Internal.TH.Syntax.Name -> m GHC.Internal.TH.Syntax.Dec
+  infixT :: forall (m :: * -> *). GHC.Internal.TH.Syntax.Quote m => m GHC.Internal.TH.Syntax.Type -> GHC.Internal.TH.Syntax.Name -> m GHC.Internal.TH.Syntax.Type -> m GHC.Internal.TH.Syntax.Type
+  injectivityAnn :: GHC.Internal.TH.Syntax.Name -> [GHC.Internal.TH.Syntax.Name] -> InjectivityAnn
+  instanceD :: forall (m :: * -> *). GHC.Internal.TH.Syntax.Quote m => m GHC.Internal.TH.Syntax.Cxt -> m GHC.Internal.TH.Syntax.Type -> [m GHC.Internal.TH.Syntax.Dec] -> m GHC.Internal.TH.Syntax.Dec
+  instanceWithOverlapD :: forall (m :: * -> *). GHC.Internal.TH.Syntax.Quote m => GHC.Internal.Maybe.Maybe GHC.Internal.TH.Syntax.Overlap -> m GHC.Internal.TH.Syntax.Cxt -> m GHC.Internal.TH.Syntax.Type -> [m GHC.Internal.TH.Syntax.Dec] -> m GHC.Internal.TH.Syntax.Dec
+  intPrimL :: GHC.Num.Integer.Integer -> GHC.Internal.TH.Syntax.Lit
+  integerL :: GHC.Num.Integer.Integer -> GHC.Internal.TH.Syntax.Lit
+  interruptible :: GHC.Internal.TH.Syntax.Safety
+  invisP :: forall (m :: * -> *). GHC.Internal.TH.Syntax.Quote m => m GHC.Internal.TH.Syntax.Type -> m GHC.Internal.TH.Syntax.Pat
+  isStrict :: forall (m :: * -> *). GHC.Internal.TH.Syntax.Quote m => m GHC.Internal.TH.Syntax.Strict
+  javaScript :: GHC.Internal.TH.Syntax.Callconv
+  kiSigD :: forall (m :: * -> *). GHC.Internal.TH.Syntax.Quote m => GHC.Internal.TH.Syntax.Name -> m GHC.Internal.TH.Syntax.Kind -> m GHC.Internal.TH.Syntax.Dec
+  kindSig :: forall (m :: * -> *). GHC.Internal.TH.Syntax.Quote m => m GHC.Internal.TH.Syntax.Kind -> m GHC.Internal.TH.Syntax.FamilyResultSig
+  kindedBndrTV :: forall (m :: * -> *). GHC.Internal.TH.Syntax.Quote m => GHC.Internal.TH.Syntax.Name -> GHC.Internal.TH.Syntax.BndrVis -> m GHC.Internal.TH.Syntax.Kind -> m (GHC.Internal.TH.Syntax.TyVarBndr GHC.Internal.TH.Syntax.BndrVis)
+  kindedInvisTV :: forall (m :: * -> *). GHC.Internal.TH.Syntax.Quote m => GHC.Internal.TH.Syntax.Name -> GHC.Internal.TH.Syntax.Specificity -> m GHC.Internal.TH.Syntax.Kind -> m (GHC.Internal.TH.Syntax.TyVarBndr GHC.Internal.TH.Syntax.Specificity)
+  kindedTV :: forall (m :: * -> *). GHC.Internal.TH.Syntax.Quote m => GHC.Internal.TH.Syntax.Name -> m GHC.Internal.TH.Syntax.Kind -> m (GHC.Internal.TH.Syntax.TyVarBndr ())
+  labelE :: forall (m :: * -> *). GHC.Internal.TH.Syntax.Quote m => GHC.Internal.Base.String -> m GHC.Internal.TH.Syntax.Exp
+  lam1E :: forall (m :: * -> *). GHC.Internal.TH.Syntax.Quote m => m GHC.Internal.TH.Syntax.Pat -> m GHC.Internal.TH.Syntax.Exp -> m GHC.Internal.TH.Syntax.Exp
+  lamCaseE :: forall (m :: * -> *). GHC.Internal.TH.Syntax.Quote m => [m GHC.Internal.TH.Syntax.Match] -> m GHC.Internal.TH.Syntax.Exp
+  lamCasesE :: forall (m :: * -> *). GHC.Internal.TH.Syntax.Quote m => [m GHC.Internal.TH.Syntax.Clause] -> m GHC.Internal.TH.Syntax.Exp
+  lamE :: forall (m :: * -> *). GHC.Internal.TH.Syntax.Quote m => [m GHC.Internal.TH.Syntax.Pat] -> m GHC.Internal.TH.Syntax.Exp -> m GHC.Internal.TH.Syntax.Exp
+  letE :: forall (m :: * -> *). GHC.Internal.TH.Syntax.Quote m => [m GHC.Internal.TH.Syntax.Dec] -> m GHC.Internal.TH.Syntax.Exp -> m GHC.Internal.TH.Syntax.Exp
+  letS :: forall (m :: * -> *). GHC.Internal.TH.Syntax.Quote m => [m GHC.Internal.TH.Syntax.Dec] -> m GHC.Internal.TH.Syntax.Stmt
+  listE :: forall (m :: * -> *). GHC.Internal.TH.Syntax.Quote m => [m GHC.Internal.TH.Syntax.Exp] -> m GHC.Internal.TH.Syntax.Exp
+  listK :: GHC.Internal.TH.Syntax.Kind
+  listP :: forall (m :: * -> *). GHC.Internal.TH.Syntax.Quote m => [m GHC.Internal.TH.Syntax.Pat] -> m GHC.Internal.TH.Syntax.Pat
+  listT :: forall (m :: * -> *). GHC.Internal.TH.Syntax.Quote m => m GHC.Internal.TH.Syntax.Type
+  litE :: forall (m :: * -> *). GHC.Internal.TH.Syntax.Quote m => GHC.Internal.TH.Syntax.Lit -> m GHC.Internal.TH.Syntax.Exp
+  litP :: forall (m :: * -> *). GHC.Internal.TH.Syntax.Quote m => GHC.Internal.TH.Syntax.Lit -> m GHC.Internal.TH.Syntax.Pat
+  litT :: forall (m :: * -> *). GHC.Internal.TH.Syntax.Quote m => m GHC.Internal.TH.Syntax.TyLit -> m GHC.Internal.TH.Syntax.Type
+  match :: forall (m :: * -> *). GHC.Internal.TH.Syntax.Quote m => m GHC.Internal.TH.Syntax.Pat -> m GHC.Internal.TH.Syntax.Body -> [m GHC.Internal.TH.Syntax.Dec] -> m GHC.Internal.TH.Syntax.Match
+  mdoE :: forall (m :: * -> *). GHC.Internal.TH.Syntax.Quote m => GHC.Internal.Maybe.Maybe GHC.Internal.TH.Syntax.ModName -> [m GHC.Internal.TH.Syntax.Stmt] -> m GHC.Internal.TH.Syntax.Exp
+  moduleAnnotation :: GHC.Internal.TH.Syntax.AnnTarget
+  mulArrowT :: forall (m :: * -> *). GHC.Internal.TH.Syntax.Quote m => m GHC.Internal.TH.Syntax.Type
+  multiIfE :: forall (m :: * -> *). GHC.Internal.TH.Syntax.Quote m => [m (GHC.Internal.TH.Syntax.Guard, GHC.Internal.TH.Syntax.Exp)] -> m GHC.Internal.TH.Syntax.Exp
+  newtypeD :: forall (m :: * -> *). GHC.Internal.TH.Syntax.Quote m => m GHC.Internal.TH.Syntax.Cxt -> GHC.Internal.TH.Syntax.Name -> [m (GHC.Internal.TH.Syntax.TyVarBndr GHC.Internal.TH.Syntax.BndrVis)] -> GHC.Internal.Maybe.Maybe (m GHC.Internal.TH.Syntax.Kind) -> m GHC.Internal.TH.Syntax.Con -> [m GHC.Internal.TH.Syntax.DerivClause] -> m GHC.Internal.TH.Syntax.Dec
+  newtypeD_doc :: GHC.Internal.TH.Syntax.Q GHC.Internal.TH.Syntax.Cxt -> GHC.Internal.TH.Syntax.Name -> [GHC.Internal.TH.Syntax.Q (GHC.Internal.TH.Syntax.TyVarBndr GHC.Internal.TH.Syntax.BndrVis)] -> GHC.Internal.Maybe.Maybe (GHC.Internal.TH.Syntax.Q GHC.Internal.TH.Syntax.Kind) -> (GHC.Internal.TH.Syntax.Q GHC.Internal.TH.Syntax.Con, GHC.Internal.Maybe.Maybe GHC.Internal.Base.String, [GHC.Internal.Maybe.Maybe GHC.Internal.Base.String]) -> [GHC.Internal.TH.Syntax.Q GHC.Internal.TH.Syntax.DerivClause] -> GHC.Internal.Maybe.Maybe GHC.Internal.Base.String -> GHC.Internal.TH.Syntax.Q GHC.Internal.TH.Syntax.Dec
+  newtypeInstD :: forall (m :: * -> *). GHC.Internal.TH.Syntax.Quote m => m GHC.Internal.TH.Syntax.Cxt -> GHC.Internal.Maybe.Maybe [m (GHC.Internal.TH.Syntax.TyVarBndr ())] -> m GHC.Internal.TH.Syntax.Type -> GHC.Internal.Maybe.Maybe (m GHC.Internal.TH.Syntax.Kind) -> m GHC.Internal.TH.Syntax.Con -> [m GHC.Internal.TH.Syntax.DerivClause] -> m GHC.Internal.TH.Syntax.Dec
+  newtypeInstD_doc :: GHC.Internal.TH.Syntax.Q GHC.Internal.TH.Syntax.Cxt -> GHC.Internal.Maybe.Maybe [GHC.Internal.TH.Syntax.Q (GHC.Internal.TH.Syntax.TyVarBndr ())] -> GHC.Internal.TH.Syntax.Q GHC.Internal.TH.Syntax.Type -> GHC.Internal.Maybe.Maybe (GHC.Internal.TH.Syntax.Q GHC.Internal.TH.Syntax.Kind) -> (GHC.Internal.TH.Syntax.Q GHC.Internal.TH.Syntax.Con, GHC.Internal.Maybe.Maybe GHC.Internal.Base.String, [GHC.Internal.Maybe.Maybe GHC.Internal.Base.String]) -> [GHC.Internal.TH.Syntax.Q GHC.Internal.TH.Syntax.DerivClause] -> GHC.Internal.Maybe.Maybe GHC.Internal.Base.String -> GHC.Internal.TH.Syntax.Q GHC.Internal.TH.Syntax.Dec
+  newtypeStrategy :: forall (m :: * -> *). GHC.Internal.TH.Syntax.Quote m => m GHC.Internal.TH.Syntax.DerivStrategy
+  noBindS :: forall (m :: * -> *). GHC.Internal.TH.Syntax.Quote m => m GHC.Internal.TH.Syntax.Exp -> m GHC.Internal.TH.Syntax.Stmt
+  noSig :: forall (m :: * -> *). GHC.Internal.TH.Syntax.Quote m => m GHC.Internal.TH.Syntax.FamilyResultSig
+  noSourceStrictness :: forall (m :: * -> *). GHC.Internal.TH.Syntax.Quote m => m GHC.Internal.TH.Syntax.SourceStrictness
+  noSourceUnpackedness :: forall (m :: * -> *). GHC.Internal.TH.Syntax.Quote m => m GHC.Internal.TH.Syntax.SourceUnpackedness
   nominalR :: Role
-  normalB :: forall (m :: * -> *). Language.Haskell.TH.Lib.Syntax.Quote m => m Language.Haskell.TH.Lib.Syntax.Exp -> m Language.Haskell.TH.Lib.Syntax.Body
-  normalC :: forall (m :: * -> *). Language.Haskell.TH.Lib.Syntax.Quote m => Language.Haskell.TH.Lib.Syntax.Name -> [m Language.Haskell.TH.Lib.Syntax.BangType] -> m Language.Haskell.TH.Lib.Syntax.Con
-  normalG :: forall (m :: * -> *). Language.Haskell.TH.Lib.Syntax.Quote m => m Language.Haskell.TH.Lib.Syntax.Exp -> m Language.Haskell.TH.Lib.Syntax.Guard
-  normalGE :: forall (m :: * -> *). Language.Haskell.TH.Lib.Syntax.Quote m => m Language.Haskell.TH.Lib.Syntax.Exp -> m Language.Haskell.TH.Lib.Syntax.Exp -> m (Language.Haskell.TH.Lib.Syntax.Guard, Language.Haskell.TH.Lib.Syntax.Exp)
-  notStrict :: forall (m :: * -> *). Language.Haskell.TH.Lib.Syntax.Quote m => m Language.Haskell.TH.Lib.Syntax.Strict
-  numTyLit :: forall (m :: * -> *). Language.Haskell.TH.Lib.Syntax.Quote m => GHC.Num.Integer.Integer -> m Language.Haskell.TH.Lib.Syntax.TyLit
-  openTypeFamilyD :: forall (m :: * -> *). Language.Haskell.TH.Lib.Syntax.Quote m => Language.Haskell.TH.Lib.Syntax.Name -> [m (Language.Haskell.TH.Lib.Syntax.TyVarBndr Language.Haskell.TH.Lib.Syntax.BndrVis)] -> m Language.Haskell.TH.Lib.Syntax.FamilyResultSig -> GHC.Internal.Maybe.Maybe InjectivityAnn -> m Language.Haskell.TH.Lib.Syntax.Dec
-  parS :: forall (m :: * -> *). Language.Haskell.TH.Lib.Syntax.Quote m => [[m Language.Haskell.TH.Lib.Syntax.Stmt]] -> m Language.Haskell.TH.Lib.Syntax.Stmt
-  parensE :: forall (m :: * -> *). Language.Haskell.TH.Lib.Syntax.Quote m => m Language.Haskell.TH.Lib.Syntax.Exp -> m Language.Haskell.TH.Lib.Syntax.Exp
-  parensP :: forall (m :: * -> *). Language.Haskell.TH.Lib.Syntax.Quote m => m Language.Haskell.TH.Lib.Syntax.Pat -> m Language.Haskell.TH.Lib.Syntax.Pat
-  parensT :: forall (m :: * -> *). Language.Haskell.TH.Lib.Syntax.Quote m => m Language.Haskell.TH.Lib.Syntax.Type -> m Language.Haskell.TH.Lib.Syntax.Type
-  patG :: forall (m :: * -> *). Language.Haskell.TH.Lib.Syntax.Quote m => [m Language.Haskell.TH.Lib.Syntax.Stmt] -> m Language.Haskell.TH.Lib.Syntax.Guard
-  patGE :: forall (m :: * -> *). Language.Haskell.TH.Lib.Syntax.Quote m => [m Language.Haskell.TH.Lib.Syntax.Stmt] -> m Language.Haskell.TH.Lib.Syntax.Exp -> m (Language.Haskell.TH.Lib.Syntax.Guard, Language.Haskell.TH.Lib.Syntax.Exp)
-  patSynD :: forall (m :: * -> *). Language.Haskell.TH.Lib.Syntax.Quote m => Language.Haskell.TH.Lib.Syntax.Name -> m Language.Haskell.TH.Lib.Syntax.PatSynArgs -> m Language.Haskell.TH.Lib.Syntax.PatSynDir -> m Language.Haskell.TH.Lib.Syntax.Pat -> m Language.Haskell.TH.Lib.Syntax.Dec
-  patSynD_doc :: Language.Haskell.TH.Lib.Syntax.Name -> Language.Haskell.TH.Lib.Syntax.Q Language.Haskell.TH.Lib.Syntax.PatSynArgs -> Language.Haskell.TH.Lib.Syntax.Q Language.Haskell.TH.Lib.Syntax.PatSynDir -> Language.Haskell.TH.Lib.Syntax.Q Language.Haskell.TH.Lib.Syntax.Pat -> GHC.Internal.Maybe.Maybe GHC.Internal.Base.String -> [GHC.Internal.Maybe.Maybe GHC.Internal.Base.String] -> Language.Haskell.TH.Lib.Syntax.Q Language.Haskell.TH.Lib.Syntax.Dec
-  patSynSigD :: forall (m :: * -> *). Language.Haskell.TH.Lib.Syntax.Quote m => Language.Haskell.TH.Lib.Syntax.Name -> m Language.Haskell.TH.Lib.Syntax.Type -> m Language.Haskell.TH.Lib.Syntax.Dec
+  normalB :: forall (m :: * -> *). GHC.Internal.TH.Syntax.Quote m => m GHC.Internal.TH.Syntax.Exp -> m GHC.Internal.TH.Syntax.Body
+  normalC :: forall (m :: * -> *). GHC.Internal.TH.Syntax.Quote m => GHC.Internal.TH.Syntax.Name -> [m GHC.Internal.TH.Syntax.BangType] -> m GHC.Internal.TH.Syntax.Con
+  normalG :: forall (m :: * -> *). GHC.Internal.TH.Syntax.Quote m => m GHC.Internal.TH.Syntax.Exp -> m GHC.Internal.TH.Syntax.Guard
+  normalGE :: forall (m :: * -> *). GHC.Internal.TH.Syntax.Quote m => m GHC.Internal.TH.Syntax.Exp -> m GHC.Internal.TH.Syntax.Exp -> m (GHC.Internal.TH.Syntax.Guard, GHC.Internal.TH.Syntax.Exp)
+  notStrict :: forall (m :: * -> *). GHC.Internal.TH.Syntax.Quote m => m GHC.Internal.TH.Syntax.Strict
+  numTyLit :: forall (m :: * -> *). GHC.Internal.TH.Syntax.Quote m => GHC.Num.Integer.Integer -> m GHC.Internal.TH.Syntax.TyLit
+  openTypeFamilyD :: forall (m :: * -> *). GHC.Internal.TH.Syntax.Quote m => GHC.Internal.TH.Syntax.Name -> [m (GHC.Internal.TH.Syntax.TyVarBndr GHC.Internal.TH.Syntax.BndrVis)] -> m GHC.Internal.TH.Syntax.FamilyResultSig -> GHC.Internal.Maybe.Maybe InjectivityAnn -> m GHC.Internal.TH.Syntax.Dec
+  parS :: forall (m :: * -> *). GHC.Internal.TH.Syntax.Quote m => [[m GHC.Internal.TH.Syntax.Stmt]] -> m GHC.Internal.TH.Syntax.Stmt
+  parensE :: forall (m :: * -> *). GHC.Internal.TH.Syntax.Quote m => m GHC.Internal.TH.Syntax.Exp -> m GHC.Internal.TH.Syntax.Exp
+  parensP :: forall (m :: * -> *). GHC.Internal.TH.Syntax.Quote m => m GHC.Internal.TH.Syntax.Pat -> m GHC.Internal.TH.Syntax.Pat
+  parensT :: forall (m :: * -> *). GHC.Internal.TH.Syntax.Quote m => m GHC.Internal.TH.Syntax.Type -> m GHC.Internal.TH.Syntax.Type
+  patG :: forall (m :: * -> *). GHC.Internal.TH.Syntax.Quote m => [m GHC.Internal.TH.Syntax.Stmt] -> m GHC.Internal.TH.Syntax.Guard
+  patGE :: forall (m :: * -> *). GHC.Internal.TH.Syntax.Quote m => [m GHC.Internal.TH.Syntax.Stmt] -> m GHC.Internal.TH.Syntax.Exp -> m (GHC.Internal.TH.Syntax.Guard, GHC.Internal.TH.Syntax.Exp)
+  patSynD :: forall (m :: * -> *). GHC.Internal.TH.Syntax.Quote m => GHC.Internal.TH.Syntax.Name -> m GHC.Internal.TH.Syntax.PatSynArgs -> m GHC.Internal.TH.Syntax.PatSynDir -> m GHC.Internal.TH.Syntax.Pat -> m GHC.Internal.TH.Syntax.Dec
+  patSynD_doc :: GHC.Internal.TH.Syntax.Name -> GHC.Internal.TH.Syntax.Q GHC.Internal.TH.Syntax.PatSynArgs -> GHC.Internal.TH.Syntax.Q GHC.Internal.TH.Syntax.PatSynDir -> GHC.Internal.TH.Syntax.Q GHC.Internal.TH.Syntax.Pat -> GHC.Internal.Maybe.Maybe GHC.Internal.Base.String -> [GHC.Internal.Maybe.Maybe GHC.Internal.Base.String] -> GHC.Internal.TH.Syntax.Q GHC.Internal.TH.Syntax.Dec
+  patSynSigD :: forall (m :: * -> *). GHC.Internal.TH.Syntax.Quote m => GHC.Internal.TH.Syntax.Name -> m GHC.Internal.TH.Syntax.Type -> m GHC.Internal.TH.Syntax.Dec
   phantomR :: Role
-  plainBndrTV :: forall (m :: * -> *). Language.Haskell.TH.Lib.Syntax.Quote m => Language.Haskell.TH.Lib.Syntax.Name -> Language.Haskell.TH.Lib.Syntax.BndrVis -> m (Language.Haskell.TH.Lib.Syntax.TyVarBndr Language.Haskell.TH.Lib.Syntax.BndrVis)
-  plainInvisTV :: forall (m :: * -> *). Language.Haskell.TH.Lib.Syntax.Quote m => Language.Haskell.TH.Lib.Syntax.Name -> Language.Haskell.TH.Lib.Syntax.Specificity -> m (Language.Haskell.TH.Lib.Syntax.TyVarBndr Language.Haskell.TH.Lib.Syntax.Specificity)
-  plainTV :: forall (m :: * -> *). Language.Haskell.TH.Lib.Syntax.Quote m => Language.Haskell.TH.Lib.Syntax.Name -> m (Language.Haskell.TH.Lib.Syntax.TyVarBndr ())
-  pragAnnD :: forall (m :: * -> *). Language.Haskell.TH.Lib.Syntax.Quote m => Language.Haskell.TH.Lib.Syntax.AnnTarget -> m Language.Haskell.TH.Lib.Syntax.Exp -> m Language.Haskell.TH.Lib.Syntax.Dec
-  pragCompleteD :: forall (m :: * -> *). Language.Haskell.TH.Lib.Syntax.Quote m => [Language.Haskell.TH.Lib.Syntax.Name] -> GHC.Internal.Maybe.Maybe Language.Haskell.TH.Lib.Syntax.Name -> m Language.Haskell.TH.Lib.Syntax.Dec
-  pragInlD :: forall (m :: * -> *). Language.Haskell.TH.Lib.Syntax.Quote m => Language.Haskell.TH.Lib.Syntax.Name -> Language.Haskell.TH.Lib.Syntax.Inline -> Language.Haskell.TH.Lib.Syntax.RuleMatch -> Language.Haskell.TH.Lib.Syntax.Phases -> m Language.Haskell.TH.Lib.Syntax.Dec
-  pragLineD :: forall (m :: * -> *). Language.Haskell.TH.Lib.Syntax.Quote m => GHC.Types.Int -> GHC.Internal.Base.String -> m Language.Haskell.TH.Lib.Syntax.Dec
-  pragOpaqueD :: forall (m :: * -> *). Language.Haskell.TH.Lib.Syntax.Quote m => Language.Haskell.TH.Lib.Syntax.Name -> m Language.Haskell.TH.Lib.Syntax.Dec
-  pragRuleD :: forall (m :: * -> *). Language.Haskell.TH.Lib.Syntax.Quote m => GHC.Internal.Base.String -> GHC.Internal.Maybe.Maybe [m (Language.Haskell.TH.Lib.Syntax.TyVarBndr ())] -> [m Language.Haskell.TH.Lib.Syntax.RuleBndr] -> m Language.Haskell.TH.Lib.Syntax.Exp -> m Language.Haskell.TH.Lib.Syntax.Exp -> Language.Haskell.TH.Lib.Syntax.Phases -> m Language.Haskell.TH.Lib.Syntax.Dec
-  pragSCCFunD :: forall (m :: * -> *). Language.Haskell.TH.Lib.Syntax.Quote m => Language.Haskell.TH.Lib.Syntax.Name -> m Language.Haskell.TH.Lib.Syntax.Dec
-  pragSCCFunNamedD :: forall (m :: * -> *). Language.Haskell.TH.Lib.Syntax.Quote m => Language.Haskell.TH.Lib.Syntax.Name -> GHC.Internal.Base.String -> m Language.Haskell.TH.Lib.Syntax.Dec
-  pragSpecD :: forall (m :: * -> *). Language.Haskell.TH.Lib.Syntax.Quote m => Language.Haskell.TH.Lib.Syntax.Name -> m Language.Haskell.TH.Lib.Syntax.Type -> Language.Haskell.TH.Lib.Syntax.Phases -> m Language.Haskell.TH.Lib.Syntax.Dec
-  pragSpecInlD :: forall (m :: * -> *). Language.Haskell.TH.Lib.Syntax.Quote m => Language.Haskell.TH.Lib.Syntax.Name -> m Language.Haskell.TH.Lib.Syntax.Type -> Language.Haskell.TH.Lib.Syntax.Inline -> Language.Haskell.TH.Lib.Syntax.Phases -> m Language.Haskell.TH.Lib.Syntax.Dec
-  pragSpecInstD :: forall (m :: * -> *). Language.Haskell.TH.Lib.Syntax.Quote m => m Language.Haskell.TH.Lib.Syntax.Type -> m Language.Haskell.TH.Lib.Syntax.Dec
-  prefixPatSyn :: forall (m :: * -> *). Language.Haskell.TH.Lib.Syntax.Quote m => [Language.Haskell.TH.Lib.Syntax.Name] -> m Language.Haskell.TH.Lib.Syntax.PatSynArgs
-  prim :: Language.Haskell.TH.Lib.Syntax.Callconv
-  projectionE :: forall (m :: * -> *). Language.Haskell.TH.Lib.Syntax.Quote m => GHC.Internal.Base.NonEmpty GHC.Internal.Base.String -> m Language.Haskell.TH.Lib.Syntax.Exp
-  promotedConsT :: forall (m :: * -> *). Language.Haskell.TH.Lib.Syntax.Quote m => m Language.Haskell.TH.Lib.Syntax.Type
-  promotedInfixT :: forall (m :: * -> *). Language.Haskell.TH.Lib.Syntax.Quote m => m Language.Haskell.TH.Lib.Syntax.Type -> Language.Haskell.TH.Lib.Syntax.Name -> m Language.Haskell.TH.Lib.Syntax.Type -> m Language.Haskell.TH.Lib.Syntax.Type
-  promotedNilT :: forall (m :: * -> *). Language.Haskell.TH.Lib.Syntax.Quote m => m Language.Haskell.TH.Lib.Syntax.Type
-  promotedT :: forall (m :: * -> *). Language.Haskell.TH.Lib.Syntax.Quote m => Language.Haskell.TH.Lib.Syntax.Name -> m Language.Haskell.TH.Lib.Syntax.Type
-  promotedTupleT :: forall (m :: * -> *). Language.Haskell.TH.Lib.Syntax.Quote m => GHC.Types.Int -> m Language.Haskell.TH.Lib.Syntax.Type
-  promotedUInfixT :: forall (m :: * -> *). Language.Haskell.TH.Lib.Syntax.Quote m => m Language.Haskell.TH.Lib.Syntax.Type -> Language.Haskell.TH.Lib.Syntax.Name -> m Language.Haskell.TH.Lib.Syntax.Type -> m Language.Haskell.TH.Lib.Syntax.Type
-  rationalL :: GHC.Internal.Real.Rational -> Language.Haskell.TH.Lib.Syntax.Lit
-  recC :: forall (m :: * -> *). Language.Haskell.TH.Lib.Syntax.Quote m => Language.Haskell.TH.Lib.Syntax.Name -> [m Language.Haskell.TH.Lib.Syntax.VarBangType] -> m Language.Haskell.TH.Lib.Syntax.Con
-  recConE :: forall (m :: * -> *). Language.Haskell.TH.Lib.Syntax.Quote m => Language.Haskell.TH.Lib.Syntax.Name -> [m (Language.Haskell.TH.Lib.Syntax.Name, Language.Haskell.TH.Lib.Syntax.Exp)] -> m Language.Haskell.TH.Lib.Syntax.Exp
-  recGadtC :: forall (m :: * -> *). Language.Haskell.TH.Lib.Syntax.Quote m => [Language.Haskell.TH.Lib.Syntax.Name] -> [m Language.Haskell.TH.Lib.Syntax.VarStrictType] -> m Language.Haskell.TH.Lib.Syntax.Type -> m Language.Haskell.TH.Lib.Syntax.Con
-  recP :: forall (m :: * -> *). Language.Haskell.TH.Lib.Syntax.Quote m => Language.Haskell.TH.Lib.Syntax.Name -> [m Language.Haskell.TH.Lib.Syntax.FieldPat] -> m Language.Haskell.TH.Lib.Syntax.Pat
-  recS :: forall (m :: * -> *). Language.Haskell.TH.Lib.Syntax.Quote m => [m Language.Haskell.TH.Lib.Syntax.Stmt] -> m Language.Haskell.TH.Lib.Syntax.Stmt
-  recUpdE :: forall (m :: * -> *). Language.Haskell.TH.Lib.Syntax.Quote m => m Language.Haskell.TH.Lib.Syntax.Exp -> [m (Language.Haskell.TH.Lib.Syntax.Name, Language.Haskell.TH.Lib.Syntax.Exp)] -> m Language.Haskell.TH.Lib.Syntax.Exp
-  recordPatSyn :: forall (m :: * -> *). Language.Haskell.TH.Lib.Syntax.Quote m => [Language.Haskell.TH.Lib.Syntax.Name] -> m Language.Haskell.TH.Lib.Syntax.PatSynArgs
+  plainBndrTV :: forall (m :: * -> *). GHC.Internal.TH.Syntax.Quote m => GHC.Internal.TH.Syntax.Name -> GHC.Internal.TH.Syntax.BndrVis -> m (GHC.Internal.TH.Syntax.TyVarBndr GHC.Internal.TH.Syntax.BndrVis)
+  plainInvisTV :: forall (m :: * -> *). GHC.Internal.TH.Syntax.Quote m => GHC.Internal.TH.Syntax.Name -> GHC.Internal.TH.Syntax.Specificity -> m (GHC.Internal.TH.Syntax.TyVarBndr GHC.Internal.TH.Syntax.Specificity)
+  plainTV :: forall (m :: * -> *). GHC.Internal.TH.Syntax.Quote m => GHC.Internal.TH.Syntax.Name -> m (GHC.Internal.TH.Syntax.TyVarBndr ())
+  pragAnnD :: forall (m :: * -> *). GHC.Internal.TH.Syntax.Quote m => GHC.Internal.TH.Syntax.AnnTarget -> m GHC.Internal.TH.Syntax.Exp -> m GHC.Internal.TH.Syntax.Dec
+  pragCompleteD :: forall (m :: * -> *). GHC.Internal.TH.Syntax.Quote m => [GHC.Internal.TH.Syntax.Name] -> GHC.Internal.Maybe.Maybe GHC.Internal.TH.Syntax.Name -> m GHC.Internal.TH.Syntax.Dec
+  pragInlD :: forall (m :: * -> *). GHC.Internal.TH.Syntax.Quote m => GHC.Internal.TH.Syntax.Name -> GHC.Internal.TH.Syntax.Inline -> GHC.Internal.TH.Syntax.RuleMatch -> GHC.Internal.TH.Syntax.Phases -> m GHC.Internal.TH.Syntax.Dec
+  pragLineD :: forall (m :: * -> *). GHC.Internal.TH.Syntax.Quote m => GHC.Types.Int -> GHC.Internal.Base.String -> m GHC.Internal.TH.Syntax.Dec
+  pragOpaqueD :: forall (m :: * -> *). GHC.Internal.TH.Syntax.Quote m => GHC.Internal.TH.Syntax.Name -> m GHC.Internal.TH.Syntax.Dec
+  pragRuleD :: forall (m :: * -> *). GHC.Internal.TH.Syntax.Quote m => GHC.Internal.Base.String -> GHC.Internal.Maybe.Maybe [m (GHC.Internal.TH.Syntax.TyVarBndr ())] -> [m GHC.Internal.TH.Syntax.RuleBndr] -> m GHC.Internal.TH.Syntax.Exp -> m GHC.Internal.TH.Syntax.Exp -> GHC.Internal.TH.Syntax.Phases -> m GHC.Internal.TH.Syntax.Dec
+  pragSCCFunD :: forall (m :: * -> *). GHC.Internal.TH.Syntax.Quote m => GHC.Internal.TH.Syntax.Name -> m GHC.Internal.TH.Syntax.Dec
+  pragSCCFunNamedD :: forall (m :: * -> *). GHC.Internal.TH.Syntax.Quote m => GHC.Internal.TH.Syntax.Name -> GHC.Internal.Base.String -> m GHC.Internal.TH.Syntax.Dec
+  pragSpecD :: forall (m :: * -> *). GHC.Internal.TH.Syntax.Quote m => GHC.Internal.TH.Syntax.Name -> m GHC.Internal.TH.Syntax.Type -> GHC.Internal.TH.Syntax.Phases -> m GHC.Internal.TH.Syntax.Dec
+  pragSpecInlD :: forall (m :: * -> *). GHC.Internal.TH.Syntax.Quote m => GHC.Internal.TH.Syntax.Name -> m GHC.Internal.TH.Syntax.Type -> GHC.Internal.TH.Syntax.Inline -> GHC.Internal.TH.Syntax.Phases -> m GHC.Internal.TH.Syntax.Dec
+  pragSpecInstD :: forall (m :: * -> *). GHC.Internal.TH.Syntax.Quote m => m GHC.Internal.TH.Syntax.Type -> m GHC.Internal.TH.Syntax.Dec
+  prefixPatSyn :: forall (m :: * -> *). GHC.Internal.TH.Syntax.Quote m => [GHC.Internal.TH.Syntax.Name] -> m GHC.Internal.TH.Syntax.PatSynArgs
+  prim :: GHC.Internal.TH.Syntax.Callconv
+  projectionE :: forall (m :: * -> *). GHC.Internal.TH.Syntax.Quote m => GHC.Internal.Base.NonEmpty GHC.Internal.Base.String -> m GHC.Internal.TH.Syntax.Exp
+  promotedConsT :: forall (m :: * -> *). GHC.Internal.TH.Syntax.Quote m => m GHC.Internal.TH.Syntax.Type
+  promotedInfixT :: forall (m :: * -> *). GHC.Internal.TH.Syntax.Quote m => m GHC.Internal.TH.Syntax.Type -> GHC.Internal.TH.Syntax.Name -> m GHC.Internal.TH.Syntax.Type -> m GHC.Internal.TH.Syntax.Type
+  promotedNilT :: forall (m :: * -> *). GHC.Internal.TH.Syntax.Quote m => m GHC.Internal.TH.Syntax.Type
+  promotedT :: forall (m :: * -> *). GHC.Internal.TH.Syntax.Quote m => GHC.Internal.TH.Syntax.Name -> m GHC.Internal.TH.Syntax.Type
+  promotedTupleT :: forall (m :: * -> *). GHC.Internal.TH.Syntax.Quote m => GHC.Types.Int -> m GHC.Internal.TH.Syntax.Type
+  promotedUInfixT :: forall (m :: * -> *). GHC.Internal.TH.Syntax.Quote m => m GHC.Internal.TH.Syntax.Type -> GHC.Internal.TH.Syntax.Name -> m GHC.Internal.TH.Syntax.Type -> m GHC.Internal.TH.Syntax.Type
+  rationalL :: GHC.Internal.Real.Rational -> GHC.Internal.TH.Syntax.Lit
+  recC :: forall (m :: * -> *). GHC.Internal.TH.Syntax.Quote m => GHC.Internal.TH.Syntax.Name -> [m GHC.Internal.TH.Syntax.VarBangType] -> m GHC.Internal.TH.Syntax.Con
+  recConE :: forall (m :: * -> *). GHC.Internal.TH.Syntax.Quote m => GHC.Internal.TH.Syntax.Name -> [m (GHC.Internal.TH.Syntax.Name, GHC.Internal.TH.Syntax.Exp)] -> m GHC.Internal.TH.Syntax.Exp
+  recGadtC :: forall (m :: * -> *). GHC.Internal.TH.Syntax.Quote m => [GHC.Internal.TH.Syntax.Name] -> [m GHC.Internal.TH.Syntax.VarStrictType] -> m GHC.Internal.TH.Syntax.Type -> m GHC.Internal.TH.Syntax.Con
+  recP :: forall (m :: * -> *). GHC.Internal.TH.Syntax.Quote m => GHC.Internal.TH.Syntax.Name -> [m GHC.Internal.TH.Syntax.FieldPat] -> m GHC.Internal.TH.Syntax.Pat
+  recS :: forall (m :: * -> *). GHC.Internal.TH.Syntax.Quote m => [m GHC.Internal.TH.Syntax.Stmt] -> m GHC.Internal.TH.Syntax.Stmt
+  recUpdE :: forall (m :: * -> *). GHC.Internal.TH.Syntax.Quote m => m GHC.Internal.TH.Syntax.Exp -> [m (GHC.Internal.TH.Syntax.Name, GHC.Internal.TH.Syntax.Exp)] -> m GHC.Internal.TH.Syntax.Exp
+  recordPatSyn :: forall (m :: * -> *). GHC.Internal.TH.Syntax.Quote m => [GHC.Internal.TH.Syntax.Name] -> m GHC.Internal.TH.Syntax.PatSynArgs
   representationalR :: Role
-  roleAnnotD :: forall (m :: * -> *). Language.Haskell.TH.Lib.Syntax.Quote m => Language.Haskell.TH.Lib.Syntax.Name -> [Role] -> m Language.Haskell.TH.Lib.Syntax.Dec
-  ruleVar :: forall (m :: * -> *). Language.Haskell.TH.Lib.Syntax.Quote m => Language.Haskell.TH.Lib.Syntax.Name -> m Language.Haskell.TH.Lib.Syntax.RuleBndr
-  safe :: Language.Haskell.TH.Lib.Syntax.Safety
-  sectionL :: forall (m :: * -> *). Language.Haskell.TH.Lib.Syntax.Quote m => m Language.Haskell.TH.Lib.Syntax.Exp -> m Language.Haskell.TH.Lib.Syntax.Exp -> m Language.Haskell.TH.Lib.Syntax.Exp
-  sectionR :: forall (m :: * -> *). Language.Haskell.TH.Lib.Syntax.Quote m => m Language.Haskell.TH.Lib.Syntax.Exp -> m Language.Haskell.TH.Lib.Syntax.Exp -> m Language.Haskell.TH.Lib.Syntax.Exp
-  sigD :: forall (m :: * -> *). Language.Haskell.TH.Lib.Syntax.Quote m => Language.Haskell.TH.Lib.Syntax.Name -> m Language.Haskell.TH.Lib.Syntax.Type -> m Language.Haskell.TH.Lib.Syntax.Dec
-  sigE :: forall (m :: * -> *). Language.Haskell.TH.Lib.Syntax.Quote m => m Language.Haskell.TH.Lib.Syntax.Exp -> m Language.Haskell.TH.Lib.Syntax.Type -> m Language.Haskell.TH.Lib.Syntax.Exp
-  sigP :: forall (m :: * -> *). Language.Haskell.TH.Lib.Syntax.Quote m => m Language.Haskell.TH.Lib.Syntax.Pat -> m Language.Haskell.TH.Lib.Syntax.Type -> m Language.Haskell.TH.Lib.Syntax.Pat
-  sigT :: forall (m :: * -> *). Language.Haskell.TH.Lib.Syntax.Quote m => m Language.Haskell.TH.Lib.Syntax.Type -> m Language.Haskell.TH.Lib.Syntax.Kind -> m Language.Haskell.TH.Lib.Syntax.Type
-  sourceLazy :: forall (m :: * -> *). Language.Haskell.TH.Lib.Syntax.Quote m => m Language.Haskell.TH.Lib.Syntax.SourceStrictness
-  sourceNoUnpack :: forall (m :: * -> *). Language.Haskell.TH.Lib.Syntax.Quote m => m Language.Haskell.TH.Lib.Syntax.SourceUnpackedness
-  sourceStrict :: forall (m :: * -> *). Language.Haskell.TH.Lib.Syntax.Quote m => m Language.Haskell.TH.Lib.Syntax.SourceStrictness
-  sourceUnpack :: forall (m :: * -> *). Language.Haskell.TH.Lib.Syntax.Quote m => m Language.Haskell.TH.Lib.Syntax.SourceUnpackedness
-  specifiedSpec :: Language.Haskell.TH.Lib.Syntax.Specificity
-  standaloneDerivD :: forall (m :: * -> *). Language.Haskell.TH.Lib.Syntax.Quote m => m Language.Haskell.TH.Lib.Syntax.Cxt -> m Language.Haskell.TH.Lib.Syntax.Type -> m Language.Haskell.TH.Lib.Syntax.Dec
-  standaloneDerivWithStrategyD :: forall (m :: * -> *). Language.Haskell.TH.Lib.Syntax.Quote m => GHC.Internal.Maybe.Maybe (m Language.Haskell.TH.Lib.Syntax.DerivStrategy) -> m Language.Haskell.TH.Lib.Syntax.Cxt -> m Language.Haskell.TH.Lib.Syntax.Type -> m Language.Haskell.TH.Lib.Syntax.Dec
-  starK :: forall (m :: * -> *). Language.Haskell.TH.Lib.Syntax.Quote m => m Language.Haskell.TH.Lib.Syntax.Kind
-  staticE :: forall (m :: * -> *). Language.Haskell.TH.Lib.Syntax.Quote m => m Language.Haskell.TH.Lib.Syntax.Exp -> m Language.Haskell.TH.Lib.Syntax.Exp
-  stdCall :: Language.Haskell.TH.Lib.Syntax.Callconv
-  stockStrategy :: forall (m :: * -> *). Language.Haskell.TH.Lib.Syntax.Quote m => m Language.Haskell.TH.Lib.Syntax.DerivStrategy
-  strTyLit :: forall (m :: * -> *). Language.Haskell.TH.Lib.Syntax.Quote m => GHC.Internal.Base.String -> m Language.Haskell.TH.Lib.Syntax.TyLit
-  strictType :: forall (m :: * -> *). Language.Haskell.TH.Lib.Syntax.Quote m => m Language.Haskell.TH.Lib.Syntax.Strict -> m Language.Haskell.TH.Lib.Syntax.Type -> m Language.Haskell.TH.Lib.Syntax.StrictType
-  stringE :: forall (m :: * -> *). Language.Haskell.TH.Lib.Syntax.Quote m => GHC.Internal.Base.String -> m Language.Haskell.TH.Lib.Syntax.Exp
-  stringL :: GHC.Internal.Base.String -> Language.Haskell.TH.Lib.Syntax.Lit
-  stringPrimL :: [GHC.Internal.Word.Word8] -> Language.Haskell.TH.Lib.Syntax.Lit
-  thisModule :: Language.Haskell.TH.Lib.Syntax.Q Language.Haskell.TH.Lib.Syntax.Module
-  tildeP :: forall (m :: * -> *). Language.Haskell.TH.Lib.Syntax.Quote m => m Language.Haskell.TH.Lib.Syntax.Pat -> m Language.Haskell.TH.Lib.Syntax.Pat
-  tupE :: forall (m :: * -> *). Language.Haskell.TH.Lib.Syntax.Quote m => [GHC.Internal.Maybe.Maybe (m Language.Haskell.TH.Lib.Syntax.Exp)] -> m Language.Haskell.TH.Lib.Syntax.Exp
-  tupP :: forall (m :: * -> *). Language.Haskell.TH.Lib.Syntax.Quote m => [m Language.Haskell.TH.Lib.Syntax.Pat] -> m Language.Haskell.TH.Lib.Syntax.Pat
-  tupleK :: GHC.Types.Int -> Language.Haskell.TH.Lib.Syntax.Kind
-  tupleT :: forall (m :: * -> *). Language.Haskell.TH.Lib.Syntax.Quote m => GHC.Types.Int -> m Language.Haskell.TH.Lib.Syntax.Type
-  tySynD :: forall (m :: * -> *). Language.Haskell.TH.Lib.Syntax.Quote m => Language.Haskell.TH.Lib.Syntax.Name -> [m (Language.Haskell.TH.Lib.Syntax.TyVarBndr Language.Haskell.TH.Lib.Syntax.BndrVis)] -> m Language.Haskell.TH.Lib.Syntax.Type -> m Language.Haskell.TH.Lib.Syntax.Dec
-  tySynEqn :: forall (m :: * -> *). Language.Haskell.TH.Lib.Syntax.Quote m => GHC.Internal.Maybe.Maybe [m (Language.Haskell.TH.Lib.Syntax.TyVarBndr ())] -> m Language.Haskell.TH.Lib.Syntax.Type -> m Language.Haskell.TH.Lib.Syntax.Type -> m Language.Haskell.TH.Lib.Syntax.TySynEqn
-  tySynInstD :: forall (m :: * -> *). Language.Haskell.TH.Lib.Syntax.Quote m => m Language.Haskell.TH.Lib.Syntax.TySynEqn -> m Language.Haskell.TH.Lib.Syntax.Dec
-  tyVarSig :: forall (m :: * -> *). Language.Haskell.TH.Lib.Syntax.Quote m => m (Language.Haskell.TH.Lib.Syntax.TyVarBndr ()) -> m Language.Haskell.TH.Lib.Syntax.FamilyResultSig
-  typeAnnotation :: Language.Haskell.TH.Lib.Syntax.Name -> Language.Haskell.TH.Lib.Syntax.AnnTarget
-  typeDataD :: forall (m :: * -> *). Language.Haskell.TH.Lib.Syntax.Quote m => Language.Haskell.TH.Lib.Syntax.Name -> [m (Language.Haskell.TH.Lib.Syntax.TyVarBndr Language.Haskell.TH.Lib.Syntax.BndrVis)] -> GHC.Internal.Maybe.Maybe (m Language.Haskell.TH.Lib.Syntax.Kind) -> [m Language.Haskell.TH.Lib.Syntax.Con] -> m Language.Haskell.TH.Lib.Syntax.Dec
-  typeDataD_doc :: Language.Haskell.TH.Lib.Syntax.Name -> [Language.Haskell.TH.Lib.Syntax.Q (Language.Haskell.TH.Lib.Syntax.TyVarBndr Language.Haskell.TH.Lib.Syntax.BndrVis)] -> GHC.Internal.Maybe.Maybe (Language.Haskell.TH.Lib.Syntax.Q Language.Haskell.TH.Lib.Syntax.Kind) -> [(Language.Haskell.TH.Lib.Syntax.Q Language.Haskell.TH.Lib.Syntax.Con, GHC.Internal.Maybe.Maybe GHC.Internal.Base.String, [GHC.Internal.Maybe.Maybe GHC.Internal.Base.String])] -> GHC.Internal.Maybe.Maybe GHC.Internal.Base.String -> Language.Haskell.TH.Lib.Syntax.Q Language.Haskell.TH.Lib.Syntax.Dec
-  typeE :: forall (m :: * -> *). Language.Haskell.TH.Lib.Syntax.Quote m => m Language.Haskell.TH.Lib.Syntax.Type -> m Language.Haskell.TH.Lib.Syntax.Exp
-  typeP :: forall (m :: * -> *). Language.Haskell.TH.Lib.Syntax.Quote m => m Language.Haskell.TH.Lib.Syntax.Type -> m Language.Haskell.TH.Lib.Syntax.Pat
-  typedBracketE :: forall (m :: * -> *). Language.Haskell.TH.Lib.Syntax.Quote m => m Language.Haskell.TH.Lib.Syntax.Exp -> m Language.Haskell.TH.Lib.Syntax.Exp
-  typedRuleVar :: forall (m :: * -> *). Language.Haskell.TH.Lib.Syntax.Quote m => Language.Haskell.TH.Lib.Syntax.Name -> m Language.Haskell.TH.Lib.Syntax.Type -> m Language.Haskell.TH.Lib.Syntax.RuleBndr
-  typedSpliceE :: forall (m :: * -> *). Language.Haskell.TH.Lib.Syntax.Quote m => m Language.Haskell.TH.Lib.Syntax.Exp -> m Language.Haskell.TH.Lib.Syntax.Exp
-  uInfixE :: forall (m :: * -> *). Language.Haskell.TH.Lib.Syntax.Quote m => m Language.Haskell.TH.Lib.Syntax.Exp -> m Language.Haskell.TH.Lib.Syntax.Exp -> m Language.Haskell.TH.Lib.Syntax.Exp -> m Language.Haskell.TH.Lib.Syntax.Exp
-  uInfixP :: forall (m :: * -> *). Language.Haskell.TH.Lib.Syntax.Quote m => m Language.Haskell.TH.Lib.Syntax.Pat -> Language.Haskell.TH.Lib.Syntax.Name -> m Language.Haskell.TH.Lib.Syntax.Pat -> m Language.Haskell.TH.Lib.Syntax.Pat
-  uInfixT :: forall (m :: * -> *). Language.Haskell.TH.Lib.Syntax.Quote m => m Language.Haskell.TH.Lib.Syntax.Type -> Language.Haskell.TH.Lib.Syntax.Name -> m Language.Haskell.TH.Lib.Syntax.Type -> m Language.Haskell.TH.Lib.Syntax.Type
-  unboundVarE :: forall (m :: * -> *). Language.Haskell.TH.Lib.Syntax.Quote m => Language.Haskell.TH.Lib.Syntax.Name -> m Language.Haskell.TH.Lib.Syntax.Exp
-  unboxedSumE :: forall (m :: * -> *). Language.Haskell.TH.Lib.Syntax.Quote m => m Language.Haskell.TH.Lib.Syntax.Exp -> Language.Haskell.TH.Lib.Syntax.SumAlt -> Language.Haskell.TH.Lib.Syntax.SumArity -> m Language.Haskell.TH.Lib.Syntax.Exp
-  unboxedSumP :: forall (m :: * -> *). Language.Haskell.TH.Lib.Syntax.Quote m => m Language.Haskell.TH.Lib.Syntax.Pat -> Language.Haskell.TH.Lib.Syntax.SumAlt -> Language.Haskell.TH.Lib.Syntax.SumArity -> m Language.Haskell.TH.Lib.Syntax.Pat
-  unboxedSumT :: forall (m :: * -> *). Language.Haskell.TH.Lib.Syntax.Quote m => Language.Haskell.TH.Lib.Syntax.SumArity -> m Language.Haskell.TH.Lib.Syntax.Type
-  unboxedTupE :: forall (m :: * -> *). Language.Haskell.TH.Lib.Syntax.Quote m => [GHC.Internal.Maybe.Maybe (m Language.Haskell.TH.Lib.Syntax.Exp)] -> m Language.Haskell.TH.Lib.Syntax.Exp
-  unboxedTupP :: forall (m :: * -> *). Language.Haskell.TH.Lib.Syntax.Quote m => [m Language.Haskell.TH.Lib.Syntax.Pat] -> m Language.Haskell.TH.Lib.Syntax.Pat
-  unboxedTupleT :: forall (m :: * -> *). Language.Haskell.TH.Lib.Syntax.Quote m => GHC.Types.Int -> m Language.Haskell.TH.Lib.Syntax.Type
-  unidir :: forall (m :: * -> *). Language.Haskell.TH.Lib.Syntax.Quote m => m Language.Haskell.TH.Lib.Syntax.PatSynDir
-  unpacked :: forall (m :: * -> *). Language.Haskell.TH.Lib.Syntax.Quote m => m Language.Haskell.TH.Lib.Syntax.Strict
-  unsafe :: Language.Haskell.TH.Lib.Syntax.Safety
-  valD :: forall (m :: * -> *). Language.Haskell.TH.Lib.Syntax.Quote m => m Language.Haskell.TH.Lib.Syntax.Pat -> m Language.Haskell.TH.Lib.Syntax.Body -> [m Language.Haskell.TH.Lib.Syntax.Dec] -> m Language.Haskell.TH.Lib.Syntax.Dec
-  valueAnnotation :: Language.Haskell.TH.Lib.Syntax.Name -> Language.Haskell.TH.Lib.Syntax.AnnTarget
-  varBangType :: forall (m :: * -> *). Language.Haskell.TH.Lib.Syntax.Quote m => Language.Haskell.TH.Lib.Syntax.Name -> m Language.Haskell.TH.Lib.Syntax.BangType -> m Language.Haskell.TH.Lib.Syntax.VarBangType
-  varE :: forall (m :: * -> *). Language.Haskell.TH.Lib.Syntax.Quote m => Language.Haskell.TH.Lib.Syntax.Name -> m Language.Haskell.TH.Lib.Syntax.Exp
-  varK :: Language.Haskell.TH.Lib.Syntax.Name -> Language.Haskell.TH.Lib.Syntax.Kind
-  varP :: forall (m :: * -> *). Language.Haskell.TH.Lib.Syntax.Quote m => Language.Haskell.TH.Lib.Syntax.Name -> m Language.Haskell.TH.Lib.Syntax.Pat
-  varStrictType :: forall (m :: * -> *). Language.Haskell.TH.Lib.Syntax.Quote m => Language.Haskell.TH.Lib.Syntax.Name -> m Language.Haskell.TH.Lib.Syntax.StrictType -> m Language.Haskell.TH.Lib.Syntax.VarStrictType
-  varT :: forall (m :: * -> *). Language.Haskell.TH.Lib.Syntax.Quote m => Language.Haskell.TH.Lib.Syntax.Name -> m Language.Haskell.TH.Lib.Syntax.Type
-  viaStrategy :: forall (m :: * -> *). Language.Haskell.TH.Lib.Syntax.Quote m => m Language.Haskell.TH.Lib.Syntax.Type -> m Language.Haskell.TH.Lib.Syntax.DerivStrategy
-  viewP :: forall (m :: * -> *). Language.Haskell.TH.Lib.Syntax.Quote m => m Language.Haskell.TH.Lib.Syntax.Exp -> m Language.Haskell.TH.Lib.Syntax.Pat -> m Language.Haskell.TH.Lib.Syntax.Pat
-  wildCardT :: forall (m :: * -> *). Language.Haskell.TH.Lib.Syntax.Quote m => m Language.Haskell.TH.Lib.Syntax.Type
-  wildP :: forall (m :: * -> *). Language.Haskell.TH.Lib.Syntax.Quote m => m Language.Haskell.TH.Lib.Syntax.Pat
-  withDecDoc :: GHC.Internal.Base.String -> Language.Haskell.TH.Lib.Syntax.Q Language.Haskell.TH.Lib.Syntax.Dec -> Language.Haskell.TH.Lib.Syntax.Q Language.Haskell.TH.Lib.Syntax.Dec
-  withDecsDoc :: GHC.Internal.Base.String -> Language.Haskell.TH.Lib.Syntax.Q [Language.Haskell.TH.Lib.Syntax.Dec] -> Language.Haskell.TH.Lib.Syntax.Q [Language.Haskell.TH.Lib.Syntax.Dec]
-  wordPrimL :: GHC.Num.Integer.Integer -> Language.Haskell.TH.Lib.Syntax.Lit
-
-module Language.Haskell.TH.Lib.Syntax where
-  -- Safety: Trustworthy
-  type AnnLookup :: *
-  data AnnLookup = AnnLookupModule Module | AnnLookupName Name
-  type AnnTarget :: *
-  data AnnTarget = ModuleAnnotation | TypeAnnotation Name | ValueAnnotation Name
-  type Arity :: *
-  type Arity = GHC.Types.Int
-  type Bang :: *
-  data Bang = Bang SourceUnpackedness SourceStrictness
-  type BangType :: *
-  type BangType = (Bang, Type)
-  type BndrVis :: *
-  data BndrVis = BndrReq | BndrInvis
-  type Body :: *
-  data Body = GuardedB [(Guard, Exp)] | NormalB Exp
-  type Bytes :: *
-  data Bytes = Bytes {bytesPtr :: GHC.Internal.ForeignPtr.ForeignPtr GHC.Internal.Word.Word8, bytesOffset :: GHC.Types.Word, bytesSize :: GHC.Types.Word}
-  type Callconv :: *
-  data Callconv = CCall | StdCall | CApi | Prim | JavaScript
-  type CharPos :: *
-  type CharPos = (GHC.Types.Int, GHC.Types.Int)
-  type Clause :: *
-  data Clause = Clause [Pat] Body [Dec]
-  type role Code representational nominal
-  type Code :: (* -> *) -> forall (r :: GHC.Types.RuntimeRep). TYPE r -> *
-  newtype Code m a = Code {examineCode :: m (TExp a)}
-  type Con :: *
-  data Con = NormalC Name [BangType] | RecC Name [VarBangType] | InfixC BangType Name BangType | ForallC [TyVarBndr Specificity] Cxt Con | GadtC [Name] [BangType] Type | RecGadtC [Name] [VarBangType] Type
-  type Cxt :: *
-  type Cxt = [Pred]
-  type Dec :: *
-  data Dec
-    = FunD Name [Clause]
-    | ValD Pat Body [Dec]
-    | DataD Cxt Name [TyVarBndr BndrVis] (GHC.Internal.Maybe.Maybe Kind) [Con] [DerivClause]
-    | NewtypeD Cxt Name [TyVarBndr BndrVis] (GHC.Internal.Maybe.Maybe Kind) Con [DerivClause]
-    | TypeDataD Name [TyVarBndr BndrVis] (GHC.Internal.Maybe.Maybe Kind) [Con]
-    | TySynD Name [TyVarBndr BndrVis] Type
-    | ClassD Cxt Name [TyVarBndr BndrVis] [FunDep] [Dec]
-    | InstanceD (GHC.Internal.Maybe.Maybe Overlap) Cxt Type [Dec]
-    | SigD Name Type
-    | KiSigD Name Kind
-    | ForeignD Foreign
-    | InfixD Fixity NamespaceSpecifier Name
-    | DefaultD [Type]
-    | PragmaD Pragma
-    | DataFamilyD Name [TyVarBndr BndrVis] (GHC.Internal.Maybe.Maybe Kind)
-    | DataInstD Cxt (GHC.Internal.Maybe.Maybe [TyVarBndr ()]) Type (GHC.Internal.Maybe.Maybe Kind) [Con] [DerivClause]
-    | NewtypeInstD Cxt (GHC.Internal.Maybe.Maybe [TyVarBndr ()]) Type (GHC.Internal.Maybe.Maybe Kind) Con [DerivClause]
-    | TySynInstD TySynEqn
-    | OpenTypeFamilyD TypeFamilyHead
-    | ClosedTypeFamilyD TypeFamilyHead [TySynEqn]
-    | RoleAnnotD Name [Role]
-    | StandaloneDerivD (GHC.Internal.Maybe.Maybe DerivStrategy) Cxt Type
-    | DefaultSigD Name Type
-    | PatSynD Name PatSynArgs PatSynDir Pat
-    | PatSynSigD Name PatSynType
-    | ImplicitParamBindD GHC.Internal.Base.String Exp
-  type DecidedStrictness :: *
-  data DecidedStrictness = DecidedLazy | DecidedStrict | DecidedUnpack
-  type DerivClause :: *
-  data DerivClause = DerivClause (GHC.Internal.Maybe.Maybe DerivStrategy) Cxt
-  type DerivStrategy :: *
-  data DerivStrategy = StockStrategy | AnyclassStrategy | NewtypeStrategy | ViaStrategy Type
-  type DocLoc :: *
-  data DocLoc = ModuleDoc | DeclDoc Name | ArgDoc Name GHC.Types.Int | InstDoc Type
-  type Exp :: *
-  data Exp
-    = VarE Name
-    | ConE Name
-    | LitE Lit
-    | AppE Exp Exp
-    | AppTypeE Exp Type
-    | InfixE (GHC.Internal.Maybe.Maybe Exp) Exp (GHC.Internal.Maybe.Maybe Exp)
-    | UInfixE Exp Exp Exp
-    | ParensE Exp
-    | LamE [Pat] Exp
-    | LamCaseE [Match]
-    | LamCasesE [Clause]
-    | TupE [GHC.Internal.Maybe.Maybe Exp]
-    | UnboxedTupE [GHC.Internal.Maybe.Maybe Exp]
-    | UnboxedSumE Exp SumAlt SumArity
-    | CondE Exp Exp Exp
-    | MultiIfE [(Guard, Exp)]
-    | LetE [Dec] Exp
-    | CaseE Exp [Match]
-    | DoE (GHC.Internal.Maybe.Maybe ModName) [Stmt]
-    | MDoE (GHC.Internal.Maybe.Maybe ModName) [Stmt]
-    | CompE [Stmt]
-    | ArithSeqE Range
-    | ListE [Exp]
-    | SigE Exp Type
-    | RecConE Name [FieldExp]
-    | RecUpdE Exp [FieldExp]
-    | StaticE Exp
-    | UnboundVarE Name
-    | LabelE GHC.Internal.Base.String
-    | ImplicitParamVarE GHC.Internal.Base.String
-    | GetFieldE Exp GHC.Internal.Base.String
-    | ProjectionE (GHC.Internal.Base.NonEmpty GHC.Internal.Base.String)
-    | TypedBracketE Exp
-    | TypedSpliceE Exp
-    | TypeE Type
-  type Extension :: *
-  data Extension
-    = Cpp
-    | OverlappingInstances
-    | UndecidableInstances
-    | IncoherentInstances
-    | UndecidableSuperClasses
-    | MonomorphismRestriction
-    | MonoLocalBinds
-    | DeepSubsumption
-    | RelaxedPolyRec
-    | ExtendedDefaultRules
-    | ForeignFunctionInterface
-    | UnliftedFFITypes
-    | InterruptibleFFI
-    | CApiFFI
-    | GHCForeignImportPrim
-    | JavaScriptFFI
-    | ParallelArrays
-    | Arrows
-    | TemplateHaskell
-    | TemplateHaskellQuotes
-    | QualifiedDo
-    | QuasiQuotes
-    | ImplicitParams
-    | ImplicitPrelude
-    | ScopedTypeVariables
-    | AllowAmbiguousTypes
-    | UnboxedTuples
-    | UnboxedSums
-    | UnliftedNewtypes
-    | UnliftedDatatypes
-    | BangPatterns
-    | TypeFamilies
-    | TypeFamilyDependencies
-    | TypeInType
-    | OverloadedStrings
-    | OverloadedLists
-    | NumDecimals
-    | DisambiguateRecordFields
-    | RecordWildCards
-    | NamedFieldPuns
-    | ViewPatterns
-    | GADTs
-    | GADTSyntax
-    | NPlusKPatterns
-    | DoAndIfThenElse
-    | BlockArguments
-    | RebindableSyntax
-    | ConstraintKinds
-    | PolyKinds
-    | DataKinds
-    | TypeData
-    | InstanceSigs
-    | ApplicativeDo
-    | LinearTypes
-    | RequiredTypeArguments
-    | StandaloneDeriving
-    | DeriveDataTypeable
-    | AutoDeriveTypeable
-    | DeriveFunctor
-    | DeriveTraversable
-    | DeriveFoldable
-    | DeriveGeneric
-    | DefaultSignatures
-    | DeriveAnyClass
-    | DeriveLift
-    | DerivingStrategies
-    | DerivingVia
-    | TypeSynonymInstances
-    | FlexibleContexts
-    | FlexibleInstances
-    | ConstrainedClassMethods
-    | MultiParamTypeClasses
-    | NullaryTypeClasses
-    | FunctionalDependencies
-    | UnicodeSyntax
-    | ExistentialQuantification
-    | MagicHash
-    | EmptyDataDecls
-    | KindSignatures
-    | RoleAnnotations
-    | ParallelListComp
-    | TransformListComp
-    | MonadComprehensions
-    | GeneralizedNewtypeDeriving
-    | RecursiveDo
-    | PostfixOperators
-    | TupleSections
-    | PatternGuards
-    | LiberalTypeSynonyms
-    | RankNTypes
-    | ImpredicativeTypes
-    | TypeOperators
-    | ExplicitNamespaces
-    | PackageImports
-    | ExplicitForAll
-    | AlternativeLayoutRule
-    | AlternativeLayoutRuleTransitional
-    | DatatypeContexts
-    | NondecreasingIndentation
-    | RelaxedLayout
-    | TraditionalRecordSyntax
-    | LambdaCase
-    | MultiWayIf
-    | BinaryLiterals
-    | NegativeLiterals
-    | HexFloatLiterals
-    | DuplicateRecordFields
-    | OverloadedLabels
-    | EmptyCase
-    | PatternSynonyms
-    | PartialTypeSignatures
-    | NamedWildCards
-    | StaticPointers
-    | TypeApplications
-    | Strict
-    | StrictData
-    | EmptyDataDeriving
-    | NumericUnderscores
-    | QuantifiedConstraints
-    | StarIsType
-    | ImportQualifiedPost
-    | CUSKs
-    | StandaloneKindSignatures
-    | LexicalNegation
-    | FieldSelectors
-    | OverloadedRecordDot
-    | OverloadedRecordUpdate
-    | TypeAbstractions
-    | ExtendedLiterals
-    | ListTuplePuns
-  type FamilyResultSig :: *
-  data FamilyResultSig = NoSig | KindSig Kind | TyVarSig (TyVarBndr ())
-  type FieldExp :: *
-  type FieldExp = (Name, Exp)
-  type FieldPat :: *
-  type FieldPat = (Name, Pat)
-  type Fixity :: *
-  data Fixity = Fixity GHC.Types.Int FixityDirection
-  type FixityDirection :: *
-  data FixityDirection = InfixL | InfixR | InfixN
-  type Foreign :: *
-  data Foreign = ImportF Callconv Safety GHC.Internal.Base.String Name Type | ExportF Callconv GHC.Internal.Base.String Name Type
-  type ForeignSrcLang :: *
-  data ForeignSrcLang = LangC | LangCxx | LangObjc | LangObjcxx | LangAsm | LangJs | RawObject
-  type FunDep :: *
-  data FunDep = FunDep [Name] [Name]
-  type Guard :: *
-  data Guard = NormalG Exp | PatG [Stmt]
-  type Info :: *
-  data Info = ClassI Dec [InstanceDec] | ClassOpI Name Type ParentName | TyConI Dec | FamilyI Dec [InstanceDec] | PrimTyConI Name Arity Unlifted | DataConI Name Type ParentName | PatSynI Name PatSynType | VarI Name Type (GHC.Internal.Maybe.Maybe Dec) | TyVarI Name Type
-  type InjectivityAnn :: *
-  data InjectivityAnn = InjectivityAnn Name [Name]
-  type Inline :: *
-  data Inline = NoInline | Inline | Inlinable
-  type InstanceDec :: *
-  type InstanceDec = Dec
-  type Kind :: *
-  type Kind = Type
-  type Lift :: forall (r :: GHC.Types.RuntimeRep). TYPE r -> Constraint
-  class Lift t where
-    lift :: forall (m :: * -> *). Quote m => t -> m Exp
-    default lift :: forall (m :: * -> *). (r ~ GHC.Types.LiftedRep, Quote m) => t -> m Exp
-    liftTyped :: forall (m :: * -> *). Quote m => t -> Code m t
-    {-# MINIMAL liftTyped #-}
-  type Lit :: *
-  data Lit = CharL GHC.Types.Char | StringL GHC.Internal.Base.String | IntegerL GHC.Num.Integer.Integer | RationalL GHC.Internal.Real.Rational | IntPrimL GHC.Num.Integer.Integer | WordPrimL GHC.Num.Integer.Integer | FloatPrimL GHC.Internal.Real.Rational | DoublePrimL GHC.Internal.Real.Rational | StringPrimL [GHC.Internal.Word.Word8] | BytesPrimL Bytes | CharPrimL GHC.Types.Char
-  type Loc :: *
-  data Loc = Loc {loc_filename :: GHC.Internal.Base.String, loc_package :: GHC.Internal.Base.String, loc_module :: GHC.Internal.Base.String, loc_start :: CharPos, loc_end :: CharPos}
-  type Match :: *
-  data Match = Match Pat Body [Dec]
-  type ModName :: *
-  newtype ModName = ModName GHC.Internal.Base.String
-  type Module :: *
-  data Module = Module PkgName ModName
-  type ModuleInfo :: *
-  data ModuleInfo = ModuleInfo [Module]
-  type Name :: *
-  data Name = Name OccName NameFlavour
-  type NameFlavour :: *
-  data NameFlavour = NameS | NameQ ModName | NameU !Uniq | NameL !Uniq | NameG NameSpace PkgName ModName
-  type NameIs :: *
-  data NameIs = Alone | Applied | Infix
-  type NameSpace :: *
-  data NameSpace = VarName | DataName | TcClsName | FldName {fldParent :: !GHC.Internal.Base.String}
-  type NamespaceSpecifier :: *
-  data NamespaceSpecifier = NoNamespaceSpecifier | TypeNamespaceSpecifier | DataNamespaceSpecifier
-  type OccName :: *
-  newtype OccName = OccName GHC.Internal.Base.String
-  type Overlap :: *
-  data Overlap = Overlappable | Overlapping | Overlaps | Incoherent
-  type ParentName :: *
-  type ParentName = Name
-  type Pat :: *
-  data Pat = LitP Lit | VarP Name | TupP [Pat] | UnboxedTupP [Pat] | UnboxedSumP Pat SumAlt SumArity | ConP Name [Type] [Pat] | InfixP Pat Name Pat | UInfixP Pat Name Pat | ParensP Pat | TildeP Pat | BangP Pat | AsP Name Pat | WildP | RecP Name [FieldPat] | ListP [Pat] | SigP Pat Type | ViewP Exp Pat | TypeP Type | InvisP Type
-  type PatSynArgs :: *
-  data PatSynArgs = PrefixPatSyn [Name] | InfixPatSyn Name Name | RecordPatSyn [Name]
-  type PatSynDir :: *
-  data PatSynDir = Unidir | ImplBidir | ExplBidir [Clause]
-  type PatSynType :: *
-  type PatSynType = Type
-  type Phases :: *
-  data Phases = AllPhases | FromPhase GHC.Types.Int | BeforePhase GHC.Types.Int
-  type PkgName :: *
-  newtype PkgName = PkgName GHC.Internal.Base.String
-  type Pragma :: *
-  data Pragma = InlineP Name Inline RuleMatch Phases | OpaqueP Name | SpecialiseP Name Type (GHC.Internal.Maybe.Maybe Inline) Phases | SpecialiseInstP Type | RuleP GHC.Internal.Base.String (GHC.Internal.Maybe.Maybe [TyVarBndr ()]) [RuleBndr] Exp Exp Phases | AnnP AnnTarget Exp | LineP GHC.Types.Int GHC.Internal.Base.String | CompleteP [Name] (GHC.Internal.Maybe.Maybe Name) | SCCP Name (GHC.Internal.Maybe.Maybe GHC.Internal.Base.String)
-  type Pred :: *
-  type Pred = Type
-  type role Q nominal
-  type Q :: * -> *
-  newtype Q a = Q {unQ :: forall (m :: * -> *). Quasi m => m a}
-  type Quasi :: (* -> *) -> Constraint
-  class (Control.Monad.IO.Class.MonadIO m, GHC.Internal.Control.Monad.Fail.MonadFail m) => Quasi m where
-    qNewName :: GHC.Internal.Base.String -> m Name
-    qReport :: GHC.Types.Bool -> GHC.Internal.Base.String -> m ()
-    qRecover :: forall a. m a -> m a -> m a
-    qLookupName :: GHC.Types.Bool -> GHC.Internal.Base.String -> m (GHC.Internal.Maybe.Maybe Name)
-    qReify :: Name -> m Info
-    qReifyFixity :: Name -> m (GHC.Internal.Maybe.Maybe Fixity)
-    qReifyType :: Name -> m Type
-    qReifyInstances :: Name -> [Type] -> m [Dec]
-    qReifyRoles :: Name -> m [Role]
-    qReifyAnnotations :: forall a. GHC.Internal.Data.Data.Data a => AnnLookup -> m [a]
-    qReifyModule :: Module -> m ModuleInfo
-    qReifyConStrictness :: Name -> m [DecidedStrictness]
-    qLocation :: m Loc
-    qRunIO :: forall a. GHC.Types.IO a -> m a
-    qGetPackageRoot :: m GHC.Internal.IO.FilePath
-    qAddDependentFile :: GHC.Internal.IO.FilePath -> m ()
-    qAddTempFile :: GHC.Internal.Base.String -> m GHC.Internal.IO.FilePath
-    qAddTopDecls :: [Dec] -> m ()
-    qAddForeignFilePath :: ForeignSrcLang -> GHC.Internal.Base.String -> m ()
-    qAddModFinalizer :: Q () -> m ()
-    qAddCorePlugin :: GHC.Internal.Base.String -> m ()
-    qGetQ :: forall a. ghc-internal-9.1001.0:GHC.Internal.Data.Typeable.Internal.Typeable a => m (GHC.Internal.Maybe.Maybe a)
-    qPutQ :: forall a. ghc-internal-9.1001.0:GHC.Internal.Data.Typeable.Internal.Typeable a => a -> m ()
-    qIsExtEnabled :: Extension -> m GHC.Types.Bool
-    qExtsEnabled :: m [Extension]
-    qPutDoc :: DocLoc -> GHC.Internal.Base.String -> m ()
-    qGetDoc :: DocLoc -> m (GHC.Internal.Maybe.Maybe GHC.Internal.Base.String)
-    {-# MINIMAL qNewName, qReport, qRecover, qLookupName, qReify, qReifyFixity, qReifyType, qReifyInstances, qReifyRoles, qReifyAnnotations, qReifyModule, qReifyConStrictness, qLocation, qGetPackageRoot, qAddDependentFile, qAddTempFile, qAddTopDecls, qAddForeignFilePath, qAddModFinalizer, qAddCorePlugin, qGetQ, qPutQ, qIsExtEnabled, qExtsEnabled, qPutDoc, qGetDoc #-}
-  type Quote :: (* -> *) -> Constraint
-  class GHC.Internal.Base.Monad m => Quote m where
-    newName :: GHC.Internal.Base.String -> m Name
-    {-# MINIMAL newName #-}
-  type Range :: *
-  data Range = FromR Exp | FromThenR Exp Exp | FromToR Exp Exp | FromThenToR Exp Exp Exp
-  type Role :: *
-  data Role = NominalR | RepresentationalR | PhantomR | InferR
-  type RuleBndr :: *
-  data RuleBndr = RuleVar Name | TypedRuleVar Name Type
-  type RuleMatch :: *
-  data RuleMatch = ConLike | FunLike
-  type Safety :: *
-  data Safety = Unsafe | Safe | Interruptible
-  type SourceStrictness :: *
-  data SourceStrictness = NoSourceStrictness | SourceLazy | SourceStrict
-  type SourceUnpackedness :: *
-  data SourceUnpackedness = NoSourceUnpackedness | SourceNoUnpack | SourceUnpack
-  type Specificity :: *
-  data Specificity = SpecifiedSpec | InferredSpec
-  type Stmt :: *
-  data Stmt = BindS Pat Exp | LetS [Dec] | NoBindS Exp | ParS [[Stmt]] | RecS [Stmt]
-  type Strict :: *
-  type Strict = Bang
-  type StrictType :: *
-  type StrictType = BangType
-  type SumAlt :: *
-  type SumAlt = GHC.Types.Int
-  type SumArity :: *
-  type SumArity = GHC.Types.Int
-  type role TExp nominal
-  type TExp :: forall (r :: GHC.Types.RuntimeRep). TYPE r -> *
-  newtype TExp a = TExp {unType :: Exp}
-  type TyLit :: *
-  data TyLit = NumTyLit GHC.Num.Integer.Integer | StrTyLit GHC.Internal.Base.String | CharTyLit GHC.Types.Char
-  type TySynEqn :: *
-  data TySynEqn = TySynEqn (GHC.Internal.Maybe.Maybe [TyVarBndr ()]) Type Type
-  type TyVarBndr :: * -> *
-  data TyVarBndr flag = PlainTV Name flag | KindedTV Name flag Kind
-  type Type :: *
-  data Type = ForallT [TyVarBndr Specificity] Cxt Type | ForallVisT [TyVarBndr ()] Type | AppT Type Type | AppKindT Type Kind | SigT Type Kind | VarT Name | ConT Name | PromotedT Name | InfixT Type Name Type | UInfixT Type Name Type | PromotedInfixT Type Name Type | PromotedUInfixT Type Name Type | ParensT Type | TupleT GHC.Types.Int | UnboxedTupleT GHC.Types.Int | UnboxedSumT SumArity | ArrowT | MulArrowT | EqualityT | ListT | PromotedTupleT GHC.Types.Int | PromotedNilT | PromotedConsT | StarT | ConstraintT | LitT TyLit | WildCardT | ImplicitParamT GHC.Internal.Base.String Type
-  type TypeFamilyHead :: *
-  data TypeFamilyHead = TypeFamilyHead Name [TyVarBndr BndrVis] FamilyResultSig (GHC.Internal.Maybe.Maybe InjectivityAnn)
-  type Uniq :: *
-  type Uniq = GHC.Num.Integer.Integer
-  type Unlifted :: *
-  type Unlifted = GHC.Types.Bool
-  type VarBangType :: *
-  type VarBangType = (Name, Bang, Type)
-  type VarStrictType :: *
-  type VarStrictType = VarBangType
-  addCorePlugin :: GHC.Internal.Base.String -> Q ()
-  addDependentFile :: GHC.Internal.IO.FilePath -> Q ()
-  addForeignFile :: ForeignSrcLang -> GHC.Internal.Base.String -> Q ()
-  addForeignFilePath :: ForeignSrcLang -> GHC.Internal.IO.FilePath -> Q ()
-  addForeignSource :: ForeignSrcLang -> GHC.Internal.Base.String -> Q ()
-  addModFinalizer :: Q () -> Q ()
-  addTempFile :: GHC.Internal.Base.String -> Q GHC.Internal.IO.FilePath
-  addTopDecls :: [Dec] -> Q ()
-  addrToByteArray :: GHC.Types.Int -> GHC.Prim.Addr# -> Data.Array.Byte.ByteArray
-  addrToByteArrayName :: Name
-  badIO :: forall a. GHC.Internal.Base.String -> GHC.Types.IO a
-  bindCode :: forall (m :: * -> *) a (r :: GHC.Types.RuntimeRep) (b :: TYPE r). GHC.Internal.Base.Monad m => m a -> (a -> Code m b) -> Code m b
-  bindCode_ :: forall (m :: * -> *) a (r :: GHC.Types.RuntimeRep) (b :: TYPE r). GHC.Internal.Base.Monad m => m a -> Code m b -> Code m b
-  cmpEq :: GHC.Types.Ordering -> GHC.Types.Bool
-  compareBytes :: Bytes -> Bytes -> GHC.Types.Ordering
-  counter :: GHC.Internal.IORef.IORef Uniq
-  dataToExpQ :: forall (m :: * -> *) a. (Quote m, GHC.Internal.Data.Data.Data a) => (forall b. GHC.Internal.Data.Data.Data b => b -> GHC.Internal.Maybe.Maybe (m Exp)) -> a -> m Exp
-  dataToPatQ :: forall (m :: * -> *) a. (Quote m, GHC.Internal.Data.Data.Data a) => (forall b. GHC.Internal.Data.Data.Data b => b -> GHC.Internal.Maybe.Maybe (m Pat)) -> a -> m Pat
-  dataToQa :: forall (m :: * -> *) a k q. (Quote m, GHC.Internal.Data.Data.Data a) => (Name -> k) -> (Lit -> m q) -> (k -> [m q] -> m q) -> (forall b. GHC.Internal.Data.Data.Data b => b -> GHC.Internal.Maybe.Maybe (m q)) -> a -> m q
-  defaultFixity :: Fixity
-  eqBytes :: Bytes -> Bytes -> GHC.Types.Bool
-  extsEnabled :: Q [Extension]
-  falseName :: Name
-  getDoc :: DocLoc -> Q (GHC.Internal.Maybe.Maybe GHC.Internal.Base.String)
-  getPackageRoot :: Q GHC.Internal.IO.FilePath
-  getQ :: forall a. ghc-internal-9.1001.0:GHC.Internal.Data.Typeable.Internal.Typeable a => Q (GHC.Internal.Maybe.Maybe a)
-  get_cons_names :: Con -> [Name]
-  hoistCode :: forall (m :: * -> *) (n :: * -> *) (r :: GHC.Types.RuntimeRep) (a :: TYPE r). GHC.Internal.Base.Monad m => (forall x. m x -> n x) -> Code m a -> Code n a
-  isExtEnabled :: Extension -> Q GHC.Types.Bool
-  isInstance :: Name -> [Type] -> Q GHC.Types.Bool
-  joinCode :: forall (m :: * -> *) (r :: GHC.Types.RuntimeRep) (a :: TYPE r). GHC.Internal.Base.Monad m => m (Code m a) -> Code m a
-  justName :: Name
-  leftName :: Name
-  liftCode :: forall (r :: GHC.Types.RuntimeRep) (a :: TYPE r) (m :: * -> *). m (TExp a) -> Code m a
-  liftData :: forall (m :: * -> *) a. (Quote m, GHC.Internal.Data.Data.Data a) => a -> m Exp
-  liftString :: forall (m :: * -> *). Quote m => GHC.Internal.Base.String -> m Exp
-  location :: Q Loc
-  lookupName :: GHC.Types.Bool -> GHC.Internal.Base.String -> Q (GHC.Internal.Maybe.Maybe Name)
-  lookupTypeName :: GHC.Internal.Base.String -> Q (GHC.Internal.Maybe.Maybe Name)
-  lookupValueName :: GHC.Internal.Base.String -> Q (GHC.Internal.Maybe.Maybe Name)
-  makeRelativeToProject :: GHC.Internal.IO.FilePath -> Q GHC.Internal.IO.FilePath
-  manyName :: Name
-  maxPrecedence :: GHC.Types.Int
-  memcmp :: forall a b. GHC.Internal.Ptr.Ptr a -> GHC.Internal.Ptr.Ptr b -> GHC.Internal.Foreign.C.Types.CSize -> GHC.Types.IO GHC.Internal.Foreign.C.Types.CInt
-  mkModName :: GHC.Internal.Base.String -> ModName
-  mkName :: GHC.Internal.Base.String -> Name
-  mkNameG :: NameSpace -> GHC.Internal.Base.String -> GHC.Internal.Base.String -> GHC.Internal.Base.String -> Name
-  mkNameG_d :: GHC.Internal.Base.String -> GHC.Internal.Base.String -> GHC.Internal.Base.String -> Name
-  mkNameG_fld :: GHC.Internal.Base.String -> GHC.Internal.Base.String -> GHC.Internal.Base.String -> GHC.Internal.Base.String -> Name
-  mkNameG_tc :: GHC.Internal.Base.String -> GHC.Internal.Base.String -> GHC.Internal.Base.String -> Name
-  mkNameG_v :: GHC.Internal.Base.String -> GHC.Internal.Base.String -> GHC.Internal.Base.String -> Name
-  mkNameL :: GHC.Internal.Base.String -> Uniq -> Name
-  mkNameQ :: GHC.Internal.Base.String -> GHC.Internal.Base.String -> Name
-  mkNameS :: GHC.Internal.Base.String -> Name
-  mkNameU :: GHC.Internal.Base.String -> Uniq -> Name
-  mkOccName :: GHC.Internal.Base.String -> OccName
-  mkPkgName :: GHC.Internal.Base.String -> PkgName
-  mk_tup_name :: GHC.Types.Int -> NameSpace -> GHC.Types.Bool -> Name
-  modString :: ModName -> GHC.Internal.Base.String
-  nameBase :: Name -> GHC.Internal.Base.String
-  nameModule :: Name -> GHC.Internal.Maybe.Maybe GHC.Internal.Base.String
-  namePackage :: Name -> GHC.Internal.Maybe.Maybe GHC.Internal.Base.String
-  nameSpace :: Name -> GHC.Internal.Maybe.Maybe NameSpace
-  newDeclarationGroup :: Q [Dec]
-  newNameIO :: GHC.Internal.Base.String -> GHC.Types.IO Name
-  nonemptyName :: Name
-  nothingName :: Name
-  occString :: OccName -> GHC.Internal.Base.String
-  oneName :: Name
-  pkgString :: PkgName -> GHC.Internal.Base.String
-  putDoc :: DocLoc -> GHC.Internal.Base.String -> Q ()
-  putQ :: forall a. ghc-internal-9.1001.0:GHC.Internal.Data.Typeable.Internal.Typeable a => a -> Q ()
-  recover :: forall a. Q a -> Q a -> Q a
-  reify :: Name -> Q Info
-  reifyAnnotations :: forall a. GHC.Internal.Data.Data.Data a => AnnLookup -> Q [a]
-  reifyConStrictness :: Name -> Q [DecidedStrictness]
-  reifyFixity :: Name -> Q (GHC.Internal.Maybe.Maybe Fixity)
-  reifyInstances :: Name -> [Type] -> Q [InstanceDec]
-  reifyModule :: Module -> Q ModuleInfo
-  reifyRoles :: Name -> Q [Role]
-  reifyType :: Name -> Q Type
-  report :: GHC.Types.Bool -> GHC.Internal.Base.String -> Q ()
-  reportError :: GHC.Internal.Base.String -> Q ()
-  reportWarning :: GHC.Internal.Base.String -> Q ()
-  rightName :: Name
-  runIO :: forall a. GHC.Types.IO a -> Q a
-  runQ :: forall (m :: * -> *) a. Quasi m => Q a -> m a
-  sequenceQ :: forall (m :: * -> *) a. GHC.Internal.Base.Monad m => [m a] -> m [a]
-  showName :: Name -> GHC.Internal.Base.String
-  showName' :: NameIs -> Name -> GHC.Internal.Base.String
-  thenCmp :: GHC.Types.Ordering -> GHC.Types.Ordering -> GHC.Types.Ordering
-  trueName :: Name
-  tupleDataName :: GHC.Types.Int -> Name
-  tupleTypeName :: GHC.Types.Int -> Name
-  unTypeCode :: forall (r :: GHC.Types.RuntimeRep) (a :: TYPE r) (m :: * -> *). Quote m => Code m a -> m Exp
-  unTypeQ :: forall (r :: GHC.Types.RuntimeRep) (a :: TYPE r) (m :: * -> *). Quote m => m (TExp a) -> m Exp
-  unboxedSumDataName :: SumAlt -> SumArity -> Name
-  unboxedSumTypeName :: SumArity -> Name
-  unboxedTupleDataName :: GHC.Types.Int -> Name
-  unboxedTupleTypeName :: GHC.Types.Int -> Name
-  unsafeCodeCoerce :: forall (r :: GHC.Types.RuntimeRep) (a :: TYPE r) (m :: * -> *). Quote m => m Exp -> Code m a
-  unsafeTExpCoerce :: forall (r :: GHC.Types.RuntimeRep) (a :: TYPE r) (m :: * -> *). Quote m => m Exp -> m (TExp a)
+  roleAnnotD :: forall (m :: * -> *). GHC.Internal.TH.Syntax.Quote m => GHC.Internal.TH.Syntax.Name -> [Role] -> m GHC.Internal.TH.Syntax.Dec
+  ruleVar :: forall (m :: * -> *). GHC.Internal.TH.Syntax.Quote m => GHC.Internal.TH.Syntax.Name -> m GHC.Internal.TH.Syntax.RuleBndr
+  safe :: GHC.Internal.TH.Syntax.Safety
+  sectionL :: forall (m :: * -> *). GHC.Internal.TH.Syntax.Quote m => m GHC.Internal.TH.Syntax.Exp -> m GHC.Internal.TH.Syntax.Exp -> m GHC.Internal.TH.Syntax.Exp
+  sectionR :: forall (m :: * -> *). GHC.Internal.TH.Syntax.Quote m => m GHC.Internal.TH.Syntax.Exp -> m GHC.Internal.TH.Syntax.Exp -> m GHC.Internal.TH.Syntax.Exp
+  sigD :: forall (m :: * -> *). GHC.Internal.TH.Syntax.Quote m => GHC.Internal.TH.Syntax.Name -> m GHC.Internal.TH.Syntax.Type -> m GHC.Internal.TH.Syntax.Dec
+  sigE :: forall (m :: * -> *). GHC.Internal.TH.Syntax.Quote m => m GHC.Internal.TH.Syntax.Exp -> m GHC.Internal.TH.Syntax.Type -> m GHC.Internal.TH.Syntax.Exp
+  sigP :: forall (m :: * -> *). GHC.Internal.TH.Syntax.Quote m => m GHC.Internal.TH.Syntax.Pat -> m GHC.Internal.TH.Syntax.Type -> m GHC.Internal.TH.Syntax.Pat
+  sigT :: forall (m :: * -> *). GHC.Internal.TH.Syntax.Quote m => m GHC.Internal.TH.Syntax.Type -> m GHC.Internal.TH.Syntax.Kind -> m GHC.Internal.TH.Syntax.Type
+  sourceLazy :: forall (m :: * -> *). GHC.Internal.TH.Syntax.Quote m => m GHC.Internal.TH.Syntax.SourceStrictness
+  sourceNoUnpack :: forall (m :: * -> *). GHC.Internal.TH.Syntax.Quote m => m GHC.Internal.TH.Syntax.SourceUnpackedness
+  sourceStrict :: forall (m :: * -> *). GHC.Internal.TH.Syntax.Quote m => m GHC.Internal.TH.Syntax.SourceStrictness
+  sourceUnpack :: forall (m :: * -> *). GHC.Internal.TH.Syntax.Quote m => m GHC.Internal.TH.Syntax.SourceUnpackedness
+  specifiedSpec :: GHC.Internal.TH.Syntax.Specificity
+  standaloneDerivD :: forall (m :: * -> *). GHC.Internal.TH.Syntax.Quote m => m GHC.Internal.TH.Syntax.Cxt -> m GHC.Internal.TH.Syntax.Type -> m GHC.Internal.TH.Syntax.Dec
+  standaloneDerivWithStrategyD :: forall (m :: * -> *). GHC.Internal.TH.Syntax.Quote m => GHC.Internal.Maybe.Maybe (m GHC.Internal.TH.Syntax.DerivStrategy) -> m GHC.Internal.TH.Syntax.Cxt -> m GHC.Internal.TH.Syntax.Type -> m GHC.Internal.TH.Syntax.Dec
+  starK :: forall (m :: * -> *). GHC.Internal.TH.Syntax.Quote m => m GHC.Internal.TH.Syntax.Kind
+  staticE :: forall (m :: * -> *). GHC.Internal.TH.Syntax.Quote m => m GHC.Internal.TH.Syntax.Exp -> m GHC.Internal.TH.Syntax.Exp
+  stdCall :: GHC.Internal.TH.Syntax.Callconv
+  stockStrategy :: forall (m :: * -> *). GHC.Internal.TH.Syntax.Quote m => m GHC.Internal.TH.Syntax.DerivStrategy
+  strTyLit :: forall (m :: * -> *). GHC.Internal.TH.Syntax.Quote m => GHC.Internal.Base.String -> m GHC.Internal.TH.Syntax.TyLit
+  strictType :: forall (m :: * -> *). GHC.Internal.TH.Syntax.Quote m => m GHC.Internal.TH.Syntax.Strict -> m GHC.Internal.TH.Syntax.Type -> m GHC.Internal.TH.Syntax.StrictType
+  stringE :: forall (m :: * -> *). GHC.Internal.TH.Syntax.Quote m => GHC.Internal.Base.String -> m GHC.Internal.TH.Syntax.Exp
+  stringL :: GHC.Internal.Base.String -> GHC.Internal.TH.Syntax.Lit
+  stringPrimL :: [GHC.Internal.Word.Word8] -> GHC.Internal.TH.Syntax.Lit
+  thisModule :: GHC.Internal.TH.Syntax.Q GHC.Internal.TH.Syntax.Module
+  tildeP :: forall (m :: * -> *). GHC.Internal.TH.Syntax.Quote m => m GHC.Internal.TH.Syntax.Pat -> m GHC.Internal.TH.Syntax.Pat
+  tupE :: forall (m :: * -> *). GHC.Internal.TH.Syntax.Quote m => [GHC.Internal.Maybe.Maybe (m GHC.Internal.TH.Syntax.Exp)] -> m GHC.Internal.TH.Syntax.Exp
+  tupP :: forall (m :: * -> *). GHC.Internal.TH.Syntax.Quote m => [m GHC.Internal.TH.Syntax.Pat] -> m GHC.Internal.TH.Syntax.Pat
+  tupleK :: GHC.Types.Int -> GHC.Internal.TH.Syntax.Kind
+  tupleT :: forall (m :: * -> *). GHC.Internal.TH.Syntax.Quote m => GHC.Types.Int -> m GHC.Internal.TH.Syntax.Type
+  tySynD :: forall (m :: * -> *). GHC.Internal.TH.Syntax.Quote m => GHC.Internal.TH.Syntax.Name -> [m (GHC.Internal.TH.Syntax.TyVarBndr GHC.Internal.TH.Syntax.BndrVis)] -> m GHC.Internal.TH.Syntax.Type -> m GHC.Internal.TH.Syntax.Dec
+  tySynEqn :: forall (m :: * -> *). GHC.Internal.TH.Syntax.Quote m => GHC.Internal.Maybe.Maybe [m (GHC.Internal.TH.Syntax.TyVarBndr ())] -> m GHC.Internal.TH.Syntax.Type -> m GHC.Internal.TH.Syntax.Type -> m GHC.Internal.TH.Syntax.TySynEqn
+  tySynInstD :: forall (m :: * -> *). GHC.Internal.TH.Syntax.Quote m => m GHC.Internal.TH.Syntax.TySynEqn -> m GHC.Internal.TH.Syntax.Dec
+  tyVarSig :: forall (m :: * -> *). GHC.Internal.TH.Syntax.Quote m => m (GHC.Internal.TH.Syntax.TyVarBndr ()) -> m GHC.Internal.TH.Syntax.FamilyResultSig
+  typeAnnotation :: GHC.Internal.TH.Syntax.Name -> GHC.Internal.TH.Syntax.AnnTarget
+  typeDataD :: forall (m :: * -> *). GHC.Internal.TH.Syntax.Quote m => GHC.Internal.TH.Syntax.Name -> [m (GHC.Internal.TH.Syntax.TyVarBndr GHC.Internal.TH.Syntax.BndrVis)] -> GHC.Internal.Maybe.Maybe (m GHC.Internal.TH.Syntax.Kind) -> [m GHC.Internal.TH.Syntax.Con] -> m GHC.Internal.TH.Syntax.Dec
+  typeDataD_doc :: GHC.Internal.TH.Syntax.Name -> [GHC.Internal.TH.Syntax.Q (GHC.Internal.TH.Syntax.TyVarBndr GHC.Internal.TH.Syntax.BndrVis)] -> GHC.Internal.Maybe.Maybe (GHC.Internal.TH.Syntax.Q GHC.Internal.TH.Syntax.Kind) -> [(GHC.Internal.TH.Syntax.Q GHC.Internal.TH.Syntax.Con, GHC.Internal.Maybe.Maybe GHC.Internal.Base.String, [GHC.Internal.Maybe.Maybe GHC.Internal.Base.String])] -> GHC.Internal.Maybe.Maybe GHC.Internal.Base.String -> GHC.Internal.TH.Syntax.Q GHC.Internal.TH.Syntax.Dec
+  typeE :: forall (m :: * -> *). GHC.Internal.TH.Syntax.Quote m => m GHC.Internal.TH.Syntax.Type -> m GHC.Internal.TH.Syntax.Exp
+  typeP :: forall (m :: * -> *). GHC.Internal.TH.Syntax.Quote m => m GHC.Internal.TH.Syntax.Type -> m GHC.Internal.TH.Syntax.Pat
+  typedBracketE :: forall (m :: * -> *). GHC.Internal.TH.Syntax.Quote m => m GHC.Internal.TH.Syntax.Exp -> m GHC.Internal.TH.Syntax.Exp
+  typedRuleVar :: forall (m :: * -> *). GHC.Internal.TH.Syntax.Quote m => GHC.Internal.TH.Syntax.Name -> m GHC.Internal.TH.Syntax.Type -> m GHC.Internal.TH.Syntax.RuleBndr
+  typedSpliceE :: forall (m :: * -> *). GHC.Internal.TH.Syntax.Quote m => m GHC.Internal.TH.Syntax.Exp -> m GHC.Internal.TH.Syntax.Exp
+  uInfixE :: forall (m :: * -> *). GHC.Internal.TH.Syntax.Quote m => m GHC.Internal.TH.Syntax.Exp -> m GHC.Internal.TH.Syntax.Exp -> m GHC.Internal.TH.Syntax.Exp -> m GHC.Internal.TH.Syntax.Exp
+  uInfixP :: forall (m :: * -> *). GHC.Internal.TH.Syntax.Quote m => m GHC.Internal.TH.Syntax.Pat -> GHC.Internal.TH.Syntax.Name -> m GHC.Internal.TH.Syntax.Pat -> m GHC.Internal.TH.Syntax.Pat
+  uInfixT :: forall (m :: * -> *). GHC.Internal.TH.Syntax.Quote m => m GHC.Internal.TH.Syntax.Type -> GHC.Internal.TH.Syntax.Name -> m GHC.Internal.TH.Syntax.Type -> m GHC.Internal.TH.Syntax.Type
+  unboundVarE :: forall (m :: * -> *). GHC.Internal.TH.Syntax.Quote m => GHC.Internal.TH.Syntax.Name -> m GHC.Internal.TH.Syntax.Exp
+  unboxedSumE :: forall (m :: * -> *). GHC.Internal.TH.Syntax.Quote m => m GHC.Internal.TH.Syntax.Exp -> GHC.Internal.TH.Syntax.SumAlt -> GHC.Internal.TH.Syntax.SumArity -> m GHC.Internal.TH.Syntax.Exp
+  unboxedSumP :: forall (m :: * -> *). GHC.Internal.TH.Syntax.Quote m => m GHC.Internal.TH.Syntax.Pat -> GHC.Internal.TH.Syntax.SumAlt -> GHC.Internal.TH.Syntax.SumArity -> m GHC.Internal.TH.Syntax.Pat
+  unboxedSumT :: forall (m :: * -> *). GHC.Internal.TH.Syntax.Quote m => GHC.Internal.TH.Syntax.SumArity -> m GHC.Internal.TH.Syntax.Type
+  unboxedTupE :: forall (m :: * -> *). GHC.Internal.TH.Syntax.Quote m => [GHC.Internal.Maybe.Maybe (m GHC.Internal.TH.Syntax.Exp)] -> m GHC.Internal.TH.Syntax.Exp
+  unboxedTupP :: forall (m :: * -> *). GHC.Internal.TH.Syntax.Quote m => [m GHC.Internal.TH.Syntax.Pat] -> m GHC.Internal.TH.Syntax.Pat
+  unboxedTupleT :: forall (m :: * -> *). GHC.Internal.TH.Syntax.Quote m => GHC.Types.Int -> m GHC.Internal.TH.Syntax.Type
+  unidir :: forall (m :: * -> *). GHC.Internal.TH.Syntax.Quote m => m GHC.Internal.TH.Syntax.PatSynDir
+  unpacked :: forall (m :: * -> *). GHC.Internal.TH.Syntax.Quote m => m GHC.Internal.TH.Syntax.Strict
+  unsafe :: GHC.Internal.TH.Syntax.Safety
+  valD :: forall (m :: * -> *). GHC.Internal.TH.Syntax.Quote m => m GHC.Internal.TH.Syntax.Pat -> m GHC.Internal.TH.Syntax.Body -> [m GHC.Internal.TH.Syntax.Dec] -> m GHC.Internal.TH.Syntax.Dec
+  valueAnnotation :: GHC.Internal.TH.Syntax.Name -> GHC.Internal.TH.Syntax.AnnTarget
+  varBangType :: forall (m :: * -> *). GHC.Internal.TH.Syntax.Quote m => GHC.Internal.TH.Syntax.Name -> m GHC.Internal.TH.Syntax.BangType -> m GHC.Internal.TH.Syntax.VarBangType
+  varE :: forall (m :: * -> *). GHC.Internal.TH.Syntax.Quote m => GHC.Internal.TH.Syntax.Name -> m GHC.Internal.TH.Syntax.Exp
+  varK :: GHC.Internal.TH.Syntax.Name -> GHC.Internal.TH.Syntax.Kind
+  varP :: forall (m :: * -> *). GHC.Internal.TH.Syntax.Quote m => GHC.Internal.TH.Syntax.Name -> m GHC.Internal.TH.Syntax.Pat
+  varStrictType :: forall (m :: * -> *). GHC.Internal.TH.Syntax.Quote m => GHC.Internal.TH.Syntax.Name -> m GHC.Internal.TH.Syntax.StrictType -> m GHC.Internal.TH.Syntax.VarStrictType
+  varT :: forall (m :: * -> *). GHC.Internal.TH.Syntax.Quote m => GHC.Internal.TH.Syntax.Name -> m GHC.Internal.TH.Syntax.Type
+  viaStrategy :: forall (m :: * -> *). GHC.Internal.TH.Syntax.Quote m => m GHC.Internal.TH.Syntax.Type -> m GHC.Internal.TH.Syntax.DerivStrategy
+  viewP :: forall (m :: * -> *). GHC.Internal.TH.Syntax.Quote m => m GHC.Internal.TH.Syntax.Exp -> m GHC.Internal.TH.Syntax.Pat -> m GHC.Internal.TH.Syntax.Pat
+  wildCardT :: forall (m :: * -> *). GHC.Internal.TH.Syntax.Quote m => m GHC.Internal.TH.Syntax.Type
+  wildP :: forall (m :: * -> *). GHC.Internal.TH.Syntax.Quote m => m GHC.Internal.TH.Syntax.Pat
+  withDecDoc :: GHC.Internal.Base.String -> GHC.Internal.TH.Syntax.Q GHC.Internal.TH.Syntax.Dec -> GHC.Internal.TH.Syntax.Q GHC.Internal.TH.Syntax.Dec
+  withDecsDoc :: GHC.Internal.Base.String -> GHC.Internal.TH.Syntax.Q [GHC.Internal.TH.Syntax.Dec] -> GHC.Internal.TH.Syntax.Q [GHC.Internal.TH.Syntax.Dec]
+  wordPrimL :: GHC.Num.Integer.Integer -> GHC.Internal.TH.Syntax.Lit
 
 module Language.Haskell.TH.Ppr where
   -- Safety: Safe
@@ -2055,91 +1538,91 @@ module Language.Haskell.TH.Ppr where
   data ForallVisFlag = ForallVis | ForallInvis
   type Ppr :: * -> Constraint
   class Ppr a where
-    ppr :: a -> Language.Haskell.TH.PprLib.Doc
-    ppr_list :: [a] -> Language.Haskell.TH.PprLib.Doc
+    ppr :: a -> GHC.Internal.TH.PprLib.Doc
+    ppr_list :: [a] -> GHC.Internal.TH.PprLib.Doc
     {-# MINIMAL ppr #-}
   type PprFlag :: * -> Constraint
   class PprFlag flag where
-    pprTyVarBndr :: Language.Haskell.TH.Lib.Syntax.TyVarBndr flag -> Language.Haskell.TH.PprLib.Doc
+    pprTyVarBndr :: GHC.Internal.TH.Syntax.TyVarBndr flag -> GHC.Internal.TH.PprLib.Doc
     {-# MINIMAL pprTyVarBndr #-}
   type Precedence :: *
   type Precedence = GHC.Types.Int
   type TypeArg :: *
-  data TypeArg = TANormal Language.Haskell.TH.Lib.Syntax.Type | TyArg Language.Haskell.TH.Lib.Syntax.Kind
+  data TypeArg = TANormal GHC.Internal.TH.Syntax.Type | TyArg GHC.Internal.TH.Syntax.Kind
   appPrec :: Precedence
-  bar :: Language.Haskell.TH.PprLib.Doc
+  bar :: GHC.Internal.TH.PprLib.Doc
   bytesToString :: [GHC.Internal.Word.Word8] -> GHC.Internal.Base.String
-  commaSep :: forall a. Ppr a => [a] -> Language.Haskell.TH.PprLib.Doc
-  commaSepApplied :: [Language.Haskell.TH.Lib.Syntax.Name] -> Language.Haskell.TH.PprLib.Doc
-  commaSepWith :: forall a. (a -> Language.Haskell.TH.PprLib.Doc) -> [a] -> Language.Haskell.TH.PprLib.Doc
-  fromTANormal :: TypeArg -> GHC.Internal.Maybe.Maybe Language.Haskell.TH.Lib.Syntax.Type
+  commaSep :: forall a. Ppr a => [a] -> GHC.Internal.TH.PprLib.Doc
+  commaSepApplied :: [GHC.Internal.TH.Syntax.Name] -> GHC.Internal.TH.PprLib.Doc
+  commaSepWith :: forall a. (a -> GHC.Internal.TH.PprLib.Doc) -> [a] -> GHC.Internal.TH.PprLib.Doc
+  fromTANormal :: TypeArg -> GHC.Internal.Maybe.Maybe GHC.Internal.TH.Syntax.Type
   funPrec :: Precedence
-  hashParens :: Language.Haskell.TH.PprLib.Doc -> Language.Haskell.TH.PprLib.Doc
-  isStarT :: Language.Haskell.TH.Lib.Syntax.Type -> GHC.Types.Bool
-  isSymOcc :: Language.Haskell.TH.Lib.Syntax.Name -> GHC.Types.Bool
+  hashParens :: GHC.Internal.TH.PprLib.Doc -> GHC.Internal.TH.PprLib.Doc
+  isStarT :: GHC.Internal.TH.Syntax.Type -> GHC.Types.Bool
+  isSymOcc :: GHC.Internal.TH.Syntax.Name -> GHC.Types.Bool
   nestDepth :: GHC.Types.Int
   noPrec :: Precedence
   opPrec :: Precedence
-  parensIf :: GHC.Types.Bool -> Language.Haskell.TH.PprLib.Doc -> Language.Haskell.TH.PprLib.Doc
-  pprBangType :: Language.Haskell.TH.Lib.Syntax.BangType -> Language.Haskell.TH.PprLib.Doc
-  pprBndrVis :: Language.Haskell.TH.Lib.Syntax.BndrVis -> Language.Haskell.TH.PprLib.Doc -> Language.Haskell.TH.PprLib.Doc
-  pprBody :: GHC.Types.Bool -> Language.Haskell.TH.Lib.Syntax.Body -> Language.Haskell.TH.PprLib.Doc
-  pprClause :: GHC.Types.Bool -> Language.Haskell.TH.Lib.Syntax.Clause -> Language.Haskell.TH.PprLib.Doc
-  pprCxt :: Language.Haskell.TH.Lib.Syntax.Cxt -> Language.Haskell.TH.PprLib.Doc
-  pprExp :: Precedence -> Language.Haskell.TH.Lib.Syntax.Exp -> Language.Haskell.TH.PprLib.Doc
-  pprFields :: [(Language.Haskell.TH.Lib.Syntax.Name, Language.Haskell.TH.Lib.Syntax.Exp)] -> Language.Haskell.TH.PprLib.Doc
-  pprFixity :: Language.Haskell.TH.Lib.Syntax.Name -> Language.Haskell.TH.Lib.Syntax.Fixity -> Language.Haskell.TH.Lib.Syntax.NamespaceSpecifier -> Language.Haskell.TH.PprLib.Doc
-  pprForall :: [Language.Haskell.TH.Lib.Syntax.TyVarBndr Language.Haskell.TH.Lib.Syntax.Specificity] -> Language.Haskell.TH.Lib.Syntax.Cxt -> Language.Haskell.TH.PprLib.Doc
-  pprForall' :: forall flag. PprFlag flag => ForallVisFlag -> [Language.Haskell.TH.Lib.Syntax.TyVarBndr flag] -> Language.Haskell.TH.Lib.Syntax.Cxt -> Language.Haskell.TH.PprLib.Doc
-  pprForallVis :: [Language.Haskell.TH.Lib.Syntax.TyVarBndr ()] -> Language.Haskell.TH.Lib.Syntax.Cxt -> Language.Haskell.TH.PprLib.Doc
-  pprFunArgType :: Language.Haskell.TH.Lib.Syntax.Type -> Language.Haskell.TH.PprLib.Doc
-  pprGadtRHS :: [(Language.Haskell.TH.Lib.Syntax.Strict, Language.Haskell.TH.Lib.Syntax.Type)] -> Language.Haskell.TH.Lib.Syntax.Type -> Language.Haskell.TH.PprLib.Doc
-  pprGuarded :: Language.Haskell.TH.PprLib.Doc -> (Language.Haskell.TH.Lib.Syntax.Guard, Language.Haskell.TH.Lib.Syntax.Exp) -> Language.Haskell.TH.PprLib.Doc
-  pprInfixExp :: Language.Haskell.TH.Lib.Syntax.Exp -> Language.Haskell.TH.PprLib.Doc
-  pprInfixT :: Precedence -> Language.Haskell.TH.Lib.Syntax.Type -> Language.Haskell.TH.PprLib.Doc
-  pprLit :: Precedence -> Language.Haskell.TH.Lib.Syntax.Lit -> Language.Haskell.TH.PprLib.Doc
-  pprMatchPat :: Language.Haskell.TH.Lib.Syntax.Pat -> Language.Haskell.TH.PprLib.Doc
-  pprMaybeExp :: Precedence -> GHC.Internal.Maybe.Maybe Language.Haskell.TH.Lib.Syntax.Exp -> Language.Haskell.TH.PprLib.Doc
-  pprNamespaceSpecifier :: Language.Haskell.TH.Lib.Syntax.NamespaceSpecifier -> Language.Haskell.TH.PprLib.Doc
-  pprParendType :: Language.Haskell.TH.Lib.Syntax.Type -> Language.Haskell.TH.PprLib.Doc
-  pprParendTypeArg :: TypeArg -> Language.Haskell.TH.PprLib.Doc
-  pprPat :: Precedence -> Language.Haskell.TH.Lib.Syntax.Pat -> Language.Haskell.TH.PprLib.Doc
-  pprPatSynSig :: Language.Haskell.TH.Lib.Syntax.Name -> Language.Haskell.TH.Lib.Syntax.PatSynType -> Language.Haskell.TH.PprLib.Doc
-  pprPatSynType :: Language.Haskell.TH.Lib.Syntax.PatSynType -> Language.Haskell.TH.PprLib.Doc
-  pprPrefixOcc :: Language.Haskell.TH.Lib.Syntax.Name -> Language.Haskell.TH.PprLib.Doc
-  pprRecFields :: [(Language.Haskell.TH.Lib.Syntax.Name, Language.Haskell.TH.Lib.Syntax.Strict, Language.Haskell.TH.Lib.Syntax.Type)] -> Language.Haskell.TH.Lib.Syntax.Type -> Language.Haskell.TH.PprLib.Doc
-  pprStrictType :: (Language.Haskell.TH.Lib.Syntax.Strict, Language.Haskell.TH.Lib.Syntax.Type) -> Language.Haskell.TH.PprLib.Doc
-  pprString :: GHC.Internal.Base.String -> Language.Haskell.TH.PprLib.Doc
-  pprTyApp :: Precedence -> (Language.Haskell.TH.Lib.Syntax.Type, [TypeArg]) -> Language.Haskell.TH.PprLib.Doc
-  pprTyLit :: Language.Haskell.TH.Lib.Syntax.TyLit -> Language.Haskell.TH.PprLib.Doc
-  pprType :: Precedence -> Language.Haskell.TH.Lib.Syntax.Type -> Language.Haskell.TH.PprLib.Doc
-  pprVarBangType :: Language.Haskell.TH.Lib.Syntax.VarBangType -> Language.Haskell.TH.PprLib.Doc
-  pprVarStrictType :: (Language.Haskell.TH.Lib.Syntax.Name, Language.Haskell.TH.Lib.Syntax.Strict, Language.Haskell.TH.Lib.Syntax.Type) -> Language.Haskell.TH.PprLib.Doc
-  ppr_bndrs :: forall flag. PprFlag flag => GHC.Internal.Maybe.Maybe [Language.Haskell.TH.Lib.Syntax.TyVarBndr flag] -> Language.Haskell.TH.PprLib.Doc
-  ppr_cxt_preds :: Precedence -> Language.Haskell.TH.Lib.Syntax.Cxt -> Language.Haskell.TH.PprLib.Doc
-  ppr_data :: GHC.Types.Bool -> Language.Haskell.TH.PprLib.Doc -> Language.Haskell.TH.Lib.Syntax.Cxt -> GHC.Internal.Maybe.Maybe Language.Haskell.TH.Lib.Syntax.Name -> Language.Haskell.TH.PprLib.Doc -> GHC.Internal.Maybe.Maybe Language.Haskell.TH.Lib.Syntax.Kind -> [Language.Haskell.TH.Lib.Syntax.Con] -> [Language.Haskell.TH.Lib.Syntax.DerivClause] -> Language.Haskell.TH.PprLib.Doc
-  ppr_dec :: GHC.Types.Bool -> Language.Haskell.TH.Lib.Syntax.Dec -> Language.Haskell.TH.PprLib.Doc
-  ppr_deriv_clause :: Language.Haskell.TH.Lib.Syntax.DerivClause -> Language.Haskell.TH.PprLib.Doc
-  ppr_deriv_strategy :: Language.Haskell.TH.Lib.Syntax.DerivStrategy -> Language.Haskell.TH.PprLib.Doc
-  ppr_newtype :: GHC.Types.Bool -> Language.Haskell.TH.PprLib.Doc -> Language.Haskell.TH.Lib.Syntax.Cxt -> GHC.Internal.Maybe.Maybe Language.Haskell.TH.Lib.Syntax.Name -> Language.Haskell.TH.PprLib.Doc -> GHC.Internal.Maybe.Maybe Language.Haskell.TH.Lib.Syntax.Kind -> Language.Haskell.TH.Lib.Syntax.Con -> [Language.Haskell.TH.Lib.Syntax.DerivClause] -> Language.Haskell.TH.PprLib.Doc
-  ppr_overlap :: Language.Haskell.TH.Lib.Syntax.Overlap -> Language.Haskell.TH.PprLib.Doc
-  ppr_sig :: Language.Haskell.TH.Lib.Syntax.Name -> Language.Haskell.TH.Lib.Syntax.Type -> Language.Haskell.TH.PprLib.Doc
-  ppr_tf_head :: Language.Haskell.TH.Lib.Syntax.TypeFamilyHead -> Language.Haskell.TH.PprLib.Doc
-  ppr_tySyn :: Language.Haskell.TH.PprLib.Doc -> GHC.Internal.Maybe.Maybe Language.Haskell.TH.Lib.Syntax.Name -> Language.Haskell.TH.PprLib.Doc -> Language.Haskell.TH.Lib.Syntax.Type -> Language.Haskell.TH.PprLib.Doc
-  ppr_type_data :: GHC.Types.Bool -> Language.Haskell.TH.PprLib.Doc -> Language.Haskell.TH.Lib.Syntax.Cxt -> GHC.Internal.Maybe.Maybe Language.Haskell.TH.Lib.Syntax.Name -> Language.Haskell.TH.PprLib.Doc -> GHC.Internal.Maybe.Maybe Language.Haskell.TH.Lib.Syntax.Kind -> [Language.Haskell.TH.Lib.Syntax.Con] -> [Language.Haskell.TH.Lib.Syntax.DerivClause] -> Language.Haskell.TH.PprLib.Doc
-  ppr_typedef :: GHC.Internal.Base.String -> GHC.Types.Bool -> Language.Haskell.TH.PprLib.Doc -> Language.Haskell.TH.Lib.Syntax.Cxt -> GHC.Internal.Maybe.Maybe Language.Haskell.TH.Lib.Syntax.Name -> Language.Haskell.TH.PprLib.Doc -> GHC.Internal.Maybe.Maybe Language.Haskell.TH.Lib.Syntax.Kind -> [Language.Haskell.TH.Lib.Syntax.Con] -> [Language.Haskell.TH.Lib.Syntax.DerivClause] -> Language.Haskell.TH.PprLib.Doc
+  parensIf :: GHC.Types.Bool -> GHC.Internal.TH.PprLib.Doc -> GHC.Internal.TH.PprLib.Doc
+  pprBangType :: GHC.Internal.TH.Syntax.BangType -> GHC.Internal.TH.PprLib.Doc
+  pprBndrVis :: GHC.Internal.TH.Syntax.BndrVis -> GHC.Internal.TH.PprLib.Doc -> GHC.Internal.TH.PprLib.Doc
+  pprBody :: GHC.Types.Bool -> GHC.Internal.TH.Syntax.Body -> GHC.Internal.TH.PprLib.Doc
+  pprClause :: GHC.Types.Bool -> GHC.Internal.TH.Syntax.Clause -> GHC.Internal.TH.PprLib.Doc
+  pprCxt :: GHC.Internal.TH.Syntax.Cxt -> GHC.Internal.TH.PprLib.Doc
+  pprExp :: Precedence -> GHC.Internal.TH.Syntax.Exp -> GHC.Internal.TH.PprLib.Doc
+  pprFields :: [(GHC.Internal.TH.Syntax.Name, GHC.Internal.TH.Syntax.Exp)] -> GHC.Internal.TH.PprLib.Doc
+  pprFixity :: GHC.Internal.TH.Syntax.Name -> GHC.Internal.TH.Syntax.Fixity -> GHC.Internal.TH.Syntax.NamespaceSpecifier -> GHC.Internal.TH.PprLib.Doc
+  pprForall :: [GHC.Internal.TH.Syntax.TyVarBndr GHC.Internal.TH.Syntax.Specificity] -> GHC.Internal.TH.Syntax.Cxt -> GHC.Internal.TH.PprLib.Doc
+  pprForall' :: forall flag. PprFlag flag => ForallVisFlag -> [GHC.Internal.TH.Syntax.TyVarBndr flag] -> GHC.Internal.TH.Syntax.Cxt -> GHC.Internal.TH.PprLib.Doc
+  pprForallVis :: [GHC.Internal.TH.Syntax.TyVarBndr ()] -> GHC.Internal.TH.Syntax.Cxt -> GHC.Internal.TH.PprLib.Doc
+  pprFunArgType :: GHC.Internal.TH.Syntax.Type -> GHC.Internal.TH.PprLib.Doc
+  pprGadtRHS :: [(GHC.Internal.TH.Syntax.Strict, GHC.Internal.TH.Syntax.Type)] -> GHC.Internal.TH.Syntax.Type -> GHC.Internal.TH.PprLib.Doc
+  pprGuarded :: GHC.Internal.TH.PprLib.Doc -> (GHC.Internal.TH.Syntax.Guard, GHC.Internal.TH.Syntax.Exp) -> GHC.Internal.TH.PprLib.Doc
+  pprInfixExp :: GHC.Internal.TH.Syntax.Exp -> GHC.Internal.TH.PprLib.Doc
+  pprInfixT :: Precedence -> GHC.Internal.TH.Syntax.Type -> GHC.Internal.TH.PprLib.Doc
+  pprLit :: Precedence -> GHC.Internal.TH.Syntax.Lit -> GHC.Internal.TH.PprLib.Doc
+  pprMatchPat :: GHC.Internal.TH.Syntax.Pat -> GHC.Internal.TH.PprLib.Doc
+  pprMaybeExp :: Precedence -> GHC.Internal.Maybe.Maybe GHC.Internal.TH.Syntax.Exp -> GHC.Internal.TH.PprLib.Doc
+  pprNamespaceSpecifier :: GHC.Internal.TH.Syntax.NamespaceSpecifier -> GHC.Internal.TH.PprLib.Doc
+  pprParendType :: GHC.Internal.TH.Syntax.Type -> GHC.Internal.TH.PprLib.Doc
+  pprParendTypeArg :: TypeArg -> GHC.Internal.TH.PprLib.Doc
+  pprPat :: Precedence -> GHC.Internal.TH.Syntax.Pat -> GHC.Internal.TH.PprLib.Doc
+  pprPatSynSig :: GHC.Internal.TH.Syntax.Name -> GHC.Internal.TH.Syntax.PatSynType -> GHC.Internal.TH.PprLib.Doc
+  pprPatSynType :: GHC.Internal.TH.Syntax.PatSynType -> GHC.Internal.TH.PprLib.Doc
+  pprPrefixOcc :: GHC.Internal.TH.Syntax.Name -> GHC.Internal.TH.PprLib.Doc
+  pprRecFields :: [(GHC.Internal.TH.Syntax.Name, GHC.Internal.TH.Syntax.Strict, GHC.Internal.TH.Syntax.Type)] -> GHC.Internal.TH.Syntax.Type -> GHC.Internal.TH.PprLib.Doc
+  pprStrictType :: (GHC.Internal.TH.Syntax.Strict, GHC.Internal.TH.Syntax.Type) -> GHC.Internal.TH.PprLib.Doc
+  pprString :: GHC.Internal.Base.String -> GHC.Internal.TH.PprLib.Doc
+  pprTyApp :: Precedence -> (GHC.Internal.TH.Syntax.Type, [TypeArg]) -> GHC.Internal.TH.PprLib.Doc
+  pprTyLit :: GHC.Internal.TH.Syntax.TyLit -> GHC.Internal.TH.PprLib.Doc
+  pprType :: Precedence -> GHC.Internal.TH.Syntax.Type -> GHC.Internal.TH.PprLib.Doc
+  pprVarBangType :: GHC.Internal.TH.Syntax.VarBangType -> GHC.Internal.TH.PprLib.Doc
+  pprVarStrictType :: (GHC.Internal.TH.Syntax.Name, GHC.Internal.TH.Syntax.Strict, GHC.Internal.TH.Syntax.Type) -> GHC.Internal.TH.PprLib.Doc
+  ppr_bndrs :: forall flag. PprFlag flag => GHC.Internal.Maybe.Maybe [GHC.Internal.TH.Syntax.TyVarBndr flag] -> GHC.Internal.TH.PprLib.Doc
+  ppr_cxt_preds :: Precedence -> GHC.Internal.TH.Syntax.Cxt -> GHC.Internal.TH.PprLib.Doc
+  ppr_data :: GHC.Types.Bool -> GHC.Internal.TH.PprLib.Doc -> GHC.Internal.TH.Syntax.Cxt -> GHC.Internal.Maybe.Maybe GHC.Internal.TH.Syntax.Name -> GHC.Internal.TH.PprLib.Doc -> GHC.Internal.Maybe.Maybe GHC.Internal.TH.Syntax.Kind -> [GHC.Internal.TH.Syntax.Con] -> [GHC.Internal.TH.Syntax.DerivClause] -> GHC.Internal.TH.PprLib.Doc
+  ppr_dec :: GHC.Types.Bool -> GHC.Internal.TH.Syntax.Dec -> GHC.Internal.TH.PprLib.Doc
+  ppr_deriv_clause :: GHC.Internal.TH.Syntax.DerivClause -> GHC.Internal.TH.PprLib.Doc
+  ppr_deriv_strategy :: GHC.Internal.TH.Syntax.DerivStrategy -> GHC.Internal.TH.PprLib.Doc
+  ppr_newtype :: GHC.Types.Bool -> GHC.Internal.TH.PprLib.Doc -> GHC.Internal.TH.Syntax.Cxt -> GHC.Internal.Maybe.Maybe GHC.Internal.TH.Syntax.Name -> GHC.Internal.TH.PprLib.Doc -> GHC.Internal.Maybe.Maybe GHC.Internal.TH.Syntax.Kind -> GHC.Internal.TH.Syntax.Con -> [GHC.Internal.TH.Syntax.DerivClause] -> GHC.Internal.TH.PprLib.Doc
+  ppr_overlap :: GHC.Internal.TH.Syntax.Overlap -> GHC.Internal.TH.PprLib.Doc
+  ppr_sig :: GHC.Internal.TH.Syntax.Name -> GHC.Internal.TH.Syntax.Type -> GHC.Internal.TH.PprLib.Doc
+  ppr_tf_head :: GHC.Internal.TH.Syntax.TypeFamilyHead -> GHC.Internal.TH.PprLib.Doc
+  ppr_tySyn :: GHC.Internal.TH.PprLib.Doc -> GHC.Internal.Maybe.Maybe GHC.Internal.TH.Syntax.Name -> GHC.Internal.TH.PprLib.Doc -> GHC.Internal.TH.Syntax.Type -> GHC.Internal.TH.PprLib.Doc
+  ppr_type_data :: GHC.Types.Bool -> GHC.Internal.TH.PprLib.Doc -> GHC.Internal.TH.Syntax.Cxt -> GHC.Internal.Maybe.Maybe GHC.Internal.TH.Syntax.Name -> GHC.Internal.TH.PprLib.Doc -> GHC.Internal.Maybe.Maybe GHC.Internal.TH.Syntax.Kind -> [GHC.Internal.TH.Syntax.Con] -> [GHC.Internal.TH.Syntax.DerivClause] -> GHC.Internal.TH.PprLib.Doc
+  ppr_typedef :: GHC.Internal.Base.String -> GHC.Types.Bool -> GHC.Internal.TH.PprLib.Doc -> GHC.Internal.TH.Syntax.Cxt -> GHC.Internal.Maybe.Maybe GHC.Internal.TH.Syntax.Name -> GHC.Internal.TH.PprLib.Doc -> GHC.Internal.Maybe.Maybe GHC.Internal.TH.Syntax.Kind -> [GHC.Internal.TH.Syntax.Con] -> [GHC.Internal.TH.Syntax.DerivClause] -> GHC.Internal.TH.PprLib.Doc
   pprint :: forall a. Ppr a => a -> GHC.Internal.Base.String
   qualPrec :: Precedence
-  quoteParens :: Language.Haskell.TH.PprLib.Doc -> Language.Haskell.TH.PprLib.Doc
-  semiSep :: forall a. Ppr a => [a] -> Language.Haskell.TH.PprLib.Doc
-  semiSepWith :: forall a. (a -> Language.Haskell.TH.PprLib.Doc) -> [a] -> Language.Haskell.TH.PprLib.Doc
-  sepWith :: forall a. Language.Haskell.TH.PprLib.Doc -> (a -> Language.Haskell.TH.PprLib.Doc) -> [a] -> Language.Haskell.TH.PprLib.Doc
-  showtextl :: forall a. GHC.Internal.Show.Show a => a -> Language.Haskell.TH.PprLib.Doc
+  quoteParens :: GHC.Internal.TH.PprLib.Doc -> GHC.Internal.TH.PprLib.Doc
+  semiSep :: forall a. Ppr a => [a] -> GHC.Internal.TH.PprLib.Doc
+  semiSepWith :: forall a. (a -> GHC.Internal.TH.PprLib.Doc) -> [a] -> GHC.Internal.TH.PprLib.Doc
+  sepWith :: forall a. GHC.Internal.TH.PprLib.Doc -> (a -> GHC.Internal.TH.PprLib.Doc) -> [a] -> GHC.Internal.TH.PprLib.Doc
+  showtextl :: forall a. GHC.Internal.Show.Show a => a -> GHC.Internal.TH.PprLib.Doc
   sigPrec :: Precedence
-  split :: Language.Haskell.TH.Lib.Syntax.Type -> (Language.Haskell.TH.Lib.Syntax.Type, [TypeArg])
-  unboxedSumBars :: Language.Haskell.TH.PprLib.Doc -> Language.Haskell.TH.Lib.Syntax.SumAlt -> Language.Haskell.TH.Lib.Syntax.SumArity -> Language.Haskell.TH.PprLib.Doc
+  split :: GHC.Internal.TH.Syntax.Type -> (GHC.Internal.TH.Syntax.Type, [TypeArg])
+  unboxedSumBars :: GHC.Internal.TH.PprLib.Doc -> GHC.Internal.TH.Syntax.SumAlt -> GHC.Internal.TH.Syntax.SumArity -> GHC.Internal.TH.PprLib.Doc
   unopPrec :: Precedence
-  where_clause :: [Language.Haskell.TH.Lib.Syntax.Dec] -> Language.Haskell.TH.PprLib.Doc
+  where_clause :: [GHC.Internal.TH.Syntax.Dec] -> GHC.Internal.TH.PprLib.Doc
 
 module Language.Haskell.TH.PprLib where
   -- Safety: Safe
@@ -2177,8 +1660,8 @@ module Language.Haskell.TH.PprLib where
   lparen :: Doc
   nest :: GHC.Types.Int -> Doc -> Doc
   parens :: Doc -> Doc
-  pprName :: Language.Haskell.TH.Lib.Syntax.Name -> Doc
-  pprName' :: Language.Haskell.TH.Lib.Syntax.NameIs -> Language.Haskell.TH.Lib.Syntax.Name -> Doc
+  pprName :: GHC.Internal.TH.Syntax.Name -> Doc
+  pprName' :: GHC.Internal.TH.Syntax.NameIs -> GHC.Internal.TH.Syntax.Name -> Doc
   ptext :: GHC.Internal.Base.String -> Doc
   punctuate :: Doc -> [Doc] -> [Doc]
   quotes :: Doc -> Doc
@@ -2196,14 +1679,14 @@ module Language.Haskell.TH.PprLib where
 module Language.Haskell.TH.Quote where
   -- Safety: Safe
   type QuasiQuoter :: *
-  data QuasiQuoter = QuasiQuoter {quoteExp :: GHC.Internal.Base.String -> Language.Haskell.TH.Lib.Syntax.Q Language.Haskell.TH.Lib.Syntax.Exp, quotePat :: GHC.Internal.Base.String -> Language.Haskell.TH.Lib.Syntax.Q Language.Haskell.TH.Lib.Syntax.Pat, quoteType :: GHC.Internal.Base.String -> Language.Haskell.TH.Lib.Syntax.Q Language.Haskell.TH.Lib.Syntax.Type, quoteDec :: GHC.Internal.Base.String -> Language.Haskell.TH.Lib.Syntax.Q [Language.Haskell.TH.Lib.Syntax.Dec]}
-  dataToExpQ :: forall (m :: * -> *) a. (Language.Haskell.TH.Lib.Syntax.Quote m, GHC.Internal.Data.Data.Data a) => (forall b. GHC.Internal.Data.Data.Data b => b -> GHC.Internal.Maybe.Maybe (m Language.Haskell.TH.Lib.Syntax.Exp)) -> a -> m Language.Haskell.TH.Lib.Syntax.Exp
-  dataToPatQ :: forall (m :: * -> *) a. (Language.Haskell.TH.Lib.Syntax.Quote m, GHC.Internal.Data.Data.Data a) => (forall b. GHC.Internal.Data.Data.Data b => b -> GHC.Internal.Maybe.Maybe (m Language.Haskell.TH.Lib.Syntax.Pat)) -> a -> m Language.Haskell.TH.Lib.Syntax.Pat
-  dataToQa :: forall (m :: * -> *) a k q. (Language.Haskell.TH.Lib.Syntax.Quote m, GHC.Internal.Data.Data.Data a) => (Language.Haskell.TH.Lib.Syntax.Name -> k) -> (Language.Haskell.TH.Lib.Syntax.Lit -> m q) -> (k -> [m q] -> m q) -> (forall b. GHC.Internal.Data.Data.Data b => b -> GHC.Internal.Maybe.Maybe (m q)) -> a -> m q
+  data QuasiQuoter = QuasiQuoter {quoteExp :: GHC.Internal.Base.String -> GHC.Internal.TH.Syntax.Q GHC.Internal.TH.Syntax.Exp, quotePat :: GHC.Internal.Base.String -> GHC.Internal.TH.Syntax.Q GHC.Internal.TH.Syntax.Pat, quoteType :: GHC.Internal.Base.String -> GHC.Internal.TH.Syntax.Q GHC.Internal.TH.Syntax.Type, quoteDec :: GHC.Internal.Base.String -> GHC.Internal.TH.Syntax.Q [GHC.Internal.TH.Syntax.Dec]}
+  dataToExpQ :: forall (m :: * -> *) a. (GHC.Internal.TH.Syntax.Quote m, GHC.Internal.Data.Data.Data a) => (forall b. GHC.Internal.Data.Data.Data b => b -> GHC.Internal.Maybe.Maybe (m GHC.Internal.TH.Syntax.Exp)) -> a -> m GHC.Internal.TH.Syntax.Exp
+  dataToPatQ :: forall (m :: * -> *) a. (GHC.Internal.TH.Syntax.Quote m, GHC.Internal.Data.Data.Data a) => (forall b. GHC.Internal.Data.Data.Data b => b -> GHC.Internal.Maybe.Maybe (m GHC.Internal.TH.Syntax.Pat)) -> a -> m GHC.Internal.TH.Syntax.Pat
+  dataToQa :: forall (m :: * -> *) a k q. (GHC.Internal.TH.Syntax.Quote m, GHC.Internal.Data.Data.Data a) => (GHC.Internal.TH.Syntax.Name -> k) -> (GHC.Internal.TH.Syntax.Lit -> m q) -> (k -> [m q] -> m q) -> (forall b. GHC.Internal.Data.Data.Data b => b -> GHC.Internal.Maybe.Maybe (m q)) -> a -> m q
   quoteFile :: QuasiQuoter -> QuasiQuoter
 
 module Language.Haskell.TH.Syntax where
-  -- Safety: Safe-Inferred
+  -- Safety: Trustworthy
   type AnnLookup :: *
   data AnnLookup = AnnLookupModule Module | AnnLookupName Name
   type AnnTarget :: *
@@ -2520,7 +2003,7 @@ module Language.Haskell.TH.Syntax where
   type Q :: * -> *
   newtype Q a = Q {unQ :: forall (m :: * -> *). Quasi m => m a}
   type Quasi :: (* -> *) -> Constraint
-  class (Control.Monad.IO.Class.MonadIO m, GHC.Internal.Control.Monad.Fail.MonadFail m) => Quasi m where
+  class (GHC.Internal.Control.Monad.IO.Class.MonadIO m, GHC.Internal.Control.Monad.Fail.MonadFail m) => Quasi m where
     qNewName :: GHC.Internal.Base.String -> m Name
     qReport :: GHC.Types.Bool -> GHC.Internal.Base.String -> m ()
     qRecover :: forall a. m a -> m a -> m a
@@ -2705,398 +2188,396 @@ module Language.Haskell.TH.Syntax where
 
 
 -- Instances:
-instance Control.Monad.IO.Class.MonadIO Language.Haskell.TH.Lib.Syntax.Q -- Defined in ‘Language.Haskell.TH.Lib.Syntax’
-instance GHC.Internal.Base.Applicative Language.Haskell.TH.Lib.Syntax.Q -- Defined in ‘Language.Haskell.TH.Lib.Syntax’
-instance [safe] GHC.Internal.Base.Applicative Language.Haskell.TH.PprLib.PprM -- Defined in ‘Language.Haskell.TH.PprLib’
-instance GHC.Internal.Base.Functor Language.Haskell.TH.Lib.Syntax.Q -- Defined in ‘Language.Haskell.TH.Lib.Syntax’
-instance GHC.Internal.Base.Functor Language.Haskell.TH.Lib.Syntax.TyVarBndr -- Defined in ‘Language.Haskell.TH.Lib.Syntax’
-instance [safe] GHC.Internal.Base.Functor Language.Haskell.TH.PprLib.PprM -- Defined in ‘Language.Haskell.TH.PprLib’
-instance GHC.Internal.Base.Monad Language.Haskell.TH.Lib.Syntax.Q -- Defined in ‘Language.Haskell.TH.Lib.Syntax’
-instance [safe] GHC.Internal.Base.Monad Language.Haskell.TH.PprLib.PprM -- Defined in ‘Language.Haskell.TH.PprLib’
-instance forall a. GHC.Internal.Base.Monoid a => GHC.Internal.Base.Monoid (Language.Haskell.TH.Lib.Syntax.Q a) -- Defined in ‘Language.Haskell.TH.Lib.Syntax’
-instance forall a. GHC.Internal.Base.Semigroup a => GHC.Internal.Base.Semigroup (Language.Haskell.TH.Lib.Syntax.Q a) -- Defined in ‘Language.Haskell.TH.Lib.Syntax’
-instance GHC.Internal.Control.Monad.Fail.MonadFail Language.Haskell.TH.Lib.Syntax.Q -- Defined in ‘Language.Haskell.TH.Lib.Syntax’
-instance GHC.Internal.Control.Monad.Fix.MonadFix Language.Haskell.TH.Lib.Syntax.Q -- Defined in ‘Language.Haskell.TH.Lib.Syntax’
-instance GHC.Internal.Data.Data.Data Language.Haskell.TH.Lib.Syntax.AnnLookup -- Defined in ‘Language.Haskell.TH.Lib.Syntax’
-instance GHC.Internal.Data.Data.Data Language.Haskell.TH.Lib.Syntax.AnnTarget -- Defined in ‘Language.Haskell.TH.Lib.Syntax’
-instance GHC.Internal.Data.Data.Data Language.Haskell.TH.Lib.Syntax.Bang -- Defined in ‘Language.Haskell.TH.Lib.Syntax’
-instance GHC.Internal.Data.Data.Data Language.Haskell.TH.Lib.Syntax.BndrVis -- Defined in ‘Language.Haskell.TH.Lib.Syntax’
-instance GHC.Internal.Data.Data.Data Language.Haskell.TH.Lib.Syntax.Body -- Defined in ‘Language.Haskell.TH.Lib.Syntax’
-instance GHC.Internal.Data.Data.Data Language.Haskell.TH.Lib.Syntax.Bytes -- Defined in ‘Language.Haskell.TH.Lib.Syntax’
-instance GHC.Internal.Data.Data.Data Language.Haskell.TH.Lib.Syntax.Callconv -- Defined in ‘Language.Haskell.TH.Lib.Syntax’
-instance GHC.Internal.Data.Data.Data Language.Haskell.TH.Lib.Syntax.Clause -- Defined in ‘Language.Haskell.TH.Lib.Syntax’
-instance GHC.Internal.Data.Data.Data Language.Haskell.TH.Lib.Syntax.Con -- Defined in ‘Language.Haskell.TH.Lib.Syntax’
-instance GHC.Internal.Data.Data.Data Language.Haskell.TH.Lib.Syntax.Dec -- Defined in ‘Language.Haskell.TH.Lib.Syntax’
-instance GHC.Internal.Data.Data.Data Language.Haskell.TH.Lib.Syntax.DecidedStrictness -- Defined in ‘Language.Haskell.TH.Lib.Syntax’
-instance GHC.Internal.Data.Data.Data Language.Haskell.TH.Lib.Syntax.DerivClause -- Defined in ‘Language.Haskell.TH.Lib.Syntax’
-instance GHC.Internal.Data.Data.Data Language.Haskell.TH.Lib.Syntax.DerivStrategy -- Defined in ‘Language.Haskell.TH.Lib.Syntax’
-instance GHC.Internal.Data.Data.Data Language.Haskell.TH.Lib.Syntax.DocLoc -- Defined in ‘Language.Haskell.TH.Lib.Syntax’
-instance GHC.Internal.Data.Data.Data Language.Haskell.TH.Lib.Syntax.Exp -- Defined in ‘Language.Haskell.TH.Lib.Syntax’
-instance GHC.Internal.Data.Data.Data Language.Haskell.TH.Lib.Syntax.FamilyResultSig -- Defined in ‘Language.Haskell.TH.Lib.Syntax’
-instance GHC.Internal.Data.Data.Data Language.Haskell.TH.Lib.Syntax.Fixity -- Defined in ‘Language.Haskell.TH.Lib.Syntax’
-instance GHC.Internal.Data.Data.Data Language.Haskell.TH.Lib.Syntax.FixityDirection -- Defined in ‘Language.Haskell.TH.Lib.Syntax’
-instance GHC.Internal.Data.Data.Data Language.Haskell.TH.Lib.Syntax.Foreign -- Defined in ‘Language.Haskell.TH.Lib.Syntax’
-instance GHC.Internal.Data.Data.Data Language.Haskell.TH.Lib.Syntax.FunDep -- Defined in ‘Language.Haskell.TH.Lib.Syntax’
-instance GHC.Internal.Data.Data.Data Language.Haskell.TH.Lib.Syntax.Guard -- Defined in ‘Language.Haskell.TH.Lib.Syntax’
-instance GHC.Internal.Data.Data.Data Language.Haskell.TH.Lib.Syntax.Info -- Defined in ‘Language.Haskell.TH.Lib.Syntax’
-instance GHC.Internal.Data.Data.Data Language.Haskell.TH.Lib.Syntax.InjectivityAnn -- Defined in ‘Language.Haskell.TH.Lib.Syntax’
-instance GHC.Internal.Data.Data.Data Language.Haskell.TH.Lib.Syntax.Inline -- Defined in ‘Language.Haskell.TH.Lib.Syntax’
-instance GHC.Internal.Data.Data.Data Language.Haskell.TH.Lib.Syntax.Lit -- Defined in ‘Language.Haskell.TH.Lib.Syntax’
-instance GHC.Internal.Data.Data.Data Language.Haskell.TH.Lib.Syntax.Loc -- Defined in ‘Language.Haskell.TH.Lib.Syntax’
-instance GHC.Internal.Data.Data.Data Language.Haskell.TH.Lib.Syntax.Match -- Defined in ‘Language.Haskell.TH.Lib.Syntax’
-instance GHC.Internal.Data.Data.Data Language.Haskell.TH.Lib.Syntax.ModName -- Defined in ‘Language.Haskell.TH.Lib.Syntax’
-instance GHC.Internal.Data.Data.Data Language.Haskell.TH.Lib.Syntax.Module -- Defined in ‘Language.Haskell.TH.Lib.Syntax’
-instance GHC.Internal.Data.Data.Data Language.Haskell.TH.Lib.Syntax.ModuleInfo -- Defined in ‘Language.Haskell.TH.Lib.Syntax’
-instance GHC.Internal.Data.Data.Data Language.Haskell.TH.Lib.Syntax.Name -- Defined in ‘Language.Haskell.TH.Lib.Syntax’
-instance GHC.Internal.Data.Data.Data Language.Haskell.TH.Lib.Syntax.NameFlavour -- Defined in ‘Language.Haskell.TH.Lib.Syntax’
-instance GHC.Internal.Data.Data.Data Language.Haskell.TH.Lib.Syntax.NameSpace -- Defined in ‘Language.Haskell.TH.Lib.Syntax’
-instance GHC.Internal.Data.Data.Data Language.Haskell.TH.Lib.Syntax.NamespaceSpecifier -- Defined in ‘Language.Haskell.TH.Lib.Syntax’
-instance GHC.Internal.Data.Data.Data Language.Haskell.TH.Lib.Syntax.OccName -- Defined in ‘Language.Haskell.TH.Lib.Syntax’
-instance GHC.Internal.Data.Data.Data Language.Haskell.TH.Lib.Syntax.Overlap -- Defined in ‘Language.Haskell.TH.Lib.Syntax’
-instance GHC.Internal.Data.Data.Data Language.Haskell.TH.Lib.Syntax.Pat -- Defined in ‘Language.Haskell.TH.Lib.Syntax’
-instance GHC.Internal.Data.Data.Data Language.Haskell.TH.Lib.Syntax.PatSynArgs -- Defined in ‘Language.Haskell.TH.Lib.Syntax’
-instance GHC.Internal.Data.Data.Data Language.Haskell.TH.Lib.Syntax.PatSynDir -- Defined in ‘Language.Haskell.TH.Lib.Syntax’
-instance GHC.Internal.Data.Data.Data Language.Haskell.TH.Lib.Syntax.Phases -- Defined in ‘Language.Haskell.TH.Lib.Syntax’
-instance GHC.Internal.Data.Data.Data Language.Haskell.TH.Lib.Syntax.PkgName -- Defined in ‘Language.Haskell.TH.Lib.Syntax’
-instance GHC.Internal.Data.Data.Data Language.Haskell.TH.Lib.Syntax.Pragma -- Defined in ‘Language.Haskell.TH.Lib.Syntax’
-instance GHC.Internal.Data.Data.Data Language.Haskell.TH.Lib.Syntax.Range -- Defined in ‘Language.Haskell.TH.Lib.Syntax’
-instance GHC.Internal.Data.Data.Data Language.Haskell.TH.Lib.Syntax.Role -- Defined in ‘Language.Haskell.TH.Lib.Syntax’
-instance GHC.Internal.Data.Data.Data Language.Haskell.TH.Lib.Syntax.RuleBndr -- Defined in ‘Language.Haskell.TH.Lib.Syntax’
-instance GHC.Internal.Data.Data.Data Language.Haskell.TH.Lib.Syntax.RuleMatch -- Defined in ‘Language.Haskell.TH.Lib.Syntax’
-instance GHC.Internal.Data.Data.Data Language.Haskell.TH.Lib.Syntax.Safety -- Defined in ‘Language.Haskell.TH.Lib.Syntax’
-instance GHC.Internal.Data.Data.Data Language.Haskell.TH.Lib.Syntax.SourceStrictness -- Defined in ‘Language.Haskell.TH.Lib.Syntax’
-instance GHC.Internal.Data.Data.Data Language.Haskell.TH.Lib.Syntax.SourceUnpackedness -- Defined in ‘Language.Haskell.TH.Lib.Syntax’
-instance GHC.Internal.Data.Data.Data Language.Haskell.TH.Lib.Syntax.Specificity -- Defined in ‘Language.Haskell.TH.Lib.Syntax’
-instance GHC.Internal.Data.Data.Data Language.Haskell.TH.Lib.Syntax.Stmt -- Defined in ‘Language.Haskell.TH.Lib.Syntax’
-instance GHC.Internal.Data.Data.Data Language.Haskell.TH.Lib.Syntax.TyLit -- Defined in ‘Language.Haskell.TH.Lib.Syntax’
-instance GHC.Internal.Data.Data.Data Language.Haskell.TH.Lib.Syntax.TySynEqn -- Defined in ‘Language.Haskell.TH.Lib.Syntax’
-instance forall flag. GHC.Internal.Data.Data.Data flag => GHC.Internal.Data.Data.Data (Language.Haskell.TH.Lib.Syntax.TyVarBndr flag) -- Defined in ‘Language.Haskell.TH.Lib.Syntax’
-instance GHC.Internal.Data.Data.Data Language.Haskell.TH.Lib.Syntax.Type -- Defined in ‘Language.Haskell.TH.Lib.Syntax’
-instance GHC.Internal.Data.Data.Data Language.Haskell.TH.Lib.Syntax.TypeFamilyHead -- Defined in ‘Language.Haskell.TH.Lib.Syntax’
-instance GHC.Internal.Data.Foldable.Foldable Language.Haskell.TH.Lib.Syntax.TyVarBndr -- Defined in ‘Language.Haskell.TH.Lib.Syntax’
-instance GHC.Internal.Data.Traversable.Traversable Language.Haskell.TH.Lib.Syntax.TyVarBndr -- Defined in ‘Language.Haskell.TH.Lib.Syntax’
-instance [safe] GHC.Internal.Enum.Bounded GHC.LanguageExtensions.Type.Extension -- Defined in ‘GHC.LanguageExtensions.Type’
-instance [safe] GHC.Internal.Enum.Enum GHC.LanguageExtensions.Type.Extension -- Defined in ‘GHC.LanguageExtensions.Type’
-instance GHC.Internal.Generics.Generic Language.Haskell.TH.Lib.Syntax.AnnLookup -- Defined in ‘Language.Haskell.TH.Lib.Syntax’
-instance GHC.Internal.Generics.Generic Language.Haskell.TH.Lib.Syntax.AnnTarget -- Defined in ‘Language.Haskell.TH.Lib.Syntax’
-instance GHC.Internal.Generics.Generic Language.Haskell.TH.Lib.Syntax.Bang -- Defined in ‘Language.Haskell.TH.Lib.Syntax’
-instance GHC.Internal.Generics.Generic Language.Haskell.TH.Lib.Syntax.BndrVis -- Defined in ‘Language.Haskell.TH.Lib.Syntax’
-instance GHC.Internal.Generics.Generic Language.Haskell.TH.Lib.Syntax.Body -- Defined in ‘Language.Haskell.TH.Lib.Syntax’
-instance GHC.Internal.Generics.Generic Language.Haskell.TH.Lib.Syntax.Bytes -- Defined in ‘Language.Haskell.TH.Lib.Syntax’
-instance GHC.Internal.Generics.Generic Language.Haskell.TH.Lib.Syntax.Callconv -- Defined in ‘Language.Haskell.TH.Lib.Syntax’
-instance GHC.Internal.Generics.Generic Language.Haskell.TH.Lib.Syntax.Clause -- Defined in ‘Language.Haskell.TH.Lib.Syntax’
-instance GHC.Internal.Generics.Generic Language.Haskell.TH.Lib.Syntax.Con -- Defined in ‘Language.Haskell.TH.Lib.Syntax’
-instance GHC.Internal.Generics.Generic Language.Haskell.TH.Lib.Syntax.Dec -- Defined in ‘Language.Haskell.TH.Lib.Syntax’
-instance GHC.Internal.Generics.Generic Language.Haskell.TH.Lib.Syntax.DecidedStrictness -- Defined in ‘Language.Haskell.TH.Lib.Syntax’
-instance GHC.Internal.Generics.Generic Language.Haskell.TH.Lib.Syntax.DerivClause -- Defined in ‘Language.Haskell.TH.Lib.Syntax’
-instance GHC.Internal.Generics.Generic Language.Haskell.TH.Lib.Syntax.DerivStrategy -- Defined in ‘Language.Haskell.TH.Lib.Syntax’
-instance GHC.Internal.Generics.Generic Language.Haskell.TH.Lib.Syntax.DocLoc -- Defined in ‘Language.Haskell.TH.Lib.Syntax’
-instance GHC.Internal.Generics.Generic Language.Haskell.TH.Lib.Syntax.Exp -- Defined in ‘Language.Haskell.TH.Lib.Syntax’
-instance GHC.Internal.Generics.Generic Language.Haskell.TH.Lib.Syntax.FamilyResultSig -- Defined in ‘Language.Haskell.TH.Lib.Syntax’
-instance GHC.Internal.Generics.Generic Language.Haskell.TH.Lib.Syntax.Fixity -- Defined in ‘Language.Haskell.TH.Lib.Syntax’
-instance GHC.Internal.Generics.Generic Language.Haskell.TH.Lib.Syntax.FixityDirection -- Defined in ‘Language.Haskell.TH.Lib.Syntax’
-instance GHC.Internal.Generics.Generic Language.Haskell.TH.Lib.Syntax.Foreign -- Defined in ‘Language.Haskell.TH.Lib.Syntax’
-instance GHC.Internal.Generics.Generic Language.Haskell.TH.Lib.Syntax.FunDep -- Defined in ‘Language.Haskell.TH.Lib.Syntax’
-instance GHC.Internal.Generics.Generic Language.Haskell.TH.Lib.Syntax.Guard -- Defined in ‘Language.Haskell.TH.Lib.Syntax’
-instance GHC.Internal.Generics.Generic Language.Haskell.TH.Lib.Syntax.Info -- Defined in ‘Language.Haskell.TH.Lib.Syntax’
-instance GHC.Internal.Generics.Generic Language.Haskell.TH.Lib.Syntax.InjectivityAnn -- Defined in ‘Language.Haskell.TH.Lib.Syntax’
-instance GHC.Internal.Generics.Generic Language.Haskell.TH.Lib.Syntax.Inline -- Defined in ‘Language.Haskell.TH.Lib.Syntax’
-instance GHC.Internal.Generics.Generic Language.Haskell.TH.Lib.Syntax.Lit -- Defined in ‘Language.Haskell.TH.Lib.Syntax’
-instance GHC.Internal.Generics.Generic Language.Haskell.TH.Lib.Syntax.Loc -- Defined in ‘Language.Haskell.TH.Lib.Syntax’
-instance GHC.Internal.Generics.Generic Language.Haskell.TH.Lib.Syntax.Match -- Defined in ‘Language.Haskell.TH.Lib.Syntax’
-instance GHC.Internal.Generics.Generic Language.Haskell.TH.Lib.Syntax.ModName -- Defined in ‘Language.Haskell.TH.Lib.Syntax’
-instance GHC.Internal.Generics.Generic Language.Haskell.TH.Lib.Syntax.Module -- Defined in ‘Language.Haskell.TH.Lib.Syntax’
-instance GHC.Internal.Generics.Generic Language.Haskell.TH.Lib.Syntax.ModuleInfo -- Defined in ‘Language.Haskell.TH.Lib.Syntax’
-instance GHC.Internal.Generics.Generic Language.Haskell.TH.Lib.Syntax.Name -- Defined in ‘Language.Haskell.TH.Lib.Syntax’
-instance GHC.Internal.Generics.Generic Language.Haskell.TH.Lib.Syntax.NameFlavour -- Defined in ‘Language.Haskell.TH.Lib.Syntax’
-instance GHC.Internal.Generics.Generic Language.Haskell.TH.Lib.Syntax.NameSpace -- Defined in ‘Language.Haskell.TH.Lib.Syntax’
-instance GHC.Internal.Generics.Generic Language.Haskell.TH.Lib.Syntax.NamespaceSpecifier -- Defined in ‘Language.Haskell.TH.Lib.Syntax’
-instance GHC.Internal.Generics.Generic Language.Haskell.TH.Lib.Syntax.OccName -- Defined in ‘Language.Haskell.TH.Lib.Syntax’
-instance GHC.Internal.Generics.Generic Language.Haskell.TH.Lib.Syntax.Overlap -- Defined in ‘Language.Haskell.TH.Lib.Syntax’
-instance GHC.Internal.Generics.Generic Language.Haskell.TH.Lib.Syntax.Pat -- Defined in ‘Language.Haskell.TH.Lib.Syntax’
-instance GHC.Internal.Generics.Generic Language.Haskell.TH.Lib.Syntax.PatSynArgs -- Defined in ‘Language.Haskell.TH.Lib.Syntax’
-instance GHC.Internal.Generics.Generic Language.Haskell.TH.Lib.Syntax.PatSynDir -- Defined in ‘Language.Haskell.TH.Lib.Syntax’
-instance GHC.Internal.Generics.Generic Language.Haskell.TH.Lib.Syntax.Phases -- Defined in ‘Language.Haskell.TH.Lib.Syntax’
-instance GHC.Internal.Generics.Generic Language.Haskell.TH.Lib.Syntax.PkgName -- Defined in ‘Language.Haskell.TH.Lib.Syntax’
-instance GHC.Internal.Generics.Generic Language.Haskell.TH.Lib.Syntax.Pragma -- Defined in ‘Language.Haskell.TH.Lib.Syntax’
-instance GHC.Internal.Generics.Generic Language.Haskell.TH.Lib.Syntax.Range -- Defined in ‘Language.Haskell.TH.Lib.Syntax’
-instance GHC.Internal.Generics.Generic Language.Haskell.TH.Lib.Syntax.Role -- Defined in ‘Language.Haskell.TH.Lib.Syntax’
-instance GHC.Internal.Generics.Generic Language.Haskell.TH.Lib.Syntax.RuleBndr -- Defined in ‘Language.Haskell.TH.Lib.Syntax’
-instance GHC.Internal.Generics.Generic Language.Haskell.TH.Lib.Syntax.RuleMatch -- Defined in ‘Language.Haskell.TH.Lib.Syntax’
-instance GHC.Internal.Generics.Generic Language.Haskell.TH.Lib.Syntax.Safety -- Defined in ‘Language.Haskell.TH.Lib.Syntax’
-instance GHC.Internal.Generics.Generic Language.Haskell.TH.Lib.Syntax.SourceStrictness -- Defined in ‘Language.Haskell.TH.Lib.Syntax’
-instance GHC.Internal.Generics.Generic Language.Haskell.TH.Lib.Syntax.SourceUnpackedness -- Defined in ‘Language.Haskell.TH.Lib.Syntax’
-instance GHC.Internal.Generics.Generic Language.Haskell.TH.Lib.Syntax.Specificity -- Defined in ‘Language.Haskell.TH.Lib.Syntax’
-instance GHC.Internal.Generics.Generic Language.Haskell.TH.Lib.Syntax.Stmt -- Defined in ‘Language.Haskell.TH.Lib.Syntax’
-instance GHC.Internal.Generics.Generic Language.Haskell.TH.Lib.Syntax.TyLit -- Defined in ‘Language.Haskell.TH.Lib.Syntax’
-instance GHC.Internal.Generics.Generic Language.Haskell.TH.Lib.Syntax.TySynEqn -- Defined in ‘Language.Haskell.TH.Lib.Syntax’
-instance forall flag. GHC.Internal.Generics.Generic (Language.Haskell.TH.Lib.Syntax.TyVarBndr flag) -- Defined in ‘Language.Haskell.TH.Lib.Syntax’
-instance GHC.Internal.Generics.Generic Language.Haskell.TH.Lib.Syntax.Type -- Defined in ‘Language.Haskell.TH.Lib.Syntax’
-instance GHC.Internal.Generics.Generic Language.Haskell.TH.Lib.Syntax.TypeFamilyHead -- Defined in ‘Language.Haskell.TH.Lib.Syntax’
-instance [safe] GHC.Internal.Generics.Generic GHC.LanguageExtensions.Type.Extension -- Defined in ‘GHC.LanguageExtensions.Type’
-instance [safe] GHC.Internal.Generics.Generic GHC.ForeignSrcLang.Type.ForeignSrcLang -- Defined in ‘GHC.ForeignSrcLang.Type’
-instance GHC.Internal.Show.Show Language.Haskell.TH.Lib.Syntax.AnnLookup -- Defined in ‘Language.Haskell.TH.Lib.Syntax’
-instance GHC.Internal.Show.Show Language.Haskell.TH.Lib.Syntax.AnnTarget -- Defined in ‘Language.Haskell.TH.Lib.Syntax’
-instance GHC.Internal.Show.Show Language.Haskell.TH.Lib.Syntax.Bang -- Defined in ‘Language.Haskell.TH.Lib.Syntax’
-instance GHC.Internal.Show.Show Language.Haskell.TH.Lib.Syntax.BndrVis -- Defined in ‘Language.Haskell.TH.Lib.Syntax’
-instance GHC.Internal.Show.Show Language.Haskell.TH.Lib.Syntax.Body -- Defined in ‘Language.Haskell.TH.Lib.Syntax’
-instance GHC.Internal.Show.Show Language.Haskell.TH.Lib.Syntax.Bytes -- Defined in ‘Language.Haskell.TH.Lib.Syntax’
-instance GHC.Internal.Show.Show Language.Haskell.TH.Lib.Syntax.Callconv -- Defined in ‘Language.Haskell.TH.Lib.Syntax’
-instance GHC.Internal.Show.Show Language.Haskell.TH.Lib.Syntax.Clause -- Defined in ‘Language.Haskell.TH.Lib.Syntax’
-instance GHC.Internal.Show.Show Language.Haskell.TH.Lib.Syntax.Con -- Defined in ‘Language.Haskell.TH.Lib.Syntax’
-instance GHC.Internal.Show.Show Language.Haskell.TH.Lib.Syntax.Dec -- Defined in ‘Language.Haskell.TH.Lib.Syntax’
-instance GHC.Internal.Show.Show Language.Haskell.TH.Lib.Syntax.DecidedStrictness -- Defined in ‘Language.Haskell.TH.Lib.Syntax’
-instance GHC.Internal.Show.Show Language.Haskell.TH.Lib.Syntax.DerivClause -- Defined in ‘Language.Haskell.TH.Lib.Syntax’
-instance GHC.Internal.Show.Show Language.Haskell.TH.Lib.Syntax.DerivStrategy -- Defined in ‘Language.Haskell.TH.Lib.Syntax’
-instance GHC.Internal.Show.Show Language.Haskell.TH.Lib.Syntax.DocLoc -- Defined in ‘Language.Haskell.TH.Lib.Syntax’
-instance GHC.Internal.Show.Show Language.Haskell.TH.Lib.Syntax.Exp -- Defined in ‘Language.Haskell.TH.Lib.Syntax’
-instance GHC.Internal.Show.Show Language.Haskell.TH.Lib.Syntax.FamilyResultSig -- Defined in ‘Language.Haskell.TH.Lib.Syntax’
-instance GHC.Internal.Show.Show Language.Haskell.TH.Lib.Syntax.Fixity -- Defined in ‘Language.Haskell.TH.Lib.Syntax’
-instance GHC.Internal.Show.Show Language.Haskell.TH.Lib.Syntax.FixityDirection -- Defined in ‘Language.Haskell.TH.Lib.Syntax’
-instance GHC.Internal.Show.Show Language.Haskell.TH.Lib.Syntax.Foreign -- Defined in ‘Language.Haskell.TH.Lib.Syntax’
-instance GHC.Internal.Show.Show Language.Haskell.TH.Lib.Syntax.FunDep -- Defined in ‘Language.Haskell.TH.Lib.Syntax’
-instance GHC.Internal.Show.Show Language.Haskell.TH.Lib.Syntax.Guard -- Defined in ‘Language.Haskell.TH.Lib.Syntax’
-instance GHC.Internal.Show.Show Language.Haskell.TH.Lib.Syntax.Info -- Defined in ‘Language.Haskell.TH.Lib.Syntax’
-instance GHC.Internal.Show.Show Language.Haskell.TH.Lib.Syntax.InjectivityAnn -- Defined in ‘Language.Haskell.TH.Lib.Syntax’
-instance GHC.Internal.Show.Show Language.Haskell.TH.Lib.Syntax.Inline -- Defined in ‘Language.Haskell.TH.Lib.Syntax’
-instance GHC.Internal.Show.Show Language.Haskell.TH.Lib.Syntax.Lit -- Defined in ‘Language.Haskell.TH.Lib.Syntax’
-instance GHC.Internal.Show.Show Language.Haskell.TH.Lib.Syntax.Loc -- Defined in ‘Language.Haskell.TH.Lib.Syntax’
-instance GHC.Internal.Show.Show Language.Haskell.TH.Lib.Syntax.Match -- Defined in ‘Language.Haskell.TH.Lib.Syntax’
-instance GHC.Internal.Show.Show Language.Haskell.TH.Lib.Syntax.ModName -- Defined in ‘Language.Haskell.TH.Lib.Syntax’
-instance GHC.Internal.Show.Show Language.Haskell.TH.Lib.Syntax.Module -- Defined in ‘Language.Haskell.TH.Lib.Syntax’
-instance GHC.Internal.Show.Show Language.Haskell.TH.Lib.Syntax.ModuleInfo -- Defined in ‘Language.Haskell.TH.Lib.Syntax’
-instance GHC.Internal.Show.Show Language.Haskell.TH.Lib.Syntax.Name -- Defined in ‘Language.Haskell.TH.Lib.Syntax’
-instance GHC.Internal.Show.Show Language.Haskell.TH.Lib.Syntax.NameFlavour -- Defined in ‘Language.Haskell.TH.Lib.Syntax’
-instance GHC.Internal.Show.Show Language.Haskell.TH.Lib.Syntax.NameSpace -- Defined in ‘Language.Haskell.TH.Lib.Syntax’
-instance GHC.Internal.Show.Show Language.Haskell.TH.Lib.Syntax.NamespaceSpecifier -- Defined in ‘Language.Haskell.TH.Lib.Syntax’
-instance GHC.Internal.Show.Show Language.Haskell.TH.Lib.Syntax.OccName -- Defined in ‘Language.Haskell.TH.Lib.Syntax’
-instance GHC.Internal.Show.Show Language.Haskell.TH.Lib.Syntax.Overlap -- Defined in ‘Language.Haskell.TH.Lib.Syntax’
-instance GHC.Internal.Show.Show Language.Haskell.TH.Lib.Syntax.Pat -- Defined in ‘Language.Haskell.TH.Lib.Syntax’
-instance GHC.Internal.Show.Show Language.Haskell.TH.Lib.Syntax.PatSynArgs -- Defined in ‘Language.Haskell.TH.Lib.Syntax’
-instance GHC.Internal.Show.Show Language.Haskell.TH.Lib.Syntax.PatSynDir -- Defined in ‘Language.Haskell.TH.Lib.Syntax’
-instance GHC.Internal.Show.Show Language.Haskell.TH.Lib.Syntax.Phases -- Defined in ‘Language.Haskell.TH.Lib.Syntax’
-instance GHC.Internal.Show.Show Language.Haskell.TH.Lib.Syntax.PkgName -- Defined in ‘Language.Haskell.TH.Lib.Syntax’
-instance GHC.Internal.Show.Show Language.Haskell.TH.Lib.Syntax.Pragma -- Defined in ‘Language.Haskell.TH.Lib.Syntax’
-instance GHC.Internal.Show.Show Language.Haskell.TH.Lib.Syntax.Range -- Defined in ‘Language.Haskell.TH.Lib.Syntax’
-instance GHC.Internal.Show.Show Language.Haskell.TH.Lib.Syntax.Role -- Defined in ‘Language.Haskell.TH.Lib.Syntax’
-instance GHC.Internal.Show.Show Language.Haskell.TH.Lib.Syntax.RuleBndr -- Defined in ‘Language.Haskell.TH.Lib.Syntax’
-instance GHC.Internal.Show.Show Language.Haskell.TH.Lib.Syntax.RuleMatch -- Defined in ‘Language.Haskell.TH.Lib.Syntax’
-instance GHC.Internal.Show.Show Language.Haskell.TH.Lib.Syntax.Safety -- Defined in ‘Language.Haskell.TH.Lib.Syntax’
-instance GHC.Internal.Show.Show Language.Haskell.TH.Lib.Syntax.SourceStrictness -- Defined in ‘Language.Haskell.TH.Lib.Syntax’
-instance GHC.Internal.Show.Show Language.Haskell.TH.Lib.Syntax.SourceUnpackedness -- Defined in ‘Language.Haskell.TH.Lib.Syntax’
-instance GHC.Internal.Show.Show Language.Haskell.TH.Lib.Syntax.Specificity -- Defined in ‘Language.Haskell.TH.Lib.Syntax’
-instance GHC.Internal.Show.Show Language.Haskell.TH.Lib.Syntax.Stmt -- Defined in ‘Language.Haskell.TH.Lib.Syntax’
-instance GHC.Internal.Show.Show Language.Haskell.TH.Lib.Syntax.TyLit -- Defined in ‘Language.Haskell.TH.Lib.Syntax’
-instance GHC.Internal.Show.Show Language.Haskell.TH.Lib.Syntax.TySynEqn -- Defined in ‘Language.Haskell.TH.Lib.Syntax’
-instance forall flag. GHC.Internal.Show.Show flag => GHC.Internal.Show.Show (Language.Haskell.TH.Lib.Syntax.TyVarBndr flag) -- Defined in ‘Language.Haskell.TH.Lib.Syntax’
-instance GHC.Internal.Show.Show Language.Haskell.TH.Lib.Syntax.Type -- Defined in ‘Language.Haskell.TH.Lib.Syntax’
-instance GHC.Internal.Show.Show Language.Haskell.TH.Lib.Syntax.TypeFamilyHead -- Defined in ‘Language.Haskell.TH.Lib.Syntax’
-instance [safe] GHC.Internal.Show.Show GHC.LanguageExtensions.Type.Extension -- Defined in ‘GHC.LanguageExtensions.Type’
-instance [safe] GHC.Internal.Show.Show Language.Haskell.TH.Ppr.ForallVisFlag -- Defined in ‘Language.Haskell.TH.Ppr’
-instance [safe] GHC.Internal.Show.Show GHC.ForeignSrcLang.Type.ForeignSrcLang -- Defined in ‘GHC.ForeignSrcLang.Type’
-instance [safe] GHC.Internal.Show.Show Language.Haskell.TH.PprLib.Doc -- Defined in ‘Language.Haskell.TH.PprLib’
-instance GHC.Classes.Eq Language.Haskell.TH.Lib.Syntax.AnnLookup -- Defined in ‘Language.Haskell.TH.Lib.Syntax’
-instance GHC.Classes.Eq Language.Haskell.TH.Lib.Syntax.AnnTarget -- Defined in ‘Language.Haskell.TH.Lib.Syntax’
-instance GHC.Classes.Eq Language.Haskell.TH.Lib.Syntax.Bang -- Defined in ‘Language.Haskell.TH.Lib.Syntax’
-instance GHC.Classes.Eq Language.Haskell.TH.Lib.Syntax.BndrVis -- Defined in ‘Language.Haskell.TH.Lib.Syntax’
-instance GHC.Classes.Eq Language.Haskell.TH.Lib.Syntax.Body -- Defined in ‘Language.Haskell.TH.Lib.Syntax’
-instance GHC.Classes.Eq Language.Haskell.TH.Lib.Syntax.Bytes -- Defined in ‘Language.Haskell.TH.Lib.Syntax’
-instance GHC.Classes.Eq Language.Haskell.TH.Lib.Syntax.Callconv -- Defined in ‘Language.Haskell.TH.Lib.Syntax’
-instance GHC.Classes.Eq Language.Haskell.TH.Lib.Syntax.Clause -- Defined in ‘Language.Haskell.TH.Lib.Syntax’
-instance GHC.Classes.Eq Language.Haskell.TH.Lib.Syntax.Con -- Defined in ‘Language.Haskell.TH.Lib.Syntax’
-instance GHC.Classes.Eq Language.Haskell.TH.Lib.Syntax.Dec -- Defined in ‘Language.Haskell.TH.Lib.Syntax’
-instance GHC.Classes.Eq Language.Haskell.TH.Lib.Syntax.DecidedStrictness -- Defined in ‘Language.Haskell.TH.Lib.Syntax’
-instance GHC.Classes.Eq Language.Haskell.TH.Lib.Syntax.DerivClause -- Defined in ‘Language.Haskell.TH.Lib.Syntax’
-instance GHC.Classes.Eq Language.Haskell.TH.Lib.Syntax.DerivStrategy -- Defined in ‘Language.Haskell.TH.Lib.Syntax’
-instance GHC.Classes.Eq Language.Haskell.TH.Lib.Syntax.DocLoc -- Defined in ‘Language.Haskell.TH.Lib.Syntax’
-instance GHC.Classes.Eq Language.Haskell.TH.Lib.Syntax.Exp -- Defined in ‘Language.Haskell.TH.Lib.Syntax’
-instance GHC.Classes.Eq Language.Haskell.TH.Lib.Syntax.FamilyResultSig -- Defined in ‘Language.Haskell.TH.Lib.Syntax’
-instance GHC.Classes.Eq Language.Haskell.TH.Lib.Syntax.Fixity -- Defined in ‘Language.Haskell.TH.Lib.Syntax’
-instance GHC.Classes.Eq Language.Haskell.TH.Lib.Syntax.FixityDirection -- Defined in ‘Language.Haskell.TH.Lib.Syntax’
-instance GHC.Classes.Eq Language.Haskell.TH.Lib.Syntax.Foreign -- Defined in ‘Language.Haskell.TH.Lib.Syntax’
-instance GHC.Classes.Eq Language.Haskell.TH.Lib.Syntax.FunDep -- Defined in ‘Language.Haskell.TH.Lib.Syntax’
-instance GHC.Classes.Eq Language.Haskell.TH.Lib.Syntax.Guard -- Defined in ‘Language.Haskell.TH.Lib.Syntax’
-instance GHC.Classes.Eq Language.Haskell.TH.Lib.Syntax.Info -- Defined in ‘Language.Haskell.TH.Lib.Syntax’
-instance GHC.Classes.Eq Language.Haskell.TH.Lib.Syntax.InjectivityAnn -- Defined in ‘Language.Haskell.TH.Lib.Syntax’
-instance GHC.Classes.Eq Language.Haskell.TH.Lib.Syntax.Inline -- Defined in ‘Language.Haskell.TH.Lib.Syntax’
-instance GHC.Classes.Eq Language.Haskell.TH.Lib.Syntax.Lit -- Defined in ‘Language.Haskell.TH.Lib.Syntax’
-instance GHC.Classes.Eq Language.Haskell.TH.Lib.Syntax.Loc -- Defined in ‘Language.Haskell.TH.Lib.Syntax’
-instance GHC.Classes.Eq Language.Haskell.TH.Lib.Syntax.Match -- Defined in ‘Language.Haskell.TH.Lib.Syntax’
-instance GHC.Classes.Eq Language.Haskell.TH.Lib.Syntax.ModName -- Defined in ‘Language.Haskell.TH.Lib.Syntax’
-instance GHC.Classes.Eq Language.Haskell.TH.Lib.Syntax.Module -- Defined in ‘Language.Haskell.TH.Lib.Syntax’
-instance GHC.Classes.Eq Language.Haskell.TH.Lib.Syntax.ModuleInfo -- Defined in ‘Language.Haskell.TH.Lib.Syntax’
-instance GHC.Classes.Eq Language.Haskell.TH.Lib.Syntax.Name -- Defined in ‘Language.Haskell.TH.Lib.Syntax’
-instance GHC.Classes.Eq Language.Haskell.TH.Lib.Syntax.NameFlavour -- Defined in ‘Language.Haskell.TH.Lib.Syntax’
-instance GHC.Classes.Eq Language.Haskell.TH.Lib.Syntax.NameSpace -- Defined in ‘Language.Haskell.TH.Lib.Syntax’
-instance GHC.Classes.Eq Language.Haskell.TH.Lib.Syntax.NamespaceSpecifier -- Defined in ‘Language.Haskell.TH.Lib.Syntax’
-instance GHC.Classes.Eq Language.Haskell.TH.Lib.Syntax.OccName -- Defined in ‘Language.Haskell.TH.Lib.Syntax’
-instance GHC.Classes.Eq Language.Haskell.TH.Lib.Syntax.Overlap -- Defined in ‘Language.Haskell.TH.Lib.Syntax’
-instance GHC.Classes.Eq Language.Haskell.TH.Lib.Syntax.Pat -- Defined in ‘Language.Haskell.TH.Lib.Syntax’
-instance GHC.Classes.Eq Language.Haskell.TH.Lib.Syntax.PatSynArgs -- Defined in ‘Language.Haskell.TH.Lib.Syntax’
-instance GHC.Classes.Eq Language.Haskell.TH.Lib.Syntax.PatSynDir -- Defined in ‘Language.Haskell.TH.Lib.Syntax’
-instance GHC.Classes.Eq Language.Haskell.TH.Lib.Syntax.Phases -- Defined in ‘Language.Haskell.TH.Lib.Syntax’
-instance GHC.Classes.Eq Language.Haskell.TH.Lib.Syntax.PkgName -- Defined in ‘Language.Haskell.TH.Lib.Syntax’
-instance GHC.Classes.Eq Language.Haskell.TH.Lib.Syntax.Pragma -- Defined in ‘Language.Haskell.TH.Lib.Syntax’
-instance GHC.Classes.Eq Language.Haskell.TH.Lib.Syntax.Range -- Defined in ‘Language.Haskell.TH.Lib.Syntax’
-instance GHC.Classes.Eq Language.Haskell.TH.Lib.Syntax.Role -- Defined in ‘Language.Haskell.TH.Lib.Syntax’
-instance GHC.Classes.Eq Language.Haskell.TH.Lib.Syntax.RuleBndr -- Defined in ‘Language.Haskell.TH.Lib.Syntax’
-instance GHC.Classes.Eq Language.Haskell.TH.Lib.Syntax.RuleMatch -- Defined in ‘Language.Haskell.TH.Lib.Syntax’
-instance GHC.Classes.Eq Language.Haskell.TH.Lib.Syntax.Safety -- Defined in ‘Language.Haskell.TH.Lib.Syntax’
-instance GHC.Classes.Eq Language.Haskell.TH.Lib.Syntax.SourceStrictness -- Defined in ‘Language.Haskell.TH.Lib.Syntax’
-instance GHC.Classes.Eq Language.Haskell.TH.Lib.Syntax.SourceUnpackedness -- Defined in ‘Language.Haskell.TH.Lib.Syntax’
-instance GHC.Classes.Eq Language.Haskell.TH.Lib.Syntax.Specificity -- Defined in ‘Language.Haskell.TH.Lib.Syntax’
-instance GHC.Classes.Eq Language.Haskell.TH.Lib.Syntax.Stmt -- Defined in ‘Language.Haskell.TH.Lib.Syntax’
-instance GHC.Classes.Eq Language.Haskell.TH.Lib.Syntax.TyLit -- Defined in ‘Language.Haskell.TH.Lib.Syntax’
-instance GHC.Classes.Eq Language.Haskell.TH.Lib.Syntax.TySynEqn -- Defined in ‘Language.Haskell.TH.Lib.Syntax’
-instance forall flag. GHC.Classes.Eq flag => GHC.Classes.Eq (Language.Haskell.TH.Lib.Syntax.TyVarBndr flag) -- Defined in ‘Language.Haskell.TH.Lib.Syntax’
-instance GHC.Classes.Eq Language.Haskell.TH.Lib.Syntax.Type -- Defined in ‘Language.Haskell.TH.Lib.Syntax’
-instance GHC.Classes.Eq Language.Haskell.TH.Lib.Syntax.TypeFamilyHead -- Defined in ‘Language.Haskell.TH.Lib.Syntax’
-instance [safe] GHC.Classes.Eq GHC.LanguageExtensions.Type.Extension -- Defined in ‘GHC.LanguageExtensions.Type’
-instance [safe] GHC.Classes.Eq GHC.ForeignSrcLang.Type.ForeignSrcLang -- Defined in ‘GHC.ForeignSrcLang.Type’
-instance GHC.Classes.Ord Language.Haskell.TH.Lib.Syntax.AnnLookup -- Defined in ‘Language.Haskell.TH.Lib.Syntax’
-instance GHC.Classes.Ord Language.Haskell.TH.Lib.Syntax.AnnTarget -- Defined in ‘Language.Haskell.TH.Lib.Syntax’
-instance GHC.Classes.Ord Language.Haskell.TH.Lib.Syntax.Bang -- Defined in ‘Language.Haskell.TH.Lib.Syntax’
-instance GHC.Classes.Ord Language.Haskell.TH.Lib.Syntax.BndrVis -- Defined in ‘Language.Haskell.TH.Lib.Syntax’
-instance GHC.Classes.Ord Language.Haskell.TH.Lib.Syntax.Body -- Defined in ‘Language.Haskell.TH.Lib.Syntax’
-instance GHC.Classes.Ord Language.Haskell.TH.Lib.Syntax.Bytes -- Defined in ‘Language.Haskell.TH.Lib.Syntax’
-instance GHC.Classes.Ord Language.Haskell.TH.Lib.Syntax.Callconv -- Defined in ‘Language.Haskell.TH.Lib.Syntax’
-instance GHC.Classes.Ord Language.Haskell.TH.Lib.Syntax.Clause -- Defined in ‘Language.Haskell.TH.Lib.Syntax’
-instance GHC.Classes.Ord Language.Haskell.TH.Lib.Syntax.Con -- Defined in ‘Language.Haskell.TH.Lib.Syntax’
-instance GHC.Classes.Ord Language.Haskell.TH.Lib.Syntax.Dec -- Defined in ‘Language.Haskell.TH.Lib.Syntax’
-instance GHC.Classes.Ord Language.Haskell.TH.Lib.Syntax.DecidedStrictness -- Defined in ‘Language.Haskell.TH.Lib.Syntax’
-instance GHC.Classes.Ord Language.Haskell.TH.Lib.Syntax.DerivClause -- Defined in ‘Language.Haskell.TH.Lib.Syntax’
-instance GHC.Classes.Ord Language.Haskell.TH.Lib.Syntax.DerivStrategy -- Defined in ‘Language.Haskell.TH.Lib.Syntax’
-instance GHC.Classes.Ord Language.Haskell.TH.Lib.Syntax.DocLoc -- Defined in ‘Language.Haskell.TH.Lib.Syntax’
-instance GHC.Classes.Ord Language.Haskell.TH.Lib.Syntax.Exp -- Defined in ‘Language.Haskell.TH.Lib.Syntax’
-instance GHC.Classes.Ord Language.Haskell.TH.Lib.Syntax.FamilyResultSig -- Defined in ‘Language.Haskell.TH.Lib.Syntax’
-instance GHC.Classes.Ord Language.Haskell.TH.Lib.Syntax.Fixity -- Defined in ‘Language.Haskell.TH.Lib.Syntax’
-instance GHC.Classes.Ord Language.Haskell.TH.Lib.Syntax.FixityDirection -- Defined in ‘Language.Haskell.TH.Lib.Syntax’
-instance GHC.Classes.Ord Language.Haskell.TH.Lib.Syntax.Foreign -- Defined in ‘Language.Haskell.TH.Lib.Syntax’
-instance GHC.Classes.Ord Language.Haskell.TH.Lib.Syntax.FunDep -- Defined in ‘Language.Haskell.TH.Lib.Syntax’
-instance GHC.Classes.Ord Language.Haskell.TH.Lib.Syntax.Guard -- Defined in ‘Language.Haskell.TH.Lib.Syntax’
-instance GHC.Classes.Ord Language.Haskell.TH.Lib.Syntax.Info -- Defined in ‘Language.Haskell.TH.Lib.Syntax’
-instance GHC.Classes.Ord Language.Haskell.TH.Lib.Syntax.InjectivityAnn -- Defined in ‘Language.Haskell.TH.Lib.Syntax’
-instance GHC.Classes.Ord Language.Haskell.TH.Lib.Syntax.Inline -- Defined in ‘Language.Haskell.TH.Lib.Syntax’
-instance GHC.Classes.Ord Language.Haskell.TH.Lib.Syntax.Lit -- Defined in ‘Language.Haskell.TH.Lib.Syntax’
-instance GHC.Classes.Ord Language.Haskell.TH.Lib.Syntax.Loc -- Defined in ‘Language.Haskell.TH.Lib.Syntax’
-instance GHC.Classes.Ord Language.Haskell.TH.Lib.Syntax.Match -- Defined in ‘Language.Haskell.TH.Lib.Syntax’
-instance GHC.Classes.Ord Language.Haskell.TH.Lib.Syntax.ModName -- Defined in ‘Language.Haskell.TH.Lib.Syntax’
-instance GHC.Classes.Ord Language.Haskell.TH.Lib.Syntax.Module -- Defined in ‘Language.Haskell.TH.Lib.Syntax’
-instance GHC.Classes.Ord Language.Haskell.TH.Lib.Syntax.ModuleInfo -- Defined in ‘Language.Haskell.TH.Lib.Syntax’
-instance GHC.Classes.Ord Language.Haskell.TH.Lib.Syntax.Name -- Defined in ‘Language.Haskell.TH.Lib.Syntax’
-instance GHC.Classes.Ord Language.Haskell.TH.Lib.Syntax.NameFlavour -- Defined in ‘Language.Haskell.TH.Lib.Syntax’
-instance GHC.Classes.Ord Language.Haskell.TH.Lib.Syntax.NameSpace -- Defined in ‘Language.Haskell.TH.Lib.Syntax’
-instance GHC.Classes.Ord Language.Haskell.TH.Lib.Syntax.NamespaceSpecifier -- Defined in ‘Language.Haskell.TH.Lib.Syntax’
-instance GHC.Classes.Ord Language.Haskell.TH.Lib.Syntax.OccName -- Defined in ‘Language.Haskell.TH.Lib.Syntax’
-instance GHC.Classes.Ord Language.Haskell.TH.Lib.Syntax.Overlap -- Defined in ‘Language.Haskell.TH.Lib.Syntax’
-instance GHC.Classes.Ord Language.Haskell.TH.Lib.Syntax.Pat -- Defined in ‘Language.Haskell.TH.Lib.Syntax’
-instance GHC.Classes.Ord Language.Haskell.TH.Lib.Syntax.PatSynArgs -- Defined in ‘Language.Haskell.TH.Lib.Syntax’
-instance GHC.Classes.Ord Language.Haskell.TH.Lib.Syntax.PatSynDir -- Defined in ‘Language.Haskell.TH.Lib.Syntax’
-instance GHC.Classes.Ord Language.Haskell.TH.Lib.Syntax.Phases -- Defined in ‘Language.Haskell.TH.Lib.Syntax’
-instance GHC.Classes.Ord Language.Haskell.TH.Lib.Syntax.PkgName -- Defined in ‘Language.Haskell.TH.Lib.Syntax’
-instance GHC.Classes.Ord Language.Haskell.TH.Lib.Syntax.Pragma -- Defined in ‘Language.Haskell.TH.Lib.Syntax’
-instance GHC.Classes.Ord Language.Haskell.TH.Lib.Syntax.Range -- Defined in ‘Language.Haskell.TH.Lib.Syntax’
-instance GHC.Classes.Ord Language.Haskell.TH.Lib.Syntax.Role -- Defined in ‘Language.Haskell.TH.Lib.Syntax’
-instance GHC.Classes.Ord Language.Haskell.TH.Lib.Syntax.RuleBndr -- Defined in ‘Language.Haskell.TH.Lib.Syntax’
-instance GHC.Classes.Ord Language.Haskell.TH.Lib.Syntax.RuleMatch -- Defined in ‘Language.Haskell.TH.Lib.Syntax’
-instance GHC.Classes.Ord Language.Haskell.TH.Lib.Syntax.Safety -- Defined in ‘Language.Haskell.TH.Lib.Syntax’
-instance GHC.Classes.Ord Language.Haskell.TH.Lib.Syntax.SourceStrictness -- Defined in ‘Language.Haskell.TH.Lib.Syntax’
-instance GHC.Classes.Ord Language.Haskell.TH.Lib.Syntax.SourceUnpackedness -- Defined in ‘Language.Haskell.TH.Lib.Syntax’
-instance GHC.Classes.Ord Language.Haskell.TH.Lib.Syntax.Specificity -- Defined in ‘Language.Haskell.TH.Lib.Syntax’
-instance GHC.Classes.Ord Language.Haskell.TH.Lib.Syntax.Stmt -- Defined in ‘Language.Haskell.TH.Lib.Syntax’
-instance GHC.Classes.Ord Language.Haskell.TH.Lib.Syntax.TyLit -- Defined in ‘Language.Haskell.TH.Lib.Syntax’
-instance GHC.Classes.Ord Language.Haskell.TH.Lib.Syntax.TySynEqn -- Defined in ‘Language.Haskell.TH.Lib.Syntax’
-instance forall flag. GHC.Classes.Ord flag => GHC.Classes.Ord (Language.Haskell.TH.Lib.Syntax.TyVarBndr flag) -- Defined in ‘Language.Haskell.TH.Lib.Syntax’
-instance GHC.Classes.Ord Language.Haskell.TH.Lib.Syntax.Type -- Defined in ‘Language.Haskell.TH.Lib.Syntax’
-instance GHC.Classes.Ord Language.Haskell.TH.Lib.Syntax.TypeFamilyHead -- Defined in ‘Language.Haskell.TH.Lib.Syntax’
-instance [safe] GHC.Classes.Ord GHC.LanguageExtensions.Type.Extension -- Defined in ‘GHC.LanguageExtensions.Type’
-instance [safe] Language.Haskell.TH.Lib.DefaultBndrFlag Language.Haskell.TH.Lib.Syntax.BndrVis -- Defined in ‘Language.Haskell.TH.Lib’
-instance [safe] Language.Haskell.TH.Lib.DefaultBndrFlag Language.Haskell.TH.Lib.Syntax.Specificity -- Defined in ‘Language.Haskell.TH.Lib’
+instance GHC.Internal.TH.Ppr.Ppr GHC.Internal.TH.Syntax.Bang -- Defined in ‘GHC.Internal.TH.Ppr’
+instance GHC.Internal.TH.Ppr.Ppr GHC.Internal.TH.Syntax.Clause -- Defined in ‘GHC.Internal.TH.Ppr’
+instance GHC.Internal.TH.Ppr.Ppr GHC.Internal.TH.Syntax.Con -- Defined in ‘GHC.Internal.TH.Ppr’
+instance GHC.Internal.TH.Ppr.Ppr GHC.Internal.TH.Syntax.Dec -- Defined in ‘GHC.Internal.TH.Ppr’
+instance GHC.Internal.TH.Ppr.Ppr GHC.Internal.TH.Syntax.DecidedStrictness -- Defined in ‘GHC.Internal.TH.Ppr’
+instance GHC.Internal.TH.Ppr.Ppr GHC.Internal.TH.Syntax.Exp -- Defined in ‘GHC.Internal.TH.Ppr’
+instance GHC.Internal.TH.Ppr.Ppr GHC.Internal.TH.Syntax.FamilyResultSig -- Defined in ‘GHC.Internal.TH.Ppr’
+instance GHC.Internal.TH.Ppr.Ppr GHC.Internal.TH.Syntax.Foreign -- Defined in ‘GHC.Internal.TH.Ppr’
+instance GHC.Internal.TH.Ppr.Ppr GHC.Internal.TH.Syntax.FunDep -- Defined in ‘GHC.Internal.TH.Ppr’
+instance GHC.Internal.TH.Ppr.Ppr GHC.Internal.TH.Syntax.Info -- Defined in ‘GHC.Internal.TH.Ppr’
+instance GHC.Internal.TH.Ppr.Ppr GHC.Internal.TH.Syntax.InjectivityAnn -- Defined in ‘GHC.Internal.TH.Ppr’
+instance GHC.Internal.TH.Ppr.Ppr GHC.Internal.TH.Syntax.Inline -- Defined in ‘GHC.Internal.TH.Ppr’
+instance forall a. GHC.Internal.TH.Ppr.Ppr a => GHC.Internal.TH.Ppr.Ppr [a] -- Defined in ‘GHC.Internal.TH.Ppr’
+instance GHC.Internal.TH.Ppr.Ppr GHC.Internal.TH.Syntax.Lit -- Defined in ‘GHC.Internal.TH.Ppr’
+instance GHC.Internal.TH.Ppr.Ppr GHC.Internal.TH.Syntax.Loc -- Defined in ‘GHC.Internal.TH.Ppr’
+instance GHC.Internal.TH.Ppr.Ppr GHC.Internal.TH.Syntax.Match -- Defined in ‘GHC.Internal.TH.Ppr’
+instance GHC.Internal.TH.Ppr.Ppr GHC.Internal.TH.Syntax.Module -- Defined in ‘GHC.Internal.TH.Ppr’
+instance GHC.Internal.TH.Ppr.Ppr GHC.Internal.TH.Syntax.ModuleInfo -- Defined in ‘GHC.Internal.TH.Ppr’
+instance GHC.Internal.TH.Ppr.Ppr GHC.Internal.TH.Syntax.Name -- Defined in ‘GHC.Internal.TH.Ppr’
+instance GHC.Internal.TH.Ppr.Ppr GHC.Internal.TH.Syntax.Pat -- Defined in ‘GHC.Internal.TH.Ppr’
+instance GHC.Internal.TH.Ppr.Ppr GHC.Internal.TH.Syntax.PatSynArgs -- Defined in ‘GHC.Internal.TH.Ppr’
+instance GHC.Internal.TH.Ppr.Ppr GHC.Internal.TH.Syntax.PatSynDir -- Defined in ‘GHC.Internal.TH.Ppr’
+instance GHC.Internal.TH.Ppr.Ppr GHC.Internal.TH.Syntax.Phases -- Defined in ‘GHC.Internal.TH.Ppr’
+instance GHC.Internal.TH.Ppr.Ppr GHC.Internal.TH.Syntax.Pragma -- Defined in ‘GHC.Internal.TH.Ppr’
+instance GHC.Internal.TH.Ppr.Ppr GHC.Internal.TH.Syntax.Range -- Defined in ‘GHC.Internal.TH.Ppr’
+instance GHC.Internal.TH.Ppr.Ppr GHC.Internal.TH.Syntax.Role -- Defined in ‘GHC.Internal.TH.Ppr’
+instance GHC.Internal.TH.Ppr.Ppr GHC.Internal.TH.Syntax.RuleBndr -- Defined in ‘GHC.Internal.TH.Ppr’
+instance GHC.Internal.TH.Ppr.Ppr GHC.Internal.TH.Syntax.RuleMatch -- Defined in ‘GHC.Internal.TH.Ppr’
+instance GHC.Internal.TH.Ppr.Ppr GHC.Internal.TH.Syntax.SourceStrictness -- Defined in ‘GHC.Internal.TH.Ppr’
+instance GHC.Internal.TH.Ppr.Ppr GHC.Internal.TH.Syntax.SourceUnpackedness -- Defined in ‘GHC.Internal.TH.Ppr’
+instance GHC.Internal.TH.Ppr.Ppr GHC.Internal.TH.Syntax.Stmt -- Defined in ‘GHC.Internal.TH.Ppr’
+instance GHC.Internal.TH.Ppr.Ppr GHC.Internal.TH.Syntax.TyLit -- Defined in ‘GHC.Internal.TH.Ppr’
+instance forall flag. GHC.Internal.TH.Ppr.PprFlag flag => GHC.Internal.TH.Ppr.Ppr (GHC.Internal.TH.Syntax.TyVarBndr flag) -- Defined in ‘GHC.Internal.TH.Ppr’
+instance GHC.Internal.TH.Ppr.Ppr GHC.Internal.TH.Syntax.Type -- Defined in ‘GHC.Internal.TH.Ppr’
+instance GHC.Internal.TH.Ppr.Ppr GHC.Internal.TH.Ppr.TypeArg -- Defined in ‘GHC.Internal.TH.Ppr’
+instance GHC.Internal.TH.Ppr.PprFlag GHC.Internal.TH.Syntax.BndrVis -- Defined in ‘GHC.Internal.TH.Ppr’
+instance GHC.Internal.TH.Ppr.PprFlag GHC.Internal.TH.Syntax.Specificity -- Defined in ‘GHC.Internal.TH.Ppr’
+instance GHC.Internal.TH.Ppr.PprFlag () -- Defined in ‘GHC.Internal.TH.Ppr’
+instance GHC.Internal.Base.Applicative GHC.Internal.TH.Syntax.Q -- Defined in ‘GHC.Internal.TH.Syntax’
+instance [safe] GHC.Internal.Base.Applicative GHC.Internal.TH.PprLib.PprM -- Defined in ‘GHC.Internal.TH.PprLib’
+instance GHC.Internal.Base.Functor GHC.Internal.TH.Syntax.Q -- Defined in ‘GHC.Internal.TH.Syntax’
+instance GHC.Internal.Base.Functor GHC.Internal.TH.Syntax.TyVarBndr -- Defined in ‘GHC.Internal.TH.Syntax’
+instance [safe] GHC.Internal.Base.Functor GHC.Internal.TH.PprLib.PprM -- Defined in ‘GHC.Internal.TH.PprLib’
+instance GHC.Internal.Base.Monad GHC.Internal.TH.Syntax.Q -- Defined in ‘GHC.Internal.TH.Syntax’
+instance [safe] GHC.Internal.Base.Monad GHC.Internal.TH.PprLib.PprM -- Defined in ‘GHC.Internal.TH.PprLib’
+instance forall a. GHC.Internal.Base.Monoid a => GHC.Internal.Base.Monoid (GHC.Internal.TH.Syntax.Q a) -- Defined in ‘GHC.Internal.TH.Syntax’
+instance forall a. GHC.Internal.Base.Semigroup a => GHC.Internal.Base.Semigroup (GHC.Internal.TH.Syntax.Q a) -- Defined in ‘GHC.Internal.TH.Syntax’
+instance GHC.Internal.Control.Monad.Fail.MonadFail GHC.Internal.TH.Syntax.Q -- Defined in ‘GHC.Internal.TH.Syntax’
+instance GHC.Internal.Control.Monad.Fix.MonadFix GHC.Internal.TH.Syntax.Q -- Defined in ‘GHC.Internal.TH.Syntax’
+instance GHC.Internal.Control.Monad.IO.Class.MonadIO GHC.Internal.TH.Syntax.Q -- Defined in ‘GHC.Internal.TH.Syntax’
+instance GHC.Internal.Data.Data.Data GHC.Internal.TH.Syntax.AnnLookup -- Defined in ‘GHC.Internal.TH.Syntax’
+instance GHC.Internal.Data.Data.Data GHC.Internal.TH.Syntax.AnnTarget -- Defined in ‘GHC.Internal.TH.Syntax’
+instance GHC.Internal.Data.Data.Data GHC.Internal.TH.Syntax.Bang -- Defined in ‘GHC.Internal.TH.Syntax’
+instance GHC.Internal.Data.Data.Data GHC.Internal.TH.Syntax.BndrVis -- Defined in ‘GHC.Internal.TH.Syntax’
+instance GHC.Internal.Data.Data.Data GHC.Internal.TH.Syntax.Body -- Defined in ‘GHC.Internal.TH.Syntax’
+instance GHC.Internal.Data.Data.Data GHC.Internal.TH.Syntax.Bytes -- Defined in ‘GHC.Internal.TH.Syntax’
+instance GHC.Internal.Data.Data.Data GHC.Internal.TH.Syntax.Callconv -- Defined in ‘GHC.Internal.TH.Syntax’
+instance GHC.Internal.Data.Data.Data GHC.Internal.TH.Syntax.Clause -- Defined in ‘GHC.Internal.TH.Syntax’
+instance GHC.Internal.Data.Data.Data GHC.Internal.TH.Syntax.Con -- Defined in ‘GHC.Internal.TH.Syntax’
+instance GHC.Internal.Data.Data.Data GHC.Internal.TH.Syntax.Dec -- Defined in ‘GHC.Internal.TH.Syntax’
+instance GHC.Internal.Data.Data.Data GHC.Internal.TH.Syntax.DecidedStrictness -- Defined in ‘GHC.Internal.TH.Syntax’
+instance GHC.Internal.Data.Data.Data GHC.Internal.TH.Syntax.DerivClause -- Defined in ‘GHC.Internal.TH.Syntax’
+instance GHC.Internal.Data.Data.Data GHC.Internal.TH.Syntax.DerivStrategy -- Defined in ‘GHC.Internal.TH.Syntax’
+instance GHC.Internal.Data.Data.Data GHC.Internal.TH.Syntax.DocLoc -- Defined in ‘GHC.Internal.TH.Syntax’
+instance GHC.Internal.Data.Data.Data GHC.Internal.TH.Syntax.Exp -- Defined in ‘GHC.Internal.TH.Syntax’
+instance GHC.Internal.Data.Data.Data GHC.Internal.TH.Syntax.FamilyResultSig -- Defined in ‘GHC.Internal.TH.Syntax’
+instance GHC.Internal.Data.Data.Data GHC.Internal.TH.Syntax.Fixity -- Defined in ‘GHC.Internal.TH.Syntax’
+instance GHC.Internal.Data.Data.Data GHC.Internal.TH.Syntax.FixityDirection -- Defined in ‘GHC.Internal.TH.Syntax’
+instance GHC.Internal.Data.Data.Data GHC.Internal.TH.Syntax.Foreign -- Defined in ‘GHC.Internal.TH.Syntax’
+instance GHC.Internal.Data.Data.Data GHC.Internal.TH.Syntax.FunDep -- Defined in ‘GHC.Internal.TH.Syntax’
+instance GHC.Internal.Data.Data.Data GHC.Internal.TH.Syntax.Guard -- Defined in ‘GHC.Internal.TH.Syntax’
+instance GHC.Internal.Data.Data.Data GHC.Internal.TH.Syntax.Info -- Defined in ‘GHC.Internal.TH.Syntax’
+instance GHC.Internal.Data.Data.Data GHC.Internal.TH.Syntax.InjectivityAnn -- Defined in ‘GHC.Internal.TH.Syntax’
+instance GHC.Internal.Data.Data.Data GHC.Internal.TH.Syntax.Inline -- Defined in ‘GHC.Internal.TH.Syntax’
+instance GHC.Internal.Data.Data.Data GHC.Internal.TH.Syntax.Lit -- Defined in ‘GHC.Internal.TH.Syntax’
+instance GHC.Internal.Data.Data.Data GHC.Internal.TH.Syntax.Loc -- Defined in ‘GHC.Internal.TH.Syntax’
+instance GHC.Internal.Data.Data.Data GHC.Internal.TH.Syntax.Match -- Defined in ‘GHC.Internal.TH.Syntax’
+instance GHC.Internal.Data.Data.Data GHC.Internal.TH.Syntax.ModName -- Defined in ‘GHC.Internal.TH.Syntax’
+instance GHC.Internal.Data.Data.Data GHC.Internal.TH.Syntax.Module -- Defined in ‘GHC.Internal.TH.Syntax’
+instance GHC.Internal.Data.Data.Data GHC.Internal.TH.Syntax.ModuleInfo -- Defined in ‘GHC.Internal.TH.Syntax’
+instance GHC.Internal.Data.Data.Data GHC.Internal.TH.Syntax.Name -- Defined in ‘GHC.Internal.TH.Syntax’
+instance GHC.Internal.Data.Data.Data GHC.Internal.TH.Syntax.NameFlavour -- Defined in ‘GHC.Internal.TH.Syntax’
+instance GHC.Internal.Data.Data.Data GHC.Internal.TH.Syntax.NameSpace -- Defined in ‘GHC.Internal.TH.Syntax’
+instance GHC.Internal.Data.Data.Data GHC.Internal.TH.Syntax.NamespaceSpecifier -- Defined in ‘GHC.Internal.TH.Syntax’
+instance GHC.Internal.Data.Data.Data GHC.Internal.TH.Syntax.OccName -- Defined in ‘GHC.Internal.TH.Syntax’
+instance GHC.Internal.Data.Data.Data GHC.Internal.TH.Syntax.Overlap -- Defined in ‘GHC.Internal.TH.Syntax’
+instance GHC.Internal.Data.Data.Data GHC.Internal.TH.Syntax.Pat -- Defined in ‘GHC.Internal.TH.Syntax’
+instance GHC.Internal.Data.Data.Data GHC.Internal.TH.Syntax.PatSynArgs -- Defined in ‘GHC.Internal.TH.Syntax’
+instance GHC.Internal.Data.Data.Data GHC.Internal.TH.Syntax.PatSynDir -- Defined in ‘GHC.Internal.TH.Syntax’
+instance GHC.Internal.Data.Data.Data GHC.Internal.TH.Syntax.Phases -- Defined in ‘GHC.Internal.TH.Syntax’
+instance GHC.Internal.Data.Data.Data GHC.Internal.TH.Syntax.PkgName -- Defined in ‘GHC.Internal.TH.Syntax’
+instance GHC.Internal.Data.Data.Data GHC.Internal.TH.Syntax.Pragma -- Defined in ‘GHC.Internal.TH.Syntax’
+instance GHC.Internal.Data.Data.Data GHC.Internal.TH.Syntax.Range -- Defined in ‘GHC.Internal.TH.Syntax’
+instance GHC.Internal.Data.Data.Data GHC.Internal.TH.Syntax.Role -- Defined in ‘GHC.Internal.TH.Syntax’
+instance GHC.Internal.Data.Data.Data GHC.Internal.TH.Syntax.RuleBndr -- Defined in ‘GHC.Internal.TH.Syntax’
+instance GHC.Internal.Data.Data.Data GHC.Internal.TH.Syntax.RuleMatch -- Defined in ‘GHC.Internal.TH.Syntax’
+instance GHC.Internal.Data.Data.Data GHC.Internal.TH.Syntax.Safety -- Defined in ‘GHC.Internal.TH.Syntax’
+instance GHC.Internal.Data.Data.Data GHC.Internal.TH.Syntax.SourceStrictness -- Defined in ‘GHC.Internal.TH.Syntax’
+instance GHC.Internal.Data.Data.Data GHC.Internal.TH.Syntax.SourceUnpackedness -- Defined in ‘GHC.Internal.TH.Syntax’
+instance GHC.Internal.Data.Data.Data GHC.Internal.TH.Syntax.Specificity -- Defined in ‘GHC.Internal.TH.Syntax’
+instance GHC.Internal.Data.Data.Data GHC.Internal.TH.Syntax.Stmt -- Defined in ‘GHC.Internal.TH.Syntax’
+instance GHC.Internal.Data.Data.Data GHC.Internal.TH.Syntax.TyLit -- Defined in ‘GHC.Internal.TH.Syntax’
+instance GHC.Internal.Data.Data.Data GHC.Internal.TH.Syntax.TySynEqn -- Defined in ‘GHC.Internal.TH.Syntax’
+instance forall flag. GHC.Internal.Data.Data.Data flag => GHC.Internal.Data.Data.Data (GHC.Internal.TH.Syntax.TyVarBndr flag) -- Defined in ‘GHC.Internal.TH.Syntax’
+instance GHC.Internal.Data.Data.Data GHC.Internal.TH.Syntax.Type -- Defined in ‘GHC.Internal.TH.Syntax’
+instance GHC.Internal.Data.Data.Data GHC.Internal.TH.Syntax.TypeFamilyHead -- Defined in ‘GHC.Internal.TH.Syntax’
+instance GHC.Internal.Data.Foldable.Foldable GHC.Internal.TH.Syntax.TyVarBndr -- Defined in ‘GHC.Internal.TH.Syntax’
+instance GHC.Internal.Data.Traversable.Traversable GHC.Internal.TH.Syntax.TyVarBndr -- Defined in ‘GHC.Internal.TH.Syntax’
+instance GHC.Internal.Enum.Bounded GHC.Internal.LanguageExtensions.Extension -- Defined in ‘GHC.Internal.LanguageExtensions’
+instance GHC.Internal.Enum.Enum GHC.Internal.LanguageExtensions.Extension -- Defined in ‘GHC.Internal.LanguageExtensions’
+instance GHC.Internal.Generics.Generic GHC.Internal.TH.Syntax.AnnLookup -- Defined in ‘GHC.Internal.TH.Syntax’
+instance GHC.Internal.Generics.Generic GHC.Internal.TH.Syntax.AnnTarget -- Defined in ‘GHC.Internal.TH.Syntax’
+instance GHC.Internal.Generics.Generic GHC.Internal.TH.Syntax.Bang -- Defined in ‘GHC.Internal.TH.Syntax’
+instance GHC.Internal.Generics.Generic GHC.Internal.TH.Syntax.BndrVis -- Defined in ‘GHC.Internal.TH.Syntax’
+instance GHC.Internal.Generics.Generic GHC.Internal.TH.Syntax.Body -- Defined in ‘GHC.Internal.TH.Syntax’
+instance GHC.Internal.Generics.Generic GHC.Internal.TH.Syntax.Bytes -- Defined in ‘GHC.Internal.TH.Syntax’
+instance GHC.Internal.Generics.Generic GHC.Internal.TH.Syntax.Callconv -- Defined in ‘GHC.Internal.TH.Syntax’
+instance GHC.Internal.Generics.Generic GHC.Internal.TH.Syntax.Clause -- Defined in ‘GHC.Internal.TH.Syntax’
+instance GHC.Internal.Generics.Generic GHC.Internal.TH.Syntax.Con -- Defined in ‘GHC.Internal.TH.Syntax’
+instance GHC.Internal.Generics.Generic GHC.Internal.TH.Syntax.Dec -- Defined in ‘GHC.Internal.TH.Syntax’
+instance GHC.Internal.Generics.Generic GHC.Internal.TH.Syntax.DecidedStrictness -- Defined in ‘GHC.Internal.TH.Syntax’
+instance GHC.Internal.Generics.Generic GHC.Internal.TH.Syntax.DerivClause -- Defined in ‘GHC.Internal.TH.Syntax’
+instance GHC.Internal.Generics.Generic GHC.Internal.TH.Syntax.DerivStrategy -- Defined in ‘GHC.Internal.TH.Syntax’
+instance GHC.Internal.Generics.Generic GHC.Internal.TH.Syntax.DocLoc -- Defined in ‘GHC.Internal.TH.Syntax’
+instance GHC.Internal.Generics.Generic GHC.Internal.TH.Syntax.Exp -- Defined in ‘GHC.Internal.TH.Syntax’
+instance GHC.Internal.Generics.Generic GHC.Internal.TH.Syntax.FamilyResultSig -- Defined in ‘GHC.Internal.TH.Syntax’
+instance GHC.Internal.Generics.Generic GHC.Internal.TH.Syntax.Fixity -- Defined in ‘GHC.Internal.TH.Syntax’
+instance GHC.Internal.Generics.Generic GHC.Internal.TH.Syntax.FixityDirection -- Defined in ‘GHC.Internal.TH.Syntax’
+instance GHC.Internal.Generics.Generic GHC.Internal.TH.Syntax.Foreign -- Defined in ‘GHC.Internal.TH.Syntax’
+instance GHC.Internal.Generics.Generic GHC.Internal.TH.Syntax.FunDep -- Defined in ‘GHC.Internal.TH.Syntax’
+instance GHC.Internal.Generics.Generic GHC.Internal.TH.Syntax.Guard -- Defined in ‘GHC.Internal.TH.Syntax’
+instance GHC.Internal.Generics.Generic GHC.Internal.TH.Syntax.Info -- Defined in ‘GHC.Internal.TH.Syntax’
+instance GHC.Internal.Generics.Generic GHC.Internal.TH.Syntax.InjectivityAnn -- Defined in ‘GHC.Internal.TH.Syntax’
+instance GHC.Internal.Generics.Generic GHC.Internal.TH.Syntax.Inline -- Defined in ‘GHC.Internal.TH.Syntax’
+instance GHC.Internal.Generics.Generic GHC.Internal.TH.Syntax.Lit -- Defined in ‘GHC.Internal.TH.Syntax’
+instance GHC.Internal.Generics.Generic GHC.Internal.TH.Syntax.Loc -- Defined in ‘GHC.Internal.TH.Syntax’
+instance GHC.Internal.Generics.Generic GHC.Internal.TH.Syntax.Match -- Defined in ‘GHC.Internal.TH.Syntax’
+instance GHC.Internal.Generics.Generic GHC.Internal.TH.Syntax.ModName -- Defined in ‘GHC.Internal.TH.Syntax’
+instance GHC.Internal.Generics.Generic GHC.Internal.TH.Syntax.Module -- Defined in ‘GHC.Internal.TH.Syntax’
+instance GHC.Internal.Generics.Generic GHC.Internal.TH.Syntax.ModuleInfo -- Defined in ‘GHC.Internal.TH.Syntax’
+instance GHC.Internal.Generics.Generic GHC.Internal.TH.Syntax.Name -- Defined in ‘GHC.Internal.TH.Syntax’
+instance GHC.Internal.Generics.Generic GHC.Internal.TH.Syntax.NameFlavour -- Defined in ‘GHC.Internal.TH.Syntax’
+instance GHC.Internal.Generics.Generic GHC.Internal.TH.Syntax.NameSpace -- Defined in ‘GHC.Internal.TH.Syntax’
+instance GHC.Internal.Generics.Generic GHC.Internal.TH.Syntax.NamespaceSpecifier -- Defined in ‘GHC.Internal.TH.Syntax’
+instance GHC.Internal.Generics.Generic GHC.Internal.TH.Syntax.OccName -- Defined in ‘GHC.Internal.TH.Syntax’
+instance GHC.Internal.Generics.Generic GHC.Internal.TH.Syntax.Overlap -- Defined in ‘GHC.Internal.TH.Syntax’
+instance GHC.Internal.Generics.Generic GHC.Internal.TH.Syntax.Pat -- Defined in ‘GHC.Internal.TH.Syntax’
+instance GHC.Internal.Generics.Generic GHC.Internal.TH.Syntax.PatSynArgs -- Defined in ‘GHC.Internal.TH.Syntax’
+instance GHC.Internal.Generics.Generic GHC.Internal.TH.Syntax.PatSynDir -- Defined in ‘GHC.Internal.TH.Syntax’
+instance GHC.Internal.Generics.Generic GHC.Internal.TH.Syntax.Phases -- Defined in ‘GHC.Internal.TH.Syntax’
+instance GHC.Internal.Generics.Generic GHC.Internal.TH.Syntax.PkgName -- Defined in ‘GHC.Internal.TH.Syntax’
+instance GHC.Internal.Generics.Generic GHC.Internal.TH.Syntax.Pragma -- Defined in ‘GHC.Internal.TH.Syntax’
+instance GHC.Internal.Generics.Generic GHC.Internal.TH.Syntax.Range -- Defined in ‘GHC.Internal.TH.Syntax’
+instance GHC.Internal.Generics.Generic GHC.Internal.TH.Syntax.Role -- Defined in ‘GHC.Internal.TH.Syntax’
+instance GHC.Internal.Generics.Generic GHC.Internal.TH.Syntax.RuleBndr -- Defined in ‘GHC.Internal.TH.Syntax’
+instance GHC.Internal.Generics.Generic GHC.Internal.TH.Syntax.RuleMatch -- Defined in ‘GHC.Internal.TH.Syntax’
+instance GHC.Internal.Generics.Generic GHC.Internal.TH.Syntax.Safety -- Defined in ‘GHC.Internal.TH.Syntax’
+instance GHC.Internal.Generics.Generic GHC.Internal.TH.Syntax.SourceStrictness -- Defined in ‘GHC.Internal.TH.Syntax’
+instance GHC.Internal.Generics.Generic GHC.Internal.TH.Syntax.SourceUnpackedness -- Defined in ‘GHC.Internal.TH.Syntax’
+instance GHC.Internal.Generics.Generic GHC.Internal.TH.Syntax.Specificity -- Defined in ‘GHC.Internal.TH.Syntax’
+instance GHC.Internal.Generics.Generic GHC.Internal.TH.Syntax.Stmt -- Defined in ‘GHC.Internal.TH.Syntax’
+instance GHC.Internal.Generics.Generic GHC.Internal.TH.Syntax.TyLit -- Defined in ‘GHC.Internal.TH.Syntax’
+instance GHC.Internal.Generics.Generic GHC.Internal.TH.Syntax.TySynEqn -- Defined in ‘GHC.Internal.TH.Syntax’
+instance forall flag. GHC.Internal.Generics.Generic (GHC.Internal.TH.Syntax.TyVarBndr flag) -- Defined in ‘GHC.Internal.TH.Syntax’
+instance GHC.Internal.Generics.Generic GHC.Internal.TH.Syntax.Type -- Defined in ‘GHC.Internal.TH.Syntax’
+instance GHC.Internal.Generics.Generic GHC.Internal.TH.Syntax.TypeFamilyHead -- Defined in ‘GHC.Internal.TH.Syntax’
+instance GHC.Internal.Generics.Generic GHC.Internal.LanguageExtensions.Extension -- Defined in ‘GHC.Internal.LanguageExtensions’
+instance GHC.Internal.Generics.Generic GHC.Internal.ForeignSrcLang.ForeignSrcLang -- Defined in ‘GHC.Internal.ForeignSrcLang’
+instance GHC.Internal.Show.Show GHC.Internal.TH.Syntax.AnnLookup -- Defined in ‘GHC.Internal.TH.Syntax’
+instance GHC.Internal.Show.Show GHC.Internal.TH.Syntax.AnnTarget -- Defined in ‘GHC.Internal.TH.Syntax’
+instance GHC.Internal.Show.Show GHC.Internal.TH.Syntax.Bang -- Defined in ‘GHC.Internal.TH.Syntax’
+instance GHC.Internal.Show.Show GHC.Internal.TH.Syntax.BndrVis -- Defined in ‘GHC.Internal.TH.Syntax’
+instance GHC.Internal.Show.Show GHC.Internal.TH.Syntax.Body -- Defined in ‘GHC.Internal.TH.Syntax’
+instance GHC.Internal.Show.Show GHC.Internal.TH.Syntax.Bytes -- Defined in ‘GHC.Internal.TH.Syntax’
+instance GHC.Internal.Show.Show GHC.Internal.TH.Syntax.Callconv -- Defined in ‘GHC.Internal.TH.Syntax’
+instance GHC.Internal.Show.Show GHC.Internal.TH.Syntax.Clause -- Defined in ‘GHC.Internal.TH.Syntax’
+instance GHC.Internal.Show.Show GHC.Internal.TH.Syntax.Con -- Defined in ‘GHC.Internal.TH.Syntax’
+instance GHC.Internal.Show.Show GHC.Internal.TH.Syntax.Dec -- Defined in ‘GHC.Internal.TH.Syntax’
+instance GHC.Internal.Show.Show GHC.Internal.TH.Syntax.DecidedStrictness -- Defined in ‘GHC.Internal.TH.Syntax’
+instance GHC.Internal.Show.Show GHC.Internal.TH.Syntax.DerivClause -- Defined in ‘GHC.Internal.TH.Syntax’
+instance GHC.Internal.Show.Show GHC.Internal.TH.Syntax.DerivStrategy -- Defined in ‘GHC.Internal.TH.Syntax’
+instance GHC.Internal.Show.Show GHC.Internal.TH.Syntax.DocLoc -- Defined in ‘GHC.Internal.TH.Syntax’
+instance GHC.Internal.Show.Show GHC.Internal.TH.Syntax.Exp -- Defined in ‘GHC.Internal.TH.Syntax’
+instance GHC.Internal.Show.Show GHC.Internal.TH.Syntax.FamilyResultSig -- Defined in ‘GHC.Internal.TH.Syntax’
+instance GHC.Internal.Show.Show GHC.Internal.TH.Syntax.Fixity -- Defined in ‘GHC.Internal.TH.Syntax’
+instance GHC.Internal.Show.Show GHC.Internal.TH.Syntax.FixityDirection -- Defined in ‘GHC.Internal.TH.Syntax’
+instance GHC.Internal.Show.Show GHC.Internal.TH.Syntax.Foreign -- Defined in ‘GHC.Internal.TH.Syntax’
+instance GHC.Internal.Show.Show GHC.Internal.TH.Syntax.FunDep -- Defined in ‘GHC.Internal.TH.Syntax’
+instance GHC.Internal.Show.Show GHC.Internal.TH.Syntax.Guard -- Defined in ‘GHC.Internal.TH.Syntax’
+instance GHC.Internal.Show.Show GHC.Internal.TH.Syntax.Info -- Defined in ‘GHC.Internal.TH.Syntax’
+instance GHC.Internal.Show.Show GHC.Internal.TH.Syntax.InjectivityAnn -- Defined in ‘GHC.Internal.TH.Syntax’
+instance GHC.Internal.Show.Show GHC.Internal.TH.Syntax.Inline -- Defined in ‘GHC.Internal.TH.Syntax’
+instance GHC.Internal.Show.Show GHC.Internal.TH.Syntax.Lit -- Defined in ‘GHC.Internal.TH.Syntax’
+instance GHC.Internal.Show.Show GHC.Internal.TH.Syntax.Loc -- Defined in ‘GHC.Internal.TH.Syntax’
+instance GHC.Internal.Show.Show GHC.Internal.TH.Syntax.Match -- Defined in ‘GHC.Internal.TH.Syntax’
+instance GHC.Internal.Show.Show GHC.Internal.TH.Syntax.ModName -- Defined in ‘GHC.Internal.TH.Syntax’
+instance GHC.Internal.Show.Show GHC.Internal.TH.Syntax.Module -- Defined in ‘GHC.Internal.TH.Syntax’
+instance GHC.Internal.Show.Show GHC.Internal.TH.Syntax.ModuleInfo -- Defined in ‘GHC.Internal.TH.Syntax’
+instance GHC.Internal.Show.Show GHC.Internal.TH.Syntax.Name -- Defined in ‘GHC.Internal.TH.Syntax’
+instance GHC.Internal.Show.Show GHC.Internal.TH.Syntax.NameFlavour -- Defined in ‘GHC.Internal.TH.Syntax’
+instance GHC.Internal.Show.Show GHC.Internal.TH.Syntax.NameSpace -- Defined in ‘GHC.Internal.TH.Syntax’
+instance GHC.Internal.Show.Show GHC.Internal.TH.Syntax.NamespaceSpecifier -- Defined in ‘GHC.Internal.TH.Syntax’
+instance GHC.Internal.Show.Show GHC.Internal.TH.Syntax.OccName -- Defined in ‘GHC.Internal.TH.Syntax’
+instance GHC.Internal.Show.Show GHC.Internal.TH.Syntax.Overlap -- Defined in ‘GHC.Internal.TH.Syntax’
+instance GHC.Internal.Show.Show GHC.Internal.TH.Syntax.Pat -- Defined in ‘GHC.Internal.TH.Syntax’
+instance GHC.Internal.Show.Show GHC.Internal.TH.Syntax.PatSynArgs -- Defined in ‘GHC.Internal.TH.Syntax’
+instance GHC.Internal.Show.Show GHC.Internal.TH.Syntax.PatSynDir -- Defined in ‘GHC.Internal.TH.Syntax’
+instance GHC.Internal.Show.Show GHC.Internal.TH.Syntax.Phases -- Defined in ‘GHC.Internal.TH.Syntax’
+instance GHC.Internal.Show.Show GHC.Internal.TH.Syntax.PkgName -- Defined in ‘GHC.Internal.TH.Syntax’
+instance GHC.Internal.Show.Show GHC.Internal.TH.Syntax.Pragma -- Defined in ‘GHC.Internal.TH.Syntax’
+instance GHC.Internal.Show.Show GHC.Internal.TH.Syntax.Range -- Defined in ‘GHC.Internal.TH.Syntax’
+instance GHC.Internal.Show.Show GHC.Internal.TH.Syntax.Role -- Defined in ‘GHC.Internal.TH.Syntax’
+instance GHC.Internal.Show.Show GHC.Internal.TH.Syntax.RuleBndr -- Defined in ‘GHC.Internal.TH.Syntax’
+instance GHC.Internal.Show.Show GHC.Internal.TH.Syntax.RuleMatch -- Defined in ‘GHC.Internal.TH.Syntax’
+instance GHC.Internal.Show.Show GHC.Internal.TH.Syntax.Safety -- Defined in ‘GHC.Internal.TH.Syntax’
+instance GHC.Internal.Show.Show GHC.Internal.TH.Syntax.SourceStrictness -- Defined in ‘GHC.Internal.TH.Syntax’
+instance GHC.Internal.Show.Show GHC.Internal.TH.Syntax.SourceUnpackedness -- Defined in ‘GHC.Internal.TH.Syntax’
+instance GHC.Internal.Show.Show GHC.Internal.TH.Syntax.Specificity -- Defined in ‘GHC.Internal.TH.Syntax’
+instance GHC.Internal.Show.Show GHC.Internal.TH.Syntax.Stmt -- Defined in ‘GHC.Internal.TH.Syntax’
+instance GHC.Internal.Show.Show GHC.Internal.TH.Syntax.TyLit -- Defined in ‘GHC.Internal.TH.Syntax’
+instance GHC.Internal.Show.Show GHC.Internal.TH.Syntax.TySynEqn -- Defined in ‘GHC.Internal.TH.Syntax’
+instance forall flag. GHC.Internal.Show.Show flag => GHC.Internal.Show.Show (GHC.Internal.TH.Syntax.TyVarBndr flag) -- Defined in ‘GHC.Internal.TH.Syntax’
+instance GHC.Internal.Show.Show GHC.Internal.TH.Syntax.Type -- Defined in ‘GHC.Internal.TH.Syntax’
+instance GHC.Internal.Show.Show GHC.Internal.TH.Syntax.TypeFamilyHead -- Defined in ‘GHC.Internal.TH.Syntax’
+instance GHC.Internal.Show.Show GHC.Internal.LanguageExtensions.Extension -- Defined in ‘GHC.Internal.LanguageExtensions’
+instance GHC.Internal.Show.Show GHC.Internal.TH.Ppr.ForallVisFlag -- Defined in ‘GHC.Internal.TH.Ppr’
+instance [safe] GHC.Internal.Show.Show GHC.Internal.TH.PprLib.Doc -- Defined in ‘GHC.Internal.TH.PprLib’
+instance GHC.Internal.Show.Show GHC.Internal.ForeignSrcLang.ForeignSrcLang -- Defined in ‘GHC.Internal.ForeignSrcLang’
+instance GHC.Internal.TH.Lift.Lift GHC.Types.Bool -- Defined in ‘GHC.Internal.TH.Lift’
+instance GHC.Internal.TH.Lift.Lift GHC.Types.Char -- Defined in ‘GHC.Internal.TH.Lift’
+instance GHC.Internal.TH.Lift.Lift GHC.Types.Double -- Defined in ‘GHC.Internal.TH.Lift’
+instance forall a b. (GHC.Internal.TH.Lift.Lift a, GHC.Internal.TH.Lift.Lift b) => GHC.Internal.TH.Lift.Lift (GHC.Internal.Data.Either.Either a b) -- Defined in ‘GHC.Internal.TH.Lift’
+instance GHC.Internal.TH.Lift.Lift GHC.Types.Float -- Defined in ‘GHC.Internal.TH.Lift’
+instance GHC.Internal.TH.Lift.Lift GHC.Types.Int -- Defined in ‘GHC.Internal.TH.Lift’
+instance GHC.Internal.TH.Lift.Lift GHC.Internal.Int.Int16 -- Defined in ‘GHC.Internal.TH.Lift’
+instance GHC.Internal.TH.Lift.Lift GHC.Internal.Int.Int32 -- Defined in ‘GHC.Internal.TH.Lift’
+instance GHC.Internal.TH.Lift.Lift GHC.Internal.Int.Int64 -- Defined in ‘GHC.Internal.TH.Lift’
+instance GHC.Internal.TH.Lift.Lift GHC.Internal.Int.Int8 -- Defined in ‘GHC.Internal.TH.Lift’
+instance GHC.Internal.TH.Lift.Lift GHC.Num.Integer.Integer -- Defined in ‘GHC.Internal.TH.Lift’
+instance forall a. GHC.Internal.TH.Lift.Lift a => GHC.Internal.TH.Lift.Lift [a] -- Defined in ‘GHC.Internal.TH.Lift’
+instance forall a. GHC.Internal.TH.Lift.Lift a => GHC.Internal.TH.Lift.Lift (GHC.Internal.Maybe.Maybe a) -- Defined in ‘GHC.Internal.TH.Lift’
+instance GHC.Internal.TH.Lift.Lift GHC.Num.Natural.Natural -- Defined in ‘GHC.Internal.TH.Lift’
+instance forall a. GHC.Internal.TH.Lift.Lift a => GHC.Internal.TH.Lift.Lift (GHC.Internal.Base.NonEmpty a) -- Defined in ‘GHC.Internal.TH.Lift’
+instance forall a. GHC.Internal.Real.Integral a => GHC.Internal.TH.Lift.Lift (GHC.Internal.Real.Ratio a) -- Defined in ‘GHC.Internal.TH.Lift’
+instance forall a b. (GHC.Internal.TH.Lift.Lift a, GHC.Internal.TH.Lift.Lift b) => GHC.Internal.TH.Lift.Lift (a, b) -- Defined in ‘GHC.Internal.TH.Lift’
+instance forall a b c. (GHC.Internal.TH.Lift.Lift a, GHC.Internal.TH.Lift.Lift b, GHC.Internal.TH.Lift.Lift c) => GHC.Internal.TH.Lift.Lift (a, b, c) -- Defined in ‘GHC.Internal.TH.Lift’
+instance forall a b c d. (GHC.Internal.TH.Lift.Lift a, GHC.Internal.TH.Lift.Lift b, GHC.Internal.TH.Lift.Lift c, GHC.Internal.TH.Lift.Lift d) => GHC.Internal.TH.Lift.Lift (a, b, c, d) -- Defined in ‘GHC.Internal.TH.Lift’
+instance forall a b c d e. (GHC.Internal.TH.Lift.Lift a, GHC.Internal.TH.Lift.Lift b, GHC.Internal.TH.Lift.Lift c, GHC.Internal.TH.Lift.Lift d, GHC.Internal.TH.Lift.Lift e) => GHC.Internal.TH.Lift.Lift (a, b, c, d, e) -- Defined in ‘GHC.Internal.TH.Lift’
+instance forall a b c d e f. (GHC.Internal.TH.Lift.Lift a, GHC.Internal.TH.Lift.Lift b, GHC.Internal.TH.Lift.Lift c, GHC.Internal.TH.Lift.Lift d, GHC.Internal.TH.Lift.Lift e, GHC.Internal.TH.Lift.Lift f) => GHC.Internal.TH.Lift.Lift (a, b, c, d, e, f) -- Defined in ‘GHC.Internal.TH.Lift’
+instance forall a b c d e f g. (GHC.Internal.TH.Lift.Lift a, GHC.Internal.TH.Lift.Lift b, GHC.Internal.TH.Lift.Lift c, GHC.Internal.TH.Lift.Lift d, GHC.Internal.TH.Lift.Lift e, GHC.Internal.TH.Lift.Lift f, GHC.Internal.TH.Lift.Lift g) => GHC.Internal.TH.Lift.Lift (a, b, c, d, e, f, g) -- Defined in ‘GHC.Internal.TH.Lift’
+instance GHC.Internal.TH.Lift.Lift () -- Defined in ‘GHC.Internal.TH.Lift’
+instance GHC.Internal.TH.Lift.Lift GHC.Internal.Base.Void -- Defined in ‘GHC.Internal.TH.Lift’
+instance GHC.Internal.TH.Lift.Lift GHC.Types.Word -- Defined in ‘GHC.Internal.TH.Lift’
+instance GHC.Internal.TH.Lift.Lift GHC.Internal.Word.Word16 -- Defined in ‘GHC.Internal.TH.Lift’
+instance GHC.Internal.TH.Lift.Lift GHC.Internal.Word.Word32 -- Defined in ‘GHC.Internal.TH.Lift’
+instance GHC.Internal.TH.Lift.Lift GHC.Internal.Word.Word64 -- Defined in ‘GHC.Internal.TH.Lift’
+instance GHC.Internal.TH.Lift.Lift GHC.Internal.Word.Word8 -- Defined in ‘GHC.Internal.TH.Lift’
+instance forall a b. (GHC.Internal.TH.Lift.Lift a, GHC.Internal.TH.Lift.Lift b) => GHC.Internal.TH.Lift.Lift (# a | b #) -- Defined in ‘GHC.Internal.TH.Lift’
+instance forall a b c. (GHC.Internal.TH.Lift.Lift a, GHC.Internal.TH.Lift.Lift b, GHC.Internal.TH.Lift.Lift c) => GHC.Internal.TH.Lift.Lift (# a | b | c #) -- Defined in ‘GHC.Internal.TH.Lift’
+instance forall a b c d. (GHC.Internal.TH.Lift.Lift a, GHC.Internal.TH.Lift.Lift b, GHC.Internal.TH.Lift.Lift c, GHC.Internal.TH.Lift.Lift d) => GHC.Internal.TH.Lift.Lift (# a | b | c | d #) -- Defined in ‘GHC.Internal.TH.Lift’
+instance forall a b c d e. (GHC.Internal.TH.Lift.Lift a, GHC.Internal.TH.Lift.Lift b, GHC.Internal.TH.Lift.Lift c, GHC.Internal.TH.Lift.Lift d, GHC.Internal.TH.Lift.Lift e) => GHC.Internal.TH.Lift.Lift (# a | b | c | d | e #) -- Defined in ‘GHC.Internal.TH.Lift’
+instance forall a b c d e f. (GHC.Internal.TH.Lift.Lift a, GHC.Internal.TH.Lift.Lift b, GHC.Internal.TH.Lift.Lift c, GHC.Internal.TH.Lift.Lift d, GHC.Internal.TH.Lift.Lift e, GHC.Internal.TH.Lift.Lift f) => GHC.Internal.TH.Lift.Lift (# a | b | c | d | e | f #) -- Defined in ‘GHC.Internal.TH.Lift’
+instance forall a b c d e f g. (GHC.Internal.TH.Lift.Lift a, GHC.Internal.TH.Lift.Lift b, GHC.Internal.TH.Lift.Lift c, GHC.Internal.TH.Lift.Lift d, GHC.Internal.TH.Lift.Lift e, GHC.Internal.TH.Lift.Lift f, GHC.Internal.TH.Lift.Lift g) => GHC.Internal.TH.Lift.Lift (# a | b | c | d | e | f | g #) -- Defined in ‘GHC.Internal.TH.Lift’
+instance forall a. GHC.Internal.TH.Lift.Lift a => GHC.Internal.TH.Lift.Lift (# a #) -- Defined in ‘GHC.Internal.TH.Lift’
+instance forall a b. (GHC.Internal.TH.Lift.Lift a, GHC.Internal.TH.Lift.Lift b) => GHC.Internal.TH.Lift.Lift (# a, b #) -- Defined in ‘GHC.Internal.TH.Lift’
+instance forall a b c. (GHC.Internal.TH.Lift.Lift a, GHC.Internal.TH.Lift.Lift b, GHC.Internal.TH.Lift.Lift c) => GHC.Internal.TH.Lift.Lift (# a, b, c #) -- Defined in ‘GHC.Internal.TH.Lift’
+instance forall a b c d. (GHC.Internal.TH.Lift.Lift a, GHC.Internal.TH.Lift.Lift b, GHC.Internal.TH.Lift.Lift c, GHC.Internal.TH.Lift.Lift d) => GHC.Internal.TH.Lift.Lift (# a, b, c, d #) -- Defined in ‘GHC.Internal.TH.Lift’
+instance forall a b c d e. (GHC.Internal.TH.Lift.Lift a, GHC.Internal.TH.Lift.Lift b, GHC.Internal.TH.Lift.Lift c, GHC.Internal.TH.Lift.Lift d, GHC.Internal.TH.Lift.Lift e) => GHC.Internal.TH.Lift.Lift (# a, b, c, d, e #) -- Defined in ‘GHC.Internal.TH.Lift’
+instance forall a b c d e f. (GHC.Internal.TH.Lift.Lift a, GHC.Internal.TH.Lift.Lift b, GHC.Internal.TH.Lift.Lift c, GHC.Internal.TH.Lift.Lift d, GHC.Internal.TH.Lift.Lift e, GHC.Internal.TH.Lift.Lift f) => GHC.Internal.TH.Lift.Lift (# a, b, c, d, e, f #) -- Defined in ‘GHC.Internal.TH.Lift’
+instance forall a b c d e f g. (GHC.Internal.TH.Lift.Lift a, GHC.Internal.TH.Lift.Lift b, GHC.Internal.TH.Lift.Lift c, GHC.Internal.TH.Lift.Lift d, GHC.Internal.TH.Lift.Lift e, GHC.Internal.TH.Lift.Lift f, GHC.Internal.TH.Lift.Lift g) => GHC.Internal.TH.Lift.Lift (# a, b, c, d, e, f, g #) -- Defined in ‘GHC.Internal.TH.Lift’
+instance GHC.Internal.TH.Lift.Lift (# #) -- Defined in ‘GHC.Internal.TH.Lift’
+instance GHC.Internal.TH.Syntax.Quasi GHC.Types.IO -- Defined in ‘GHC.Internal.TH.Syntax’
+instance GHC.Internal.TH.Syntax.Quasi GHC.Internal.TH.Syntax.Q -- Defined in ‘GHC.Internal.TH.Syntax’
+instance GHC.Internal.TH.Syntax.Quote GHC.Types.IO -- Defined in ‘GHC.Internal.TH.Syntax’
+instance GHC.Internal.TH.Syntax.Quote GHC.Internal.TH.Syntax.Q -- Defined in ‘GHC.Internal.TH.Syntax’
+instance GHC.Classes.Eq GHC.Internal.TH.Syntax.AnnLookup -- Defined in ‘GHC.Internal.TH.Syntax’
+instance GHC.Classes.Eq GHC.Internal.TH.Syntax.AnnTarget -- Defined in ‘GHC.Internal.TH.Syntax’
+instance GHC.Classes.Eq GHC.Internal.TH.Syntax.Bang -- Defined in ‘GHC.Internal.TH.Syntax’
+instance GHC.Classes.Eq GHC.Internal.TH.Syntax.BndrVis -- Defined in ‘GHC.Internal.TH.Syntax’
+instance GHC.Classes.Eq GHC.Internal.TH.Syntax.Body -- Defined in ‘GHC.Internal.TH.Syntax’
+instance GHC.Classes.Eq GHC.Internal.TH.Syntax.Bytes -- Defined in ‘GHC.Internal.TH.Syntax’
+instance GHC.Classes.Eq GHC.Internal.TH.Syntax.Callconv -- Defined in ‘GHC.Internal.TH.Syntax’
+instance GHC.Classes.Eq GHC.Internal.TH.Syntax.Clause -- Defined in ‘GHC.Internal.TH.Syntax’
+instance GHC.Classes.Eq GHC.Internal.TH.Syntax.Con -- Defined in ‘GHC.Internal.TH.Syntax’
+instance GHC.Classes.Eq GHC.Internal.TH.Syntax.Dec -- Defined in ‘GHC.Internal.TH.Syntax’
+instance GHC.Classes.Eq GHC.Internal.TH.Syntax.DecidedStrictness -- Defined in ‘GHC.Internal.TH.Syntax’
+instance GHC.Classes.Eq GHC.Internal.TH.Syntax.DerivClause -- Defined in ‘GHC.Internal.TH.Syntax’
+instance GHC.Classes.Eq GHC.Internal.TH.Syntax.DerivStrategy -- Defined in ‘GHC.Internal.TH.Syntax’
+instance GHC.Classes.Eq GHC.Internal.TH.Syntax.DocLoc -- Defined in ‘GHC.Internal.TH.Syntax’
+instance GHC.Classes.Eq GHC.Internal.TH.Syntax.Exp -- Defined in ‘GHC.Internal.TH.Syntax’
+instance GHC.Classes.Eq GHC.Internal.TH.Syntax.FamilyResultSig -- Defined in ‘GHC.Internal.TH.Syntax’
+instance GHC.Classes.Eq GHC.Internal.TH.Syntax.Fixity -- Defined in ‘GHC.Internal.TH.Syntax’
+instance GHC.Classes.Eq GHC.Internal.TH.Syntax.FixityDirection -- Defined in ‘GHC.Internal.TH.Syntax’
+instance GHC.Classes.Eq GHC.Internal.TH.Syntax.Foreign -- Defined in ‘GHC.Internal.TH.Syntax’
+instance GHC.Classes.Eq GHC.Internal.TH.Syntax.FunDep -- Defined in ‘GHC.Internal.TH.Syntax’
+instance GHC.Classes.Eq GHC.Internal.TH.Syntax.Guard -- Defined in ‘GHC.Internal.TH.Syntax’
+instance GHC.Classes.Eq GHC.Internal.TH.Syntax.Info -- Defined in ‘GHC.Internal.TH.Syntax’
+instance GHC.Classes.Eq GHC.Internal.TH.Syntax.InjectivityAnn -- Defined in ‘GHC.Internal.TH.Syntax’
+instance GHC.Classes.Eq GHC.Internal.TH.Syntax.Inline -- Defined in ‘GHC.Internal.TH.Syntax’
+instance GHC.Classes.Eq GHC.Internal.TH.Syntax.Lit -- Defined in ‘GHC.Internal.TH.Syntax’
+instance GHC.Classes.Eq GHC.Internal.TH.Syntax.Loc -- Defined in ‘GHC.Internal.TH.Syntax’
+instance GHC.Classes.Eq GHC.Internal.TH.Syntax.Match -- Defined in ‘GHC.Internal.TH.Syntax’
+instance GHC.Classes.Eq GHC.Internal.TH.Syntax.ModName -- Defined in ‘GHC.Internal.TH.Syntax’
+instance GHC.Classes.Eq GHC.Internal.TH.Syntax.Module -- Defined in ‘GHC.Internal.TH.Syntax’
+instance GHC.Classes.Eq GHC.Internal.TH.Syntax.ModuleInfo -- Defined in ‘GHC.Internal.TH.Syntax’
+instance GHC.Classes.Eq GHC.Internal.TH.Syntax.Name -- Defined in ‘GHC.Internal.TH.Syntax’
+instance GHC.Classes.Eq GHC.Internal.TH.Syntax.NameFlavour -- Defined in ‘GHC.Internal.TH.Syntax’
+instance GHC.Classes.Eq GHC.Internal.TH.Syntax.NameSpace -- Defined in ‘GHC.Internal.TH.Syntax’
+instance GHC.Classes.Eq GHC.Internal.TH.Syntax.NamespaceSpecifier -- Defined in ‘GHC.Internal.TH.Syntax’
+instance GHC.Classes.Eq GHC.Internal.TH.Syntax.OccName -- Defined in ‘GHC.Internal.TH.Syntax’
+instance GHC.Classes.Eq GHC.Internal.TH.Syntax.Overlap -- Defined in ‘GHC.Internal.TH.Syntax’
+instance GHC.Classes.Eq GHC.Internal.TH.Syntax.Pat -- Defined in ‘GHC.Internal.TH.Syntax’
+instance GHC.Classes.Eq GHC.Internal.TH.Syntax.PatSynArgs -- Defined in ‘GHC.Internal.TH.Syntax’
+instance GHC.Classes.Eq GHC.Internal.TH.Syntax.PatSynDir -- Defined in ‘GHC.Internal.TH.Syntax’
+instance GHC.Classes.Eq GHC.Internal.TH.Syntax.Phases -- Defined in ‘GHC.Internal.TH.Syntax’
+instance GHC.Classes.Eq GHC.Internal.TH.Syntax.PkgName -- Defined in ‘GHC.Internal.TH.Syntax’
+instance GHC.Classes.Eq GHC.Internal.TH.Syntax.Pragma -- Defined in ‘GHC.Internal.TH.Syntax’
+instance GHC.Classes.Eq GHC.Internal.TH.Syntax.Range -- Defined in ‘GHC.Internal.TH.Syntax’
+instance GHC.Classes.Eq GHC.Internal.TH.Syntax.Role -- Defined in ‘GHC.Internal.TH.Syntax’
+instance GHC.Classes.Eq GHC.Internal.TH.Syntax.RuleBndr -- Defined in ‘GHC.Internal.TH.Syntax’
+instance GHC.Classes.Eq GHC.Internal.TH.Syntax.RuleMatch -- Defined in ‘GHC.Internal.TH.Syntax’
+instance GHC.Classes.Eq GHC.Internal.TH.Syntax.Safety -- Defined in ‘GHC.Internal.TH.Syntax’
+instance GHC.Classes.Eq GHC.Internal.TH.Syntax.SourceStrictness -- Defined in ‘GHC.Internal.TH.Syntax’
+instance GHC.Classes.Eq GHC.Internal.TH.Syntax.SourceUnpackedness -- Defined in ‘GHC.Internal.TH.Syntax’
+instance GHC.Classes.Eq GHC.Internal.TH.Syntax.Specificity -- Defined in ‘GHC.Internal.TH.Syntax’
+instance GHC.Classes.Eq GHC.Internal.TH.Syntax.Stmt -- Defined in ‘GHC.Internal.TH.Syntax’
+instance GHC.Classes.Eq GHC.Internal.TH.Syntax.TyLit -- Defined in ‘GHC.Internal.TH.Syntax’
+instance GHC.Classes.Eq GHC.Internal.TH.Syntax.TySynEqn -- Defined in ‘GHC.Internal.TH.Syntax’
+instance forall flag. GHC.Classes.Eq flag => GHC.Classes.Eq (GHC.Internal.TH.Syntax.TyVarBndr flag) -- Defined in ‘GHC.Internal.TH.Syntax’
+instance GHC.Classes.Eq GHC.Internal.TH.Syntax.Type -- Defined in ‘GHC.Internal.TH.Syntax’
+instance GHC.Classes.Eq GHC.Internal.TH.Syntax.TypeFamilyHead -- Defined in ‘GHC.Internal.TH.Syntax’
+instance GHC.Classes.Eq GHC.Internal.LanguageExtensions.Extension -- Defined in ‘GHC.Internal.LanguageExtensions’
+instance GHC.Classes.Eq GHC.Internal.ForeignSrcLang.ForeignSrcLang -- Defined in ‘GHC.Internal.ForeignSrcLang’
+instance GHC.Classes.Ord GHC.Internal.TH.Syntax.AnnLookup -- Defined in ‘GHC.Internal.TH.Syntax’
+instance GHC.Classes.Ord GHC.Internal.TH.Syntax.AnnTarget -- Defined in ‘GHC.Internal.TH.Syntax’
+instance GHC.Classes.Ord GHC.Internal.TH.Syntax.Bang -- Defined in ‘GHC.Internal.TH.Syntax’
+instance GHC.Classes.Ord GHC.Internal.TH.Syntax.BndrVis -- Defined in ‘GHC.Internal.TH.Syntax’
+instance GHC.Classes.Ord GHC.Internal.TH.Syntax.Body -- Defined in ‘GHC.Internal.TH.Syntax’
+instance GHC.Classes.Ord GHC.Internal.TH.Syntax.Bytes -- Defined in ‘GHC.Internal.TH.Syntax’
+instance GHC.Classes.Ord GHC.Internal.TH.Syntax.Callconv -- Defined in ‘GHC.Internal.TH.Syntax’
+instance GHC.Classes.Ord GHC.Internal.TH.Syntax.Clause -- Defined in ‘GHC.Internal.TH.Syntax’
+instance GHC.Classes.Ord GHC.Internal.TH.Syntax.Con -- Defined in ‘GHC.Internal.TH.Syntax’
+instance GHC.Classes.Ord GHC.Internal.TH.Syntax.Dec -- Defined in ‘GHC.Internal.TH.Syntax’
+instance GHC.Classes.Ord GHC.Internal.TH.Syntax.DecidedStrictness -- Defined in ‘GHC.Internal.TH.Syntax’
+instance GHC.Classes.Ord GHC.Internal.TH.Syntax.DerivClause -- Defined in ‘GHC.Internal.TH.Syntax’
+instance GHC.Classes.Ord GHC.Internal.TH.Syntax.DerivStrategy -- Defined in ‘GHC.Internal.TH.Syntax’
+instance GHC.Classes.Ord GHC.Internal.TH.Syntax.DocLoc -- Defined in ‘GHC.Internal.TH.Syntax’
+instance GHC.Classes.Ord GHC.Internal.TH.Syntax.Exp -- Defined in ‘GHC.Internal.TH.Syntax’
+instance GHC.Classes.Ord GHC.Internal.TH.Syntax.FamilyResultSig -- Defined in ‘GHC.Internal.TH.Syntax’
+instance GHC.Classes.Ord GHC.Internal.TH.Syntax.Fixity -- Defined in ‘GHC.Internal.TH.Syntax’
+instance GHC.Classes.Ord GHC.Internal.TH.Syntax.FixityDirection -- Defined in ‘GHC.Internal.TH.Syntax’
+instance GHC.Classes.Ord GHC.Internal.TH.Syntax.Foreign -- Defined in ‘GHC.Internal.TH.Syntax’
+instance GHC.Classes.Ord GHC.Internal.TH.Syntax.FunDep -- Defined in ‘GHC.Internal.TH.Syntax’
+instance GHC.Classes.Ord GHC.Internal.TH.Syntax.Guard -- Defined in ‘GHC.Internal.TH.Syntax’
+instance GHC.Classes.Ord GHC.Internal.TH.Syntax.Info -- Defined in ‘GHC.Internal.TH.Syntax’
+instance GHC.Classes.Ord GHC.Internal.TH.Syntax.InjectivityAnn -- Defined in ‘GHC.Internal.TH.Syntax’
+instance GHC.Classes.Ord GHC.Internal.TH.Syntax.Inline -- Defined in ‘GHC.Internal.TH.Syntax’
+instance GHC.Classes.Ord GHC.Internal.TH.Syntax.Lit -- Defined in ‘GHC.Internal.TH.Syntax’
+instance GHC.Classes.Ord GHC.Internal.TH.Syntax.Loc -- Defined in ‘GHC.Internal.TH.Syntax’
+instance GHC.Classes.Ord GHC.Internal.TH.Syntax.Match -- Defined in ‘GHC.Internal.TH.Syntax’
+instance GHC.Classes.Ord GHC.Internal.TH.Syntax.ModName -- Defined in ‘GHC.Internal.TH.Syntax’
+instance GHC.Classes.Ord GHC.Internal.TH.Syntax.Module -- Defined in ‘GHC.Internal.TH.Syntax’
+instance GHC.Classes.Ord GHC.Internal.TH.Syntax.ModuleInfo -- Defined in ‘GHC.Internal.TH.Syntax’
+instance GHC.Classes.Ord GHC.Internal.TH.Syntax.Name -- Defined in ‘GHC.Internal.TH.Syntax’
+instance GHC.Classes.Ord GHC.Internal.TH.Syntax.NameFlavour -- Defined in ‘GHC.Internal.TH.Syntax’
+instance GHC.Classes.Ord GHC.Internal.TH.Syntax.NameSpace -- Defined in ‘GHC.Internal.TH.Syntax’
+instance GHC.Classes.Ord GHC.Internal.TH.Syntax.NamespaceSpecifier -- Defined in ‘GHC.Internal.TH.Syntax’
+instance GHC.Classes.Ord GHC.Internal.TH.Syntax.OccName -- Defined in ‘GHC.Internal.TH.Syntax’
+instance GHC.Classes.Ord GHC.Internal.TH.Syntax.Overlap -- Defined in ‘GHC.Internal.TH.Syntax’
+instance GHC.Classes.Ord GHC.Internal.TH.Syntax.Pat -- Defined in ‘GHC.Internal.TH.Syntax’
+instance GHC.Classes.Ord GHC.Internal.TH.Syntax.PatSynArgs -- Defined in ‘GHC.Internal.TH.Syntax’
+instance GHC.Classes.Ord GHC.Internal.TH.Syntax.PatSynDir -- Defined in ‘GHC.Internal.TH.Syntax’
+instance GHC.Classes.Ord GHC.Internal.TH.Syntax.Phases -- Defined in ‘GHC.Internal.TH.Syntax’
+instance GHC.Classes.Ord GHC.Internal.TH.Syntax.PkgName -- Defined in ‘GHC.Internal.TH.Syntax’
+instance GHC.Classes.Ord GHC.Internal.TH.Syntax.Pragma -- Defined in ‘GHC.Internal.TH.Syntax’
+instance GHC.Classes.Ord GHC.Internal.TH.Syntax.Range -- Defined in ‘GHC.Internal.TH.Syntax’
+instance GHC.Classes.Ord GHC.Internal.TH.Syntax.Role -- Defined in ‘GHC.Internal.TH.Syntax’
+instance GHC.Classes.Ord GHC.Internal.TH.Syntax.RuleBndr -- Defined in ‘GHC.Internal.TH.Syntax’
+instance GHC.Classes.Ord GHC.Internal.TH.Syntax.RuleMatch -- Defined in ‘GHC.Internal.TH.Syntax’
+instance GHC.Classes.Ord GHC.Internal.TH.Syntax.Safety -- Defined in ‘GHC.Internal.TH.Syntax’
+instance GHC.Classes.Ord GHC.Internal.TH.Syntax.SourceStrictness -- Defined in ‘GHC.Internal.TH.Syntax’
+instance GHC.Classes.Ord GHC.Internal.TH.Syntax.SourceUnpackedness -- Defined in ‘GHC.Internal.TH.Syntax’
+instance GHC.Classes.Ord GHC.Internal.TH.Syntax.Specificity -- Defined in ‘GHC.Internal.TH.Syntax’
+instance GHC.Classes.Ord GHC.Internal.TH.Syntax.Stmt -- Defined in ‘GHC.Internal.TH.Syntax’
+instance GHC.Classes.Ord GHC.Internal.TH.Syntax.TyLit -- Defined in ‘GHC.Internal.TH.Syntax’
+instance GHC.Classes.Ord GHC.Internal.TH.Syntax.TySynEqn -- Defined in ‘GHC.Internal.TH.Syntax’
+instance forall flag. GHC.Classes.Ord flag => GHC.Classes.Ord (GHC.Internal.TH.Syntax.TyVarBndr flag) -- Defined in ‘GHC.Internal.TH.Syntax’
+instance GHC.Classes.Ord GHC.Internal.TH.Syntax.Type -- Defined in ‘GHC.Internal.TH.Syntax’
+instance GHC.Classes.Ord GHC.Internal.TH.Syntax.TypeFamilyHead -- Defined in ‘GHC.Internal.TH.Syntax’
+instance GHC.Classes.Ord GHC.Internal.LanguageExtensions.Extension -- Defined in ‘GHC.Internal.LanguageExtensions’
+instance [safe] Language.Haskell.TH.Lib.DefaultBndrFlag GHC.Internal.TH.Syntax.BndrVis -- Defined in ‘Language.Haskell.TH.Lib’
+instance [safe] Language.Haskell.TH.Lib.DefaultBndrFlag GHC.Internal.TH.Syntax.Specificity -- Defined in ‘Language.Haskell.TH.Lib’
 instance [safe] Language.Haskell.TH.Lib.DefaultBndrFlag () -- Defined in ‘Language.Haskell.TH.Lib’
-instance Language.Haskell.TH.Lib.Syntax.Lift GHC.Types.Bool -- Defined in ‘Language.Haskell.TH.Lib.Syntax’
-instance Language.Haskell.TH.Lib.Syntax.Lift Data.Array.Byte.ByteArray -- Defined in ‘Language.Haskell.TH.Lib.Syntax’
-instance Language.Haskell.TH.Lib.Syntax.Lift GHC.Types.Char -- Defined in ‘Language.Haskell.TH.Lib.Syntax’
-instance Language.Haskell.TH.Lib.Syntax.Lift GHC.Types.Double -- Defined in ‘Language.Haskell.TH.Lib.Syntax’
-instance forall a b. (Language.Haskell.TH.Lib.Syntax.Lift a, Language.Haskell.TH.Lib.Syntax.Lift b) => Language.Haskell.TH.Lib.Syntax.Lift (GHC.Internal.Data.Either.Either a b) -- Defined in ‘Language.Haskell.TH.Lib.Syntax’
-instance forall k (a :: k). Language.Haskell.TH.Lib.Syntax.Lift (Data.Fixed.Fixed a) -- Defined in ‘Language.Haskell.TH.Lib.Syntax’
-instance Language.Haskell.TH.Lib.Syntax.Lift GHC.Types.Float -- Defined in ‘Language.Haskell.TH.Lib.Syntax’
-instance Language.Haskell.TH.Lib.Syntax.Lift GHC.Types.Int -- Defined in ‘Language.Haskell.TH.Lib.Syntax’
-instance Language.Haskell.TH.Lib.Syntax.Lift GHC.Internal.Int.Int16 -- Defined in ‘Language.Haskell.TH.Lib.Syntax’
-instance Language.Haskell.TH.Lib.Syntax.Lift GHC.Internal.Int.Int32 -- Defined in ‘Language.Haskell.TH.Lib.Syntax’
-instance Language.Haskell.TH.Lib.Syntax.Lift GHC.Internal.Int.Int64 -- Defined in ‘Language.Haskell.TH.Lib.Syntax’
-instance Language.Haskell.TH.Lib.Syntax.Lift GHC.Internal.Int.Int8 -- Defined in ‘Language.Haskell.TH.Lib.Syntax’
-instance Language.Haskell.TH.Lib.Syntax.Lift GHC.Num.Integer.Integer -- Defined in ‘Language.Haskell.TH.Lib.Syntax’
-instance forall a. Language.Haskell.TH.Lib.Syntax.Lift a => Language.Haskell.TH.Lib.Syntax.Lift [a] -- Defined in ‘Language.Haskell.TH.Lib.Syntax’
-instance forall a. Language.Haskell.TH.Lib.Syntax.Lift a => Language.Haskell.TH.Lib.Syntax.Lift (GHC.Internal.Maybe.Maybe a) -- Defined in ‘Language.Haskell.TH.Lib.Syntax’
-instance Language.Haskell.TH.Lib.Syntax.Lift GHC.Num.Natural.Natural -- Defined in ‘Language.Haskell.TH.Lib.Syntax’
-instance forall a. Language.Haskell.TH.Lib.Syntax.Lift a => Language.Haskell.TH.Lib.Syntax.Lift (GHC.Internal.Base.NonEmpty a) -- Defined in ‘Language.Haskell.TH.Lib.Syntax’
-instance forall a. GHC.Internal.Real.Integral a => Language.Haskell.TH.Lib.Syntax.Lift (GHC.Internal.Real.Ratio a) -- Defined in ‘Language.Haskell.TH.Lib.Syntax’
-instance forall a b. (Language.Haskell.TH.Lib.Syntax.Lift a, Language.Haskell.TH.Lib.Syntax.Lift b) => Language.Haskell.TH.Lib.Syntax.Lift (a, b) -- Defined in ‘Language.Haskell.TH.Lib.Syntax’
-instance forall a b c. (Language.Haskell.TH.Lib.Syntax.Lift a, Language.Haskell.TH.Lib.Syntax.Lift b, Language.Haskell.TH.Lib.Syntax.Lift c) => Language.Haskell.TH.Lib.Syntax.Lift (a, b, c) -- Defined in ‘Language.Haskell.TH.Lib.Syntax’
-instance forall a b c d. (Language.Haskell.TH.Lib.Syntax.Lift a, Language.Haskell.TH.Lib.Syntax.Lift b, Language.Haskell.TH.Lib.Syntax.Lift c, Language.Haskell.TH.Lib.Syntax.Lift d) => Language.Haskell.TH.Lib.Syntax.Lift (a, b, c, d) -- Defined in ‘Language.Haskell.TH.Lib.Syntax’
-instance forall a b c d e. (Language.Haskell.TH.Lib.Syntax.Lift a, Language.Haskell.TH.Lib.Syntax.Lift b, Language.Haskell.TH.Lib.Syntax.Lift c, Language.Haskell.TH.Lib.Syntax.Lift d, Language.Haskell.TH.Lib.Syntax.Lift e) => Language.Haskell.TH.Lib.Syntax.Lift (a, b, c, d, e) -- Defined in ‘Language.Haskell.TH.Lib.Syntax’
-instance forall a b c d e f. (Language.Haskell.TH.Lib.Syntax.Lift a, Language.Haskell.TH.Lib.Syntax.Lift b, Language.Haskell.TH.Lib.Syntax.Lift c, Language.Haskell.TH.Lib.Syntax.Lift d, Language.Haskell.TH.Lib.Syntax.Lift e, Language.Haskell.TH.Lib.Syntax.Lift f) => Language.Haskell.TH.Lib.Syntax.Lift (a, b, c, d, e, f) -- Defined in ‘Language.Haskell.TH.Lib.Syntax’
-instance forall a b c d e f g. (Language.Haskell.TH.Lib.Syntax.Lift a, Language.Haskell.TH.Lib.Syntax.Lift b, Language.Haskell.TH.Lib.Syntax.Lift c, Language.Haskell.TH.Lib.Syntax.Lift d, Language.Haskell.TH.Lib.Syntax.Lift e, Language.Haskell.TH.Lib.Syntax.Lift f, Language.Haskell.TH.Lib.Syntax.Lift g) => Language.Haskell.TH.Lib.Syntax.Lift (a, b, c, d, e, f, g) -- Defined in ‘Language.Haskell.TH.Lib.Syntax’
-instance Language.Haskell.TH.Lib.Syntax.Lift () -- Defined in ‘Language.Haskell.TH.Lib.Syntax’
-instance Language.Haskell.TH.Lib.Syntax.Lift GHC.Internal.Base.Void -- Defined in ‘Language.Haskell.TH.Lib.Syntax’
-instance Language.Haskell.TH.Lib.Syntax.Lift GHC.Types.Word -- Defined in ‘Language.Haskell.TH.Lib.Syntax’
-instance Language.Haskell.TH.Lib.Syntax.Lift GHC.Internal.Word.Word16 -- Defined in ‘Language.Haskell.TH.Lib.Syntax’
-instance Language.Haskell.TH.Lib.Syntax.Lift GHC.Internal.Word.Word32 -- Defined in ‘Language.Haskell.TH.Lib.Syntax’
-instance Language.Haskell.TH.Lib.Syntax.Lift GHC.Internal.Word.Word64 -- Defined in ‘Language.Haskell.TH.Lib.Syntax’
-instance Language.Haskell.TH.Lib.Syntax.Lift GHC.Internal.Word.Word8 -- Defined in ‘Language.Haskell.TH.Lib.Syntax’
-instance forall a b. (Language.Haskell.TH.Lib.Syntax.Lift a, Language.Haskell.TH.Lib.Syntax.Lift b) => Language.Haskell.TH.Lib.Syntax.Lift (# a | b #) -- Defined in ‘Language.Haskell.TH.Lib.Syntax’
-instance forall a b c. (Language.Haskell.TH.Lib.Syntax.Lift a, Language.Haskell.TH.Lib.Syntax.Lift b, Language.Haskell.TH.Lib.Syntax.Lift c) => Language.Haskell.TH.Lib.Syntax.Lift (# a | b | c #) -- Defined in ‘Language.Haskell.TH.Lib.Syntax’
-instance forall a b c d. (Language.Haskell.TH.Lib.Syntax.Lift a, Language.Haskell.TH.Lib.Syntax.Lift b, Language.Haskell.TH.Lib.Syntax.Lift c, Language.Haskell.TH.Lib.Syntax.Lift d) => Language.Haskell.TH.Lib.Syntax.Lift (# a | b | c | d #) -- Defined in ‘Language.Haskell.TH.Lib.Syntax’
-instance forall a b c d e. (Language.Haskell.TH.Lib.Syntax.Lift a, Language.Haskell.TH.Lib.Syntax.Lift b, Language.Haskell.TH.Lib.Syntax.Lift c, Language.Haskell.TH.Lib.Syntax.Lift d, Language.Haskell.TH.Lib.Syntax.Lift e) => Language.Haskell.TH.Lib.Syntax.Lift (# a | b | c | d | e #) -- Defined in ‘Language.Haskell.TH.Lib.Syntax’
-instance forall a b c d e f. (Language.Haskell.TH.Lib.Syntax.Lift a, Language.Haskell.TH.Lib.Syntax.Lift b, Language.Haskell.TH.Lib.Syntax.Lift c, Language.Haskell.TH.Lib.Syntax.Lift d, Language.Haskell.TH.Lib.Syntax.Lift e, Language.Haskell.TH.Lib.Syntax.Lift f) => Language.Haskell.TH.Lib.Syntax.Lift (# a | b | c | d | e | f #) -- Defined in ‘Language.Haskell.TH.Lib.Syntax’
-instance forall a b c d e f g. (Language.Haskell.TH.Lib.Syntax.Lift a, Language.Haskell.TH.Lib.Syntax.Lift b, Language.Haskell.TH.Lib.Syntax.Lift c, Language.Haskell.TH.Lib.Syntax.Lift d, Language.Haskell.TH.Lib.Syntax.Lift e, Language.Haskell.TH.Lib.Syntax.Lift f, Language.Haskell.TH.Lib.Syntax.Lift g) => Language.Haskell.TH.Lib.Syntax.Lift (# a | b | c | d | e | f | g #) -- Defined in ‘Language.Haskell.TH.Lib.Syntax’
-instance forall a. Language.Haskell.TH.Lib.Syntax.Lift a => Language.Haskell.TH.Lib.Syntax.Lift (# a #) -- Defined in ‘Language.Haskell.TH.Lib.Syntax’
-instance forall a b. (Language.Haskell.TH.Lib.Syntax.Lift a, Language.Haskell.TH.Lib.Syntax.Lift b) => Language.Haskell.TH.Lib.Syntax.Lift (# a, b #) -- Defined in ‘Language.Haskell.TH.Lib.Syntax’
-instance forall a b c. (Language.Haskell.TH.Lib.Syntax.Lift a, Language.Haskell.TH.Lib.Syntax.Lift b, Language.Haskell.TH.Lib.Syntax.Lift c) => Language.Haskell.TH.Lib.Syntax.Lift (# a, b, c #) -- Defined in ‘Language.Haskell.TH.Lib.Syntax’
-instance forall a b c d. (Language.Haskell.TH.Lib.Syntax.Lift a, Language.Haskell.TH.Lib.Syntax.Lift b, Language.Haskell.TH.Lib.Syntax.Lift c, Language.Haskell.TH.Lib.Syntax.Lift d) => Language.Haskell.TH.Lib.Syntax.Lift (# a, b, c, d #) -- Defined in ‘Language.Haskell.TH.Lib.Syntax’
-instance forall a b c d e. (Language.Haskell.TH.Lib.Syntax.Lift a, Language.Haskell.TH.Lib.Syntax.Lift b, Language.Haskell.TH.Lib.Syntax.Lift c, Language.Haskell.TH.Lib.Syntax.Lift d, Language.Haskell.TH.Lib.Syntax.Lift e) => Language.Haskell.TH.Lib.Syntax.Lift (# a, b, c, d, e #) -- Defined in ‘Language.Haskell.TH.Lib.Syntax’
-instance forall a b c d e f. (Language.Haskell.TH.Lib.Syntax.Lift a, Language.Haskell.TH.Lib.Syntax.Lift b, Language.Haskell.TH.Lib.Syntax.Lift c, Language.Haskell.TH.Lib.Syntax.Lift d, Language.Haskell.TH.Lib.Syntax.Lift e, Language.Haskell.TH.Lib.Syntax.Lift f) => Language.Haskell.TH.Lib.Syntax.Lift (# a, b, c, d, e, f #) -- Defined in ‘Language.Haskell.TH.Lib.Syntax’
-instance forall a b c d e f g. (Language.Haskell.TH.Lib.Syntax.Lift a, Language.Haskell.TH.Lib.Syntax.Lift b, Language.Haskell.TH.Lib.Syntax.Lift c, Language.Haskell.TH.Lib.Syntax.Lift d, Language.Haskell.TH.Lib.Syntax.Lift e, Language.Haskell.TH.Lib.Syntax.Lift f, Language.Haskell.TH.Lib.Syntax.Lift g) => Language.Haskell.TH.Lib.Syntax.Lift (# a, b, c, d, e, f, g #) -- Defined in ‘Language.Haskell.TH.Lib.Syntax’
-instance Language.Haskell.TH.Lib.Syntax.Lift (# #) -- Defined in ‘Language.Haskell.TH.Lib.Syntax’
-instance Language.Haskell.TH.Lib.Syntax.Quasi GHC.Types.IO -- Defined in ‘Language.Haskell.TH.Lib.Syntax’
-instance Language.Haskell.TH.Lib.Syntax.Quasi Language.Haskell.TH.Lib.Syntax.Q -- Defined in ‘Language.Haskell.TH.Lib.Syntax’
-instance Language.Haskell.TH.Lib.Syntax.Quote GHC.Types.IO -- Defined in ‘Language.Haskell.TH.Lib.Syntax’
-instance Language.Haskell.TH.Lib.Syntax.Quote Language.Haskell.TH.Lib.Syntax.Q -- Defined in ‘Language.Haskell.TH.Lib.Syntax’
-instance [safe] Language.Haskell.TH.Ppr.Ppr Language.Haskell.TH.Lib.Syntax.Bang -- Defined in ‘Language.Haskell.TH.Ppr’
-instance [safe] Language.Haskell.TH.Ppr.Ppr Language.Haskell.TH.Lib.Syntax.Clause -- Defined in ‘Language.Haskell.TH.Ppr’
-instance [safe] Language.Haskell.TH.Ppr.Ppr Language.Haskell.TH.Lib.Syntax.Con -- Defined in ‘Language.Haskell.TH.Ppr’
-instance [safe] Language.Haskell.TH.Ppr.Ppr Language.Haskell.TH.Lib.Syntax.Dec -- Defined in ‘Language.Haskell.TH.Ppr’
-instance [safe] Language.Haskell.TH.Ppr.Ppr Language.Haskell.TH.Lib.Syntax.DecidedStrictness -- Defined in ‘Language.Haskell.TH.Ppr’
-instance [safe] Language.Haskell.TH.Ppr.Ppr Language.Haskell.TH.Lib.Syntax.Exp -- Defined in ‘Language.Haskell.TH.Ppr’
-instance [safe] Language.Haskell.TH.Ppr.Ppr Language.Haskell.TH.Lib.Syntax.FamilyResultSig -- Defined in ‘Language.Haskell.TH.Ppr’
-instance [safe] Language.Haskell.TH.Ppr.Ppr Language.Haskell.TH.Lib.Syntax.Foreign -- Defined in ‘Language.Haskell.TH.Ppr’
-instance [safe] Language.Haskell.TH.Ppr.Ppr Language.Haskell.TH.Lib.Syntax.FunDep -- Defined in ‘Language.Haskell.TH.Ppr’
-instance [safe] Language.Haskell.TH.Ppr.Ppr Language.Haskell.TH.Lib.Syntax.Info -- Defined in ‘Language.Haskell.TH.Ppr’
-instance [safe] Language.Haskell.TH.Ppr.Ppr Language.Haskell.TH.Lib.Syntax.InjectivityAnn -- Defined in ‘Language.Haskell.TH.Ppr’
-instance [safe] Language.Haskell.TH.Ppr.Ppr Language.Haskell.TH.Lib.Syntax.Inline -- Defined in ‘Language.Haskell.TH.Ppr’
-instance [safe] forall a. Language.Haskell.TH.Ppr.Ppr a => Language.Haskell.TH.Ppr.Ppr [a] -- Defined in ‘Language.Haskell.TH.Ppr’
-instance [safe] Language.Haskell.TH.Ppr.Ppr Language.Haskell.TH.Lib.Syntax.Lit -- Defined in ‘Language.Haskell.TH.Ppr’
-instance [safe] Language.Haskell.TH.Ppr.Ppr Language.Haskell.TH.Lib.Syntax.Loc -- Defined in ‘Language.Haskell.TH.Ppr’
-instance [safe] Language.Haskell.TH.Ppr.Ppr Language.Haskell.TH.Lib.Syntax.Match -- Defined in ‘Language.Haskell.TH.Ppr’
-instance [safe] Language.Haskell.TH.Ppr.Ppr Language.Haskell.TH.Lib.Syntax.Module -- Defined in ‘Language.Haskell.TH.Ppr’
-instance [safe] Language.Haskell.TH.Ppr.Ppr Language.Haskell.TH.Lib.Syntax.ModuleInfo -- Defined in ‘Language.Haskell.TH.Ppr’
-instance [safe] Language.Haskell.TH.Ppr.Ppr Language.Haskell.TH.Lib.Syntax.Name -- Defined in ‘Language.Haskell.TH.Ppr’
-instance [safe] Language.Haskell.TH.Ppr.Ppr Language.Haskell.TH.Lib.Syntax.Pat -- Defined in ‘Language.Haskell.TH.Ppr’
-instance [safe] Language.Haskell.TH.Ppr.Ppr Language.Haskell.TH.Lib.Syntax.PatSynArgs -- Defined in ‘Language.Haskell.TH.Ppr’
-instance [safe] Language.Haskell.TH.Ppr.Ppr Language.Haskell.TH.Lib.Syntax.PatSynDir -- Defined in ‘Language.Haskell.TH.Ppr’
-instance [safe] Language.Haskell.TH.Ppr.Ppr Language.Haskell.TH.Lib.Syntax.Phases -- Defined in ‘Language.Haskell.TH.Ppr’
-instance [safe] Language.Haskell.TH.Ppr.Ppr Language.Haskell.TH.Lib.Syntax.Pragma -- Defined in ‘Language.Haskell.TH.Ppr’
-instance [safe] Language.Haskell.TH.Ppr.Ppr Language.Haskell.TH.Lib.Syntax.Range -- Defined in ‘Language.Haskell.TH.Ppr’
-instance [safe] Language.Haskell.TH.Ppr.Ppr Language.Haskell.TH.Lib.Syntax.Role -- Defined in ‘Language.Haskell.TH.Ppr’
-instance [safe] Language.Haskell.TH.Ppr.Ppr Language.Haskell.TH.Lib.Syntax.RuleBndr -- Defined in ‘Language.Haskell.TH.Ppr’
-instance [safe] Language.Haskell.TH.Ppr.Ppr Language.Haskell.TH.Lib.Syntax.RuleMatch -- Defined in ‘Language.Haskell.TH.Ppr’
-instance [safe] Language.Haskell.TH.Ppr.Ppr Language.Haskell.TH.Lib.Syntax.SourceStrictness -- Defined in ‘Language.Haskell.TH.Ppr’
-instance [safe] Language.Haskell.TH.Ppr.Ppr Language.Haskell.TH.Lib.Syntax.SourceUnpackedness -- Defined in ‘Language.Haskell.TH.Ppr’
-instance [safe] Language.Haskell.TH.Ppr.Ppr Language.Haskell.TH.Lib.Syntax.Stmt -- Defined in ‘Language.Haskell.TH.Ppr’
-instance [safe] Language.Haskell.TH.Ppr.Ppr Language.Haskell.TH.Lib.Syntax.TyLit -- Defined in ‘Language.Haskell.TH.Ppr’
-instance [safe] forall flag. Language.Haskell.TH.Ppr.PprFlag flag => Language.Haskell.TH.Ppr.Ppr (Language.Haskell.TH.Lib.Syntax.TyVarBndr flag) -- Defined in ‘Language.Haskell.TH.Ppr’
-instance [safe] Language.Haskell.TH.Ppr.Ppr Language.Haskell.TH.Lib.Syntax.Type -- Defined in ‘Language.Haskell.TH.Ppr’
-instance [safe] Language.Haskell.TH.Ppr.Ppr Language.Haskell.TH.Ppr.TypeArg -- Defined in ‘Language.Haskell.TH.Ppr’
-instance [safe] Language.Haskell.TH.Ppr.PprFlag Language.Haskell.TH.Lib.Syntax.BndrVis -- Defined in ‘Language.Haskell.TH.Ppr’
-instance [safe] Language.Haskell.TH.Ppr.PprFlag Language.Haskell.TH.Lib.Syntax.Specificity -- Defined in ‘Language.Haskell.TH.Ppr’
-instance [safe] Language.Haskell.TH.Ppr.PprFlag () -- Defined in ‘Language.Haskell.TH.Ppr’
diff --git a/testsuite/tests/plugins/plugins10.stdout b/testsuite/tests/plugins/plugins10.stdout
index f7baecfb369b959f21cc9a7feb6e2557a162b6f2..d44315ff206424ee7494ccd981647161fd50614c 100644
--- a/testsuite/tests/plugins/plugins10.stdout
+++ b/testsuite/tests/plugins/plugins10.stdout
@@ -5,12 +5,13 @@ interfacePlugin: Language.Haskell.TH.Quote
 interfacePlugin: GHC.Internal.Base
 interfacePlugin: GHC.Internal.Float
 interfacePlugin: GHC.Prim.Ext
-interfacePlugin: Language.Haskell.TH.Lib.Syntax
+interfacePlugin: GHC.Internal.TH.Quote
+interfacePlugin: GHC.Internal.TH.Syntax
 typeCheckPlugin (rn)
 typeCheckPlugin (tc)
 parsePlugin(a)
 typeCheckPlugin (rn)
-interfacePlugin: Language.Haskell.TH.Lib.Internal
+interfacePlugin: GHC.Internal.TH.Lib
 metaPlugin: (return [])
 metaPlugin: quoteExp stringify "x"
 interfacePlugin: GHC.CString
diff --git a/testsuite/tests/quotes/TH_localname.stderr b/testsuite/tests/quotes/TH_localname.stderr
index c5a38b4b6d79cd5be119f5acfd5a70e5e7a95abd..35fa83e8f0a0ae94ab0b24176eab87f5ab5f6c69 100644
--- a/testsuite/tests/quotes/TH_localname.stderr
+++ b/testsuite/tests/quotes/TH_localname.stderr
@@ -1,28 +1,28 @@
-
 TH_localname.hs:3:11: error: [GHC-39999]
-    • Ambiguous type variable ‘t0’ arising from a use of ‘Language.Haskell.TH.Lib.Syntax.lift’
-      prevents the constraint ‘(Language.Haskell.TH.Lib.Syntax.Lift
+    • Ambiguous type variable ‘t0’ arising from a use of ‘GHC.Internal.TH.Lift.lift’
+      prevents the constraint ‘(GHC.Internal.TH.Lift.Lift
                                   t0)’ from being solved.
       Relevant bindings include
         y :: t0 (bound at TH_localname.hs:3:6)
-        x :: t0 -> m0 Language.Haskell.TH.Lib.Syntax.Exp
+        x :: t0 -> m0 GHC.Internal.TH.Syntax.Exp
           (bound at TH_localname.hs:3:1)
       Probable fix: use a type annotation to specify what ‘t0’ should be.
       Potentially matching instances:
-        instance (Language.Haskell.TH.Lib.Syntax.Lift a,
-                  Language.Haskell.TH.Lib.Syntax.Lift b) =>
-                 Language.Haskell.TH.Lib.Syntax.Lift (Either a b)
-          -- Defined in ‘Language.Haskell.TH.Lib.Syntax’
-        instance Language.Haskell.TH.Lib.Syntax.Lift Integer
-          -- Defined in ‘Language.Haskell.TH.Lib.Syntax’
+        instance (GHC.Internal.TH.Lift.Lift a,
+                  GHC.Internal.TH.Lift.Lift b) =>
+                 GHC.Internal.TH.Lift.Lift (Either a b)
+          -- Defined in ‘GHC.Internal.TH.Lift’
+        instance GHC.Internal.TH.Lift.Lift Integer
+          -- Defined in ‘GHC.Internal.TH.Lift’
         ...plus 15 others
-        ...plus 14 instances involving out-of-scope types
+        ...plus 12 instances involving out-of-scope types
         (use -fprint-potential-instances to see them all)
-    • In the expression: Language.Haskell.TH.Lib.Syntax.lift y
+    • In the expression: GHC.Internal.TH.Lift.lift y
       In the expression:
         [| y |]
-        pending(rn) [<y, Language.Haskell.TH.Lib.Syntax.lift y>]
+        pending(rn) [<y, GHC.Internal.TH.Lift.lift y>]
       In the expression:
         \ y
           -> [| y |]
-             pending(rn) [<y, Language.Haskell.TH.Lib.Syntax.lift y>]
+             pending(rn) [<y, GHC.Internal.TH.Lift.lift y>]
+
diff --git a/testsuite/tests/th/T10796b.stderr b/testsuite/tests/th/T10796b.stderr
index 7c82db6b23dd1375187dd8f23beb6348a90842f5..859aabe43026ea813985ceeee9fbadf46bb6888e 100644
--- a/testsuite/tests/th/T10796b.stderr
+++ b/testsuite/tests/th/T10796b.stderr
@@ -1,9 +1,9 @@
-
 T10796b.hs:8:15: error: [GHC-87897]
     • Exception when trying to run compile-time code:
         Can't construct a pattern from name Data.Set.Internal.fromList
 CallStack (from HasCallStack):
-  error, called at libraries/template-haskell/Language/Haskell/TH/Lib/Syntax.hs:1539:22 in template-haskell:Language.Haskell.TH.Lib.Syntax
+  error, called at libraries/ghc-internal/src/GHC/Internal/TH/Lift.hs:557:22 in ghc-internal:GHC.Internal.TH.Lift
       Code: (dataToPatQ (const Nothing) (fromList "test"))
     • In the untyped splice:
         $(dataToPatQ (const Nothing) (fromList "test"))
+
diff --git a/testsuite/tests/th/T11452.stderr b/testsuite/tests/th/T11452.stderr
index bb6d196b60499a57f837cee28fa0b72ccd547f75..b2f27a0d411b90aaa8cf5e772085200c942f83d7 100644
--- a/testsuite/tests/th/T11452.stderr
+++ b/testsuite/tests/th/T11452.stderr
@@ -1,4 +1,3 @@
-
 T11452.hs:6:12: error: [GHC-94642]
     • Illegal polytype: (forall a. a -> a) -> ()
       The type of a Typed Template Haskell expression must not have any quantification.
@@ -8,12 +7,13 @@ T11452.hs:6:12: error: [GHC-94642]
 
 T11452.hs:6:14: error: [GHC-91028]
     • Couldn't match type ‘p0’ with ‘forall a. a -> a’
-      Expected: Language.Haskell.TH.Lib.Syntax.Code
-                  Language.Haskell.TH.Lib.Syntax.Q ((forall a. a -> a) -> ())
-        Actual: Language.Haskell.TH.Lib.Syntax.Code
-                  Language.Haskell.TH.Lib.Syntax.Q (p0 -> ())
+      Expected: GHC.Internal.TH.Syntax.Code
+                  GHC.Internal.TH.Syntax.Q ((forall a. a -> a) -> ())
+        Actual: GHC.Internal.TH.Syntax.Code
+                  GHC.Internal.TH.Syntax.Q (p0 -> ())
       Cannot instantiate unification variable ‘p0’
       with a type involving polytypes: forall a. a -> a
     • In the Template Haskell quotation [|| \ _ -> () ||]
       In the expression: [|| \ _ -> () ||]
       In the Template Haskell splice $$([|| \ _ -> () ||])
+
diff --git a/testsuite/tests/th/T15321.stderr b/testsuite/tests/th/T15321.stderr
index 3ca708ec946caa7aac66c096afc0ee4e5c1e7600..f5688ba6d9e487f7286ed1600721012f8eb82c85 100644
--- a/testsuite/tests/th/T15321.stderr
+++ b/testsuite/tests/th/T15321.stderr
@@ -1,11 +1,10 @@
-
 T15321.hs:9:9: error: [GHC-88464]
-    • Found hole: _ :: String -> Language.Haskell.TH.Lib.Internal.ExpQ
+    • Found hole: _ :: String -> GHC.Internal.TH.Lib.ExpQ
     • In the expression: _ "baz"
       In the untyped splice: $(_ "baz")
     • Valid hole fits include
         fail :: forall (m :: * -> *) a. MonadFail m => String -> m a
-          with fail @Language.Haskell.TH.Lib.Syntax.Q
-                    @Language.Haskell.TH.Lib.Syntax.Exp
+          with fail @GHC.Internal.TH.Syntax.Q @GHC.Internal.TH.Syntax.Exp
           (imported from ‘Prelude’ at T15321.hs:3:8-13
            (and originally defined in ‘GHC.Internal.Control.Monad.Fail’))
+
diff --git a/testsuite/tests/th/T7276.stderr b/testsuite/tests/th/T7276.stderr
index 111f858eb0c915cd3ef0702326484419db86cdb7..32e04366c54dcd6ed31c771a3043b0e743348873 100644
--- a/testsuite/tests/th/T7276.stderr
+++ b/testsuite/tests/th/T7276.stderr
@@ -1,14 +1,13 @@
-
 T7276.hs:6:5: error: [GHC-87897]
     • Exception when trying to run compile-time code:
         T7276.hs:6:8: error: [GHC-83865]
-    • Couldn't match type ‘[Language.Haskell.TH.Lib.Syntax.Dec]’
-                     with ‘Language.Haskell.TH.Lib.Syntax.Exp’
-      Expected: Language.Haskell.TH.Lib.Internal.ExpQ
-        Actual: Language.Haskell.TH.Lib.Syntax.Q
-                  Language.Haskell.TH.Lib.Internal.Decs
+    • Couldn't match type ‘[GHC.Internal.TH.Syntax.Dec]’
+                     with ‘GHC.Internal.TH.Syntax.Exp’
+      Expected: GHC.Internal.TH.Lib.ExpQ
+        Actual: GHC.Internal.TH.Syntax.Q GHC.Internal.TH.Lib.Decs
     • In the expression: [d| y = 3 |]
       In the untyped splice: $([d| y = 3 |])
 (deferred type error)
       Code: ([d| y = 3 |])
     • In the untyped splice: $([d| y = 3 |])
+
diff --git a/testsuite/tests/th/T7276a.stdout b/testsuite/tests/th/T7276a.stdout
index 5140f025794c9216c3b65b137191ee57f8dc3770..c540789c9d0c1903c513cf1f4bf4b2b75e556eed 100644
--- a/testsuite/tests/th/T7276a.stdout
+++ b/testsuite/tests/th/T7276a.stdout
@@ -1,7 +1,7 @@
 <interactive>:3:9: warning: [GHC-83865] [-Wdeferred-type-errors (in -Wdefault)]
     • Couldn't match type ‘[Dec]’ with ‘Exp’
       Expected: Q Exp
-        Actual: Q Language.Haskell.TH.Lib.Internal.Decs
+        Actual: Q GHC.Internal.TH.Lib.Decs
     • In the expression: [d| a = () |] :: Q Exp
       In an equation for ‘x’: x = [d| a = () |] :: Q Exp
 
@@ -10,7 +10,7 @@
         <interactive>:3:9: error: [GHC-83865]
     • Couldn't match type ‘[Dec]’ with ‘Exp’
       Expected: Q Exp
-        Actual: Q Language.Haskell.TH.Lib.Internal.Decs
+        Actual: Q GHC.Internal.TH.Lib.Decs
     • In the expression: [d| a = () |] :: Q Exp
       In an equation for ‘x’: x = [d| a = () |] :: Q Exp
 (deferred type error)
diff --git a/testsuite/tests/th/TH_NestedSplicesFail3.stderr b/testsuite/tests/th/TH_NestedSplicesFail3.stderr
index caf4b5abb6ece3494aaacb763bf3e25cb4d49333..46971d83f2c594d3965d0c939677bdba52603f73 100644
--- a/testsuite/tests/th/TH_NestedSplicesFail3.stderr
+++ b/testsuite/tests/th/TH_NestedSplicesFail3.stderr
@@ -1,9 +1,8 @@
-
 TH_NestedSplicesFail3.hs:4:12: error: [GHC-39999]
-    • No instance for ‘Language.Haskell.TH.Lib.Syntax.Quote
-                         (Language.Haskell.TH.Lib.Syntax.Code
-                            Language.Haskell.TH.Lib.Syntax.Q)’
+    • No instance for ‘GHC.Internal.TH.Syntax.Quote
+                         (GHC.Internal.TH.Syntax.Code GHC.Internal.TH.Syntax.Q)’
         arising from a quotation bracket
     • In the expression: [| 'x' |]
       In the Template Haskell splice $$([| 'x' |])
       In the expression: $$([| 'x' |])
+
diff --git a/testsuite/tests/th/TH_NestedSplicesFail4.stderr b/testsuite/tests/th/TH_NestedSplicesFail4.stderr
index 1c62b5aec7f355f4a74a4da3e992215aabf477df..990f56c143922c2cc3be7ba92c994bdc5e371520 100644
--- a/testsuite/tests/th/TH_NestedSplicesFail4.stderr
+++ b/testsuite/tests/th/TH_NestedSplicesFail4.stderr
@@ -1,10 +1,9 @@
-
 TH_NestedSplicesFail4.hs:4:11: error: [GHC-83865]
-    • Couldn't match type: Language.Haskell.TH.Lib.Syntax.Code m0 Char
-                     with: Language.Haskell.TH.Lib.Syntax.Q
-                             Language.Haskell.TH.Lib.Syntax.Exp
-      Expected: Language.Haskell.TH.Lib.Internal.ExpQ
-        Actual: Language.Haskell.TH.Lib.Syntax.Code m0 Char
+    • Couldn't match type: GHC.Internal.TH.Syntax.Code m0 Char
+                     with: GHC.Internal.TH.Syntax.Q GHC.Internal.TH.Syntax.Exp
+      Expected: GHC.Internal.TH.Lib.ExpQ
+        Actual: GHC.Internal.TH.Syntax.Code m0 Char
     • In the Template Haskell quotation [|| 'y' ||]
       In the expression: [|| 'y' ||]
       In the untyped splice: $([|| 'y' ||])
+
diff --git a/utils/haddock/html-test/ref/QuasiExpr.html b/utils/haddock/html-test/ref/QuasiExpr.html
index 25f4b0fabaed30125a42058d21db89d6de580b21..5b980d0fa00b7d31324e67231cb276b5977345e1 100644
--- a/utils/haddock/html-test/ref/QuasiExpr.html
+++ b/utils/haddock/html-test/ref/QuasiExpr.html
@@ -335,9 +335,9 @@
 	    >parseExprExp</a
 	    > :: <a href="#" title="Data.String"
 	    >String</a
-	    > -&gt; <a href="#" title="Language.Haskell.TH"
+	    > -&gt; <a href="#" title="Language.Haskell.TH.Syntax"
 	    >Q</a
-	    > <a href="#" title="Language.Haskell.TH"
+	    > <a href="#" title="Language.Haskell.TH.Syntax"
 	    >Exp</a
 	    > <a href="#" class="selflink"
 	    >#</a
diff --git a/utils/haddock/html-test/ref/TH.html b/utils/haddock/html-test/ref/TH.html
index 0695f202ec08875cad7204dcde5ffd17c6590d79..06fcc70facc800fa950bf0f43003327585afdf74 100644
--- a/utils/haddock/html-test/ref/TH.html
+++ b/utils/haddock/html-test/ref/TH.html
@@ -55,9 +55,9 @@
 	><p class="src"
 	  ><a id="v:decl" class="def"
 	    >decl</a
-	    > :: <a href="#" title="Language.Haskell.TH"
+	    > :: <a href="#" title="Language.Haskell.TH.Syntax"
 	    >Q</a
-	    > [<a href="#" title="Language.Haskell.TH"
+	    > [<a href="#" title="Language.Haskell.TH.Syntax"
 	    >Dec</a
 	    >] <a href="#" class="selflink"
 	    >#</a
diff --git a/utils/haddock/html-test/ref/Threaded_TH.html b/utils/haddock/html-test/ref/Threaded_TH.html
index 8c77834686931a8658a37fec63338b6a8371ba80..c515d143f627cdff6e7b9484b20df1da594881cf 100644
--- a/utils/haddock/html-test/ref/Threaded_TH.html
+++ b/utils/haddock/html-test/ref/Threaded_TH.html
@@ -67,9 +67,9 @@
 	  ><li class="src short"
 	    ><a href="#"
 	      >forkTH</a
-	      > :: <a href="#" title="Language.Haskell.TH"
+	      > :: <a href="#" title="Language.Haskell.TH.Syntax"
 	      >Q</a
-	      > <a href="#" title="Language.Haskell.TH"
+	      > <a href="#" title="Language.Haskell.TH.Syntax"
 	      >Exp</a
 	      ></li
 	    ></ul
@@ -82,9 +82,9 @@
 	><p class="src"
 	  ><a id="v:forkTH" class="def"
 	    >forkTH</a
-	    > :: <a href="#" title="Language.Haskell.TH"
+	    > :: <a href="#" title="Language.Haskell.TH.Syntax"
 	    >Q</a
-	    > <a href="#" title="Language.Haskell.TH"
+	    > <a href="#" title="Language.Haskell.TH.Syntax"
 	    >Exp</a
 	    > <a href="#" class="selflink"
 	    >#</a