ghc-7.0.3: The GHC API

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_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_ev_binds :: Bag EvBind
  - tcg_binds :: LHsBinds Id
  - tcg_sigs :: NameSet
  - tcg_imp_specs :: [LTcSpecPrag]
  - 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 :: TcTypeEnv
  - tcl_tyvars :: TcRef TcTyVarSet
  - tcl_lie :: TcRef WantedConstraints
  - tcl_meta :: TcRef Unique
  - tcl_untch :: Unique
  }
- 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)
- type TcTypeEnv = NameEnv TcTyThing
- data TcTyThing
  - = AGlobal TyThing
  - | ATcId {
    - tct_id :: TcId
    - tct_level :: ThLevel
    }
  - | ATyVar Name TcType
  - | AThing TcKind
- pprTcTyThingCategory :: TcTyThing -> SDoc
- data ThStage
  - = Splice
  - | Comp
  - | Brack ThStage (TcRef [PendingSplice]) (TcRef WantedConstraints)
- 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 Untouchables
  - = NoUntouchables
  - | TouchableRange Unique Unique
- inTouchableRange :: Untouchables -> TcTyVar -> Bool
- isNoUntouchables :: Untouchables -> Bool
- data WantedConstraints = WC {
  - wc_flat :: Bag WantedEvVar
  - wc_impl :: Bag Implication
  - wc_insol :: Bag FlavoredEvVar
  }
- insolubleWC :: WantedConstraints -> Bool
- emptyWC :: WantedConstraints
- isEmptyWC :: WantedConstraints -> Bool
- andWC :: WantedConstraints -> WantedConstraints -> WantedConstraints
- addFlats :: WantedConstraints -> Bag WantedEvVar -> WantedConstraints
- addImplics :: WantedConstraints -> Bag Implication -> WantedConstraints
- mkFlatWC :: Bag WantedEvVar -> WantedConstraints
- data EvVarX a = EvVarX EvVar a
- mkEvVarX :: EvVar -> a -> EvVarX a
- evVarOf :: EvVarX a -> EvVar
- evVarX :: EvVarX a -> a
- evVarOfPred :: EvVarX a -> PredType
- type WantedEvVar = EvVarX WantedLoc
- wantedToFlavored :: WantedEvVar -> FlavoredEvVar
- keepWanted :: Bag FlavoredEvVar -> Bag WantedEvVar
- data Implication = Implic {
  - ic_untch :: Untouchables
  - ic_env :: TcTypeEnv
  - ic_skols :: TcTyVarSet
  - ic_given :: [EvVar]
  - ic_loc :: GivenLoc
  - ic_wanted :: WantedConstraints
  - ic_insol :: Bool
  - ic_binds :: EvBindsVar
  }
- data CtLoc orig = CtLoc orig SrcSpan [ErrCtxt]
- ctLocSpan :: CtLoc o -> SrcSpan
- ctLocOrigin :: CtLoc o -> o
- setCtLocOrigin :: CtLoc o -> o' -> CtLoc o'
- data CtOrigin
  - = OccurrenceOf Name
  - | AppOrigin
  - | SpecPragOrigin Name
  - | TypeEqOrigin EqOrigin
  - | IPOccOrigin (IPName Name)
  - | LiteralOrigin (HsOverLit Name)
  - | NegateOrigin
  - | ArithSeqOrigin (ArithSeqInfo Name)
  - | PArrSeqOrigin (ArithSeqInfo Name)
  - | SectionOrigin
  - | TupleOrigin
  - | ExprSigOrigin
  - | PatSigOrigin
  - | PatOrigin
  - | RecordUpdOrigin
  - | ViewPatOrigin
  - | ScOrigin
  - | DerivOrigin
  - | StandAloneDerivOrigin
  - | DefaultOrigin
  - | DoOrigin
  - | IfOrigin
  - | ProcOrigin
  - | AnnOrigin
  - | FunDepOrigin
- data EqOrigin = UnifyOrigin {
  - uo_actual :: TcType
  - uo_expected :: TcType
  }
- type WantedLoc = CtLoc CtOrigin
- type GivenLoc = CtLoc SkolemInfo
- pushErrCtxt :: orig -> ErrCtxt -> CtLoc orig -> CtLoc orig
- data SkolemInfo
  - = SigSkol UserTypeCtxt Type
  - | ClsSkol Class
  - | InstSkol
  - | DataSkol
  - | FamInstSkol
  - | PatSkol DataCon (HsMatchContext Name)
  - | ArrowSkol
  - | IPSkol [IPName Name]
  - | RuleSkol RuleName
  - | InferSkol [(Name, TcType)]
  - | RuntimeUnkSkol
  - | BracketSkol
  - | UnkSkol
- data CtFlavor
  - = Given GivenLoc
  - | Derived WantedLoc
  - | Wanted WantedLoc
- pprFlavorArising :: CtFlavor -> SDoc
- isWanted :: CtFlavor -> Bool
- isGiven :: CtFlavor -> Bool
- isDerived :: CtFlavor -> Bool
- type FlavoredEvVar = EvVarX CtFlavor
- pprEvVarTheta :: [EvVar] -> SDoc
- pprWantedEvVar :: WantedEvVar -> SDoc
- pprWantedsWithLocs :: WantedConstraints -> SDoc
- pprEvVars :: [EvVar] -> SDoc
- pprEvVarWithType :: EvVar -> SDoc
- pprArising :: CtOrigin -> SDoc
- pprArisingAt :: Outputable o => CtLoc o -> SDoc
- type TcId = Id
- type TcIdSet = IdSet
- 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 |

Fields

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 Source

Constructors

TcGblEnv |

Fields

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_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. 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_ev_binds :: Bag EvBind
tcg_binds :: LHsBinds Id
tcg_sigs :: NameSet
tcg_imp_specs :: [LTcSpecPrag]
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 Source

Constructors

TcLclEnv |

Fields

tcl_loc :: SrcSpan
tcl_ctxt :: [ErrCtxt]
tcl_errs :: TcRef Messages
tcl_th_ctxt :: ThStage
tcl_arrow_ctxt :: ArrowCtxt
tcl_rdr :: LocalRdrEnv
tcl_env :: TcTypeEnv
tcl_tyvars :: TcRef TcTyVarSet
tcl_lie :: TcRef WantedConstraints
tcl_meta :: TcRef Unique
tcl_untch :: Unique

Instances

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

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

Fields

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 Source

plusImportAvails :: ImportAvails -> ImportAvails -> ImportAvails Source

data WhereFrom Source

Constructors

ImportByUser IsBootInterface |
ImportBySystem |

Instances

Outputable WhereFrom |

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

type TcTypeEnv = NameEnv TcTyThing Source

data TcTyThing Source

Constructors

AGlobal TyThing |
ATcId |

Fields

tct_id :: TcId
tct_level :: ThLevel

ATyVar Name TcType |
AThing TcKind |

Instances

Outputable TcTyThing |

pprTcTyThingCategory :: TcTyThing -> SDoc Source

data ThStage Source

Constructors

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

Instances

Outputable ThStage |

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 |

newArrowScope :: TcM a -> TcM aSource

escapeArrowScope :: TcM a -> TcM aSource

data Untouchables Source

Constructors

NoUntouchables |
TouchableRange Unique Unique |

Instances

Outputable Untouchables |

inTouchableRange :: Untouchables -> TcTyVar -> Bool Source

isNoUntouchables :: Untouchables -> Bool Source

data WantedConstraints Source

Constructors

WC |

Fields

wc_flat :: Bag WantedEvVar
wc_impl :: Bag Implication
wc_insol :: Bag FlavoredEvVar

Instances

Outputable WantedConstraints |

insolubleWC :: WantedConstraints -> Bool Source

emptyWC :: WantedConstraints Source

isEmptyWC :: WantedConstraints -> Bool Source

andWC :: WantedConstraints -> WantedConstraints -> WantedConstraints Source

addFlats :: WantedConstraints -> Bag WantedEvVar -> WantedConstraints Source

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

mkFlatWC :: Bag WantedEvVar -> WantedConstraints Source

data EvVarX a Source

Constructors

EvVarX EvVar a |

Instances

Outputable (EvVarX a) |

mkEvVarX :: EvVar -> a -> EvVarX aSource

evVarOf :: EvVarX a -> EvVar Source

evVarX :: EvVarX a -> aSource

evVarOfPred :: EvVarX a -> PredType Source

type WantedEvVar = EvVarX WantedLoc Source

wantedToFlavored :: WantedEvVar -> FlavoredEvVar Source

keepWanted :: Bag FlavoredEvVar -> Bag WantedEvVar Source

data Implication Source

Constructors

Implic |

Fields

ic_untch :: Untouchables
ic_env :: TcTypeEnv
ic_skols :: TcTyVarSet
ic_given :: [EvVar]
ic_loc :: GivenLoc
ic_wanted :: WantedConstraints
ic_insol :: Bool
ic_binds :: EvBindsVar

Instances

Outputable Implication |

data CtLoc orig Source

Constructors

CtLoc orig SrcSpan [ErrCtxt] |

ctLocSpan :: CtLoc o -> SrcSpan Source

ctLocOrigin :: CtLoc o -> oSource

setCtLocOrigin :: CtLoc o -> o' -> CtLoc o'Source

data CtOrigin Source

Constructors

OccurrenceOf Name |
AppOrigin |
SpecPragOrigin Name |
TypeEqOrigin EqOrigin |
IPOccOrigin (IPName Name) |
LiteralOrigin (HsOverLit Name) |
NegateOrigin |
ArithSeqOrigin (ArithSeqInfo Name) |
PArrSeqOrigin (ArithSeqInfo Name) |
SectionOrigin |
TupleOrigin |
ExprSigOrigin |
PatSigOrigin |
PatOrigin |
RecordUpdOrigin |
ViewPatOrigin |
ScOrigin |
DerivOrigin |
StandAloneDerivOrigin |
DefaultOrigin |
DoOrigin |
IfOrigin |
ProcOrigin |
AnnOrigin |
FunDepOrigin |

Instances

Outputable CtOrigin |

data EqOrigin Source

Constructors

UnifyOrigin |

Fields

uo_actual :: TcType
uo_expected :: TcType

Instances

Outputable EqOrigin |

type WantedLoc = CtLoc CtOrigin Source

type GivenLoc = CtLoc SkolemInfo Source

pushErrCtxt :: orig -> ErrCtxt -> CtLoc orig -> CtLoc origSource

data SkolemInfo Source

Constructors

SigSkol UserTypeCtxt Type |
ClsSkol Class |
InstSkol |
DataSkol |
FamInstSkol |
PatSkol DataCon (HsMatchContext Name) |
ArrowSkol |
IPSkol [IPName Name] |
RuleSkol RuleName |
InferSkol [(Name, TcType)] |
RuntimeUnkSkol |
BracketSkol |
UnkSkol |

Instances

Outputable SkolemInfo |

data CtFlavor Source

Constructors

Given GivenLoc |
Derived WantedLoc |
Wanted WantedLoc |

Instances

Outputable CtFlavor |

pprFlavorArising :: CtFlavor -> SDoc Source

isWanted :: CtFlavor -> Bool Source

isGiven :: CtFlavor -> Bool Source

isDerived :: CtFlavor -> Bool Source

type FlavoredEvVar = EvVarX CtFlavor Source

pprEvVarTheta :: [EvVar] -> SDoc Source

pprWantedEvVar :: WantedEvVar -> SDoc Source

pprWantedsWithLocs :: WantedConstraints -> SDoc Source

pprEvVars :: [EvVar] -> SDoc Source

pprEvVarWithType :: EvVar -> SDoc Source

pprArising :: CtOrigin -> SDoc Source

pprArisingAt :: Outputable o => CtLoc o -> SDoc Source

type TcId = Id Source

type TcIdSet = IdSet Source

data TcTyVarBind Source

Constructors

TcTyVarBind TcTyVar TcType |

Instances

Outputable TcTyVarBind |

type TcTyVarBinds = Bag TcTyVarBind Source