ghc-6.12.2: The GHC APISource codeContentsIndex
TcRnTypes
Synopsis
type TcRnIf a b c = IOEnv (Env a b) c
type TcRn a = TcRnIf TcGblEnv TcLclEnv a
type TcM a = TcRn a
type RnM a = TcRn a
type IfM lcl a = TcRnIf IfGblEnv lcl a
type IfL a = IfM IfLclEnv a
type IfG a = IfM () a
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_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_exports :: [AvailInfo]
tcg_imports :: ImportAvails
tcg_dus :: DefUses
tcg_keep :: TcRef NameSet
tcg_inst_uses :: TcRef NameSet
tcg_th_used :: TcRef Bool
tcg_dfun_n :: TcRef OccSet
tcg_rn_exports :: Maybe [Located (IE Name)]
tcg_rn_imports :: [LImportDecl Name]
tcg_used_rdrnames :: TcRef (Set RdrName)
tcg_rn_decls :: Maybe (HsGroup Name)
tcg_binds :: LHsBinds Id
tcg_warns :: Warnings
tcg_anns :: [Annotation]
tcg_insts :: [Instance]
tcg_fam_insts :: [FamInst]
tcg_rules :: [LRuleDecl Id]
tcg_fords :: [LForeignDecl Id]
tcg_doc_hdr :: Maybe LHsDocString
tcg_hpc :: AnyHpcUsage
tcg_main :: Maybe Name
}
data TcLclEnv = TcLclEnv {
tcl_loc :: SrcSpan
tcl_ctxt :: [ErrCtxt]
tcl_errs :: TcRef Messages
tcl_th_ctxt :: ThStage
tcl_arrow_ctxt :: ArrowCtxt
tcl_rdr :: LocalRdrEnv
tcl_env :: NameEnv TcTyThing
tcl_tyvars :: TcRef TcTyVarSet
tcl_lie :: TcRef LIE
tcl_tybinds :: TcRef TcTyVarBinds
}
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, Message))
data RecFieldEnv = RecFields (NameEnv [Name]) NameSet
data ImportAvails = ImportAvails {
imp_mods :: ModuleEnv [(ModuleName, Bool, SrcSpan)]
imp_dep_mods :: ModuleNameEnv (ModuleName, IsBootInterface)
imp_dep_pkgs :: [PackageId]
imp_orphs :: [Module]
imp_finsts :: [Module]
}
emptyImportAvails :: ImportAvails
plusImportAvails :: ImportAvails -> ImportAvails -> ImportAvails
data WhereFrom
= ImportByUser IsBootInterface
| ImportBySystem
mkModDeps :: [(ModuleName, IsBootInterface)] -> ModuleNameEnv (ModuleName, IsBootInterface)
data TcTyThing
= AGlobal TyThing
| ATcId {
tct_id :: TcId
tct_co :: RefinementVisibility
tct_type :: TcType
tct_level :: ThLevel
}
| ATyVar Name TcType
| AThing TcKind
pprTcTyThingCategory :: TcTyThing -> SDoc
data RefinementVisibility
= Unrefineable
| Rigid HsWrapper
| Wobbly
| WobblyInvisible
data ThStage
= Splice
| Comp
| Brack ThStage (TcRef [PendingSplice]) (TcRef LIE)
topStage :: ThStage
topAnnStage :: ThStage
topSpliceStage :: ThStage
type ThLevel = Int
impLevel :: ThLevel
outerLevel :: ThLevel
thLevel :: ThStage -> ThLevel
data ArrowCtxt = NoArrowCtxt
newArrowScope :: TcM a -> TcM a
escapeArrowScope :: TcM a -> TcM a
data Inst
= Dict {
tci_name :: Name
tci_pred :: TcPredType
tci_loc :: InstLoc
}
| ImplicInst {
tci_name :: Name
tci_tyvars :: [TcTyVar]
tci_given :: [Inst]
tci_wanted :: [Inst]
tci_loc :: InstLoc
}
| Method {
tci_id :: TcId
tci_oid :: TcId
tci_tys :: [TcType]
tci_theta :: TcThetaType
tci_loc :: InstLoc
}
| LitInst {
tci_name :: Name
tci_lit :: HsOverLit Name
tci_ty :: TcType
tci_loc :: InstLoc
}
| EqInst {
tci_left :: TcType
tci_right :: TcType
tci_co :: EqInstCo
tci_loc :: InstLoc
tci_name :: Name
}
type EqInstCo = Either TcTyVar Coercion
data InstOrigin
= SigOrigin SkolemInfo
| IPBindOrigin (IPName Name)
| OccurrenceOf Name
| SpecPragOrigin Name
| IPOccOrigin (IPName Name)
| LiteralOrigin (HsOverLit Name)
| NegateOrigin
| ArithSeqOrigin (ArithSeqInfo Name)
| PArrSeqOrigin (ArithSeqInfo Name)
| TupleOrigin
| InstSigOrigin
| ExprSigOrigin
| RecordUpdOrigin
| ViewPatOrigin
| InstScOrigin
| NoScOrigin
| DerivOrigin
| StandAloneDerivOrigin
| DefaultOrigin
| DoOrigin
| ProcOrigin
| ImplicOrigin SDoc
| EqOrigin
| AnnOrigin
data InstLoc = InstLoc InstOrigin SrcSpan [ErrCtxt]
pprInstLoc :: InstLoc -> SDoc
pprInstArising :: Inst -> SDoc
instLocSpan :: InstLoc -> SrcSpan
instLocOrigin :: InstLoc -> InstOrigin
setInstLoc :: Inst -> InstLoc -> Inst
type LIE = Bag Inst
emptyLIE :: LIE
unitLIE :: Inst -> LIE
plusLIE :: LIE -> LIE -> LIE
consLIE :: Inst -> LIE -> LIE
instLoc :: Inst -> InstLoc
instSpan :: Inst -> SrcSpan
plusLIEs :: [LIE] -> LIE
mkLIE :: [Inst] -> LIE
isEmptyLIE :: LIE -> Bool
lieToList :: LIE -> [Inst]
listToLIE :: [Inst] -> LIE
type TcId = Id
type TcIdSet = IdSet
type TcDictBinds = DictBinds TcId
data TcTyVarBind = TcTyVarBind TcTyVar TcType
type TcTyVarBinds = Bag TcTyVarBind
Documentation
type TcRnIf a b c = IOEnv (Env a b) cSource
type TcRn a = TcRnIf TcGblEnv TcLclEnv aSource
type TcM a = TcRn aSource
type RnM a = TcRn aSource
type IfM lcl a = TcRnIf IfGblEnv lcl aSource
type IfL a = IfM IfLclEnv aSource
type IfG a = IfM () aSource
type TcRef a = IORef aSource
data Env gbl lcl Source
Constructors
Env
env_top :: HscEnv
env_us :: !(IORef UniqSupply)
env_gbl :: gbl
env_lcl :: lcl
show/hide Instances
data TcGblEnv Source
Constructors
TcGblEnv
tcg_mod :: ModuleModule being compiled
tcg_src :: HscSourceWhat kind of module (regular Haskell, hs-boot, ext-core)
tcg_rdr_env :: GlobalRdrEnvTop level envt; used during renaming
tcg_default :: Maybe [Type]Types used for defaulting. Nothing => no default decl
tcg_fix_env :: FixityEnvJust for things in this module
tcg_field_env :: RecFieldEnvJust for things in this module
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)

tcg_type_env_var :: TcRef TypeEnv
tcg_inst_env :: InstEnvInstance envt for home-package modules; Includes the dfuns in tcg_insts
tcg_fam_inst_env :: FamInstEnvDitto for family instances
tcg_exports :: [AvailInfo]What is exported
tcg_imports :: ImportAvailsInformation about what was imported from where, including things bound in this module.
tcg_dus :: DefUses

What is defined in this module and what is used. The latter is used to generate

(a) version tracking; no need to recompile if these things have not changed version stamp

(b) unused-import info

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_inst_uses :: TcRef NameSet

Home-package Dfuns actually used.

Used to generate version dependencies This records usages, rather like tcg_dus, but it has to be a mutable variable so it can be augmented when we look up an instance. These uses of dfuns are rather like the free variables of the program, but are implicit instead of explicit.

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, becuase the desugarer is going to emit loads of references to TH symbols. It's rather like tcg_inst_uses; the reference is implicit rather than explicit, so we have to zap a mutable variable.

tcg_dfun_n :: TcRef OccSetAllows us to choose unique DFun names.
tcg_rn_exports :: Maybe [Located (IE Name)]
tcg_rn_imports :: [LImportDecl Name]
tcg_used_rdrnames :: TcRef (Set RdrName)
tcg_rn_decls :: Maybe (HsGroup Name)Renamed decls, maybe. Nothing = Don't retain renamed decls.
tcg_binds :: LHsBinds Id
tcg_warns :: Warnings
tcg_anns :: [Annotation]
tcg_insts :: [Instance]
tcg_fam_insts :: [FamInst]
tcg_rules :: [LRuleDecl Id]
tcg_fords :: [LForeignDecl Id]
tcg_doc_hdr :: Maybe LHsDocStringMaybe Haddock header docs
tcg_hpc :: AnyHpcUsageTrue if any part of the prog uses hpc instrumentation.
tcg_main :: Maybe NameThe Name of the main function, if this module is the main module.
show/hide Instances
data TcLclEnv Source
Constructors
TcLclEnv
tcl_loc :: SrcSpan
tcl_ctxt :: [ErrCtxt]
tcl_errs :: TcRef Messages
tcl_th_ctxt :: ThStage
tcl_arrow_ctxt :: ArrowCtxt
tcl_rdr :: LocalRdrEnv
tcl_env :: NameEnv TcTyThing
tcl_tyvars :: TcRef TcTyVarSet
tcl_lie :: TcRef LIE
tcl_tybinds :: TcRef TcTyVarBinds
show/hide Instances
data IfGblEnv Source
Constructors
IfGblEnv
if_rec_types :: Maybe (Module, IfG TypeEnv)
data IfLclEnv Source
Constructors
IfLclEnv
if_mod :: Module
if_loc :: SDoc
if_tv_env :: UniqFM TyVar
if_id_env :: UniqFM Id
type ErrCtxt = (Bool, TidyEnv -> TcM (TidyEnv, Message))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
imp_mods :: ModuleEnv [(ModuleName, Bool, SrcSpan)]

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 somethign 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 :: [PackageId]Packages needed by the module being compiled, whether directly, or via other modules in this package, or via modules imported from other packages.
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 :: ImportAvailsSource
plusImportAvails :: ImportAvails -> ImportAvails -> ImportAvailsSource
data WhereFrom Source
Constructors
ImportByUser IsBootInterface
ImportBySystem
show/hide Instances
mkModDeps :: [(ModuleName, IsBootInterface)] -> ModuleNameEnv (ModuleName, IsBootInterface)Source
data TcTyThing Source
Constructors
AGlobal TyThing
ATcId
tct_id :: TcId
tct_co :: RefinementVisibility
tct_type :: TcType
tct_level :: ThLevel
ATyVar Name TcType
AThing TcKind
show/hide Instances
pprTcTyThingCategory :: TcTyThing -> SDocSource
data RefinementVisibility Source
Constructors
Unrefineable
Rigid HsWrapper
Wobbly
WobblyInvisible
show/hide Instances
data ThStage Source
Constructors
Splice
Comp
Brack ThStage (TcRef [PendingSplice]) (TcRef LIE)
show/hide Instances
topStage :: ThStageSource
topAnnStage :: ThStageSource
topSpliceStage :: ThStageSource
type ThLevel = IntSource
impLevel :: ThLevelSource
outerLevel :: ThLevelSource
thLevel :: ThStage -> ThLevelSource
data ArrowCtxt Source
Constructors
NoArrowCtxt
newArrowScope :: TcM a -> TcM aSource
escapeArrowScope :: TcM a -> TcM aSource
data Inst Source
Constructors
Dict
tci_name :: Name
tci_pred :: TcPredType
tci_loc :: InstLoc
ImplicInst
tci_name :: Name
tci_tyvars :: [TcTyVar]
tci_given :: [Inst]
tci_wanted :: [Inst]
tci_loc :: InstLoc
Method
tci_id :: TcId
tci_oid :: TcId
tci_tys :: [TcType]
tci_theta :: TcThetaType
tci_loc :: InstLoc
LitInst
tci_name :: Name
tci_lit :: HsOverLit Name
tci_ty :: TcType
tci_loc :: InstLoc
EqInst
tci_left :: TcType
tci_right :: TcType
tci_co :: EqInstCo
tci_loc :: InstLoc
tci_name :: Name
show/hide Instances
type EqInstCo = Either TcTyVar CoercionSource
data InstOrigin Source
Constructors
SigOrigin SkolemInfo
IPBindOrigin (IPName Name)
OccurrenceOf Name
SpecPragOrigin Name
IPOccOrigin (IPName Name)
LiteralOrigin (HsOverLit Name)
NegateOrigin
ArithSeqOrigin (ArithSeqInfo Name)
PArrSeqOrigin (ArithSeqInfo Name)
TupleOrigin
InstSigOrigin
ExprSigOrigin
RecordUpdOrigin
ViewPatOrigin
InstScOrigin
NoScOrigin
DerivOrigin
StandAloneDerivOrigin
DefaultOrigin
DoOrigin
ProcOrigin
ImplicOrigin SDoc
EqOrigin
AnnOrigin
show/hide Instances
data InstLoc Source
Constructors
InstLoc InstOrigin SrcSpan [ErrCtxt]
pprInstLoc :: InstLoc -> SDocSource
pprInstArising :: Inst -> SDocSource
instLocSpan :: InstLoc -> SrcSpanSource
instLocOrigin :: InstLoc -> InstOriginSource
setInstLoc :: Inst -> InstLoc -> InstSource
type LIE = Bag InstSource
emptyLIE :: LIESource
unitLIE :: Inst -> LIESource
plusLIE :: LIE -> LIE -> LIESource
consLIE :: Inst -> LIE -> LIESource
instLoc :: Inst -> InstLocSource
instSpan :: Inst -> SrcSpanSource
plusLIEs :: [LIE] -> LIESource
mkLIE :: [Inst] -> LIESource
isEmptyLIE :: LIE -> BoolSource
lieToList :: LIE -> [Inst]Source
listToLIE :: [Inst] -> LIESource
type TcId = IdSource
type TcIdSet = IdSetSource
type TcDictBinds = DictBinds TcIdSource
data TcTyVarBind Source
Constructors
TcTyVarBind TcTyVar TcType
show/hide Instances
type TcTyVarBinds = Bag TcTyVarBindSource
Produced by Haddock version 2.6.1