ghc-9.6.3: The GHC API

Safe Haskell | Safe-Inferred
Language | Haskell2010

GHC.Tc.Types

Description

Various types used during typechecking.

Please see GHC.Tc.Utils.Monad as well for operations on these types. You probably want to import it, instead of this module.

All the monads exported here are built on top of the same IOEnv monad. The monad functions like a Reader monad in the way it passes the environment around. This is done to allow the environment to be manipulated in a stack like fashion when entering expressions... etc.

For state that is global and should be returned at the end (e.g not part of the stack mechanism), you should use a TcRef (= IORef) to store them.

Synopsis

- type TcRnIf a b = IOEnv (Env a b)
- type TcRn = TcRnIf TcGblEnv TcLclEnv
- type TcM = TcRn
- type RnM = TcRn
- type IfM lcl = TcRnIf IfGblEnv lcl
- type IfL = IfM IfLclEnv
- type IfG = IfM ()
- type TcRef a = IORef a
- data Env gbl lcl = Env {
  - env_top :: !HscEnv
  - env_um :: !Char
  - env_gbl :: gbl
  - env_lcl :: lcl
  }
- data TcGblEnv = TcGblEnv {
  - tcg_mod :: Module
  - tcg_semantic_mod :: Module
  - tcg_src :: HscSource
  - tcg_rdr_env :: GlobalRdrEnv
  - tcg_default :: Maybe [Type]
  - tcg_fix_env :: FixityEnv
  - tcg_field_env :: RecFieldEnv
  - tcg_type_env :: TypeEnv
  - tcg_type_env_var :: KnotVars (IORef TypeEnv)
  - tcg_inst_env :: !InstEnv
  - tcg_fam_inst_env :: !FamInstEnv
  - tcg_ann_env :: AnnEnv
  - tcg_exports :: [AvailInfo]
  - tcg_imports :: ImportAvails
  - tcg_dus :: DefUses
  - tcg_used_gres :: TcRef [GlobalRdrElt]
  - tcg_keep :: TcRef NameSet
  - tcg_th_used :: TcRef Bool
  - tcg_th_splice_used :: TcRef Bool
  - tcg_th_needed_deps :: TcRef ([Linkable], PkgsLoaded)
  - tcg_dfun_n :: TcRef OccSet
  - tcg_merged :: [(Module, Fingerprint)]
  - tcg_rn_exports :: Maybe [(LIE GhcRn, Avails)]
  - tcg_rn_imports :: [LImportDecl GhcRn]
  - tcg_rn_decls :: Maybe (HsGroup GhcRn)
  - tcg_dependent_files :: TcRef [FilePath]
  - tcg_th_topdecls :: TcRef [LHsDecl GhcPs]
  - tcg_th_foreign_files :: TcRef [(ForeignSrcLang, FilePath)]
  - tcg_th_topnames :: TcRef NameSet
  - tcg_th_modfinalizers :: TcRef [(TcLclEnv, ThModFinalizers)]
  - tcg_th_coreplugins :: TcRef [String]
  - tcg_th_state :: TcRef (Map TypeRep Dynamic)
  - tcg_th_remote_state :: TcRef (Maybe (ForeignRef (IORef QState)))
  - tcg_th_docs :: TcRef THDocs
  - tcg_ev_binds :: Bag EvBind
  - tcg_tr_module :: Maybe Id
  - tcg_binds :: LHsBinds GhcTc
  - tcg_sigs :: NameSet
  - tcg_imp_specs :: [LTcSpecPrag]
  - tcg_warns :: Warnings GhcRn
  - tcg_anns :: [Annotation]
  - tcg_tcs :: [TyCon]
  - tcg_ksigs :: NameSet
  - tcg_insts :: [ClsInst]
  - tcg_fam_insts :: [FamInst]
  - tcg_rules :: [LRuleDecl GhcTc]
  - tcg_fords :: [LForeignDecl GhcTc]
  - tcg_patsyns :: [PatSyn]
  - tcg_doc_hdr :: Maybe (LHsDoc GhcRn)
  - tcg_hpc :: !AnyHpcUsage
  - tcg_self_boot :: SelfBootInfo
  - tcg_main :: Maybe Name
  - tcg_safe_infer :: TcRef Bool
  - tcg_safe_infer_reasons :: TcRef (Messages TcRnMessage)
  - tcg_tc_plugin_solvers :: [TcPluginSolver]
  - tcg_tc_plugin_rewriters :: UniqFM TyCon [TcPluginRewriter]
  - tcg_defaulting_plugins :: [FillDefaulting]
  - tcg_hf_plugins :: [HoleFitPlugin]
  - tcg_top_loc :: RealSrcSpan
  - tcg_static_wc :: TcRef WantedConstraints
  - tcg_complete_matches :: !CompleteMatches
  - tcg_cc_st :: TcRef CostCentreState
  - tcg_next_wrapper_num :: TcRef (ModuleEnv Int)
  }
- data TcLclEnv = TcLclEnv {
  - tcl_loc :: RealSrcSpan
  - tcl_ctxt :: [ErrCtxt]
  - tcl_in_gen_code :: Bool
  - tcl_tclvl :: TcLevel
  - tcl_th_ctxt :: ThStage
  - tcl_th_bndrs :: ThBindEnv
  - tcl_arrow_ctxt :: ArrowCtxt
  - tcl_rdr :: LocalRdrEnv
  - tcl_env :: TcTypeEnv
  - tcl_usage :: TcRef UsageEnv
  - tcl_bndrs :: TcBinderStack
  - tcl_lie :: TcRef WantedConstraints
  - tcl_errs :: TcRef (Messages TcRnMessage)
  }
- setLclEnvTcLevel :: TcLclEnv -> TcLevel -> TcLclEnv
- getLclEnvTcLevel :: TcLclEnv -> TcLevel
- setLclEnvLoc :: TcLclEnv -> RealSrcSpan -> TcLclEnv
- getLclEnvLoc :: TcLclEnv -> RealSrcSpan
- lclEnvInGeneratedCode :: TcLclEnv -> Bool
- data IfGblEnv = IfGblEnv {
  - if_doc :: SDoc
  - if_rec_types :: KnotVars (IfG TypeEnv)
  }
- data IfLclEnv = IfLclEnv {
  - if_mod :: !Module
  - if_boot :: IsBootInterface
  - if_loc :: SDoc
  - if_nsubst :: Maybe NameShape
  - if_implicits_env :: Maybe TypeEnv
  - if_tv_env :: FastStringEnv TyVar
  - if_id_env :: FastStringEnv Id
  }
- tcVisibleOrphanMods :: TcGblEnv -> ModuleSet
- data RewriteEnv = RE {
  - re_loc :: !CtLoc
  - re_flavour :: !CtFlavour
  - re_eq_rel :: !EqRel
  - re_rewriters :: !(TcRef RewriterSet)
  }
- data FrontendResult = FrontendTypecheck TcGblEnv
- type ErrCtxt = (Bool, TidyEnv -> TcM (TidyEnv, SDoc))
- type RecFieldEnv = NameEnv [FieldLabel]
- pushErrCtxt :: CtOrigin -> ErrCtxt -> CtLoc -> CtLoc
- pushErrCtxtSameOrigin :: ErrCtxt -> CtLoc -> CtLoc
- data ImportAvails = ImportAvails {
  - imp_mods :: ImportedMods
  - imp_direct_dep_mods :: InstalledModuleEnv ModuleNameWithIsBoot
  - imp_dep_direct_pkgs :: Set UnitId
  - imp_trust_own_pkg :: Bool
  - imp_trust_pkgs :: Set UnitId
  - imp_boot_mods :: InstalledModuleEnv ModuleNameWithIsBoot
  - imp_sig_mods :: [ModuleName]
  - imp_orphs :: [Module]
  - imp_finsts :: [Module]
  }
- emptyImportAvails :: ImportAvails
- plusImportAvails :: ImportAvails -> ImportAvails -> ImportAvails
- data WhereFrom
  - = ImportByUser IsBootInterface
  - | ImportBySystem
  - | ImportByPlugin
- mkModDeps :: Set (UnitId, ModuleNameWithIsBoot) -> InstalledModuleEnv ModuleNameWithIsBoot
- type TcTypeEnv = NameEnv TcTyThing
- type TcBinderStack = [TcBinder]
- data TcBinder
  - = TcIdBndr TcId TopLevelFlag
  - | TcIdBndr_ExpType Name ExpType TopLevelFlag
  - | TcTvBndr Name TyVar
- data TcTyThing
  - = AGlobal TyThing
  - | ATcId {
    - tct_id :: TcId
    - tct_info :: IdBindingInfo
    }
  - | ATyVar Name TcTyVar
  - | ATcTyCon TyCon
  - | APromotionErr PromotionErr
- tcTyThingTyCon_maybe :: TcTyThing -> Maybe TyCon
- data PromotionErr
  - = TyConPE
  - | ClassPE
  - | FamDataConPE
  - | ConstrainedDataConPE PredType
  - | PatSynPE
  - | RecDataConPE
  - | TermVariablePE
  - | NoDataKindsDC
- data IdBindingInfo
  - = NotLetBound
  - | ClosedLet
  - | NonClosedLet RhsNames ClosedTypeId
- type ClosedTypeId = Bool
- type RhsNames = NameSet
- data IsGroupClosed = IsGroupClosed (NameEnv RhsNames) ClosedTypeId
- data SelfBootInfo
  - = NoSelfBoot
  - | SelfBoot {
    - sb_mds :: ModDetails
    - sb_tcs :: NameSet
    }
- bootExports :: SelfBootInfo -> NameSet
- tcTyThingCategory :: TcTyThing -> String
- pprTcTyThingCategory :: TcTyThing -> SDoc
- peCategory :: PromotionErr -> String
- pprPECategory :: PromotionErr -> SDoc
- data CompleteMatch
- type CompleteMatches = [CompleteMatch]
- data ThStage
  - = Splice SpliceType
  - | RunSplice (TcRef [ForeignRef (Q ())])
  - | Comp
  - | Brack ThStage PendingStuff
- data SpliceType
  - = Typed
  - | Untyped
- data PendingStuff
  - = RnPendingUntyped (TcRef [PendingRnSplice])
  - | RnPendingTyped
  - | TcPending (TcRef [PendingTcSplice]) (TcRef WantedConstraints) QuoteWrapper
- topStage :: ThStage
- topAnnStage :: ThStage
- topSpliceStage :: ThStage
- type ThLevel = Int
- impLevel :: ThLevel
- outerLevel :: ThLevel
- thLevel :: ThStage -> ThLevel
- data ForeignSrcLang
  - = LangC
  - | LangCxx
  - | LangObjc
  - | LangObjcxx
  - | LangAsm
  - | LangJs
  - | RawObject
- type THDocs = Map DocLoc (HsDoc GhcRn)
- data DocLoc
  - = DeclDoc Name
  - | ArgDoc Name Int
  - | InstDoc Name
  - | ModuleDoc
- type ThBindEnv = NameEnv (TopLevelFlag, ThLevel)
- data ArrowCtxt
  - = NoArrowCtxt
  - | ArrowCtxt LocalRdrEnv (TcRef WantedConstraints)
- type TcSigFun = Name -> Maybe TcSigInfo
- data TcSigInfo
  - = TcIdSig TcIdSigInfo
  - | TcPatSynSig TcPatSynInfo
- data TcIdSigInfo
  - = CompleteSig {
    - sig_bndr :: TcId
    - sig_ctxt :: UserTypeCtxt
    - sig_loc :: SrcSpan
    }
  - | PartialSig {
    - psig_name :: Name
    - psig_hs_ty :: LHsSigWcType GhcRn
    - sig_ctxt :: UserTypeCtxt
    - sig_loc :: SrcSpan
    }
- data TcIdSigInst = TISI {
  - sig_inst_sig :: TcIdSigInfo
  - sig_inst_skols :: [(Name, InvisTVBinder)]
  - sig_inst_theta :: TcThetaType
  - sig_inst_tau :: TcSigmaType
  - sig_inst_wcs :: [(Name, TcTyVar)]
  - sig_inst_wcx :: Maybe TcType
  }
- data TcPatSynInfo = TPSI {
  - patsig_name :: Name
  - patsig_implicit_bndrs :: [InvisTVBinder]
  - patsig_univ_bndrs :: [InvisTVBinder]
  - patsig_req :: TcThetaType
  - patsig_ex_bndrs :: [InvisTVBinder]
  - patsig_prov :: TcThetaType
  - patsig_body_ty :: TcSigmaType
  }
- isPartialSig :: TcIdSigInst -> Bool
- hasCompleteSig :: TcSigFun -> Name -> Bool
- type TcId = Id
- type TcIdSet = IdSet
- data NameShape = NameShape {
  - ns_mod_name :: ModuleName
  - ns_exports :: [AvailInfo]
  - ns_map :: OccEnv Name
  }
- removeBindingShadowing :: HasOccName a => [a] -> [a]
- getPlatform :: TcRnIf a b Platform
- data TcPlugin = forall s.TcPlugin {
  - tcPluginInit :: TcPluginM s
  - tcPluginSolve :: s -> TcPluginSolver
  - tcPluginRewrite :: s -> UniqFM TyCon TcPluginRewriter
  - tcPluginStop :: s -> TcPluginM ()
  }
- data TcPluginSolveResult where
  - TcPluginSolveResult {
    - tcPluginInsolubleCts :: [Ct]
    - tcPluginSolvedCts :: [(EvTerm, Ct)]
    - tcPluginNewCts :: [Ct]
    }
  - pattern TcPluginContradiction :: [Ct] -> TcPluginSolveResult
  - pattern TcPluginOk :: [(EvTerm, Ct)] -> [Ct] -> TcPluginSolveResult
- data TcPluginRewriteResult
  - = TcPluginNoRewrite
  - | TcPluginRewriteTo {
    - tcPluginReduction :: !Reduction
    - tcRewriterNewWanteds :: [Ct]
    }
- type TcPluginSolver = EvBindsVar -> [Ct] -> [Ct] -> TcPluginM TcPluginSolveResult
- type TcPluginRewriter = RewriteEnv -> [Ct] -> [TcType] -> TcPluginM TcPluginRewriteResult
- data TcPluginM a
- unsafeTcPluginTcM :: TcM a -> TcPluginM a
- data DefaultingPlugin = forall s.DefaultingPlugin {
  - dePluginInit :: TcPluginM s
  - dePluginRun :: s -> FillDefaulting
  - dePluginStop :: s -> TcPluginM ()
  }
- data DefaultingProposal = DefaultingProposal {
  - deProposalTyVar :: TcTyVar
  - deProposalCandidates :: [Type]
  - deProposalCts :: [Ct]
  }
- type FillDefaulting = WantedConstraints -> TcPluginM [DefaultingProposal]
- type DefaultingPluginResult = [DefaultingProposal]
- type RoleAnnotEnv = NameEnv (LRoleAnnotDecl GhcRn)
- emptyRoleAnnotEnv :: RoleAnnotEnv
- mkRoleAnnotEnv :: [LRoleAnnotDecl GhcRn] -> RoleAnnotEnv
- lookupRoleAnnot :: RoleAnnotEnv -> Name -> Maybe (LRoleAnnotDecl GhcRn)
- getRoleAnnots :: [Name] -> RoleAnnotEnv -> [LRoleAnnotDecl GhcRn]
- lintGblEnv :: Logger -> DynFlags -> TcGblEnv -> TcM ()
- data TcRnMessage

# Documentation

type TcRnIf a b = IOEnv (Env a b) Source #

type TcRn = TcRnIf TcGblEnv TcLclEnv Source #

type TcM = TcRn Source #

Historical "type-checking monad" (now it's just `TcRn`).

type RnM = TcRn Source #

Historical "renaming monad" (now it's just `TcRn`).

type IfM lcl = TcRnIf IfGblEnv lcl Source #

type IfL = IfM IfLclEnv Source #

type IfG = IfM () Source #

type TcRef a = IORef a Source #

Type alias for `IORef`; the convention is we'll use this for mutable bits of data in `TcGblEnv` which are updated during typechecking and returned at the end.

data Env gbl lcl Source #

Constructors

Env |

Fields

- env_top :: !HscEnv
- env_um :: !Char
- env_gbl :: gbl
- env_lcl :: lcl

#### Instances

Instances details

Quasi TcM Source # |

Instance details

Defined in GHC.Tc.Gen.Splice

Methods

qNewName :: String -> TcM Name Source #

qReport :: Bool -> String -> TcM () Source #

qRecover :: TcM a -> TcM a -> TcM a Source #

qLookupName :: Bool -> String -> TcM (Maybe Name) Source #

qReify :: Name -> TcM Info Source #

qReifyFixity :: Name -> TcM (Maybe Fixity) Source #

qReifyType :: Name -> TcM Type Source #

qReifyInstances :: Name -> [Type] -> TcM [Dec] Source #

qReifyRoles :: Name -> TcM [Role] Source #

qReifyAnnotations :: Data a => AnnLookup -> TcM [a] Source #

qReifyModule :: Module -> TcM ModuleInfo Source #

qReifyConStrictness :: Name -> TcM [DecidedStrictness] Source #

qLocation :: TcM Loc Source #

qRunIO :: IO a -> TcM a Source #

qGetPackageRoot :: TcM FilePath Source #

qAddDependentFile :: FilePath -> TcM () Source #

qAddTempFile :: String -> TcM FilePath Source #

qAddTopDecls :: [Dec] -> TcM () Source #

qAddForeignFilePath :: ForeignSrcLang -> String -> TcM () Source #

qAddModFinalizer :: Q () -> TcM () Source #

qAddCorePlugin :: String -> TcM () Source #

qGetQ :: Typeable a => TcM (Maybe a) Source #

qPutQ :: Typeable a => a -> TcM () Source #

qIsExtEnabled :: Extension -> TcM Bool Source #

qExtsEnabled :: TcM [Extension] Source #

qPutDoc :: DocLoc -> String -> TcM () Source #

qGetDoc :: DocLoc -> TcM (Maybe String) Source #

MonadThings (IOEnv (Env DsGblEnv DsLclEnv)) Source # |
Instance details Defined in GHC.HsToCore.Monad Methods lookupThing :: Name -> IOEnv (Env DsGblEnv DsLclEnv) TyThing Source # lookupId :: Name -> IOEnv (Env DsGblEnv DsLclEnv) Id Source # lookupDataCon :: Name -> IOEnv (Env DsGblEnv DsLclEnv) DataCon Source # lookupTyCon :: Name -> IOEnv (Env DsGblEnv DsLclEnv) TyCon Source #
MonadThings (IOEnv (Env TcGblEnv TcLclEnv)) Source # |
Instance details Defined in GHC.Tc.Utils.Env Methods lookupThing :: Name -> IOEnv (Env TcGblEnv TcLclEnv) TyThing Source # lookupId :: Name -> IOEnv (Env TcGblEnv TcLclEnv) Id Source # lookupDataCon :: Name -> IOEnv (Env TcGblEnv TcLclEnv) DataCon Source # lookupTyCon :: Name -> IOEnv (Env TcGblEnv TcLclEnv) TyCon Source #
MonadUnique (IOEnv (Env gbl lcl)) Source # |
Instance details Defined in GHC.Tc.Utils.Monad Methods getUniqueSupplyM :: IOEnv (Env gbl lcl) UniqSupply Source # getUniqueM :: IOEnv (Env gbl lcl) Unique Source # getUniquesM :: IOEnv (Env gbl lcl) [Unique] Source #
ContainsHooks (Env gbl lcl) Source # |
Instance details Defined in GHC.Tc.Types Methods extractHooks :: Env gbl lcl -> Hooks Source #
ContainsDynFlags (Env gbl lcl) Source # |
Instance details Defined in GHC.Tc.Types Methods extractDynFlags :: Env gbl lcl -> DynFlags Source #
ContainsModule gbl => ContainsModule (Env gbl lcl) Source # |
Instance details Defined in GHC.Tc.Types Methods extractModule :: Env gbl lcl -> Module Source #
ContainsLogger (Env gbl lcl) Source # |
Instance details Defined in GHC.Tc.Types Methods extractLogger :: Env gbl lcl -> Logger Source #

data TcGblEnv Source #

`TcGblEnv` describes the top-level of the module at the point at which the typechecker is finished work. It is this structure that is handed on to the desugarer For state that needs to be updated during the typechecking phase and returned at end, use a `TcRef` (= `IORef`).

Constructors

TcGblEnv |

Fields

- tcg_mod :: Module

  Module being compiled

- tcg_semantic_mod :: Module

  If a signature, the backing module See also Note [Identity versus semantic module]

- tcg_src :: HscSource

  What kind of module (regular Haskell, hs-boot, hsig)

- tcg_rdr_env :: GlobalRdrEnv

  Top level envt; used during renaming

- tcg_default :: Maybe [Type]

  Types used for defaulting. `Nothing` => no `default` decl

- tcg_fix_env :: FixityEnv

  Just for things in this module

- tcg_field_env :: RecFieldEnv

  Just for things in this module See Note [The interactive package] in GHC.Runtime.Context

- tcg_type_env :: TypeEnv

  Global type env for the module we are compiling now. All TyCons and Classes (for this module) end up in here right away, along with their derived constructors, selectors.

  (Ids defined in this module start in the local envt, though they move to the global envt during zonking)

  NB: for what "things in this module" means, see Note [The interactive package] in GHC.Runtime.Context

- tcg_type_env_var :: KnotVars (IORef TypeEnv)
- tcg_inst_env :: !InstEnv

  Instance envt for all home-package modules; Includes the dfuns in tcg_insts NB. BangPattern is to fix a leak, see #15111

- tcg_fam_inst_env :: !FamInstEnv

  Ditto for family instances NB. BangPattern is to fix a leak, see #15111

- tcg_ann_env :: AnnEnv

  And for annotations

- tcg_exports :: [AvailInfo]

  What is exported

- tcg_imports :: ImportAvails

  Information about what was imported from where, including things bound in this module. Also store Safe Haskell info here about transitive trusted package requirements.

  There are not many uses of this field, so you can grep for all them.

  The ImportAvails records information about the following things:

  1. All of the modules you directly imported (tcRnImports)
  2. The orphans (only!) of all imported modules in a GHCi session (runTcInteractive)
  3. The module that instantiated a signature
  4. Each of the signatures that merged in

  It is used in the following ways: - imp_orphs is used to determine what orphan modules should be visible in the context (tcVisibleOrphanMods) - imp_finsts is used to determine what family instances should be visible (tcExtendLocalFamInstEnv) - To resolve the meaning of the export list of a module (tcRnExports) - imp_mods is used to compute usage info (mkIfaceTc, deSugar) - imp_trust_own_pkg is used for Safe Haskell in interfaces (mkIfaceTc, as well as in GHC.Driver.Main) - To create the Dependencies field in interface (mkDependencies)

- tcg_dus :: DefUses
- tcg_used_gres :: TcRef [GlobalRdrElt]
- tcg_keep :: TcRef NameSet
- tcg_th_used :: TcRef Bool

  `True` <=> Template Haskell syntax used.

  We need this so that we can generate a dependency on the Template Haskell package, because the desugarer is going to emit loads of references to TH symbols. The reference is implicit rather than explicit, so we have to zap a mutable variable.

- tcg_th_splice_used :: TcRef Bool

  `True` <=> A Template Haskell splice was used.

  Splices disable recompilation avoidance (see #481)

- tcg_th_needed_deps :: TcRef ([Linkable], PkgsLoaded)

  The set of runtime dependencies required by this module See Note [Object File Dependencies]

- tcg_dfun_n :: TcRef OccSet

  Allows us to choose unique DFun names.

- tcg_merged :: [(Module, Fingerprint)]

  The requirements we merged with; we always have to recompile if any of these changed.

- tcg_rn_exports :: Maybe [(LIE GhcRn, Avails)]
- tcg_rn_imports :: [LImportDecl GhcRn]
- tcg_rn_decls :: Maybe (HsGroup GhcRn)

  Renamed decls, maybe. `Nothing` <=> Don't retain renamed decls.

- tcg_dependent_files :: TcRef [FilePath]

  dependencies from addDependentFile

- tcg_th_topdecls :: TcRef [LHsDecl GhcPs]

  Top-level declarations from addTopDecls

- tcg_th_foreign_files :: TcRef [(ForeignSrcLang, FilePath)]

  Foreign files emitted from TH.

- tcg_th_topnames :: TcRef NameSet

  Exact names bound in top-level declarations in tcg_th_topdecls

- tcg_th_modfinalizers :: TcRef [(TcLclEnv, ThModFinalizers)]

  Template Haskell module finalizers.

  They can use particular local environments.

- tcg_th_coreplugins :: TcRef [String]

  Core plugins added by Template Haskell code.

- tcg_th_state :: TcRef (Map TypeRep Dynamic)
- tcg_th_remote_state :: TcRef (Maybe (ForeignRef (IORef QState)))

  Template Haskell state

- tcg_th_docs :: TcRef THDocs

  Docs added in Template Haskell via `putDoc`.

- tcg_ev_binds :: Bag EvBind
- tcg_tr_module :: Maybe Id
- tcg_binds :: LHsBinds GhcTc
- tcg_sigs :: NameSet
- tcg_imp_specs :: [LTcSpecPrag]
- tcg_warns :: Warnings GhcRn
- tcg_anns :: [Annotation]
- tcg_tcs :: [TyCon]
- tcg_ksigs :: NameSet
- tcg_insts :: [ClsInst]
- tcg_fam_insts :: [FamInst]
- tcg_rules :: [LRuleDecl GhcTc]
- tcg_fords :: [LForeignDecl GhcTc]
- tcg_patsyns :: [PatSyn]
- tcg_doc_hdr :: Maybe (LHsDoc GhcRn)

  Maybe Haddock header docs

- tcg_hpc :: !AnyHpcUsage

  `True` if any part of the prog uses hpc instrumentation. NB. BangPattern is to fix a leak, see #15111

- tcg_self_boot :: SelfBootInfo

  Whether this module has a corresponding hi-boot file

- tcg_main :: Maybe Name

  The Name of the main function, if this module is the main module.

- tcg_safe_infer :: TcRef Bool

  Has the typechecker inferred this module as -XSafe (Safe Haskell)? See Note [Safe Haskell Overlapping Instances Implementation], although this is used for more than just that failure case.

- tcg_safe_infer_reasons :: TcRef (Messages TcRnMessage)

  Unreported reasons why tcg_safe_infer is False. INVARIANT: If this Messages is non-empty, then tcg_safe_infer is False. It may be that tcg_safe_infer is False but this is empty, if no reasons are supplied (#19714), or if those reasons have already been reported by GHC.Driver.Main.markUnsafeInfer

- tcg_tc_plugin_solvers :: [TcPluginSolver]

  A list of user-defined type-checking plugins for constraint solving.

- tcg_tc_plugin_rewriters :: UniqFM TyCon [TcPluginRewriter]

  A collection of all the user-defined type-checking plugins for rewriting type family applications, collated by their type family `TyCon`s.

- tcg_defaulting_plugins :: [FillDefaulting]

  A list of user-defined plugins for type defaulting plugins.

- tcg_hf_plugins :: [HoleFitPlugin]

  A list of user-defined plugins for hole fit suggestions.

- tcg_top_loc :: RealSrcSpan

  The RealSrcSpan this module came from

- tcg_static_wc :: TcRef WantedConstraints

  Wanted constraints of static forms. See Note [Constraints in static forms].

- tcg_complete_matches :: !CompleteMatches

  Tracking indices for cost centre annotations

- tcg_cc_st :: TcRef CostCentreState
- tcg_next_wrapper_num :: TcRef (ModuleEnv Int)

  See Note [Generating fresh names for FFI wrappers]

#### Instances

Instances details

ContainsModule TcGblEnv Source # |
Instance details Defined in GHC.Tc.Types Methods extractModule :: TcGblEnv -> Module Source #
Quasi TcM Source # |

Instance details

Defined in GHC.Tc.Gen.Splice

Methods

qNewName :: String -> TcM Name Source #

qReport :: Bool -> String -> TcM () Source #

qRecover :: TcM a -> TcM a -> TcM a Source #

qLookupName :: Bool -> String -> TcM (Maybe Name) Source #

qReify :: Name -> TcM Info Source #

qReifyFixity :: Name -> TcM (Maybe Fixity) Source #

qReifyType :: Name -> TcM Type Source #

qReifyInstances :: Name -> [Type] -> TcM [Dec] Source #

qReifyRoles :: Name -> TcM [Role] Source #

qReifyAnnotations :: Data a => AnnLookup -> TcM [a] Source #

qReifyModule :: Module -> TcM ModuleInfo Source #

qReifyConStrictness :: Name -> TcM [DecidedStrictness] Source #

qLocation :: TcM Loc Source #

qRunIO :: IO a -> TcM a Source #

qGetPackageRoot :: TcM FilePath Source #

qAddDependentFile :: FilePath -> TcM () Source #

qAddTempFile :: String -> TcM FilePath Source #

qAddTopDecls :: [Dec] -> TcM () Source #

qAddForeignFilePath :: ForeignSrcLang -> String -> TcM () Source #

qAddModFinalizer :: Q () -> TcM () Source #

qAddCorePlugin :: String -> TcM () Source #

qGetQ :: Typeable a => TcM (Maybe a) Source #

qPutQ :: Typeable a => a -> TcM () Source #

qIsExtEnabled :: Extension -> TcM Bool Source #

qExtsEnabled :: TcM [Extension] Source #

qPutDoc :: DocLoc -> String -> TcM () Source #

qGetDoc :: DocLoc -> TcM (Maybe String) Source #

MonadThings (IOEnv (Env TcGblEnv TcLclEnv)) Source # |
Instance details Defined in GHC.Tc.Utils.Env Methods lookupThing :: Name -> IOEnv (Env TcGblEnv TcLclEnv) TyThing Source # lookupId :: Name -> IOEnv (Env TcGblEnv TcLclEnv) Id Source # lookupDataCon :: Name -> IOEnv (Env TcGblEnv TcLclEnv) DataCon Source # lookupTyCon :: Name -> IOEnv (Env TcGblEnv TcLclEnv) TyCon Source #

data TcLclEnv Source #

Constructors

TcLclEnv |

Fields

- tcl_loc :: RealSrcSpan
- tcl_ctxt :: [ErrCtxt]
- tcl_in_gen_code :: Bool
- tcl_tclvl :: TcLevel
- tcl_th_ctxt :: ThStage
- tcl_th_bndrs :: ThBindEnv
- tcl_arrow_ctxt :: ArrowCtxt
- tcl_rdr :: LocalRdrEnv
- tcl_env :: TcTypeEnv
- tcl_usage :: TcRef UsageEnv
- tcl_bndrs :: TcBinderStack
- tcl_lie :: TcRef WantedConstraints
- tcl_errs :: TcRef (Messages TcRnMessage)

#### Instances

Instances details

Quasi TcM Source # |

Instance details

Defined in GHC.Tc.Gen.Splice

Methods

qNewName :: String -> TcM Name Source #

qReport :: Bool -> String -> TcM () Source #

qRecover :: TcM a -> TcM a -> TcM a Source #

qLookupName :: Bool -> String -> TcM (Maybe Name) Source #

qReify :: Name -> TcM Info Source #

qReifyFixity :: Name -> TcM (Maybe Fixity) Source #

qReifyType :: Name -> TcM Type Source #

qReifyInstances :: Name -> [Type] -> TcM [Dec] Source #

qReifyRoles :: Name -> TcM [Role] Source #

qReifyAnnotations :: Data a => AnnLookup -> TcM [a] Source #

qReifyModule :: Module -> TcM ModuleInfo Source #

qReifyConStrictness :: Name -> TcM [DecidedStrictness] Source #

qLocation :: TcM Loc Source #

qRunIO :: IO a -> TcM a Source #

qGetPackageRoot :: TcM FilePath Source #

qAddDependentFile :: FilePath -> TcM () Source #

qAddTempFile :: String -> TcM FilePath Source #

qAddTopDecls :: [Dec] -> TcM () Source #

qAddForeignFilePath :: ForeignSrcLang -> String -> TcM () Source #

qAddModFinalizer :: Q () -> TcM () Source #

qAddCorePlugin :: String -> TcM () Source #

qGetQ :: Typeable a => TcM (Maybe a) Source #

qPutQ :: Typeable a => a -> TcM () Source #

qIsExtEnabled :: Extension -> TcM Bool Source #

qExtsEnabled :: TcM [Extension] Source #

qPutDoc :: DocLoc -> String -> TcM () Source #

qGetDoc :: DocLoc -> TcM (Maybe String) Source #

MonadThings (IOEnv (Env TcGblEnv TcLclEnv)) Source # |
Instance details Defined in GHC.Tc.Utils.Env Methods lookupThing :: Name -> IOEnv (Env TcGblEnv TcLclEnv) TyThing Source # lookupId :: Name -> IOEnv (Env TcGblEnv TcLclEnv) Id Source # lookupDataCon :: Name -> IOEnv (Env TcGblEnv TcLclEnv) DataCon Source # lookupTyCon :: Name -> IOEnv (Env TcGblEnv TcLclEnv) TyCon Source #

setLclEnvTcLevel :: TcLclEnv -> TcLevel -> TcLclEnv Source #

getLclEnvTcLevel :: TcLclEnv -> TcLevel Source #

setLclEnvLoc :: TcLclEnv -> RealSrcSpan -> TcLclEnv Source #

getLclEnvLoc :: TcLclEnv -> RealSrcSpan Source #

lclEnvInGeneratedCode :: TcLclEnv -> Bool Source #

data IfGblEnv Source #

Constructors

IfGblEnv |

Fields

- if_doc :: SDoc
- if_rec_types :: KnotVars (IfG TypeEnv)

data IfLclEnv Source #

Constructors

IfLclEnv |

Fields

- if_mod :: !Module
- if_boot :: IsBootInterface
- if_loc :: SDoc
- if_nsubst :: Maybe NameShape
- if_implicits_env :: Maybe TypeEnv
- if_tv_env :: FastStringEnv TyVar
- if_id_env :: FastStringEnv Id

tcVisibleOrphanMods :: TcGblEnv -> ModuleSet Source #

data RewriteEnv Source #

A `RewriteEnv` carries the necessary context for performing rewrites (i.e. type family reductions and following filled-in metavariables) in the solver.

Constructors

RE |

Fields

- re_loc :: !CtLoc

  In which context are we rewriting?

  Type-checking plugins might want to use this location information when emitting new Wanted constraints when rewriting type family applications. This ensures that such Wanted constraints will, when unsolved, give rise to error messages with the correct source location.

- re_flavour :: !CtFlavour
- re_eq_rel :: !EqRel

  At what role are we rewriting?

  See Note [Rewriter EqRels] in GHC.Tc.Solver.Rewrite

- re_rewriters :: !(TcRef RewriterSet)

  See Note [Wanteds rewrite Wanteds]

data FrontendResult Source #

`FrontendResult` describes the result of running the frontend of a Haskell module. Currently one always gets a `FrontendTypecheck`, since running the frontend involves typechecking a program. hs-sig merges are not handled here.

This data type really should be in GHC.Driver.Env, but it needs to have a TcGblEnv which is only defined here.

Constructors

FrontendTypecheck TcGblEnv |

type ErrCtxt = (Bool, TidyEnv -> TcM (TidyEnv, SDoc)) Source #

type RecFieldEnv = NameEnv [FieldLabel] Source #

pushErrCtxt :: CtOrigin -> ErrCtxt -> CtLoc -> CtLoc Source #

pushErrCtxtSameOrigin :: ErrCtxt -> CtLoc -> CtLoc Source #

data ImportAvails Source #

`ImportAvails` summarises what was imported from where, irrespective of whether the imported things are actually used or not. It is used:

- when processing the export list,
- when constructing usage info for the interface file,
- to identify the list of directly imported modules for initialisation purposes and for optimised overlap checking of family instances,
- when figuring out what things are really unused

Constructors

ImportAvails |

Fields

- imp_mods :: ImportedMods

  Domain is all directly-imported modules

  See the documentation on ImportedModsVal in GHC.Unit.Module.Imported for the meaning of the fields.

  We need a full ModuleEnv rather than a ModuleNameEnv here, because we might be importing modules of the same name from different packages. (currently not the case, but might be in the future).

- imp_direct_dep_mods :: InstalledModuleEnv ModuleNameWithIsBoot

  Home-package modules directly imported by the module being compiled.

- imp_dep_direct_pkgs :: Set UnitId

  Packages directly needed by the module being compiled

- imp_trust_own_pkg :: Bool

  Do we require that our own package is trusted? This is to handle efficiently the case where a Safe module imports a Trustworthy module that resides in the same package as it. See Note [Trust Own Package] in GHC.Rename.Names

- imp_trust_pkgs :: Set UnitId

  This records the packages the current module needs to trust for Safe Haskell compilation to succeed. A package is required to be trusted if we are dependent on a trustworthy module in that package. See Note [Tracking Trust Transitively] in GHC.Rename.Names

- imp_boot_mods :: InstalledModuleEnv ModuleNameWithIsBoot

  Domain is all modules which have hs-boot files, and whether we should import the boot version of interface file. Only used in one-shot mode to populate eps_is_boot.

- imp_sig_mods :: [ModuleName]

  Signature modules below this one

- imp_orphs :: [Module]

  Orphan modules below us in the import tree (and maybe including us for imported modules)

- imp_finsts :: [Module]

  Family instance modules below us in the import tree (and maybe including us for imported modules)

emptyImportAvails :: ImportAvails Source #

plusImportAvails :: ImportAvails -> ImportAvails -> ImportAvails Source #

Union two ImportAvails

This function is a key part of Import handling, basically for each import we create a separate ImportAvails structure and then union them all together with this function.

data WhereFrom Source #

Constructors

ImportByUser IsBootInterface |
ImportBySystem |
ImportByPlugin |

#### Instances

Instances details

Outputable WhereFrom Source # |
Instance details Defined in GHC.Tc.Types Methods ppr :: WhereFrom -> SDoc Source #

mkModDeps :: Set (UnitId, ModuleNameWithIsBoot) -> InstalledModuleEnv ModuleNameWithIsBoot Source #

type TcTypeEnv = NameEnv TcTyThing Source #

type TcBinderStack = [TcBinder] Source #

data TcBinder Source #

Constructors

TcIdBndr TcId TopLevelFlag |
TcIdBndr_ExpType Name ExpType TopLevelFlag |
TcTvBndr Name TyVar |

#### Instances

Instances details

HasOccName TcBinder Source # |
Instance details Defined in GHC.Tc.Types Methods occName :: TcBinder -> OccName Source #
Outputable TcBinder Source # |
Instance details Defined in GHC.Tc.Types Methods ppr :: TcBinder -> SDoc Source #

data TcTyThing Source #

A typecheckable thing available in a local context. Could be `AGlobal` `TyThing`, but also lexically scoped variables, etc. See GHC.Tc.Utils.Env for how to retrieve a `TyThing` given a `Name`.

Constructors

AGlobal TyThing |
ATcId |

Fields

- tct_id :: TcId
- tct_info :: IdBindingInfo

ATyVar Name TcTyVar |
ATcTyCon TyCon |
APromotionErr PromotionErr |

#### Instances

Instances details

Outputable TcTyThing Source # |
Instance details Defined in GHC.Tc.Types Methods ppr :: TcTyThing -> SDoc Source #

tcTyThingTyCon_maybe :: TcTyThing -> Maybe TyCon Source #

Matches on either a global `TyCon` or a `TcTyCon`.

data PromotionErr Source #

Constructors

TyConPE |
ClassPE |
FamDataConPE |
ConstrainedDataConPE PredType |
PatSynPE |
RecDataConPE |
TermVariablePE |
NoDataKindsDC |

#### Instances

Instances details

Outputable PromotionErr Source # |
Instance details Defined in GHC.Tc.Errors.Types Methods ppr :: PromotionErr -> SDoc Source #

data IdBindingInfo Source #

IdBindingInfo describes how an Id is bound.

It is used for the following purposes: a) for static forms in `checkClosedInStaticForm` and b) to figure out when a nested binding can be generalised, in `decideGeneralisationPlan`.

Constructors

NotLetBound |
ClosedLet |
NonClosedLet RhsNames ClosedTypeId |

#### Instances

Instances details

Outputable IdBindingInfo Source # |
Instance details Defined in GHC.Tc.Types Methods ppr :: IdBindingInfo -> SDoc Source #

type ClosedTypeId = Bool Source #

type RhsNames = NameSet Source #

data IsGroupClosed Source #

IsGroupClosed describes a group of mutually-recursive bindings

Constructors

IsGroupClosed (NameEnv RhsNames) ClosedTypeId |

data SelfBootInfo Source #

Constructors

NoSelfBoot |
SelfBoot |

Fields

- sb_mds :: ModDetails
- sb_tcs :: NameSet

bootExports :: SelfBootInfo -> NameSet Source #

tcTyThingCategory :: TcTyThing -> String Source #

pprTcTyThingCategory :: TcTyThing -> SDoc Source #

peCategory :: PromotionErr -> String Source #

pprPECategory :: PromotionErr -> SDoc Source #

data CompleteMatch Source #

A list of conlikes which represents a complete pattern match. These arise from `COMPLETE` signatures. See also Note [Implementation of COMPLETE pragmas].

#### Instances

Instances details

Outputable CompleteMatch Source # |
Instance details Defined in GHC.Types.CompleteMatch Methods ppr :: CompleteMatch -> SDoc Source #

type CompleteMatches = [CompleteMatch] Source #

data ThStage Source #

Constructors

Splice SpliceType |
RunSplice (TcRef [ForeignRef (Q ())]) |
Comp |
Brack ThStage PendingStuff |

#### Instances

Instances details

Outputable ThStage Source # |
Instance details Defined in GHC.Tc.Types Methods ppr :: ThStage -> SDoc Source #

data SpliceType Source #

Constructors

Typed |
Untyped |

data PendingStuff Source #

Constructors

RnPendingUntyped (TcRef [PendingRnSplice]) |
RnPendingTyped |
TcPending (TcRef [PendingTcSplice]) (TcRef WantedConstraints) QuoteWrapper |

topStage :: ThStage Source #

topAnnStage :: ThStage Source #

topSpliceStage :: ThStage Source #

type ThLevel = Int Source #

impLevel :: ThLevel Source #

outerLevel :: ThLevel Source #

thLevel :: ThStage -> ThLevel Source #

data ForeignSrcLang #

Constructors

LangC |
LangCxx |
LangObjc |
LangObjcxx |
LangAsm |
LangJs |
RawObject |

#### Instances

Instances details

Generic ForeignSrcLang |
Instance details Defined in GHC.ForeignSrcLang.Type Associated Types type Rep ForeignSrcLang :: Type -> Type Source # Methods from :: ForeignSrcLang -> Rep ForeignSrcLang x Source # to :: Rep ForeignSrcLang x -> ForeignSrcLang Source #
Show ForeignSrcLang |
Instance details Defined in GHC.ForeignSrcLang.Type Methods showsPrec :: Int -> ForeignSrcLang -> ShowS Source # show :: ForeignSrcLang -> String Source # showList :: [ForeignSrcLang] -> ShowS Source #
Eq ForeignSrcLang |
Instance details Defined in GHC.ForeignSrcLang.Type Methods (==) :: ForeignSrcLang -> ForeignSrcLang -> Bool # (/=) :: ForeignSrcLang -> ForeignSrcLang -> Bool #
type Rep ForeignSrcLang |

Instance details

Defined in GHC.ForeignSrcLang.Type

type Rep ForeignSrcLang = D1 ('MetaData "ForeignSrcLang" "GHC.ForeignSrcLang.Type" "ghc-boot-th-9.6.3" 'False) ((C1 ('MetaCons "LangC" 'PrefixI 'False) (U1 :: Type -> Type) :+: (C1 ('MetaCons "LangCxx" 'PrefixI 'False) (U1 :: Type -> Type) :+: C1 ('MetaCons "LangObjc" 'PrefixI 'False) (U1 :: Type -> Type))) :+: ((C1 ('MetaCons "LangObjcxx" 'PrefixI 'False) (U1 :: Type -> Type) :+: C1 ('MetaCons "LangAsm" 'PrefixI 'False) (U1 :: Type -> Type)) :+: (C1 ('MetaCons "LangJs" 'PrefixI 'False) (U1 :: Type -> Type) :+: C1 ('MetaCons "RawObject" 'PrefixI 'False) (U1 :: Type -> Type))))

type THDocs = Map DocLoc (HsDoc GhcRn) Source #

The current collection of docs that Template Haskell has built up via putDoc.

data DocLoc Source #

This is a mirror of Template Haskell's DocLoc, but the TH names are resolved to GHC names.

Constructors

DeclDoc Name |
ArgDoc Name Int |
InstDoc Name |
ModuleDoc |

#### Instances

Instances details

Eq DocLoc Source # |
Instance details Defined in GHC.Tc.Types Methods (==) :: DocLoc -> DocLoc -> Bool # (/=) :: DocLoc -> DocLoc -> Bool #
Ord DocLoc Source # |
Instance details Defined in GHC.Tc.Types Methods compare :: DocLoc -> DocLoc -> Ordering # (<) :: DocLoc -> DocLoc -> Bool # (<=) :: DocLoc -> DocLoc -> Bool # (>) :: DocLoc -> DocLoc -> Bool # (>=) :: DocLoc -> DocLoc -> Bool # max :: DocLoc -> DocLoc -> DocLoc # min :: DocLoc -> DocLoc -> DocLoc #

type ThBindEnv = NameEnv (TopLevelFlag, ThLevel) Source #

data ArrowCtxt Source #

Constructors

NoArrowCtxt |
ArrowCtxt LocalRdrEnv (TcRef WantedConstraints) |

type TcSigFun = Name -> Maybe TcSigInfo Source #

data TcSigInfo Source #

Constructors

TcIdSig TcIdSigInfo |
TcPatSynSig TcPatSynInfo |

#### Instances

Instances details

Outputable TcSigInfo Source # |
Instance details Defined in GHC.Tc.Types Methods ppr :: TcSigInfo -> SDoc Source #

data TcIdSigInfo Source #

Constructors

CompleteSig |

Fields

- sig_bndr :: TcId
- sig_ctxt :: UserTypeCtxt
- sig_loc :: SrcSpan

PartialSig |

Fields

- psig_name :: Name
- psig_hs_ty :: LHsSigWcType GhcRn
- sig_ctxt :: UserTypeCtxt
- sig_loc :: SrcSpan

#### Instances

Instances details

Outputable TcIdSigInfo Source # |
Instance details Defined in GHC.Tc.Types Methods ppr :: TcIdSigInfo -> SDoc Source #

data TcIdSigInst Source #

Constructors

TISI |

Fields

- sig_inst_sig :: TcIdSigInfo
- sig_inst_skols :: [(Name, InvisTVBinder)]
- sig_inst_theta :: TcThetaType
- sig_inst_tau :: TcSigmaType
- sig_inst_wcs :: [(Name, TcTyVar)]
- sig_inst_wcx :: Maybe TcType

#### Instances

Instances details

Outputable TcIdSigInst Source # |
Instance details Defined in GHC.Tc.Types Methods ppr :: TcIdSigInst -> SDoc Source #

data TcPatSynInfo Source #

Constructors

TPSI |

Fields

- patsig_name :: Name
- patsig_implicit_bndrs :: [InvisTVBinder]
- patsig_univ_bndrs :: [InvisTVBinder]
- patsig_req :: TcThetaType
- patsig_ex_bndrs :: [InvisTVBinder]
- patsig_prov :: TcThetaType
- patsig_body_ty :: TcSigmaType

#### Instances

Instances details

Outputable TcPatSynInfo Source # |
Instance details Defined in GHC.Tc.Types Methods ppr :: TcPatSynInfo -> SDoc Source #

isPartialSig :: TcIdSigInst -> Bool Source #

hasCompleteSig :: TcSigFun -> Name -> Bool Source #

No signature or a partial signature

type TcId = Id Source #

type TcIdSet = IdSet Source #

data NameShape Source #

A `NameShape` is a substitution on `Name`s that can be used to refine the identities of a hole while we are renaming interfaces (see GHC.Iface.Rename). Specifically, a `NameShape` for `ns_module_name` `A`, defines a mapping from `{A.T}` (for some `OccName` `T`) to some arbitrary other `Name`.

The most intriguing thing about a `NameShape`, however, is how it's constructed. A `NameShape` is *implied* by the exported `AvailInfo`s of the implementor of an interface: if an implementor of signature `<H>` exports `M.T`, you implicitly define a substitution from `{H.T}` to `M.T`. So a `NameShape` is computed from the list of `AvailInfo`s that are exported by the implementation of a module, or successively merged together by the export lists of signatures which are joining together.

It's not the most obvious way to go about doing this, but it does seem to work!

NB: Can't boot this and put it in NameShape because then we start pulling in too many DynFlags things.

Constructors

NameShape |

Fields

- ns_mod_name :: ModuleName
- ns_exports :: [AvailInfo]
- ns_map :: OccEnv Name

removeBindingShadowing :: HasOccName a => [a] -> [a] Source #

getPlatform :: TcRnIf a b Platform Source #

Get target platform

data TcPlugin Source #

Constructors

forall s. TcPlugin |

Fields

- tcPluginInit :: TcPluginM s

  Initialize plugin, when entering type-checker.

- tcPluginSolve :: s -> TcPluginSolver

  Solve some constraints.

  This function will be invoked at two points in the constraint solving process: once to simplify Given constraints, and once to solve Wanted constraints. In the first case (and only in the first case), no Wanted constraints will be passed to the plugin.

  The plugin can either return a contradiction, or specify that it has solved some constraints (with evidence), and possibly emit additional constraints. These returned constraints must be Givens in the first case, and Wanteds in the second.

  Use `\ _ _ _ _ _ -> pure $ TcPluginOK [] []` if your plugin does not provide this functionality.

- tcPluginRewrite :: s -> UniqFM TyCon TcPluginRewriter

  Rewrite saturated type family applications.

  The plugin is expected to supply a mapping from type family names to rewriting functions. For each type family `TyCon`, the plugin should provide a function which takes in the given constraints and arguments of a saturated type family application, and return a possible rewriting. See `TcPluginRewriter` for the expected shape of such a function.

  Use `\ _ -> emptyUFM` if your plugin does not provide this functionality.

- tcPluginStop :: s -> TcPluginM ()

  Clean up after the plugin, when exiting the type-checker.

data TcPluginSolveResult Source #

Result of running a solver plugin.

Constructors

TcPluginSolveResult |

Fields

- tcPluginInsolubleCts :: [Ct]

  Insoluble constraints found by the plugin.

  These constraints will be added to the inert set, and reported as insoluble to the user.

- tcPluginSolvedCts :: [(EvTerm, Ct)]

  Solved constraints, together with their evidence.

  These are removed from the inert set, and the evidence for them is recorded.

- tcPluginNewCts :: [Ct]

  New constraints that the plugin wishes to emit.

  These will be added to the work list.

Bundled Patterns

pattern TcPluginContradiction :: [Ct] -> TcPluginSolveResult | The plugin found a contradiction. The returned constraints are removed from the inert set, and recorded as insoluble. The returned list of constraints should never be empty.
pattern TcPluginOk :: [(EvTerm, Ct)] -> [Ct] -> TcPluginSolveResult | The plugin has not found any contradictions, The first field is for constraints that were solved. The second field contains new work, that should be processed by the constraint solver.

data TcPluginRewriteResult Source #

Constructors

TcPluginNoRewrite | The plugin does not rewrite the type family application.
TcPluginRewriteTo | The plugin rewrites the type family application providing a rewriting together with evidence: a `Reduction`, which contains the rewritten type together with a `Coercion` whose right-hand-side type is the rewritten type. The plugin can also emit additional Wanted constraints.

Fields

- tcPluginReduction :: !Reduction
- tcRewriterNewWanteds :: [Ct]

type TcPluginSolver Source #

Arguments

= EvBindsVar |
-> [Ct] | Givens
-> [Ct] | Wanteds
-> TcPluginM TcPluginSolveResult |

The `solve` function of a type-checking plugin takes in Given and Wanted constraints, and should return a `TcPluginSolveResult` indicating which Wanted constraints it could solve, or whether any are insoluble.

type TcPluginRewriter Source #

Arguments

= RewriteEnv | Rewriter environment
-> [Ct] | Givens
-> [TcType] | type family arguments
-> TcPluginM TcPluginRewriteResult |

For rewriting type family applications, a type-checking plugin provides a function of this type for each type family `TyCon`.

The function is provided with the current set of Given constraints, together with the arguments to the type family. The type family application will always be fully saturated.

data TcPluginM a Source #

`TcPluginM` is the monad in which type-checking plugins operate.

#### Instances

Instances details

MonadFail TcPluginM Source # |
Instance details Defined in GHC.Tc.Types Methods fail :: String -> TcPluginM a Source #
Applicative TcPluginM Source # |
Instance details Defined in GHC.Tc.Types Methods pure :: a -> TcPluginM a Source # (<*>) :: TcPluginM (a -> b) -> TcPluginM a -> TcPluginM b Source # liftA2 :: (a -> b -> c) -> TcPluginM a -> TcPluginM b -> TcPluginM c Source # (*>) :: TcPluginM a -> TcPluginM b -> TcPluginM b Source # (<*) :: TcPluginM a -> TcPluginM b -> TcPluginM a Source #
Functor TcPluginM Source # |
Instance details Defined in GHC.Tc.Types Methods fmap :: (a -> b) -> TcPluginM a -> TcPluginM b Source # (<$) :: a -> TcPluginM b -> TcPluginM a Source #
Monad TcPluginM Source # |
Instance details Defined in GHC.Tc.Types Methods (>>=) :: TcPluginM a -> (a -> TcPluginM b) -> TcPluginM b Source # (>>) :: TcPluginM a -> TcPluginM b -> TcPluginM b Source # return :: a -> TcPluginM a Source #

unsafeTcPluginTcM :: TcM a -> TcPluginM a Source #

This function provides an escape for direct access to the `TcM` monad. It should not be used lightly, and the provided `TcPluginM` API should be favoured instead.

data DefaultingPlugin Source #

A plugin for controlling defaulting.

Constructors

forall s. DefaultingPlugin |

Fields

- dePluginInit :: TcPluginM s

  Initialize plugin, when entering type-checker.

- dePluginRun :: s -> FillDefaulting

  Default some types

- dePluginStop :: s -> TcPluginM ()

  Clean up after the plugin, when exiting the type-checker.

data DefaultingProposal Source #

A collection of candidate default types for a type variable.

Constructors

DefaultingProposal |

Fields

- deProposalTyVar :: TcTyVar

  The type variable to default.

- deProposalCandidates :: [Type]

  Candidate types to default the type variable to.

- deProposalCts :: [Ct]

  The constraints against which defaults are checked.

#### Instances

Instances details

Outputable DefaultingProposal Source # |
Instance details Defined in GHC.Tc.Types Methods ppr :: DefaultingProposal -> SDoc Source #

type FillDefaulting = WantedConstraints -> TcPluginM [DefaultingProposal] Source #

type DefaultingPluginResult = [DefaultingProposal] Source #

type RoleAnnotEnv = NameEnv (LRoleAnnotDecl GhcRn) Source #

emptyRoleAnnotEnv :: RoleAnnotEnv Source #

mkRoleAnnotEnv :: [LRoleAnnotDecl GhcRn] -> RoleAnnotEnv Source #

lookupRoleAnnot :: RoleAnnotEnv -> Name -> Maybe (LRoleAnnotDecl GhcRn) Source #

getRoleAnnots :: [Name] -> RoleAnnotEnv -> [LRoleAnnotDecl GhcRn] Source #

lintGblEnv :: Logger -> DynFlags -> TcGblEnv -> TcM () Source #

Check the `TcGblEnv` for consistency. Currently, only checks axioms, but should check other aspects, too.

data TcRnMessage Source #

An error which might arise during typechecking/renaming.

#### Instances

Instances details

Generic TcRnMessage Source # |
Instance details Defined in GHC.Tc.Errors.Types Associated Types type Rep TcRnMessage :: Type -> Type Source # Methods from :: TcRnMessage -> Rep TcRnMessage x Source # to :: Rep TcRnMessage x -> TcRnMessage Source #
Diagnostic TcRnMessage Source # |

Instance details

Defined in GHC.Tc.Errors.Ppr

Associated Types

type DiagnosticOpts TcRnMessage Source #

Methods

defaultDiagnosticOpts :: DiagnosticOpts TcRnMessage Source #

diagnosticMessage :: DiagnosticOpts TcRnMessage -> TcRnMessage -> DecoratedSDoc Source #

diagnosticReason :: TcRnMessage -> DiagnosticReason Source #

diagnosticHints :: TcRnMessage -> [GhcHint] Source #

diagnosticCode :: TcRnMessage -> Maybe DiagnosticCode Source #

type Rep TcRnMessage Source # |

Instance details

Defined in GHC.Tc.Errors.Types

type Rep TcRnMessage = D1 ('MetaData "TcRnMessage" "GHC.Tc.Errors.Types" "ghc" 'False) (((((((C1 ('MetaCons "TcRnUnknownMessage" 'PrefixI 'False) (S1 ('MetaSel ('Nothing :: Maybe Symbol) 'NoSourceUnpackedness 'NoSourceStrictness 'DecidedLazy) (Rec0 UnknownDiagnostic)) :+: C1 ('MetaCons "TcRnMessageWithInfo" 'PrefixI 'False) (S1 ('MetaSel ('Nothing :: Maybe Symbol) 'NoSourceUnpackedness 'SourceStrict 'DecidedStrict) (Rec0 UnitState) :*: S1 ('MetaSel ('Nothing :: Maybe Symbol) 'NoSourceUnpackedness 'SourceStrict 'DecidedStrict) (Rec0 TcRnMessageDetailed))) :+: (C1 ('MetaCons "TcRnWithHsDocContext" 'PrefixI 'False) (S1 ('MetaSel ('Nothing :: Maybe Symbol) 'NoSourceUnpackedness 'SourceStrict 'DecidedStrict) (Rec0 HsDocContext) :*: S1 ('MetaSel ('Nothing :: Maybe Symbol) 'NoSourceUnpackedness 'SourceStrict 'DecidedStrict) (Rec0 TcRnMessage)) :+: (C1 ('MetaCons "TcRnSolverReport" 'PrefixI 'False) (S1 ('MetaSel ('Nothing :: Maybe Symbol) 'NoSourceUnpackedness 'NoSourceStrictness 'DecidedLazy) (Rec0 SolverReportWithCtxt) :*: (S1 ('MetaSel ('Nothing :: Maybe Symbol) 'NoSourceUnpackedness 'NoSourceStrictness 'DecidedLazy) (Rec0 DiagnosticReason) :*: S1 ('MetaSel ('Nothing :: Maybe Symbol) 'NoSourceUnpackedness 'NoSourceStrictness 'DecidedLazy) (Rec0 [GhcHint]))) :+: C1 ('MetaCons "TcRnRedundantConstraints" 'PrefixI 'False) (S1 ('MetaSel ('Nothing :: Maybe Symbol) 'NoSourceUnpackedness 'NoSourceStrictness 'DecidedLazy) (Rec0 [Id]) :*: S1 ('MetaSel ('Nothing :: Maybe Symbol) 'NoSourceUnpackedness 'NoSourceStrictness 'DecidedLazy) (Rec0 (SkolemInfoAnon, Bool)))))) :+: ((C1 ('MetaCons "TcRnInaccessibleCode" 'PrefixI 'False) (S1 ('MetaSel ('Nothing :: Maybe Symbol) 'NoSourceUnpackedness 'NoSourceStrictness 'DecidedLazy) (Rec0 Implication) :*: S1 ('MetaSel ('Nothing :: Maybe Symbol) 'NoSourceUnpackedness 'NoSourceStrictness 'DecidedLazy) (Rec0 SolverReportWithCtxt)) :+: (C1 ('MetaCons "TcRnTypeDoesNotHaveFixedRuntimeRep" 'PrefixI 'False) (S1 ('MetaSel ('Nothing :: Maybe Symbol) 'NoSourceUnpackedness 'SourceStrict 'DecidedStrict) (Rec0 Type) :*: (S1 ('MetaSel ('Nothing :: Maybe Symbol) 'NoSourceUnpackedness 'SourceStrict 'DecidedStrict) (Rec0 FixedRuntimeRepProvenance) :*: S1 ('MetaSel ('Nothing :: Maybe Symbol) 'NoSourceUnpackedness 'SourceStrict 'DecidedStrict) (Rec0 ErrInfo))) :+: C1 ('MetaCons "TcRnImplicitLift" 'PrefixI 'False) (S1 ('MetaSel ('Nothing :: Maybe Symbol) 'NoSourceUnpackedness 'NoSourceStrictness 'DecidedLazy) (Rec0 Name) :*: S1 ('MetaSel ('Nothing :: Maybe Symbol) 'NoSourceUnpackedness 'SourceStrict 'DecidedStrict) (Rec0 ErrInfo)))) :+: (C1 ('MetaCons "TcRnUnusedPatternBinds" 'PrefixI 'False) (S1 ('MetaSel ('Nothing :: Maybe Symbol) 'NoSourceUnpackedness 'NoSourceStrictness 'DecidedLazy) (Rec0 (HsBind GhcRn))) :+: (C1 ('MetaCons "TcRnDodgyImports" 'PrefixI 'False) (S1 ('MetaSel ('Nothing :: Maybe Symbol) 'NoSourceUnpackedness 'NoSourceStrictness 'DecidedLazy) (Rec0 RdrName)) :+: C1 ('MetaCons "TcRnDodgyExports" 'PrefixI 'False) (S1 ('MetaSel ('Nothing :: Maybe Symbol) 'NoSourceUnpackedness 'NoSourceStrictness 'DecidedLazy) (Rec0 Name)))))) :+: (((C1 ('MetaCons "TcRnMissingImportList" 'PrefixI 'False) (S1 ('MetaSel ('Nothing :: Maybe Symbol) 'NoSourceUnpackedness 'NoSourceStrictness 'DecidedLazy) (Rec0 (IE GhcPs))) :+: (C1 ('MetaCons "TcRnUnsafeDueToPlugin" 'PrefixI 'False) (U1 :: Type -> Type) :+: C1 ('MetaCons "TcRnModMissingRealSrcSpan" 'PrefixI 'False) (S1 ('MetaSel ('Nothing :: Maybe Symbol) 'NoSourceUnpackedness 'NoSourceStrictness 'DecidedLazy) (Rec0 Module)))) :+: (C1 ('MetaCons "TcRnIdNotExportedFromModuleSig" 'PrefixI 'False) (S1 ('MetaSel ('Nothing :: Maybe Symbol) 'NoSourceUnpackedness 'NoSourceStrictness 'DecidedLazy) (Rec0 Name) :*: S1 ('MetaSel ('Nothing :: Maybe Symbol) 'NoSourceUnpackedness 'NoSourceStrictness 'DecidedLazy) (Rec0 Module)) :+: (C1 ('MetaCons "TcRnIdNotExportedFromLocalSig" 'PrefixI 'False) (S1 ('MetaSel ('Nothing :: Maybe Symbol) 'NoSourceUnpackedness 'NoSourceStrictness 'DecidedLazy) (Rec0 Name)) :+: C1 ('MetaCons "TcRnShadowedName" 'PrefixI 'False) (S1 ('MetaSel ('Nothing :: Maybe Symbol) 'NoSourceUnpackedness 'NoSourceStrictness 'DecidedLazy) (Rec0 OccName) :*: S1 ('MetaSel ('Nothing :: Maybe Symbol) 'NoSourceUnpackedness 'NoSourceStrictness 'DecidedLazy) (Rec0 ShadowedNameProvenance))))) :+: ((C1 ('MetaCons "TcRnDuplicateWarningDecls" 'PrefixI 'False) (S1 ('MetaSel ('Nothing :: Maybe Symbol) 'NoSourceUnpackedness 'SourceStrict 'DecidedStrict) (Rec0 (LocatedN RdrName)) :*: S1 ('MetaSel ('Nothing :: Maybe Symbol) 'NoSourceUnpackedness 'SourceStrict 'DecidedStrict) (Rec0 RdrName)) :+: (C1 ('MetaCons "TcRnSimplifierTooManyIterations" 'PrefixI 'False) (S1 ('MetaSel ('Nothing :: Maybe Symbol) 'NoSourceUnpackedness 'NoSourceStrictness 'DecidedLazy) (Rec0 Cts) :*: (S1 ('MetaSel ('Nothing :: Maybe Symbol) 'NoSourceUnpackedness 'SourceStrict 'DecidedStrict) (Rec0 IntWithInf) :*: S1 ('MetaSel ('Nothing :: Maybe Symbol) 'NoSourceUnpackedness 'NoSourceStrictness 'DecidedLazy) (Rec0 WantedConstraints))) :+: C1 ('MetaCons "TcRnIllegalPatSynDecl" 'PrefixI 'False) (S1 ('MetaSel ('Nothing :: Maybe Symbol) 'NoSourceUnpackedness 'SourceStrict 'DecidedStrict) (Rec0 (LIdP GhcPs))))) :+: (C1 ('MetaCons "TcRnLinearPatSyn" 'PrefixI 'False) (S1 ('MetaSel ('Nothing :: Maybe Symbol) 'NoSourceUnpackedness 'SourceStrict 'DecidedStrict) (Rec0 Type)) :+: (C1 ('MetaCons "TcRnEmptyRecordUpdate" 'PrefixI 'False) (U1 :: Type -> Type) :+: C1 ('MetaCons "TcRnIllegalFieldPunning" 'PrefixI 'False) (S1 ('MetaSel ('Nothing :: Maybe Symbol) 'NoSourceUnpackedness 'SourceStrict 'DecidedStrict) (Rec0 (Located RdrName)))))))) :+: ((((C1 ('MetaCons "TcRnIllegalWildcardsInRecord" 'PrefixI 'False) (S1 ('MetaSel ('Nothing :: Maybe Symbol) 'NoSourceUnpackedness 'SourceStrict 'DecidedStrict) (Rec0 RecordFieldPart)) :+: (C1 ('MetaCons "TcRnIllegalWildcardInType" 'PrefixI 'False) (S1 ('MetaSel ('Nothing :: Maybe Symbol) 'NoSourceUnpackedness 'NoSourceStrictness 'DecidedLazy) (Rec0 (Maybe Name)) :*: S1 ('MetaSel ('Nothing :: Maybe Symbol) 'NoSourceUnpackedness 'SourceStrict 'DecidedStrict) (Rec0 BadAnonWildcardContext)) :+: C1 ('MetaCons "TcRnDuplicateFieldName" 'PrefixI 'False) (S1 ('MetaSel ('Nothing :: Maybe Symbol) 'NoSourceUnpackedness 'SourceStrict 'DecidedStrict) (Rec0 RecordFieldPart) :*: S1 ('MetaSel ('Nothing :: Maybe Symbol) 'NoSourceUnpackedness 'NoSourceStrictness 'DecidedLazy) (Rec0 (NonEmpty RdrName))))) :+: (C1 ('MetaCons "TcRnIllegalViewPattern" 'PrefixI 'False) (S1 ('MetaSel ('Nothing :: Maybe Symbol) 'NoSourceUnpackedness 'SourceStrict 'DecidedStrict) (Rec0 (Pat GhcPs))) :+: (C1 ('MetaCons "TcRnCharLiteralOutOfRange" 'PrefixI 'False) (S1 ('MetaSel ('Nothing :: Maybe Symbol) 'NoSourceUnpackedness 'SourceStrict 'DecidedStrict) (Rec0 Char)) :+: C1 ('MetaCons "TcRnIllegalWildcardsInConstructor" 'PrefixI 'False) (S1 ('MetaSel ('Nothing :: Maybe Symbol) 'NoSourceUnpackedness 'SourceStrict 'DecidedStrict) (Rec0 Name))))) :+: ((C1 ('MetaCons "TcRnIgnoringAnnotations" 'PrefixI 'False) (S1 ('MetaSel ('Nothing :: Maybe Symbol) 'NoSourceUnpackedness 'NoSourceStrictness 'DecidedLazy) (Rec0 [LAnnDecl GhcRn])) :+: (C1 ('MetaCons "TcRnAnnotationInSafeHaskell" 'PrefixI 'False) (U1 :: Type -> Type) :+: C1 ('MetaCons "TcRnInvalidTypeApplication" 'PrefixI 'False) (S1 ('MetaSel ('Nothing :: Maybe Symbol) 'NoSourceUnpackedness 'NoSourceStrictness 'DecidedLazy) (Rec0 Type) :*: S1 ('MetaSel ('Nothing :: Maybe Symbol) 'NoSourceUnpackedness 'NoSourceStrictness 'DecidedLazy) (Rec0 (LHsWcType GhcRn))))) :+: (C1 ('MetaCons "TcRnTagToEnumMissingValArg" 'PrefixI 'False) (U1 :: Type -> Type) :+: (C1 ('MetaCons "TcRnTagToEnumUnspecifiedResTy" 'PrefixI 'False) (S1 ('MetaSel ('Nothing :: Maybe Symbol) 'NoSourceUnpackedness 'NoSourceStrictness 'DecidedLazy) (Rec0 Type)) :+: C1 ('MetaCons "TcRnTagToEnumResTyNotAnEnum" 'PrefixI 'False) (S1 ('MetaSel ('Nothing :: Maybe Symbol) 'NoSourceUnpackedness 'NoSourceStrictness 'DecidedLazy) (Rec0 Type)))))) :+: (((C1 ('MetaCons "TcRnTagToEnumResTyTypeData" 'PrefixI 'False) (S1 ('MetaSel ('Nothing :: Maybe Symbol) 'NoSourceUnpackedness 'NoSourceStrictness 'DecidedLazy) (Rec0 Type)) :+: (C1 ('MetaCons "TcRnArrowIfThenElsePredDependsOnResultTy" 'PrefixI 'False) (U1 :: Type -> Type) :+: C1 ('MetaCons "TcRnIllegalHsBootFileDecl" 'PrefixI 'False) (U1 :: Type -> Type))) :+: (C1 ('MetaCons "TcRnRecursivePatternSynonym" 'PrefixI 'False) (S1 ('MetaSel ('Nothing :: Maybe Symbol) 'NoSourceUnpackedness 'NoSourceStrictness 'DecidedLazy) (Rec0 (LHsBinds GhcRn))) :+: (C1 ('MetaCons "TcRnPartialTypeSigTyVarMismatch" 'PrefixI 'False) ((S1 ('MetaSel ('Nothing :: Maybe Symbol) 'NoSourceUnpackedness 'NoSourceStrictness 'DecidedLazy) (Rec0 Name) :*: S1 ('MetaSel ('Nothing :: Maybe Symbol) 'NoSourceUnpackedness 'NoSourceStrictness 'DecidedLazy) (Rec0 Name)) :*: (S1 ('MetaSel ('Nothing :: Maybe Symbol) 'NoSourceUnpackedness 'NoSourceStrictness 'DecidedLazy) (Rec0 Name) :*: S1 ('MetaSel ('Nothing :: Maybe Symbol) 'NoSourceUnpackedness 'NoSourceStrictness 'DecidedLazy) (Rec0 (LHsSigWcType GhcRn)))) :+: C1 ('MetaCons "TcRnPartialTypeSigBadQuantifier" 'PrefixI 'False) ((S1 ('MetaSel ('Nothing :: Maybe Symbol) 'NoSourceUnpackedness 'NoSourceStrictness 'DecidedLazy) (Rec0 Name) :*: S1 ('MetaSel ('Nothing :: Maybe Symbol) 'NoSourceUnpackedness 'NoSourceStrictness 'DecidedLazy) (Rec0 Name)) :*: (S1 ('MetaSel ('Nothing :: Maybe Symbol) 'NoSourceUnpackedness 'NoSourceStrictness 'DecidedLazy) (Rec0 (Maybe Type)) :*: S1 ('MetaSel ('Nothing :: Maybe Symbol) 'NoSourceUnpackedness 'NoSourceStrictness 'DecidedLazy) (Rec0 (LHsSigWcType GhcRn))))))) :+: ((C1 ('MetaCons "TcRnMissingSignature" 'PrefixI 'False) (S1 ('MetaSel ('Nothing :: Maybe Symbol) 'NoSourceUnpackedness 'NoSourceStrictness 'DecidedLazy) (Rec0 MissingSignature) :*: (S1 ('MetaSel ('Nothing :: Maybe Symbol) 'NoSourceUnpackedness 'NoSourceStrictness 'DecidedLazy) (Rec0 Exported) :*: S1 ('MetaSel ('Nothing :: Maybe Symbol) 'NoSourceUnpackedness 'NoSourceStrictness 'DecidedLazy) (Rec0 Bool))) :+: (C1 ('MetaCons "TcRnPolymorphicBinderMissingSig" 'PrefixI 'False) (S1 ('MetaSel ('Nothing :: Maybe Symbol) 'NoSourceUnpackedness 'NoSourceStrictness 'DecidedLazy) (Rec0 Name) :*: S1 ('MetaSel ('Nothing :: Maybe Symbol) 'NoSourceUnpackedness 'NoSourceStrictness 'DecidedLazy) (Rec0 Type)) :+: C1 ('MetaCons "TcRnOverloadedSig" 'PrefixI 'False) (S1 ('MetaSel ('Nothing :: Maybe Symbol) 'NoSourceUnpackedness 'NoSourceStrictness 'DecidedLazy) (Rec0 TcIdSigInfo)))) :+: (C1 ('MetaCons "TcRnTupleConstraintInst" 'PrefixI 'False) (S1 ('MetaSel ('Nothing :: Maybe Symbol) 'NoSourceUnpackedness 'SourceStrict 'DecidedStrict) (Rec0 Class)) :+: (C1 ('MetaCons "TcRnAbstractClassInst" 'PrefixI 'False) (S1 ('MetaSel ('Nothing :: Maybe Symbol) 'NoSourceUnpackedness 'SourceStrict 'DecidedStrict) (Rec0 Class)) :+: C1 ('MetaCons "TcRnNoClassInstHead" 'PrefixI 'False) (S1 ('MetaSel ('Nothing :: Maybe Symbol) 'NoSourceUnpackedness 'SourceStrict 'DecidedStrict) (Rec0 Type)))))))) :+: (((((C1 ('MetaCons "TcRnUserTypeError" 'PrefixI 'False) (S1 ('MetaSel ('Nothing :: Maybe Symbol) 'NoSourceUnpackedness 'SourceStrict 'DecidedStrict) (Rec0 Type)) :+: C1 ('MetaCons "TcRnConstraintInKind" 'PrefixI 'False) (S1 ('MetaSel ('Nothing :: Maybe Symbol) 'NoSourceUnpackedness 'SourceStrict 'DecidedStrict) (Rec0 Type))) :+: (C1 ('MetaCons "TcRnUnboxedTupleOrSumTypeFuncArg" 'PrefixI 'False) (S1 ('MetaSel ('Nothing :: Maybe Symbol) 'NoSourceUnpackedness 'NoSourceStrictness 'DecidedLazy) (Rec0 UnboxedTupleOrSum) :*: S1 ('MetaSel ('Nothing :: Maybe Symbol) 'NoSourceUnpackedness 'SourceStrict 'DecidedStrict) (Rec0 Type)) :+: (C1 ('MetaCons "TcRnLinearFuncInKind" 'PrefixI 'False) (S1 ('MetaSel ('Nothing :: Maybe Symbol) 'NoSourceUnpackedness 'SourceStrict 'DecidedStrict) (Rec0 Type)) :+: C1 ('MetaCons "TcRnForAllEscapeError" 'PrefixI 'False) (S1 ('MetaSel ('Nothing :: Maybe Symbol) 'NoSourceUnpackedness 'SourceStrict 'DecidedStrict) (Rec0 Type) :*: S1 ('MetaSel ('Nothing :: Maybe Symbol) 'NoSourceUnpackedness 'SourceStrict 'DecidedStrict) (Rec0 Kind))))) :+: ((C1 ('MetaCons "TcRnVDQInTermType" 'PrefixI 'False) (S1 ('MetaSel ('Nothing :: Maybe Symbol) 'NoSourceUnpackedness 'SourceStrict 'DecidedStrict) (Rec0 (Maybe Type))) :+: (C1 ('MetaCons "TcRnBadQuantPredHead" 'PrefixI 'False) (S1 ('MetaSel ('Nothing :: Maybe Symbol) 'NoSourceUnpackedness 'SourceStrict 'DecidedStrict) (Rec0 Type)) :+: C1 ('MetaCons "TcRnIllegalTupleConstraint" 'PrefixI 'False) (S1 ('MetaSel ('Nothing :: Maybe Symbol) 'NoSourceUnpackedness 'SourceStrict 'DecidedStrict) (Rec0 Type)))) :+: (C1 ('MetaCons "TcRnNonTypeVarArgInConstraint" 'PrefixI 'False) (S1 ('MetaSel ('Nothing :: Maybe Symbol) 'NoSourceUnpackedness 'SourceStrict 'DecidedStrict) (Rec0 Type)) :+: (C1 ('MetaCons "TcRnIllegalImplicitParam" 'PrefixI 'False) (S1 ('MetaSel ('Nothing :: Maybe Symbol) 'NoSourceUnpackedness 'SourceStrict 'DecidedStrict) (Rec0 Type)) :+: C1 ('MetaCons "TcRnIllegalConstraintSynonymOfKind" 'PrefixI 'False) (S1 ('MetaSel ('Nothing :: Maybe Symbol) 'NoSourceUnpackedness 'SourceStrict 'DecidedStrict) (Rec0 Type)))))) :+: (((C1 ('MetaCons "TcRnIllegalClassInst" 'PrefixI 'False) (S1 ('MetaSel ('Nothing :: Maybe Symbol) 'NoSourceUnpackedness 'SourceStrict 'DecidedStrict) (Rec0 TyConFlavour)) :+: (C1 ('MetaCons "TcRnOversaturatedVisibleKindArg" 'PrefixI 'False) (S1 ('MetaSel ('Nothing :: Maybe Symbol) 'NoSourceUnpackedness 'SourceStrict 'DecidedStrict) (Rec0 Type)) :+: C1 ('MetaCons "TcRnBadAssociatedType" 'PrefixI 'False) (S1 ('MetaSel ('Nothing :: Maybe Symbol) 'NoSourceUnpackedness 'SourceStrict 'DecidedStrict) (Rec0 Name) :*: S1 ('MetaSel ('Nothing :: Maybe Symbol) 'NoSourceUnpackedness 'SourceStrict 'DecidedStrict) (Rec0 Name)))) :+: (C1 ('MetaCons "TcRnForAllRankErr" 'PrefixI 'False) (S1 ('MetaSel ('Nothing :: Maybe Symbol) 'NoSourceUnpackedness 'SourceStrict 'DecidedStrict) (Rec0 Rank) :*: S1 ('MetaSel ('Nothing :: Maybe Symbol) 'NoSourceUnpackedness 'SourceStrict 'DecidedStrict) (Rec0 Type)) :+: (C1 ('MetaCons "TcRnMonomorphicBindings" 'PrefixI 'False) (S1 ('MetaSel ('Nothing :: Maybe Symbol) 'NoSourceUnpackedness 'NoSourceStrictness 'DecidedLazy) (Rec0 [Name])) :+: C1 ('MetaCons "TcRnOrphanInstance" 'PrefixI 'False) (S1 ('MetaSel ('Nothing :: Maybe Symbol) 'NoSourceUnpackedness 'NoSourceStrictness 'DecidedLazy) (Rec0 ClsInst))))) :+: ((C1 ('MetaCons "TcRnFunDepConflict" 'PrefixI 'False) (S1 ('MetaSel ('Nothing :: Maybe Symbol) 'NoSourceUnpackedness 'SourceStrict 'DecidedStrict) (Rec0 UnitState) :*: S1 ('MetaSel ('Nothing :: Maybe Symbol) 'NoSourceUnpackedness 'NoSourceStrictness 'DecidedLazy) (Rec0 (NonEmpty ClsInst))) :+: (C1 ('MetaCons "TcRnDupInstanceDecls" 'PrefixI 'False) (S1 ('MetaSel ('Nothing :: Maybe Symbol) 'NoSourceUnpackedness 'SourceStrict 'DecidedStrict) (Rec0 UnitState) :*: S1 ('MetaSel ('Nothing :: Maybe Symbol) 'NoSourceUnpackedness 'NoSourceStrictness 'DecidedLazy) (Rec0 (NonEmpty ClsInst))) :+: C1 ('MetaCons "TcRnConflictingFamInstDecls" 'PrefixI 'False) (S1 ('MetaSel ('Nothing :: Maybe Symbol) 'NoSourceUnpackedness 'NoSourceStrictness 'DecidedLazy) (Rec0 (NonEmpty FamInst))))) :+: (C1 ('MetaCons "TcRnFamInstNotInjective" 'PrefixI 'False) (S1 ('MetaSel ('Nothing :: Maybe Symbol) 'NoSourceUnpackedness 'NoSourceStrictness 'DecidedLazy) (Rec0 InjectivityErrReason) :*: (S1 ('MetaSel ('Nothing :: Maybe Symbol) 'NoSourceUnpackedness 'NoSourceStrictness 'DecidedLazy) (Rec0 TyCon) :*: S1 ('MetaSel ('Nothing :: Maybe Symbol) 'NoSourceUnpackedness 'NoSourceStrictness 'DecidedLazy) (Rec0 (NonEmpty CoAxBranch)))) :+: (C1 ('MetaCons "TcRnBangOnUnliftedType" 'PrefixI 'False) (S1 ('MetaSel ('Nothing :: Maybe Symbol) 'NoSourceUnpackedness 'SourceStrict 'DecidedStrict) (Rec0 Type)) :+: C1 ('MetaCons "TcRnLazyBangOnUnliftedType" 'PrefixI 'False) (S1 ('MetaSel ('Nothing :: Maybe Symbol) 'NoSourceUnpackedness 'SourceStrict 'DecidedStrict) (Rec0 Type))))))) :+: ((((C1 ('MetaCons "TcRnMultipleDefaultDeclarations" 'PrefixI 'False) (S1 ('MetaSel ('Nothing :: Maybe Symbol) 'NoSourceUnpackedness 'NoSourceStrictness 'DecidedLazy) (Rec0 [LDefaultDecl GhcRn])) :+: (C1 ('MetaCons "TcRnBadDefaultType" 'PrefixI 'False) (S1 ('MetaSel ('Nothing :: Maybe Symbol) 'NoSourceUnpackedness 'NoSourceStrictness 'DecidedLazy) (Rec0 Type) :*: S1 ('MetaSel ('Nothing :: Maybe Symbol) 'NoSourceUnpackedness 'NoSourceStrictness 'DecidedLazy) (Rec0 [Class])) :+: C1 ('MetaCons "TcRnPatSynBundledWithNonDataCon" 'PrefixI 'False) (U1 :: Type -> Type))) :+: (C1 ('MetaCons "TcRnPatSynBundledWithWrongType" 'PrefixI 'False) (S1 ('MetaSel ('Nothing :: Maybe Symbol) 'NoSourceUnpackedness 'NoSourceStrictness 'DecidedLazy) (Rec0 Type) :*: S1 ('MetaSel ('Nothing :: Maybe Symbol) 'NoSourceUnpackedness 'NoSourceStrictness 'DecidedLazy) (Rec0 Type)) :+: (C1 ('MetaCons "TcRnDupeModuleExport" 'PrefixI 'False) (S1 ('MetaSel ('Nothing :: Maybe Symbol) 'NoSourceUnpackedness 'NoSourceStrictness 'DecidedLazy) (Rec0 ModuleName)) :+: C1 ('MetaCons "TcRnExportedModNotImported" 'PrefixI 'False) (S1 ('MetaSel ('Nothing :: Maybe Symbol) 'NoSourceUnpackedness 'NoSourceStrictness 'DecidedLazy) (Rec0 ModuleName))))) :+: ((C1 ('MetaCons "TcRnNullExportedModule" 'PrefixI 'False) (S1 ('MetaSel ('Nothing :: Maybe Symbol) 'NoSourceUnpackedness 'NoSourceStrictness 'DecidedLazy) (Rec0 ModuleName)) :+: (C1 ('MetaCons "TcRnMissingExportList" 'PrefixI 'False) (S1 ('MetaSel ('Nothing :: Maybe Symbol) 'NoSourceUnpackedness 'NoSourceStrictness 'DecidedLazy) (Rec0 ModuleName)) :+: C1 ('MetaCons "TcRnExportHiddenComponents" 'PrefixI 'False) (S1 ('MetaSel ('Nothing :: Maybe Symbol) 'NoSourceUnpackedness 'NoSourceStrictness 'DecidedLazy) (Rec0 (IE GhcPs))))) :+: (C1 ('MetaCons "TcRnDuplicateExport" 'PrefixI 'False) (S1 ('MetaSel ('Nothing :: Maybe Symbol) 'NoSourceUnpackedness 'NoSourceStrictness 'DecidedLazy) (Rec0 GreName) :*: (S1 ('MetaSel ('Nothing :: Maybe Symbol) 'NoSourceUnpackedness 'NoSourceStrictness 'DecidedLazy) (Rec0 (IE GhcPs)) :*: S1 ('MetaSel ('Nothing :: Maybe Symbol) 'NoSourceUnpackedness 'NoSourceStrictness 'DecidedLazy) (Rec0 (IE GhcPs)))) :+: (C1 ('MetaCons "TcRnExportedParentChildMismatch" 'PrefixI 'False) ((S1 ('MetaSel ('Nothing :: Maybe Symbol) 'NoSourceUnpackedness 'NoSourceStrictness 'DecidedLazy) (Rec0 Name) :*: S1 ('MetaSel ('Nothing :: Maybe Symbol) 'NoSourceUnpackedness 'NoSourceStrictness 'DecidedLazy) (Rec0 TyThing)) :*: (S1 ('MetaSel ('Nothing :: Maybe Symbol) 'NoSourceUnpackedness 'NoSourceStrictness 'DecidedLazy) (Rec0 GreName) :*: S1 ('MetaSel ('Nothing :: Maybe Symbol) 'NoSourceUnpackedness 'NoSourceStrictness 'DecidedLazy) (Rec0 [Name]))) :+: C1 ('MetaCons "TcRnConflictingExports" 'PrefixI 'False) ((S1 ('MetaSel ('Nothing :: Maybe Symbol) 'NoSourceUnpackedness 'NoSourceStrictness 'DecidedLazy) (Rec0 OccName) :*: (S1 ('MetaSel ('Nothing :: Maybe Symbol) 'NoSourceUnpackedness 'NoSourceStrictness 'DecidedLazy) (Rec0 GreName) :*: S1 ('MetaSel ('Nothing :: Maybe Symbol) 'NoSourceUnpackedness 'NoSourceStrictness 'DecidedLazy) (Rec0 GlobalRdrElt))) :*: ((S1 ('MetaSel ('Nothing :: Maybe Symbol) 'NoSourceUnpackedness 'NoSourceStrictness 'DecidedLazy) (Rec0 (IE GhcPs)) :*: S1 ('MetaSel ('Nothing :: Maybe Symbol) 'NoSourceUnpackedness 'NoSourceStrictness 'DecidedLazy) (Rec0 GreName)) :*: (S1 ('MetaSel ('Nothing :: Maybe Symbol) 'NoSourceUnpackedness 'NoSourceStrictness 'DecidedLazy) (Rec0 GlobalRdrElt) :*: S1 ('MetaSel ('Nothing :: Maybe Symbol) 'NoSourceUnpackedness 'NoSourceStrictness 'DecidedLazy) (Rec0 (IE GhcPs))))))))) :+: (((C1 ('MetaCons "TcRnAmbiguousField" 'PrefixI 'False) (S1 ('MetaSel ('Nothing :: Maybe Symbol) 'NoSourceUnpackedness 'NoSourceStrictness 'DecidedLazy) (Rec0 (HsExpr GhcRn)) :*: S1 ('MetaSel ('Nothing :: Maybe Symbol) 'NoSourceUnpackedness 'NoSourceStrictness 'DecidedLazy) (Rec0 TyCon)) :+: (C1 ('MetaCons "TcRnMissingFields" 'PrefixI 'False) (S1 ('MetaSel ('Nothing :: Maybe Symbol) 'NoSourceUnpackedness 'NoSourceStrictness 'DecidedLazy) (Rec0 ConLike) :*: S1 ('MetaSel ('Nothing :: Maybe Symbol) 'NoSourceUnpackedness 'NoSourceStrictness 'DecidedLazy) (Rec0 [(FieldLabelString, TcType)])) :+: C1 ('MetaCons "TcRnFieldUpdateInvalidType" 'PrefixI 'False) (S1 ('MetaSel ('Nothing :: Maybe Symbol) 'NoSourceUnpackedness 'NoSourceStrictness 'DecidedLazy) (Rec0 [(FieldLabelString, TcType)])))) :+: (C1 ('MetaCons "TcRnNoConstructorHasAllFields" 'PrefixI 'False) (S1 ('MetaSel ('Nothing :: Maybe Symbol) 'NoSourceUnpackedness 'NoSourceStrictness 'DecidedLazy) (Rec0 [FieldLabelString])) :+: (C1 ('MetaCons "TcRnMixedSelectors" 'PrefixI 'False) ((S1 ('MetaSel ('Nothing :: Maybe Symbol) 'NoSourceUnpackedness 'NoSourceStrictness 'DecidedLazy) (Rec0 Name) :*: S1 ('MetaSel ('Nothing :: Maybe Symbol) 'NoSourceUnpackedness 'NoSourceStrictness 'DecidedLazy) (Rec0 [Id])) :*: (S1 ('MetaSel ('Nothing :: Maybe Symbol) 'NoSourceUnpackedness 'NoSourceStrictness 'DecidedLazy) (Rec0 Name) :*: S1 ('MetaSel ('Nothing :: Maybe Symbol) 'NoSourceUnpackedness 'NoSourceStrictness 'DecidedLazy) (Rec0 [Id]))) :+: C1 ('MetaCons "TcRnMissingStrictFields" 'PrefixI 'False) (S1 ('MetaSel ('Nothing :: Maybe Symbol) 'NoSourceUnpackedness 'NoSourceStrictness 'DecidedLazy) (Rec0 ConLike) :*: S1 ('MetaSel ('Nothing :: Maybe Symbol) 'NoSourceUnpackedness 'NoSourceStrictness 'DecidedLazy) (Rec0 [(FieldLabelString, TcType)]))))) :+: ((C1 ('MetaCons "TcRnNoPossibleParentForFields" 'PrefixI 'False) (S1 ('MetaSel ('Nothing :: Maybe Symbol) 'NoSourceUnpackedness 'NoSourceStrictness 'DecidedLazy) (Rec0 [LHsRecUpdField GhcRn])) :+: (C1 ('MetaCons "TcRnBadOverloadedRecordUpdate" 'PrefixI 'False) (S1 ('MetaSel ('Nothing :: Maybe Symbol) 'NoSourceUnpackedness 'NoSourceStrictness 'DecidedLazy) (Rec0 [LHsRecUpdField GhcRn])) :+: C1 ('MetaCons "TcRnStaticFormNotClosed" 'PrefixI 'False) (S1 ('MetaSel ('Nothing :: Maybe Symbol) 'NoSourceUnpackedness 'NoSourceStrictness 'DecidedLazy) (Rec0 Name) :*: S1 ('MetaSel ('Nothing :: Maybe Symbol) 'NoSourceUnpackedness 'NoSourceStrictness 'DecidedLazy) (Rec0 NotClosedReason)))) :+: (C1 ('MetaCons "TcRnSpecialClassInst" 'PrefixI 'False) (S1 ('MetaSel ('Nothing :: Maybe Symbol) 'NoSourceUnpackedness 'SourceStrict 'DecidedStrict) (Rec0 Class) :*: S1 ('MetaSel ('Nothing :: Maybe Symbol) 'NoSourceUnpackedness 'SourceStrict 'DecidedStrict) (Rec0 Bool)) :+: (C1 ('MetaCons "TcRnUselessTypeable" 'PrefixI 'False) (U1 :: Type -> Type) :+: C1 ('MetaCons "TcRnDerivingDefaults" 'PrefixI 'False) (S1 ('MetaSel ('Nothing :: Maybe Symbol) 'NoSourceUnpackedness 'SourceStrict 'DecidedStrict) (Rec0 Class))))))))) :+: ((((((C1 ('MetaCons "TcRnNonUnaryTypeclassConstraint" 'PrefixI 'False) (S1 ('MetaSel ('Nothing :: Maybe Symbol) 'NoSourceUnpackedness 'SourceStrict 'DecidedStrict) (Rec0 (LHsSigType GhcRn))) :+: C1 ('MetaCons "TcRnPartialTypeSignatures" 'PrefixI 'False) (S1 ('MetaSel ('Nothing :: Maybe Symbol) 'NoSourceUnpackedness 'SourceStrict 'DecidedStrict) (Rec0 SuggestPartialTypeSignatures) :*: S1 ('MetaSel ('Nothing :: Maybe Symbol) 'NoSourceUnpackedness 'SourceStrict 'DecidedStrict) (Rec0 ThetaType))) :+: (C1 ('MetaCons "TcRnCannotDeriveInstance" 'PrefixI 'False) ((S1 ('MetaSel ('Nothing :: Maybe Symbol) 'NoSourceUnpackedness 'SourceStrict 'DecidedStrict) (Rec0 Class) :*: S1 ('MetaSel ('Nothing :: Maybe Symbol) 'NoSourceUnpackedness 'NoSourceStrictness 'DecidedLazy) (Rec0 [Type])) :*: (S1 ('MetaSel ('Nothing :: Maybe Symbol) 'NoSourceUnpackedness 'SourceStrict 'DecidedStrict) (Rec0 (Maybe (DerivStrategy GhcTc))) :*: (S1 ('MetaSel ('Nothing :: Maybe Symbol) 'NoSourceUnpackedness 'SourceStrict 'DecidedStrict) (Rec0 UsingGeneralizedNewtypeDeriving) :*: S1 ('MetaSel ('Nothing :: Maybe Symbol) 'NoSourceUnpackedness 'SourceStrict 'DecidedStrict) (Rec0 DeriveInstanceErrReason)))) :+: (C1 ('MetaCons "TcRnLazyGADTPattern" 'PrefixI 'False) (U1 :: Type -> Type) :+: C1 ('MetaCons "TcRnArrowProcGADTPattern" 'PrefixI 'False) (U1 :: Type -> Type)))) :+: ((C1 ('MetaCons "TcRnForallIdentifier" 'PrefixI 'False) (S1 ('MetaSel ('Nothing :: Maybe Symbol) 'NoSourceUnpackedness 'NoSourceStrictness 'DecidedLazy) (Rec0 RdrName)) :+: (C1 ('MetaCons "TcRnTypeEqualityOutOfScope" 'PrefixI 'False) (U1 :: Type -> Type) :+: C1 ('MetaCons "TcRnTypeEqualityRequiresOperators" 'PrefixI 'False) (U1 :: Type -> Type))) :+: (C1 ('MetaCons "TcRnIllegalTypeOperator" 'PrefixI 'False) (S1 ('MetaSel ('Nothing :: Maybe Symbol) 'NoSourceUnpackedness 'SourceStrict 'DecidedStrict) (Rec0 SDoc) :*: S1 ('MetaSel ('Nothing :: Maybe Symbol) 'NoSourceUnpackedness 'SourceStrict 'DecidedStrict) (Rec0 RdrName)) :+: (C1 ('MetaCons "TcRnIllegalTypeOperatorDecl" 'PrefixI 'False) (S1 ('MetaSel ('Nothing :: Maybe Symbol) 'NoSourceUnpackedness 'SourceStrict 'DecidedStrict) (Rec0 RdrName)) :+: C1 ('MetaCons "TcRnGADTMonoLocalBinds" 'PrefixI 'False) (U1 :: Type -> Type))))) :+: (((C1 ('MetaCons "TcRnNotInScope" 'PrefixI 'False) ((S1 ('MetaSel ('Nothing :: Maybe Symbol) 'NoSourceUnpackedness 'NoSourceStrictness 'DecidedLazy) (Rec0 NotInScopeError) :*: S1 ('MetaSel ('Nothing :: Maybe Symbol) 'NoSourceUnpackedness 'NoSourceStrictness 'DecidedLazy) (Rec0 RdrName)) :*: (S1 ('MetaSel ('Nothing :: Maybe Symbol) 'NoSourceUnpackedness 'NoSourceStrictness 'DecidedLazy) (Rec0 [ImportError]) :*: S1 ('MetaSel ('Nothing :: Maybe Symbol) 'NoSourceUnpackedness 'NoSourceStrictness 'DecidedLazy) (Rec0 [GhcHint]))) :+: (C1 ('MetaCons "TcRnUntickedPromotedThing" 'PrefixI 'False) (S1 ('MetaSel ('Nothing :: Maybe Symbol) 'NoSourceUnpackedness 'NoSourceStrictness 'DecidedLazy) (Rec0 UntickedPromotedThing)) :+: C1 ('MetaCons "TcRnIllegalBuiltinSyntax" 'PrefixI 'False) (S1 ('MetaSel ('Nothing :: Maybe Symbol) 'NoSourceUnpackedness 'NoSourceStrictness 'DecidedLazy) (Rec0 SDoc) :*: S1 ('MetaSel ('Nothing :: Maybe Symbol) 'NoSourceUnpackedness 'NoSourceStrictness 'DecidedLazy) (Rec0 RdrName)))) :+: (C1 ('MetaCons "TcRnWarnDefaulting" 'PrefixI 'False) (S1 ('MetaSel ('Nothing :: Maybe Symbol) 'NoSourceUnpackedness 'NoSourceStrictness 'DecidedLazy) (Rec0 [Ct]) :*: (S1 ('MetaSel ('Nothing :: Maybe Symbol) 'NoSourceUnpackedness 'NoSourceStrictness 'DecidedLazy) (Rec0 (Maybe TyVar)) :*: S1 ('MetaSel ('Nothing :: Maybe Symbol) 'NoSourceUnpackedness 'NoSourceStrictness 'DecidedLazy) (Rec0 Type))) :+: (C1 ('MetaCons "TcRnIncorrectNameSpace" 'PrefixI 'False) (S1 ('MetaSel ('Nothing :: Maybe Symbol) 'NoSourceUnpackedness 'NoSourceStrictness 'DecidedLazy) (Rec0 Name) :*: S1 ('MetaSel ('Nothing :: Maybe Symbol) 'NoSourceUnpackedness 'NoSourceStrictness 'DecidedLazy) (Rec0 Bool)) :+: C1 ('MetaCons "TcRnForeignImportPrimExtNotSet" 'PrefixI 'False) (S1 ('MetaSel ('Nothing :: Maybe Symbol) 'NoSourceUnpackedness 'NoSourceStrictness 'DecidedLazy) (Rec0 (ForeignImport GhcRn)))))) :+: ((C1 ('MetaCons "TcRnForeignImportPrimSafeAnn" 'PrefixI 'False) (S1 ('MetaSel ('Nothing :: Maybe Symbol) 'NoSourceUnpackedness 'NoSourceStrictness 'DecidedLazy) (Rec0 (ForeignImport GhcRn))) :+: (C1 ('MetaCons "TcRnForeignFunctionImportAsValue" 'PrefixI 'False) (S1 ('MetaSel ('Nothing :: Maybe Symbol) 'NoSourceUnpackedness 'NoSourceStrictness 'DecidedLazy) (Rec0 (ForeignImport GhcRn))) :+: C1 ('MetaCons "TcRnFunPtrImportWithoutAmpersand" 'PrefixI 'False) (S1 ('MetaSel ('Nothing :: Maybe Symbol) 'NoSourceUnpackedness 'NoSourceStrictness 'DecidedLazy) (Rec0 (ForeignImport GhcRn))))) :+: (C1 ('MetaCons "TcRnIllegalForeignDeclBackend" 'PrefixI 'False) (S1 ('MetaSel ('Nothing :: Maybe Symbol) 'NoSourceUnpackedness 'NoSourceStrictness 'DecidedLazy) (Rec0 (Either (ForeignExport GhcRn) (ForeignImport GhcRn))) :*: (S1 ('MetaSel ('Nothing :: Maybe Symbol) 'NoSourceUnpackedness 'NoSourceStrictness 'DecidedLazy) (Rec0 Backend) :*: S1 ('MetaSel ('Nothing :: Maybe Symbol) 'NoSourceUnpackedness 'NoSourceStrictness 'DecidedLazy) (Rec0 ExpectedBackends))) :+: (C1 ('MetaCons "TcRnUnsupportedCallConv" 'PrefixI 'False) (S1 ('MetaSel ('Nothing :: Maybe Symbol) 'NoSourceUnpackedness 'NoSourceStrictness 'DecidedLazy) (Rec0 (Either (ForeignExport GhcRn) (ForeignImport GhcRn))) :*: S1 ('MetaSel ('Nothing :: Maybe Symbol) 'NoSourceUnpackedness 'NoSourceStrictness 'DecidedLazy) (Rec0 UnsupportedCallConvention)) :+: C1 ('MetaCons "TcRnIllegalForeignType" 'PrefixI 'False) (S1 ('MetaSel ('Nothing :: Maybe Symbol) 'NoSourceUnpackedness 'SourceStrict 'DecidedStrict) (Rec0 (Maybe ArgOrResult)) :*: S1 ('MetaSel ('Nothing :: Maybe Symbol) 'NoSourceUnpackedness 'SourceStrict 'DecidedStrict) (Rec0 IllegalForeignTypeReason))))))) :+: ((((C1 ('MetaCons "TcRnInvalidCIdentifier" 'PrefixI 'False) (S1 ('MetaSel ('Nothing :: Maybe Symbol) 'NoSourceUnpackedness 'SourceStrict 'DecidedStrict) (Rec0 CLabelString)) :+: (C1 ('MetaCons "TcRnExpectedValueId" 'PrefixI 'False) (S1 ('MetaSel ('Nothing :: Maybe Symbol) 'NoSourceUnpackedness 'SourceStrict 'DecidedStrict) (Rec0 TcTyThing)) :+: C1 ('MetaCons "TcRnNotARecordSelector" 'PrefixI 'False) (S1 ('MetaSel ('Nothing :: Maybe Symbol) 'NoSourceUnpackedness 'SourceStrict 'DecidedStrict) (Rec0 Name)))) :+: (C1 ('MetaCons "TcRnRecSelectorEscapedTyVar" 'PrefixI 'False) (S1 ('MetaSel ('Nothing :: Maybe Symbol) 'NoSourceUnpackedness 'SourceStrict 'DecidedStrict) (Rec0 OccName)) :+: (C1 ('MetaCons "TcRnPatSynNotBidirectional" 'PrefixI 'False) (S1 ('MetaSel ('Nothing :: Maybe Symbol) 'NoSourceUnpackedness 'SourceStrict 'DecidedStrict) (Rec0 Name)) :+: C1 ('MetaCons "TcRnSplicePolymorphicLocalVar" 'PrefixI 'False) (S1 ('MetaSel ('Nothing :: Maybe Symbol) 'NoSourceUnpackedness 'SourceStrict 'DecidedStrict) (Rec0 Id))))) :+: ((C1 ('MetaCons "TcRnIllegalDerivingItem" 'PrefixI 'False) (S1 ('MetaSel ('Nothing :: Maybe Symbol) 'NoSourceUnpackedness 'SourceStrict 'DecidedStrict) (Rec0 (LHsSigType GhcRn))) :+: (C1 ('MetaCons "TcRnUnexpectedAnnotation" 'PrefixI 'False) (S1 ('MetaSel ('Nothing :: Maybe Symbol) 'NoSourceUnpackedness 'SourceStrict 'DecidedStrict) (Rec0 (HsType GhcRn)) :*: S1 ('MetaSel ('Nothing :: Maybe Symbol) 'NoSourceUnpackedness 'SourceStrict 'DecidedStrict) (Rec0 HsSrcBang)) :+: C1 ('MetaCons "TcRnIllegalRecordSyntax" 'PrefixI 'False) (S1 ('MetaSel ('Nothing :: Maybe Symbol) 'NoSourceUnpackedness 'SourceStrict 'DecidedStrict) (Rec0 (HsType GhcRn))))) :+: (C1 ('MetaCons "TcRnUnexpectedTypeSplice" 'PrefixI 'False) (S1 ('MetaSel ('Nothing :: Maybe Symbol) 'NoSourceUnpackedness 'SourceStrict 'DecidedStrict) (Rec0 (HsType GhcRn))) :+: (C1 ('MetaCons "TcRnInvalidVisibleKindArgument" 'PrefixI 'False) (S1 ('MetaSel ('Nothing :: Maybe Symbol) 'NoSourceUnpackedness 'SourceStrict 'DecidedStrict) (Rec0 (LHsType GhcRn)) :*: S1 ('MetaSel ('Nothing :: Maybe Symbol) 'NoSourceUnpackedness 'SourceStrict 'DecidedStrict) (Rec0 Type)) :+: C1 ('MetaCons "TcRnTooManyBinders" 'PrefixI 'False) (S1 ('MetaSel ('Nothing :: Maybe Symbol) 'NoSourceUnpackedness 'SourceStrict 'DecidedStrict) (Rec0 Kind) :*: S1 ('MetaSel ('Nothing :: Maybe Symbol) 'NoSourceUnpackedness 'SourceStrict 'DecidedStrict) (Rec0 [LHsTyVarBndr () GhcRn])))))) :+: (((C1 ('MetaCons "TcRnDifferentNamesForTyVar" 'PrefixI 'False) (S1 ('MetaSel ('Nothing :: Maybe Symbol) 'NoSourceUnpackedness 'SourceStrict 'DecidedStrict) (Rec0 Name) :*: S1 ('MetaSel ('Nothing :: Maybe Symbol) 'NoSourceUnpackedness 'SourceStrict 'DecidedStrict) (Rec0 Name)) :+: (C1 ('MetaCons "TcRnInvalidReturnKind" 'PrefixI 'False) ((S1 ('MetaSel ('Nothing :: Maybe Symbol) 'NoSourceUnpackedness 'SourceStrict 'DecidedStrict) (Rec0 DataSort) :*: S1 ('MetaSel ('Nothing :: Maybe Symbol) 'NoSourceUnpackedness 'SourceStrict 'DecidedStrict) (Rec0 AllowedDataResKind)) :*: (S1 ('MetaSel ('Nothing :: Maybe Symbol) 'NoSourceUnpackedness 'SourceStrict 'DecidedStrict) (Rec0 Kind) :*: S1 ('MetaSel ('Nothing :: Maybe Symbol) 'NoSourceUnpackedness 'SourceStrict 'DecidedStrict) (Rec0 (Maybe SuggestUnliftedTypes)))) :+: C1 ('MetaCons "TcRnClassKindNotConstraint" 'PrefixI 'False) (S1 ('MetaSel ('Nothing :: Maybe Symbol) 'NoSourceUnpackedness 'SourceStrict 'DecidedStrict) (Rec0 Kind)))) :+: (C1 ('MetaCons "TcRnUnpromotableThing" 'PrefixI 'False) (S1 ('MetaSel ('Nothing :: Maybe Symbol) 'NoSourceUnpackedness 'SourceStrict 'DecidedStrict) (Rec0 Name) :*: S1 ('MetaSel ('Nothing :: Maybe Symbol) 'NoSourceUnpackedness 'SourceStrict 'DecidedStrict) (Rec0 PromotionErr)) :+: (C1 ('MetaCons "TcRnMatchesHaveDiffNumArgs" 'PrefixI 'False) (S1 ('MetaSel ('Nothing :: Maybe Symbol) 'NoSourceUnpackedness 'SourceStrict 'DecidedStrict) (Rec0 (HsMatchContext GhcTc)) :*: S1 ('MetaSel ('Nothing :: Maybe Symbol) 'NoSourceUnpackedness 'SourceStrict 'DecidedStrict) (Rec0 MatchArgBadMatches)) :+: C1 ('MetaCons "TcRnCannotBindScopedTyVarInPatSig" 'PrefixI 'False) (S1 ('MetaSel ('Nothing :: Maybe Symbol) 'NoSourceUnpackedness 'SourceStrict 'DecidedStrict) (Rec0 (NonEmpty (Name, TcTyVar))))))) :+: ((C1 ('MetaCons "TcRnCannotBindTyVarsInPatBind" 'PrefixI 'False) (S1 ('MetaSel ('Nothing :: Maybe Symbol) 'NoSourceUnpackedness 'SourceStrict 'DecidedStrict) (Rec0 (NonEmpty (Name, TcTyVar)))) :+: (C1 ('MetaCons "TcRnTooManyTyArgsInConPattern" 'PrefixI 'False) (S1 ('MetaSel ('Nothing :: Maybe Symbol) 'NoSourceUnpackedness 'SourceStrict 'DecidedStrict) (Rec0 ConLike) :*: (S1 ('MetaSel ('Nothing :: Maybe Symbol) 'NoSourceUnpackedness 'SourceStrict 'DecidedStrict) (Rec0 Int) :*: S1 ('MetaSel ('Nothing :: Maybe Symbol) 'NoSourceUnpackedness 'SourceStrict 'DecidedStrict) (Rec0 Int))) :+: C1 ('MetaCons "TcRnMultipleInlinePragmas" 'PrefixI 'False) (S1 ('MetaSel ('Nothing :: Maybe Symbol) 'NoSourceUnpackedness 'SourceStrict 'DecidedStrict) (Rec0 Id) :*: (S1 ('MetaSel ('Nothing :: Maybe Symbol) 'NoSourceUnpackedness 'SourceStrict 'DecidedStrict) (Rec0 (LocatedA InlinePragma)) :*: S1 ('MetaSel ('Nothing :: Maybe Symbol) 'NoSourceUnpackedness 'SourceStrict 'DecidedStrict) (Rec0 (NonEmpty (LocatedA InlinePragma))))))) :+: (C1 ('MetaCons "TcRnUnexpectedPragmas" 'PrefixI 'False) (S1 ('MetaSel ('Nothing :: Maybe Symbol) 'NoSourceUnpackedness 'SourceStrict 'DecidedStrict) (Rec0 Id) :*: S1 ('MetaSel ('Nothing :: Maybe Symbol) 'NoSourceUnpackedness 'SourceStrict 'DecidedStrict) (Rec0 (NonEmpty (LSig GhcRn)))) :+: (C1 ('MetaCons "TcRnNonOverloadedSpecialisePragma" 'PrefixI 'False) (S1 ('MetaSel ('Nothing :: Maybe Symbol) 'NoSourceUnpackedness 'SourceStrict 'DecidedStrict) (Rec0 (LIdP GhcRn))) :+: C1 ('MetaCons "TcRnSpecialiseNotVisible" 'PrefixI 'False) (S1 ('MetaSel ('Nothing :: Maybe Symbol) 'NoSourceUnpackedness 'SourceStrict 'DecidedStrict) (Rec0 Name)))))))) :+: (((((C1 ('MetaCons "TcRnNameByTemplateHaskellQuote" 'PrefixI 'False) (S1 ('MetaSel ('Nothing :: Maybe Symbol) 'NoSourceUnpackedness 'SourceStrict 'DecidedStrict) (Rec0 RdrName)) :+: (C1 ('MetaCons "TcRnIllegalBindingOfBuiltIn" 'PrefixI 'False) (S1 ('MetaSel ('Nothing :: Maybe Symbol) 'NoSourceUnpackedness 'SourceStrict 'DecidedStrict) (Rec0 OccName)) :+: C1 ('MetaCons "TcRnPragmaWarning" 'PrefixI 'True) ((S1 ('MetaSel ('Just "pragma_warning_occ") 'NoSourceUnpackedness 'NoSourceStrictness 'DecidedLazy) (Rec0 OccName) :*: S1 ('MetaSel ('Just "pragma_warning_msg") 'NoSourceUnpackedness 'NoSourceStrictness 'DecidedLazy) (Rec0 (WarningTxt GhcRn))) :*: (S1 ('MetaSel ('Just "pragma_warning_import_mod") 'NoSourceUnpackedness 'NoSourceStrictness 'DecidedLazy) (Rec0 ModuleName) :*: S1 ('MetaSel ('Just "pragma_warning_defined_mod") 'NoSourceUnpackedness 'NoSourceStrictness 'DecidedLazy) (Rec0 ModuleName))))) :+: (C1 ('MetaCons "TcRnIllegalHsigDefaultMethods" 'PrefixI 'False) (S1 ('MetaSel ('Nothing :: Maybe Symbol) 'NoSourceUnpackedness 'SourceStrict 'DecidedStrict) (Rec0 Name) :*: S1 ('MetaSel ('Nothing :: Maybe Symbol) 'NoSourceUnpackedness 'NoSourceStrictness 'DecidedLazy) (Rec0 (NonEmpty (LHsBind GhcRn)))) :+: (C1 ('MetaCons "TcRnBadGenericMethod" 'PrefixI 'False) (S1 ('MetaSel ('Nothing :: Maybe Symbol) 'NoSourceUnpackedness 'SourceStrict 'DecidedStrict) (Rec0 Name) :*: S1 ('MetaSel ('Nothing :: Maybe Symbol) 'NoSourceUnpackedness 'SourceStrict 'DecidedStrict) (Rec0 Name)) :+: C1 ('MetaCons "TcRnWarningMinimalDefIncomplete" 'PrefixI 'False) (S1 ('MetaSel ('Nothing :: Maybe Symbol) 'NoSourceUnpackedness 'NoSourceStrictness 'DecidedLazy) (Rec0 ClassMinimalDef))))) :+: ((C1 ('MetaCons "TcRnDefaultMethodForPragmaLacksBinding" 'PrefixI 'False) (S1 ('MetaSel ('Nothing :: Maybe Symbol) 'NoSourceUnpackedness 'NoSourceStrictness 'DecidedLazy) (Rec0 Id) :*: S1 ('MetaSel ('Nothing :: Maybe Symbol) 'NoSourceUnpackedness 'NoSourceStrictness 'DecidedLazy) (Rec0 (Sig GhcRn))) :+: (C1 ('MetaCons "TcRnIgnoreSpecialisePragmaOnDefMethod" 'PrefixI 'False) (S1 ('MetaSel ('Nothing :: Maybe Symbol) 'NoSourceUnpackedness 'SourceStrict 'DecidedStrict) (Rec0 Name)) :+: C1 ('MetaCons "TcRnBadMethodErr" 'PrefixI 'True) (S1 ('MetaSel ('Just "badMethodErrClassName") 'NoSourceUnpackedness 'SourceStrict 'DecidedStrict) (Rec0 Name) :*: S1 ('MetaSel ('Just "badMethodErrMethodName") 'NoSourceUnpackedness 'SourceStrict 'DecidedStrict) (Rec0 Name)))) :+: (C1 ('MetaCons "TcRnNoExplicitAssocTypeOrDefaultDeclaration" 'PrefixI 'False) (S1 ('MetaSel ('Nothing :: Maybe Symbol) 'NoSourceUnpackedness 'NoSourceStrictness 'DecidedLazy) (Rec0 Name)) :+: (C1 ('MetaCons "TcRnIllegalNewtype" 'PrefixI 'False) (S1 ('MetaSel ('Nothing :: Maybe Symbol) 'NoSourceUnpackedness 'NoSourceStrictness 'DecidedLazy) (Rec0 DataCon) :*: (S1 ('MetaSel ('Nothing :: Maybe Symbol) 'NoSourceUnpackedness 'NoSourceStrictness 'DecidedLazy) (Rec0 Bool) :*: S1 ('MetaSel ('Nothing :: Maybe Symbol) 'NoSourceUnpackedness 'NoSourceStrictness 'DecidedLazy) (Rec0 IllegalNewtypeReason))) :+: C1 ('MetaCons "TcRnIllegalTypeData" 'PrefixI 'False) (U1 :: Type -> Type))))) :+: (((C1 ('MetaCons "TcRnTypeDataForbids" 'PrefixI 'False) (S1 ('MetaSel ('Nothing :: Maybe Symbol) 'NoSourceUnpackedness 'SourceStrict 'DecidedStrict) (Rec0 TypeDataForbids)) :+: (C1 ('MetaCons "TcRnTypedTHWithPolyType" 'PrefixI 'False) (S1 ('MetaSel ('Nothing :: Maybe Symbol) 'NoSourceUnpackedness 'SourceStrict 'DecidedStrict) (Rec0 TcType)) :+: C1 ('MetaCons "TcRnSpliceThrewException" 'PrefixI 'False) ((S1 ('MetaSel ('Nothing :: Maybe Symbol) 'NoSourceUnpackedness 'SourceStrict 'DecidedStrict) (Rec0 SplicePhase) :*: S1 ('MetaSel ('Nothing :: Maybe Symbol) 'NoSourceUnpackedness 'SourceStrict 'DecidedStrict) (Rec0 SomeException)) :*: (S1 ('MetaSel ('Nothing :: Maybe Symbol) 'NoSourceUnpackedness 'SourceStrict 'DecidedStrict) (Rec0 String) :*: (S1 ('MetaSel ('Nothing :: Maybe Symbol) 'NoSourceUnpackedness 'SourceStrict 'DecidedStrict) (Rec0 (LHsExpr GhcTc)) :*: S1 ('MetaSel ('Nothing :: Maybe Symbol) 'NoSourceUnpackedness 'SourceStrict 'DecidedStrict) (Rec0 Bool)))))) :+: (C1 ('MetaCons "TcRnInvalidTopDecl" 'PrefixI 'False) (S1 ('MetaSel ('Nothing :: Maybe Symbol) 'NoSourceUnpackedness 'SourceStrict 'DecidedStrict) (Rec0 (HsDecl GhcPs))) :+: (C1 ('MetaCons "TcRnNonExactName" 'PrefixI 'False) (S1 ('MetaSel ('Nothing :: Maybe Symbol) 'NoSourceUnpackedness 'SourceStrict 'DecidedStrict) (Rec0 RdrName)) :+: C1 ('MetaCons "TcRnAddInvalidCorePlugin" 'PrefixI 'False) (S1 ('MetaSel ('Nothing :: Maybe Symbol) 'NoSourceUnpackedness 'SourceStrict 'DecidedStrict) (Rec0 String))))) :+: ((C1 ('MetaCons "TcRnAddDocToNonLocalDefn" 'PrefixI 'False) (S1 ('MetaSel ('Nothing :: Maybe Symbol) 'NoSourceUnpackedness 'SourceStrict 'DecidedStrict) (Rec0 DocLoc)) :+: (C1 ('MetaCons "TcRnFailedToLookupThInstName" 'PrefixI 'False) (S1 ('MetaSel ('Nothing :: Maybe Symbol) 'NoSourceUnpackedness 'SourceStrict 'DecidedStrict) (Rec0 Type) :*: S1 ('MetaSel ('Nothing :: Maybe Symbol) 'NoSourceUnpackedness 'SourceStrict 'DecidedStrict) (Rec0 LookupTHInstNameErrReason)) :+: C1 ('MetaCons "TcRnCannotReifyInstance" 'PrefixI 'False) (S1 ('MetaSel ('Nothing :: Maybe Symbol) 'NoSourceUnpackedness 'SourceStrict 'DecidedStrict) (Rec0 Type)))) :+: (C1 ('MetaCons "TcRnCannotReifyOutOfScopeThing" 'PrefixI 'False) (S1 ('MetaSel ('Nothing :: Maybe Symbol) 'NoSourceUnpackedness 'SourceStrict 'DecidedStrict) (Rec0 Name)) :+: (C1 ('MetaCons "TcRnCannotReifyThingNotInTypeEnv" 'PrefixI 'False) (S1 ('MetaSel ('Nothing :: Maybe Symbol) 'NoSourceUnpackedness 'SourceStrict 'DecidedStrict) (Rec0 Name)) :+: C1 ('MetaCons "TcRnNoRolesAssociatedWithThing" 'PrefixI 'False) (S1 ('MetaSel ('Nothing :: Maybe Symbol) 'NoSourceUnpackedness 'SourceStrict 'DecidedStrict) (Rec0 TcTyThing))))))) :+: ((((C1 ('MetaCons "TcRnCannotRepresentType" 'PrefixI 'False) (S1 ('MetaSel ('Nothing :: Maybe Symbol) 'NoSourceUnpackedness 'SourceStrict 'DecidedStrict) (Rec0 UnrepresentableTypeDescr) :*: S1 ('MetaSel ('Nothing :: Maybe Symbol) 'NoSourceUnpackedness 'SourceStrict 'DecidedStrict) (Rec0 Type)) :+: (C1 ('MetaCons "TcRnRunSpliceFailure" 'PrefixI 'False) (S1 ('MetaSel ('Nothing :: Maybe Symbol) 'NoSourceUnpackedness 'SourceStrict 'DecidedStrict) (Rec0 (Maybe String)) :*: S1 ('MetaSel ('Nothing :: Maybe Symbol) 'NoSourceUnpackedness 'SourceStrict 'DecidedStrict) (Rec0 RunSpliceFailReason)) :+: C1 ('MetaCons "TcRnReportCustomQuasiError" 'PrefixI 'False) (S1 ('MetaSel ('Nothing :: Maybe Symbol) 'NoSourceUnpackedness 'SourceStrict 'DecidedStrict) (Rec0 Bool) :*: S1 ('MetaSel ('Nothing :: Maybe Symbol) 'NoSourceUnpackedness 'SourceStrict 'DecidedStrict) (Rec0 String)))) :+: (C1 ('MetaCons "TcRnInterfaceLookupError" 'PrefixI 'False) (S1 ('MetaSel ('Nothing :: Maybe Symbol) 'NoSourceUnpackedness 'SourceStrict 'DecidedStrict) (Rec0 Name) :*: S1 ('MetaSel ('Nothing :: Maybe Symbol) 'NoSourceUnpackedness 'SourceStrict 'DecidedStrict) (Rec0 SDoc)) :+: (C1 ('MetaCons "TcRnUnsatisfiedMinimalDef" 'PrefixI 'False) (S1 ('MetaSel ('Nothing :: Maybe Symbol) 'NoSourceUnpackedness 'NoSourceStrictness 'DecidedLazy) (Rec0 ClassMinimalDef)) :+: C1 ('MetaCons "TcRnMisplacedInstSig" 'PrefixI 'False) (S1 ('MetaSel ('Nothing :: Maybe Symbol) 'NoSourceUnpackedness 'NoSourceStrictness 'DecidedLazy) (Rec0 Name) :*: S1 ('MetaSel ('Nothing :: Maybe Symbol) 'NoSourceUnpackedness 'NoSourceStrictness 'DecidedLazy) (Rec0 (LHsSigType GhcRn)))))) :+: ((C1 ('MetaCons "TcRnBadBootFamInstDecl" 'PrefixI 'False) (U1 :: Type -> Type) :+: (C1 ('MetaCons "TcRnIllegalFamilyInstance" 'PrefixI 'False) (S1 ('MetaSel ('Nothing :: Maybe Symbol) 'NoSourceUnpackedness 'NoSourceStrictness 'DecidedLazy) (Rec0 TyCon)) :+: C1 ('MetaCons "TcRnMissingClassAssoc" 'PrefixI 'False) (S1 ('MetaSel ('Nothing :: Maybe Symbol) 'NoSourceUnpackedness 'NoSourceStrictness 'DecidedLazy) (Rec0 TyCon)))) :+: (C1 ('MetaCons "TcRnBadFamInstDecl" 'PrefixI 'False) (S1 ('MetaSel ('Nothing :: Maybe Symbol) 'NoSourceUnpackedness 'NoSourceStrictness 'DecidedLazy) (Rec0 TyCon)) :+: (C1 ('MetaCons "TcRnNotOpenFamily" 'PrefixI 'False) (S1 ('MetaSel ('Nothing :: Maybe Symbol) 'NoSourceUnpackedness 'NoSourceStrictness 'DecidedLazy) (Rec0 TyCon)) :+: C1 ('MetaCons "TcRnNoRebindableSyntaxRecordDot" 'PrefixI 'False) (U1 :: Type -> Type))))) :+: (((C1 ('MetaCons "TcRnNoFieldPunsRecordDot" 'PrefixI 'False) (U1 :: Type -> Type) :+: (C1 ('MetaCons "TcRnIllegalStaticExpression" 'PrefixI 'False) (S1 ('MetaSel ('Nothing :: Maybe Symbol) 'NoSourceUnpackedness 'NoSourceStrictness 'DecidedLazy) (Rec0 (HsExpr GhcPs))) :+: C1 ('MetaCons "TcRnIllegalStaticFormInSplice" 'PrefixI 'False) (S1 ('MetaSel ('Nothing :: Maybe Symbol) 'NoSourceUnpackedness 'NoSourceStrictness 'DecidedLazy) (Rec0 (HsExpr GhcPs))))) :+: (C1 ('MetaCons "TcRnListComprehensionDuplicateBinding" 'PrefixI 'False) (S1 ('MetaSel ('Nothing :: Maybe Symbol) 'NoSourceUnpackedness 'NoSourceStrictness 'DecidedLazy) (Rec0 Name)) :+: (C1 ('MetaCons "TcRnEmptyStmtsGroup" 'PrefixI 'False) (S1 ('MetaSel ('Nothing :: Maybe Symbol) 'NoSourceUnpackedness 'NoSourceStrictness 'DecidedLazy) (Rec0 EmptyStatementGroupErrReason)) :+: C1 ('MetaCons "TcRnLastStmtNotExpr" 'PrefixI 'False) (S1 ('MetaSel ('Nothing :: Maybe Symbol) 'NoSourceUnpackedness 'NoSourceStrictness 'DecidedLazy) (Rec0 (HsStmtContext GhcRn)) :*: S1 ('MetaSel ('Nothing :: Maybe Symbol) 'NoSourceUnpackedness 'NoSourceStrictness 'DecidedLazy) (Rec0 UnexpectedStatement))))) :+: ((C1 ('MetaCons "TcRnUnexpectedStatementInContext" 'PrefixI 'False) (S1 ('MetaSel ('Nothing :: Maybe Symbol) 'NoSourceUnpackedness 'NoSourceStrictness 'DecidedLazy) (Rec0 (HsStmtContext GhcRn)) :*: (S1 ('MetaSel ('Nothing :: Maybe Symbol) 'NoSourceUnpackedness 'NoSourceStrictness 'DecidedLazy) (Rec0 UnexpectedStatement) :*: S1 ('MetaSel ('Nothing :: Maybe Symbol) 'NoSourceUnpackedness 'NoSourceStrictness 'DecidedLazy) (Rec0 (Maybe Extension)))) :+: (C1 ('MetaCons "TcRnIllegalTupleSection" 'PrefixI 'False) (U1 :: Type -> Type) :+: C1 ('MetaCons "TcRnIllegalImplicitParameterBindings" 'PrefixI 'False) (S1 ('MetaSel ('Nothing :: Maybe Symbol) 'NoSourceUnpackedness 'NoSourceStrictness 'DecidedLazy) (Rec0 (Either (HsLocalBindsLR GhcPs GhcPs) (HsLocalBindsLR GhcRn GhcPs)))))) :+: (C1 ('MetaCons "TcRnSectionWithoutParentheses" 'PrefixI 'False) (S1 ('MetaSel ('Nothing :: Maybe Symbol) 'NoSourceUnpackedness 'NoSourceStrictness 'DecidedLazy) (Rec0 (HsExpr GhcPs))) :+: (C1 ('MetaCons "TcRnLoopySuperclassSolve" 'PrefixI 'False) (S1 ('MetaSel ('Nothing :: Maybe Symbol) 'NoSourceUnpackedness 'NoSourceStrictness 'DecidedLazy) (Rec0 CtLoc) :*: S1 ('MetaSel ('Nothing :: Maybe Symbol) 'NoSourceUnpackedness 'NoSourceStrictness 'DecidedLazy) (Rec0 PredType)) :+: C1 ('MetaCons "TcRnCannotDefaultConcrete" 'PrefixI 'False) (S1 ('MetaSel ('Nothing :: Maybe Symbol) 'NoSourceUnpackedness 'SourceStrict 'DecidedStrict) (Rec0 FixedRuntimeRepOrigin))))))))))

type DiagnosticOpts TcRnMessage Source # |
Instance details Defined in GHC.Tc.Errors.Ppr type DiagnosticOpts TcRnMessage = TcRnMessageOpts