| ghc-6.12.3: The GHC API | Contents | Index

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) 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

Constructors

Env |

env_top :: HscEnv |
env_us :: !(IORef UniqSupply) |
env_gbl :: gbl |
env_lcl :: lcl |

Instances

Quasi (IOEnv (Env TcGblEnv TcLclEnv))
MonadUnique (IOEnv (Env gbl lcl))
MonadThings (IOEnv (Env TcGblEnv TcLclEnv))
MonadThings (IOEnv (Env DsGblEnv DsLclEnv))

data TcGblEnv

Constructors

TcGblEnv |

tcg_mod :: Module | Module being compiled
tcg_src :: HscSource | What kind of module (regular Haskell, hs-boot, ext-core)
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
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 :: InstEnv | Instance envt for home-package modules; Includes the dfuns in tcg_insts
tcg_fam_inst_env :: FamInstEnv | Ditto for family instances
tcg_exports :: [AvailInfo] | What is exported
tcg_imports :: ImportAvails | Information 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 OccSet | Allows 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 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.

Instances

Quasi (IOEnv (Env TcGblEnv TcLclEnv))
MonadThings (IOEnv (Env TcGblEnv TcLclEnv))

data TcLclEnv

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 |

Instances

Quasi (IOEnv (Env TcGblEnv TcLclEnv))
MonadThings (IOEnv (Env TcGblEnv TcLclEnv))

data IfGblEnv

Constructors

IfGblEnv |

if_rec_types :: Maybe (Module, IfG TypeEnv) |

data IfLclEnv

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))
data RecFieldEnv

Constructors

RecFields (NameEnv [Name]) NameSet |

data ImportAvails

`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 :: ImportAvails
plusImportAvails :: ImportAvails -> ImportAvails -> ImportAvails
data WhereFrom

Constructors

ImportByUser IsBootInterface |
ImportBySystem |

Instances

Outputable WhereFrom

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

Constructors

AGlobal TyThing |
ATcId |

tct_id :: TcId |
tct_co :: RefinementVisibility |
tct_type :: TcType |
tct_level :: ThLevel |

ATyVar Name TcType |
AThing TcKind |

Instances

Outputable TcTyThing

pprTcTyThingCategory :: TcTyThing -> SDoc
data RefinementVisibility

Constructors

Unrefineable |
Rigid HsWrapper |
Wobbly |
WobblyInvisible |

Instances

Outputable RefinementVisibility

data ThStage

Constructors

Splice |
Comp |
Brack ThStage (TcRef [PendingSplice]) (TcRef LIE) |

Instances

Outputable ThStage

topStage :: ThStage
topAnnStage :: ThStage
topSpliceStage :: ThStage
type ThLevel = Int
impLevel :: ThLevel
outerLevel :: ThLevel
thLevel :: ThStage -> ThLevel
data ArrowCtxt

Constructors

NoArrowCtxt |

newArrowScope :: TcM a -> TcM a
escapeArrowScope :: TcM a -> TcM a
data Inst

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 |

Instances

Eq Inst
Ord Inst
Outputable Inst

type EqInstCo = Either TcTyVar Coercion
data InstOrigin

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 |

Instances

Outputable InstOrigin

data InstLoc

Constructors

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

Constructors

TcTyVarBind TcTyVar TcType |

Instances

Outputable TcTyVarBind

type TcTyVarBinds = Bag TcTyVarBind
Produced by Haddock version 2.6.1