ghc-7.10.2: The GHC API

Safe Haskell | None
Language | Haskell2010

TcRnTypes

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_us :: !(IORef UniqSupply)
  - env_gbl :: gbl
  - env_lcl :: lcl
  }
- data TcGblEnv = TcGblEnv {
  - tcg_mod :: Module
  - tcg_src :: HscSource
  - tcg_sig_of :: Maybe Module
  - tcg_impl_rdr_env :: Maybe GlobalRdrEnv
  - tcg_rdr_env :: GlobalRdrEnv
  - tcg_default :: Maybe [Type]
  - tcg_fix_env :: FixityEnv
  - tcg_field_env :: RecFieldEnv
  - tcg_type_env :: TypeEnv
  - tcg_type_env_var :: TcRef TypeEnv
  - tcg_inst_env :: InstEnv
  - tcg_fam_inst_env :: FamInstEnv
  - tcg_ann_env :: AnnEnv
  - tcg_visible_orphan_mods :: ModuleSet
  - tcg_exports :: [AvailInfo]
  - tcg_imports :: ImportAvails
  - tcg_dus :: DefUses
  - tcg_used_rdrnames :: TcRef (Set RdrName)
  - tcg_keep :: TcRef NameSet
  - tcg_th_used :: TcRef Bool
  - tcg_th_splice_used :: TcRef Bool
  - tcg_dfun_n :: TcRef OccSet
  - tcg_rn_exports :: Maybe [Located (IE Name)]
  - tcg_rn_imports :: [LImportDecl Name]
  - tcg_rn_decls :: Maybe (HsGroup Name)
  - tcg_dependent_files :: TcRef [FilePath]
  - tcg_th_topdecls :: TcRef [LHsDecl RdrName]
  - tcg_th_topnames :: TcRef NameSet
  - tcg_th_modfinalizers :: TcRef [Q ()]
  - tcg_th_state :: TcRef (Map TypeRep Dynamic)
  - tcg_ev_binds :: Bag EvBind
  - tcg_binds :: LHsBinds Id
  - tcg_sigs :: NameSet
  - tcg_imp_specs :: [LTcSpecPrag]
  - tcg_warns :: Warnings
  - tcg_anns :: [Annotation]
  - tcg_tcs :: [TyCon]
  - tcg_insts :: [ClsInst]
  - tcg_fam_insts :: [FamInst]
  - tcg_rules :: [LRuleDecl Id]
  - tcg_fords :: [LForeignDecl Id]
  - tcg_vects :: [LVectDecl Id]
  - tcg_patsyns :: [PatSyn]
  - tcg_doc_hdr :: Maybe LHsDocString
  - tcg_hpc :: AnyHpcUsage
  - tcg_main :: Maybe Name
  - tcg_safeInfer :: TcRef Bool
  - tcg_tc_plugins :: [TcPluginSolver]
  - tcg_static_wc :: TcRef WantedConstraints
  }
- data TcLclEnv = TcLclEnv {
  - tcl_loc :: RealSrcSpan
  - tcl_ctxt :: [ErrCtxt]
  - tcl_tclvl :: TcLevel
  - tcl_th_ctxt :: ThStage
  - tcl_th_bndrs :: ThBindEnv
  - tcl_arrow_ctxt :: ArrowCtxt
  - tcl_rdr :: LocalRdrEnv
  - tcl_env :: TcTypeEnv
  - tcl_bndrs :: [TcIdBinder]
  - tcl_tidy :: TidyEnv
  - tcl_tyvars :: TcRef TcTyVarSet
  - tcl_lie :: TcRef WantedConstraints
  - tcl_errs :: TcRef Messages
  }
- data IfGblEnv = IfGblEnv {
  - if_rec_types :: Maybe (Module, IfG TypeEnv)
  }
- data IfLclEnv = IfLclEnv {
  - if_mod :: Module
  - if_loc :: SDoc
  - if_tv_env :: UniqFM TyVar
  - if_id_env :: UniqFM Id
  }
- type ErrCtxt = (Bool, TidyEnv -> TcM (TidyEnv, MsgDoc))
- data RecFieldEnv = RecFields (NameEnv [Name]) NameSet
- data ImportAvails = ImportAvails {
  - imp_mods :: ImportedMods
  - imp_dep_mods :: ModuleNameEnv (ModuleName, IsBootInterface)
  - imp_dep_pkgs :: [PackageKey]
  - imp_trust_pkgs :: [PackageKey]
  - imp_trust_own_pkg :: Bool
  - imp_orphs :: [Module]
  - imp_finsts :: [Module]
  }
- emptyImportAvails :: ImportAvails
- plusImportAvails :: ImportAvails -> ImportAvails -> ImportAvails
- data WhereFrom
  - = ImportByUser IsBootInterface
  - | ImportBySystem
  - | ImportByPlugin
- mkModDeps :: [(ModuleName, IsBootInterface)] -> ModuleNameEnv (ModuleName, IsBootInterface)
- type TcTypeEnv = NameEnv TcTyThing
- data TcIdBinder = TcIdBndr TcId TopLevelFlag
- data TcTyThing
  - = AGlobal TyThing
  - | ATcId {
    - tct_id :: TcId
    - tct_closed :: TopLevelFlag
    }
  - | ATyVar Name TcTyVar
  - | AThing TcKind
  - | APromotionErr PromotionErr
- data PromotionErr
  - = TyConPE
  - | ClassPE
  - | FamDataConPE
  - | RecDataConPE
  - | NoDataKinds
- pprTcTyThingCategory :: TcTyThing -> SDoc
- pprPECategory :: PromotionErr -> SDoc
- type DsM = TcRnIf DsGblEnv DsLclEnv
- data DsLclEnv = DsLclEnv {
  - dsl_meta :: DsMetaEnv
  - dsl_loc :: SrcSpan
  }
- data DsGblEnv = DsGblEnv {
  - ds_mod :: Module
  - ds_fam_inst_env :: FamInstEnv
  - ds_unqual :: PrintUnqualified
  - ds_msgs :: IORef Messages
  - ds_if_env :: (IfGblEnv, IfLclEnv)
  - ds_dph_env :: GlobalRdrEnv
  - ds_parr_bi :: PArrBuiltin
  - ds_static_binds :: IORef [(Fingerprint, (Id, CoreExpr))]
  }
- data PArrBuiltin = PArrBuiltin {
  - lengthPVar :: Var
  - replicatePVar :: Var
  - singletonPVar :: Var
  - mapPVar :: Var
  - filterPVar :: Var
  - zipPVar :: Var
  - crossMapPVar :: Var
  - indexPVar :: Var
  - emptyPVar :: Var
  - appPVar :: Var
  - enumFromToPVar :: Var
  - enumFromThenToPVar :: Var
  }
- type DsMetaEnv = NameEnv DsMetaVal
- data DsMetaVal
  - = DsBound Id
  - | DsSplice (HsExpr Id)
- data ThStage
  - = Splice Bool
  - | Comp
  - | Brack ThStage PendingStuff
- data PendingStuff
  - = RnPendingUntyped (TcRef [PendingRnSplice])
  - | RnPendingTyped
  - | TcPending (TcRef [PendingTcSplice]) (TcRef WantedConstraints)
- topStage :: ThStage
- topAnnStage :: ThStage
- topSpliceStage :: ThStage
- type ThLevel = Int
- impLevel :: ThLevel
- outerLevel :: ThLevel
- thLevel :: ThStage -> ThLevel
- data ArrowCtxt
  - = NoArrowCtxt
  - | ArrowCtxt LocalRdrEnv (TcRef WantedConstraints)
- type Xi = Type
- data Ct
  - = CDictCan {
    - cc_ev :: CtEvidence
    - cc_class :: Class
    - cc_tyargs :: [Xi]
    }
  - | CIrredEvCan {
    - cc_ev :: CtEvidence
    }
  - | CTyEqCan {
    - cc_ev :: CtEvidence
    - cc_tyvar :: TcTyVar
    - cc_rhs :: TcType
    - cc_eq_rel :: EqRel
    }
  - | CFunEqCan {
    - cc_ev :: CtEvidence
    - cc_fun :: TyCon
    - cc_tyargs :: [Xi]
    - cc_fsk :: TcTyVar
    }
  - | CNonCanonical {
    - cc_ev :: CtEvidence
    }
  - | CHoleCan {
    - cc_ev :: CtEvidence
    - cc_occ :: OccName
    - cc_hole :: HoleSort
    }
- type Cts = Bag Ct
- emptyCts :: Cts
- andCts :: Cts -> Cts -> Cts
- andManyCts :: [Cts] -> Cts
- pprCts :: Cts -> SDoc
- singleCt :: Ct -> Cts
- listToCts :: [Ct] -> Cts
- ctsElts :: Cts -> [Ct]
- consCts :: Ct -> Cts -> Cts
- snocCts :: Cts -> Ct -> Cts
- extendCtsList :: Cts -> [Ct] -> Cts
- isEmptyCts :: Cts -> Bool
- isCTyEqCan :: Ct -> Bool
- isCFunEqCan :: Ct -> Bool
- isCDictCan_Maybe :: Ct -> Maybe Class
- isCFunEqCan_maybe :: Ct -> Maybe (TyCon, [Type])
- isCIrredEvCan :: Ct -> Bool
- isCNonCanonical :: Ct -> Bool
- isWantedCt :: Ct -> Bool
- isDerivedCt :: Ct -> Bool
- isGivenCt :: Ct -> Bool
- isHoleCt :: Ct -> Bool
- isTypedHoleCt :: Ct -> Bool
- isPartialTypeSigCt :: Ct -> Bool
- ctEvidence :: Ct -> CtEvidence
- ctLoc :: Ct -> CtLoc
- ctPred :: Ct -> PredType
- ctFlavour :: Ct -> CtFlavour
- ctEqRel :: Ct -> EqRel
- mkNonCanonical :: CtEvidence -> Ct
- mkNonCanonicalCt :: Ct -> Ct
- ctEvPred :: CtEvidence -> TcPredType
- ctEvLoc :: CtEvidence -> CtLoc
- ctEvEqRel :: CtEvidence -> EqRel
- ctEvTerm :: CtEvidence -> EvTerm
- ctEvCoercion :: CtEvidence -> TcCoercion
- ctEvId :: CtEvidence -> TcId
- ctEvCheckDepth :: Class -> CtLoc -> CtEvidence -> Bool
- data WantedConstraints = WC {
  - wc_simple :: Cts
  - wc_impl :: Bag Implication
  - wc_insol :: Cts
  }
- insolubleWC :: WantedConstraints -> Bool
- emptyWC :: WantedConstraints
- isEmptyWC :: WantedConstraints -> Bool
- andWC :: WantedConstraints -> WantedConstraints -> WantedConstraints
- unionsWC :: [WantedConstraints] -> WantedConstraints
- addSimples :: WantedConstraints -> Bag Ct -> WantedConstraints
- addImplics :: WantedConstraints -> Bag Implication -> WantedConstraints
- mkSimpleWC :: [Ct] -> WantedConstraints
- addInsols :: WantedConstraints -> Bag Ct -> WantedConstraints
- dropDerivedWC :: WantedConstraints -> WantedConstraints
- data Implication = Implic {
  - ic_tclvl :: TcLevel
  - ic_skols :: [TcTyVar]
  - ic_info :: SkolemInfo
  - ic_given :: [EvVar]
  - ic_no_eqs :: Bool
  - ic_env :: TcLclEnv
  - ic_wanted :: WantedConstraints
  - ic_insol :: Bool
  - ic_binds :: EvBindsVar
  }
- data SubGoalCounter
  - = CountConstraints
  - | CountTyFunApps
- data SubGoalDepth
- initialSubGoalDepth :: SubGoalDepth
- maxSubGoalDepth :: DynFlags -> SubGoalDepth
- bumpSubGoalDepth :: SubGoalCounter -> SubGoalDepth -> SubGoalDepth
- subGoalCounterValue :: SubGoalCounter -> SubGoalDepth -> Int
- subGoalDepthExceeded :: SubGoalDepth -> SubGoalDepth -> Maybe SubGoalCounter
- data CtLoc = CtLoc {
  - ctl_origin :: CtOrigin
  - ctl_env :: TcLclEnv
  - ctl_depth :: !SubGoalDepth
  }
- ctLocSpan :: CtLoc -> RealSrcSpan
- ctLocEnv :: CtLoc -> TcLclEnv
- ctLocOrigin :: CtLoc -> CtOrigin
- ctLocDepth :: CtLoc -> SubGoalDepth
- bumpCtLocDepth :: SubGoalCounter -> CtLoc -> CtLoc
- setCtLocOrigin :: CtLoc -> CtOrigin -> CtLoc
- setCtLocEnv :: CtLoc -> TcLclEnv -> CtLoc
- setCtLocSpan :: CtLoc -> RealSrcSpan -> CtLoc
- data CtOrigin
  - = GivenOrigin SkolemInfo
  - | OccurrenceOf Name
  - | AppOrigin
  - | SpecPragOrigin Name
  - | TypeEqOrigin {
    - uo_actual :: TcType
    - uo_expected :: TcType
    }
  - | KindEqOrigin TcType TcType CtOrigin
  - | CoercibleOrigin TcType TcType
  - | IPOccOrigin HsIPName
  - | LiteralOrigin (HsOverLit Name)
  - | NegateOrigin
  - | ArithSeqOrigin (ArithSeqInfo Name)
  - | PArrSeqOrigin (ArithSeqInfo Name)
  - | SectionOrigin
  - | TupleOrigin
  - | ExprSigOrigin
  - | PatSigOrigin
  - | PatOrigin
  - | RecordUpdOrigin
  - | ViewPatOrigin
  - | ScOrigin
  - | DerivOrigin
  - | DerivOriginDC DataCon Int
  - | DerivOriginCoerce Id Type Type
  - | StandAloneDerivOrigin
  - | DefaultOrigin
  - | DoOrigin
  - | MCompOrigin
  - | IfOrigin
  - | ProcOrigin
  - | AnnOrigin
  - | FunDepOrigin1 PredType CtLoc PredType CtLoc
  - | FunDepOrigin2 PredType CtOrigin PredType SrcSpan
  - | HoleOrigin
  - | UnboundOccurrenceOf RdrName
  - | ListOrigin
  - | StaticOrigin
- pprCtOrigin :: CtOrigin -> SDoc
- pushErrCtxt :: CtOrigin -> ErrCtxt -> CtLoc -> CtLoc
- pushErrCtxtSameOrigin :: ErrCtxt -> CtLoc -> CtLoc
- data SkolemInfo
  - = SigSkol UserTypeCtxt Type
  - | ClsSkol Class
  - | InstSkol
  - | DataSkol
  - | FamInstSkol
  - | PatSkol ConLike (HsMatchContext Name)
  - | ArrowSkol
  - | IPSkol [HsIPName]
  - | RuleSkol RuleName
  - | InferSkol [(Name, TcType)]
  - | BracketSkol
  - | UnifyForAllSkol [TcTyVar] TcType
  - | UnkSkol
- data CtEvidence
  - = CtGiven {
    - ctev_pred :: TcPredType
    - ctev_evtm :: EvTerm
    - ctev_loc :: CtLoc
    }
  - | CtWanted {
    - ctev_pred :: TcPredType
    - ctev_evar :: EvVar
    - ctev_loc :: CtLoc
    }
  - | CtDerived {
    - ctev_pred :: TcPredType
    - ctev_loc :: CtLoc
    }
- mkGivenLoc :: TcLevel -> SkolemInfo -> TcLclEnv -> CtLoc
- isWanted :: CtEvidence -> Bool
- isGiven :: CtEvidence -> Bool
- isDerived :: CtEvidence -> Bool
- ctEvRole :: CtEvidence -> Role
- data TcPlugin = forall s . TcPlugin {
  - tcPluginInit :: TcPluginM s
  - tcPluginSolve :: s -> TcPluginSolver
  - tcPluginStop :: s -> TcPluginM ()
  }
- data TcPluginResult
  - = TcPluginContradiction [Ct]
  - | TcPluginOk [(EvTerm, Ct)] [Ct]
- type TcPluginSolver = [Ct] -> [Ct] -> [Ct] -> TcPluginM TcPluginResult
- data TcPluginM a
- runTcPluginM :: TcPluginM a -> TcM a
- unsafeTcPluginTcM :: TcM a -> TcPluginM a
- data CtFlavour
  - = Given
  - | Wanted
  - | Derived
- ctEvFlavour :: CtEvidence -> CtFlavour
- pprEvVarTheta :: [EvVar] -> SDoc
- pprEvVars :: [EvVar] -> SDoc
- pprEvVarWithType :: EvVar -> SDoc
- pprArising :: CtOrigin -> SDoc
- pprArisingAt :: CtLoc -> SDoc
- type TcId = Id
- type TcIdSet = IdSet
- data HoleSort
  - = ExprHole
  - | TypeHole

# 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_us :: !(IORef UniqSupply) env_gbl :: gbl env_lcl :: lcl

Instances

ContainsModule gbl => ContainsModule (Env gbl lcl) |
ContainsDynFlags (Env gbl lcl) |

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_src :: HscSource What kind of module (regular Haskell, hs-boot, ext-core) tcg_sig_of :: Maybe Module Are we being compiled as a signature of an implementation? tcg_impl_rdr_env :: Maybe GlobalRdrEnv Environment used only during -sig-of for resolving top level bindings. See Note [Signature parameters in TcGblEnv and DynFlags] 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 HscTypes 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 HscTypes tcg_type_env_var :: TcRef TypeEnv tcg_inst_env :: InstEnv Instance envt for all home-package modules; Includes the dfuns in tcg_insts tcg_fam_inst_env :: FamInstEnv Ditto for family instances tcg_ann_env :: AnnEnv And for annotations tcg_visible_orphan_mods :: ModuleSet The set of orphan modules which transitively reachable from direct imports. We use this to figure out if an orphan instance in the global InstEnv should be considered visible. See Note [Instance lookup and orphan instances] in InstEnv 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 transative trusted packaage requirements. tcg_dus :: DefUses What is defined in this module and what is used. tcg_used_rdrnames :: TcRef (Set RdrName) tcg_keep :: TcRef NameSet Locally-defined top-level names to keep alive. "Keep alive" means give them an Exported flag, so that the simplifier does not discard them as dead code, and so that they are exposed in the interface file (but not to export to the user). Some things, like dict-fun Ids and default-method Ids are "born" with the Exported flag on, for exactly the above reason, but some we only discover as we go. Specifically: The to/from functions for generic data types Top-level variables appearing free in the RHS of an orphan rule Top-level variables appearing free in a TH bracket 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_dfun_n :: TcRef OccSet Allows us to choose unique DFun names. tcg_rn_exports :: Maybe [Located (IE Name)] tcg_rn_imports :: [LImportDecl Name] tcg_rn_decls :: Maybe (HsGroup Name) Renamed decls, maybe. `Nothing` = Don't retain renamed decls. tcg_dependent_files :: TcRef [FilePath] dependencies from addDependentFile tcg_th_topdecls :: TcRef [LHsDecl RdrName] Top-level declarations from addTopDecls tcg_th_topnames :: TcRef NameSet Exact names bound in top-level declarations in tcg_th_topdecls tcg_th_modfinalizers :: TcRef [Q ()] Template Haskell module finalizers tcg_th_state :: TcRef (Map TypeRep Dynamic) Template Haskell state tcg_ev_binds :: Bag EvBind tcg_binds :: LHsBinds Id tcg_sigs :: NameSet tcg_imp_specs :: [LTcSpecPrag] tcg_warns :: Warnings tcg_anns :: [Annotation] tcg_tcs :: [TyCon] tcg_insts :: [ClsInst] tcg_fam_insts :: [FamInst] tcg_rules :: [LRuleDecl Id] tcg_fords :: [LForeignDecl Id] tcg_vects :: [LVectDecl Id] tcg_patsyns :: [PatSyn] tcg_doc_hdr :: Maybe LHsDocString Maybe Haddock header docs tcg_hpc :: AnyHpcUsage `True` if any part of the prog uses hpc instrumentation. tcg_main :: Maybe Name The Name of the main function, if this module is the main module. tcg_safeInfer :: TcRef Bool tcg_tc_plugins :: [TcPluginSolver] A list of user-defined plugins for the constraint solver. tcg_static_wc :: TcRef WantedConstraints Wanted constraints of static forms.

Instances

ContainsModule TcGblEnv |

data TcLclEnv Source

Constructors

TcLclEnv |
Fields tcl_loc :: RealSrcSpan tcl_ctxt :: [ErrCtxt] tcl_tclvl :: TcLevel tcl_th_ctxt :: ThStage tcl_th_bndrs :: ThBindEnv tcl_arrow_ctxt :: ArrowCtxt tcl_rdr :: LocalRdrEnv tcl_env :: TcTypeEnv tcl_bndrs :: [TcIdBinder] tcl_tidy :: TidyEnv tcl_tyvars :: TcRef TcTyVarSet tcl_lie :: TcRef WantedConstraints tcl_errs :: TcRef Messages

data IfGblEnv Source

Constructors

IfGblEnv |
Fields if_rec_types :: Maybe (Module, IfG TypeEnv)

data IfLclEnv Source

Constructors

IfLclEnv |
Fields if_mod :: Module if_loc :: SDoc if_tv_env :: UniqFM TyVar if_id_env :: UniqFM Id

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

data RecFieldEnv Source

Constructors

RecFields (NameEnv [Name]) NameSet |

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 The `ModuleName` is what the module was imported as, e.g. in `import Foo as Bar` it is `Bar`. The `Bool` means: `True` => import was `import Foo ()` `False` => import was some other form Used (a) to help construct the usage information in the interface file; if we import something we need to recompile if the export version changes (b) to specify what child modules to initialise 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_dep_mods :: ModuleNameEnv (ModuleName, IsBootInterface) Home-package modules needed by the module being compiled It doesn't matter whether any of these dependencies are actually used when compiling the module; they are listed if they are below it at all. For example, suppose M imports A which imports X. Then compiling M might not need to consult X.hi, but X is still listed in M's dependencies. imp_dep_pkgs :: [PackageKey] Packages needed by the module being compiled, whether directly, or via other modules in this package, or via modules imported from other packages. imp_trust_pkgs :: [PackageKey] This is strictly a subset of imp_dep_pkgs and 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. While perhaps making imp_dep_pkgs a tuple of (PackageKey, Bool) where True for the bool indicates the package is required to be trusted is the more logical design, doing so complicates a lot of code not concerned with Safe Haskell. See Note [RnNames . Tracking Trust Transitively] 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 [RnNames . Trust Own Package] 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

Outputable WhereFrom |

mkModDeps :: [(ModuleName, IsBootInterface)] -> ModuleNameEnv (ModuleName, IsBootInterface) Source

type TcTypeEnv = NameEnv TcTyThing Source

data TcIdBinder Source

Constructors

TcIdBndr TcId TopLevelFlag |

data TcTyThing Source

Constructors

AGlobal TyThing |
ATcId |
Fields tct_id :: TcId tct_closed :: TopLevelFlag
ATyVar Name TcTyVar |
AThing TcKind |
APromotionErr PromotionErr |

Instances

Outputable TcTyThing |

data PromotionErr Source

Constructors

TyConPE |
ClassPE |
FamDataConPE |
RecDataConPE |
NoDataKinds |

Instances

Outputable PromotionErr |

pprTcTyThingCategory :: TcTyThing -> SDoc Source

pprPECategory :: PromotionErr -> SDoc Source

type DsM = TcRnIf DsGblEnv DsLclEnv Source

data DsLclEnv Source

Constructors

DsLclEnv |
Fields dsl_meta :: DsMetaEnv dsl_loc :: SrcSpan

data DsGblEnv Source

Constructors

DsGblEnv |
Fields ds_mod :: Module ds_fam_inst_env :: FamInstEnv ds_unqual :: PrintUnqualified ds_msgs :: IORef Messages ds_if_env :: (IfGblEnv, IfLclEnv) ds_dph_env :: GlobalRdrEnv ds_parr_bi :: PArrBuiltin ds_static_binds :: IORef [(Fingerprint, (Id, CoreExpr))] Bindings resulted from floating static forms

Instances

ContainsModule DsGblEnv |

data PArrBuiltin Source

Constructors

PArrBuiltin |
Fields lengthPVar :: Var lengthP replicatePVar :: Var replicateP singletonPVar :: Var singletonP mapPVar :: Var mapP filterPVar :: Var filterP zipPVar :: Var zipP crossMapPVar :: Var crossMapP indexPVar :: Var (!:) emptyPVar :: Var emptyP appPVar :: Var (+:+) enumFromToPVar :: Var enumFromToP enumFromThenToPVar :: Var enumFromThenToP

type DsMetaEnv = NameEnv DsMetaVal Source

data DsMetaVal Source

Constructors

DsBound Id |
DsSplice (HsExpr Id) |

data ThStage Source

Constructors

Splice Bool |
Comp |
Brack ThStage PendingStuff |

Instances

Outputable ThStage |

data PendingStuff Source

Constructors

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

topStage :: ThStage Source

topAnnStage :: ThStage Source

topSpliceStage :: ThStage Source

type ThLevel = Int Source

impLevel :: ThLevel Source

outerLevel :: ThLevel Source

thLevel :: ThStage -> ThLevel Source

data ArrowCtxt Source

Constructors

NoArrowCtxt |
ArrowCtxt LocalRdrEnv (TcRef WantedConstraints) |

type Xi = Type Source

data Ct Source

Constructors

CDictCan |
Fields cc_ev :: CtEvidence cc_class :: Class cc_tyargs :: [Xi]
CIrredEvCan |
Fields cc_ev :: CtEvidence
CTyEqCan |
Fields cc_ev :: CtEvidence cc_tyvar :: TcTyVar cc_rhs :: TcType cc_eq_rel :: EqRel
CFunEqCan |
Fields cc_ev :: CtEvidence cc_fun :: TyCon cc_tyargs :: [Xi] cc_fsk :: TcTyVar
CNonCanonical |
Fields cc_ev :: CtEvidence
CHoleCan |
Fields cc_ev :: CtEvidence cc_occ :: OccName cc_hole :: HoleSort

Instances

Outputable Ct |

type Cts = Bag Ct Source

emptyCts :: Cts Source

andCts :: Cts -> Cts -> Cts Source

andManyCts :: [Cts] -> Cts Source

pprCts :: Cts -> SDoc Source

singleCt :: Ct -> Cts Source

listToCts :: [Ct] -> Cts Source

ctsElts :: Cts -> [Ct] Source

consCts :: Ct -> Cts -> Cts Source

snocCts :: Cts -> Ct -> Cts Source

extendCtsList :: Cts -> [Ct] -> Cts Source

isEmptyCts :: Cts -> Bool Source

isCTyEqCan :: Ct -> Bool Source

isCFunEqCan :: Ct -> Bool Source

isCDictCan_Maybe :: Ct -> Maybe Class Source

isCFunEqCan_maybe :: Ct -> Maybe (TyCon, [Type]) Source

isCIrredEvCan :: Ct -> Bool Source

isCNonCanonical :: Ct -> Bool Source

isWantedCt :: Ct -> Bool Source

isDerivedCt :: Ct -> Bool Source

isGivenCt :: Ct -> Bool Source

isHoleCt :: Ct -> Bool Source

isTypedHoleCt :: Ct -> Bool Source

isPartialTypeSigCt :: Ct -> Bool Source

ctEvidence :: Ct -> CtEvidence Source

ctLoc :: Ct -> CtLoc Source

ctPred :: Ct -> PredType Source

ctFlavour :: Ct -> CtFlavour Source

Get the flavour of the given `Ct`

ctEqRel :: Ct -> EqRel Source

Get the equality relation for the given `Ct`

mkNonCanonical :: CtEvidence -> Ct Source

mkNonCanonicalCt :: Ct -> Ct Source

ctEvPred :: CtEvidence -> TcPredType Source

ctEvLoc :: CtEvidence -> CtLoc Source

ctEvEqRel :: CtEvidence -> EqRel Source

Get the equality relation relevant for a `CtEvidence`

ctEvTerm :: CtEvidence -> EvTerm Source

ctEvCoercion :: CtEvidence -> TcCoercion Source

ctEvId :: CtEvidence -> TcId Source

ctEvCheckDepth :: Class -> CtLoc -> CtEvidence -> Bool Source

Checks whether the evidence can be used to solve a goal with the given minimum depth See Note [Preventing recursive dictionaries]

data WantedConstraints Source

Constructors

WC |
Fields wc_simple :: Cts wc_impl :: Bag Implication wc_insol :: Cts

Instances

Outputable WantedConstraints |

insolubleWC :: WantedConstraints -> Bool Source

emptyWC :: WantedConstraints Source

isEmptyWC :: WantedConstraints -> Bool Source

andWC :: WantedConstraints -> WantedConstraints -> WantedConstraints Source

unionsWC :: [WantedConstraints] -> WantedConstraints Source

addSimples :: WantedConstraints -> Bag Ct -> WantedConstraints Source

addImplics :: WantedConstraints -> Bag Implication -> WantedConstraints Source

mkSimpleWC :: [Ct] -> WantedConstraints Source

addInsols :: WantedConstraints -> Bag Ct -> WantedConstraints Source

dropDerivedWC :: WantedConstraints -> WantedConstraints Source

data Implication Source

Constructors

Implic |
Fields ic_tclvl :: TcLevel ic_skols :: [TcTyVar] ic_info :: SkolemInfo ic_given :: [EvVar] ic_no_eqs :: Bool ic_env :: TcLclEnv ic_wanted :: WantedConstraints ic_insol :: Bool ic_binds :: EvBindsVar

Instances

Outputable Implication |

data SubGoalCounter Source

Constructors

CountConstraints |
CountTyFunApps |

data SubGoalDepth Source

Instances

Eq SubGoalDepth |
Ord SubGoalDepth |
Outputable SubGoalDepth |

initialSubGoalDepth :: SubGoalDepth Source

maxSubGoalDepth :: DynFlags -> SubGoalDepth Source

bumpSubGoalDepth :: SubGoalCounter -> SubGoalDepth -> SubGoalDepth Source

subGoalCounterValue :: SubGoalCounter -> SubGoalDepth -> Int Source

subGoalDepthExceeded :: SubGoalDepth -> SubGoalDepth -> Maybe SubGoalCounter Source

data CtLoc Source

Constructors

CtLoc |
Fields ctl_origin :: CtOrigin ctl_env :: TcLclEnv ctl_depth :: !SubGoalDepth

ctLocSpan :: CtLoc -> RealSrcSpan Source

ctLocEnv :: CtLoc -> TcLclEnv Source

ctLocOrigin :: CtLoc -> CtOrigin Source

ctLocDepth :: CtLoc -> SubGoalDepth Source

bumpCtLocDepth :: SubGoalCounter -> CtLoc -> CtLoc Source

setCtLocOrigin :: CtLoc -> CtOrigin -> CtLoc Source

setCtLocEnv :: CtLoc -> TcLclEnv -> CtLoc Source

setCtLocSpan :: CtLoc -> RealSrcSpan -> CtLoc Source

data CtOrigin Source

Constructors

GivenOrigin SkolemInfo |
OccurrenceOf Name |
AppOrigin |
SpecPragOrigin Name |
TypeEqOrigin |
Fields uo_actual :: TcType uo_expected :: TcType
KindEqOrigin TcType TcType CtOrigin |
CoercibleOrigin TcType TcType |
IPOccOrigin HsIPName |
LiteralOrigin (HsOverLit Name) |
NegateOrigin |
ArithSeqOrigin (ArithSeqInfo Name) |
PArrSeqOrigin (ArithSeqInfo Name) |
SectionOrigin |
TupleOrigin |
ExprSigOrigin |
PatSigOrigin |
PatOrigin |
RecordUpdOrigin |
ViewPatOrigin |
ScOrigin |
DerivOrigin |
DerivOriginDC DataCon Int |
DerivOriginCoerce Id Type Type |
StandAloneDerivOrigin |
DefaultOrigin |
DoOrigin |
MCompOrigin |
IfOrigin |
ProcOrigin |
AnnOrigin |
FunDepOrigin1 PredType CtLoc PredType CtLoc |
FunDepOrigin2 PredType CtOrigin PredType SrcSpan |
HoleOrigin |
UnboundOccurrenceOf RdrName |
ListOrigin |
StaticOrigin |

pprCtOrigin :: CtOrigin -> SDoc Source

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

pushErrCtxtSameOrigin :: ErrCtxt -> CtLoc -> CtLoc Source

data SkolemInfo Source

Constructors

SigSkol UserTypeCtxt Type |
ClsSkol Class |
InstSkol |
DataSkol |
FamInstSkol |
PatSkol ConLike (HsMatchContext Name) |
ArrowSkol |
IPSkol [HsIPName] |
RuleSkol RuleName |
InferSkol [(Name, TcType)] |
BracketSkol |
UnifyForAllSkol [TcTyVar] TcType |
UnkSkol |

Instances

Outputable SkolemInfo |

data CtEvidence Source

Constructors

CtGiven |
Fields ctev_pred :: TcPredType ctev_evtm :: EvTerm ctev_loc :: CtLoc
CtWanted |
Fields ctev_pred :: TcPredType ctev_evar :: EvVar ctev_loc :: CtLoc
CtDerived |
Fields ctev_pred :: TcPredType ctev_loc :: CtLoc

Instances

Outputable CtEvidence |

mkGivenLoc :: TcLevel -> SkolemInfo -> TcLclEnv -> CtLoc Source

isWanted :: CtEvidence -> Bool Source

isGiven :: CtEvidence -> Bool Source

isDerived :: CtEvidence -> Bool Source

ctEvRole :: CtEvidence -> Role Source

Get the role relevant for a `CtEvidence`

data TcPlugin Source

Constructors

forall s . TcPlugin |
Fields tcPluginInit :: TcPluginM s Initialize plugin, when entering type-checker. tcPluginSolve :: s -> TcPluginSolver Solve some constraints. TODO: WRITE MORE DETAILS ON HOW THIS WORKS. tcPluginStop :: s -> TcPluginM () Clean up after the plugin, when exiting the type-checker.

data TcPluginResult Source

Constructors

TcPluginContradiction [Ct] | The plugin found a contradiction. The returned constraints are removed from the inert set, and recorded as insoluable.
TcPluginOk [(EvTerm, Ct)] [Ct] | The first field is for constraints that were solved. These are removed from the inert set, and the evidence for them is recorded. The second field contains new work, that should be processed by the constraint solver.

type TcPluginSolver = [Ct] -> [Ct] -> [Ct] -> TcPluginM TcPluginResult Source

data TcPluginM a Source

Instances

Monad TcPluginM |
Functor TcPluginM |
Applicative TcPluginM |

runTcPluginM :: TcPluginM a -> TcM 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 CtFlavour Source

Constructors

Given |
Wanted |
Derived |

Instances

Eq CtFlavour |
Outputable CtFlavour |

ctEvFlavour :: CtEvidence -> CtFlavour Source

pprEvVarTheta :: [EvVar] -> SDoc Source

pprEvVars :: [EvVar] -> SDoc Source

pprEvVarWithType :: EvVar -> SDoc Source

pprArising :: CtOrigin -> SDoc Source

pprArisingAt :: CtLoc -> SDoc Source

type TcId = Id Source

type TcIdSet = IdSet Source

data HoleSort Source

Used to indicate which sort of hole we have.

Constructors

ExprHole | A hole in an expression (TypedHoles)
TypeHole | A hole in a type (PartialTypeSignatures)