TcRnTypes

ghc-7.6.3: The GHC API

Safe Haskell | None

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_th_splice_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_dependent_files :: TcRef [FilePath]
  - 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_doc_hdr :: Maybe LHsDocString
  - tcg_hpc :: AnyHpcUsage
  - tcg_main :: Maybe Name
  - tcg_safeInfer :: TcRef Bool
  }
- 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_tidy :: TidyEnv
  - 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, MsgDoc))
- data RecFieldEnv = RecFields (NameEnv [Name]) NameSet
- data ImportAvails = ImportAvails {
  - imp_mods :: ImportedMods
  - imp_dep_mods :: ModuleNameEnv (ModuleName, IsBootInterface)
  - imp_dep_pkgs :: [PackageId]
  - imp_trust_pkgs :: [PackageId]
  - imp_trust_own_pkg :: Bool
  - 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_closed :: TopLevelFlag
    - tct_level :: ThLevel
    }
  - | ATyVar Name TcTyVar
  - | AThing TcKind
  - | APromotionErr PromotionErr
- data PromotionErr
  - = TyConPE
  - | ClassPE
  - | FamDataConPE
  - | RecDataConPE
  - | NoDataKinds
- pprTcTyThingCategory :: TcTyThing -> SDoc
- pprPECategory :: PromotionErr -> 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
- type Xi = Type
- data Ct
  - = CDictCan {
    - cc_ev :: CtEvidence
    - cc_class :: Class
    - cc_tyargs :: [Xi]
    - cc_depth :: SubGoalDepth
    }
  - | CIrredEvCan {
    - cc_ev :: CtEvidence
    - cc_ty :: Xi
    - cc_depth :: SubGoalDepth
    }
  - | CTyEqCan {
    - cc_ev :: CtEvidence
    - cc_tyvar :: TcTyVar
    - cc_rhs :: Xi
    - cc_depth :: SubGoalDepth
    }
  - | CFunEqCan {
    - cc_ev :: CtEvidence
    - cc_fun :: TyCon
    - cc_tyargs :: [Xi]
    - cc_rhs :: Xi
    - cc_depth :: SubGoalDepth
    }
  - | CNonCanonical {
    - cc_ev :: CtEvidence
    - cc_depth :: SubGoalDepth
    }
- type Cts = Bag Ct
- emptyCts :: Cts
- andCts :: Cts -> Cts -> Cts
- andManyCts :: [Cts] -> Cts
- keepWanted :: Cts -> Cts
- singleCt :: Ct -> Cts
- extendCts :: Cts -> Ct -> Cts
- isEmptyCts :: Cts -> Bool
- isCTyEqCan :: Ct -> Bool
- isCFunEqCan :: Ct -> Bool
- isCDictCan_Maybe :: Ct -> Maybe Class
- isCFunEqCan_Maybe :: Ct -> Maybe TyCon
- isCIrredEvCan :: Ct -> Bool
- isCNonCanonical :: Ct -> Bool
- isWantedCt :: Ct -> Bool
- isDerivedCt :: Ct -> Bool
- isGivenCt :: Ct -> Bool
- ctWantedLoc :: Ct -> WantedLoc
- ctEvidence :: Ct -> CtEvidence
- type SubGoalDepth = Int
- mkNonCanonical :: CtEvidence -> Ct
- ctPred :: Ct -> PredType
- ctEvPred :: CtEvidence -> TcPredType
- ctEvTerm :: CtEvidence -> EvTerm
- ctEvId :: CtEvidence -> TcId
- data WantedConstraints = WC {
  - wc_flat :: Cts
  - wc_impl :: Bag Implication
  - wc_insol :: Cts
  }
- insolubleWC :: WantedConstraints -> Bool
- emptyWC :: WantedConstraints
- isEmptyWC :: WantedConstraints -> Bool
- andWC :: WantedConstraints -> WantedConstraints -> WantedConstraints
- addFlats :: WantedConstraints -> Bag Ct -> WantedConstraints
- addImplics :: WantedConstraints -> Bag Implication -> WantedConstraints
- mkFlatWC :: [Ct] -> WantedConstraints
- data Implication = Implic {
  - ic_untch :: Untouchables
  - ic_env :: TcTypeEnv
  - ic_skols :: [TcTyVar]
  - 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 HsIPName
  - | LiteralOrigin (HsOverLit Name)
  - | NegateOrigin
  - | ArithSeqOrigin (ArithSeqInfo Name)
  - | PArrSeqOrigin (ArithSeqInfo Name)
  - | SectionOrigin
  - | TupleOrigin
  - | AmbigOrigin Name
  - | ExprSigOrigin
  - | PatSigOrigin
  - | PatOrigin
  - | RecordUpdOrigin
  - | ViewPatOrigin
  - | ScOrigin
  - | DerivOrigin
  - | StandAloneDerivOrigin
  - | DefaultOrigin
  - | DoOrigin
  - | MCompOrigin
  - | 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
- pushErrCtxtSameOrigin :: ErrCtxt -> CtLoc orig -> CtLoc orig
- data SkolemInfo
  - = SigSkol UserTypeCtxt Type
  - | ClsSkol Class
  - | InstSkol
  - | DataSkol
  - | FamInstSkol
  - | PatSkol DataCon (HsMatchContext Name)
  - | ArrowSkol
  - | IPSkol [HsIPName]
  - | RuleSkol RuleName
  - | InferSkol [(Name, TcType)]
  - | BracketSkol
  - | UnifyForAllSkol [TcTyVar] TcType
  - | UnkSkol
- data CtEvidence
  - = Given {
    - ctev_gloc :: GivenLoc
    - ctev_pred :: TcPredType
    - ctev_evtm :: EvTerm
    }
  - | Wanted {
    - ctev_wloc :: WantedLoc
    - ctev_pred :: TcPredType
    - ctev_evar :: EvVar
    }
  - | Derived {
    - ctev_wloc :: WantedLoc
    - ctev_pred :: TcPredType
    }
- pprFlavorArising :: CtEvidence -> SDoc
- mkGivenLoc :: WantedLoc -> SkolemInfo -> GivenLoc
- isWanted :: CtEvidence -> Bool
- isGiven :: CtEvidence -> Bool
- isDerived :: CtEvidence -> Bool
- getWantedLoc :: CtEvidence -> WantedLoc
- getGivenLoc :: CtEvidence -> GivenLoc
- canSolve :: CtEvidence -> CtEvidence -> Bool
- canRewrite :: CtEvidence -> CtEvidence -> Bool
- pprEvVarTheta :: [EvVar] -> 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) 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 |
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)) |
ContainsDynFlags (Env gbl lcl) |

data TcGblEnv

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 all 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. Also store Safe Haskell info here about transative trusted packaage requirements. 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_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_used_rdrnames :: TcRef (Set RdrName) tcg_rn_decls :: Maybe (HsGroup Name) Renamed decls, maybe. `Nothing` = Don't retain renamed decls. tcg_dependent_files :: TcRef [FilePath] dependencies from addDependentFile 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_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

Instances

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

data TcLclEnv

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_tidy :: TidyEnv 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

Constructors

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

data IfLclEnv

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

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 |
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 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_trust_pkgs :: [PackageId] 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 (PackageId, 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

plusImportAvails :: ImportAvails -> ImportAvails -> ImportAvails

Union two ImportAvails

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

data WhereFrom

Constructors

ImportByUser IsBootInterface |
ImportBySystem |

Instances

Outputable WhereFrom |

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

type TcTypeEnv = NameEnv TcTyThing

data TcTyThing

Constructors

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

Instances

Outputable TcTyThing |

data PromotionErr

Constructors

TyConPE |
ClassPE |
FamDataConPE |
RecDataConPE |
NoDataKinds |

Instances

Outputable PromotionErr |

pprTcTyThingCategory :: TcTyThing -> SDoc

pprPECategory :: PromotionErr -> SDoc

data ThStage

Constructors

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

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 Untouchables

Constructors

NoUntouchables |
TouchableRange Unique Unique |

Instances

Outputable Untouchables |

inTouchableRange :: Untouchables -> TcTyVar -> Bool

isNoUntouchables :: Untouchables -> Bool

type Xi = Type

data Ct

Constructors

CDictCan |
Fields cc_ev :: CtEvidence cc_class :: Class cc_tyargs :: [Xi] cc_depth :: SubGoalDepth
CIrredEvCan |
Fields cc_ev :: CtEvidence cc_ty :: Xi cc_depth :: SubGoalDepth
CTyEqCan |
Fields cc_ev :: CtEvidence cc_tyvar :: TcTyVar cc_rhs :: Xi cc_depth :: SubGoalDepth
CFunEqCan |
Fields cc_ev :: CtEvidence cc_fun :: TyCon cc_tyargs :: [Xi] cc_rhs :: Xi cc_depth :: SubGoalDepth
CNonCanonical |
Fields cc_ev :: CtEvidence cc_depth :: SubGoalDepth

Instances

Outputable Ct |

type Cts = Bag Ct

emptyCts :: Cts

andCts :: Cts -> Cts -> Cts

andManyCts :: [Cts] -> Cts

keepWanted :: Cts -> Cts

singleCt :: Ct -> Cts

extendCts :: Cts -> Ct -> Cts

isEmptyCts :: Cts -> Bool

isCTyEqCan :: Ct -> Bool

isCFunEqCan :: Ct -> Bool

isCDictCan_Maybe :: Ct -> Maybe Class

isCFunEqCan_Maybe :: Ct -> Maybe TyCon

isCIrredEvCan :: Ct -> Bool

isCNonCanonical :: Ct -> Bool

isWantedCt :: Ct -> Bool

isDerivedCt :: Ct -> Bool

isGivenCt :: Ct -> Bool

ctWantedLoc :: Ct -> WantedLoc

ctEvidence :: Ct -> CtEvidence

type SubGoalDepth = Int

mkNonCanonical :: CtEvidence -> Ct

ctPred :: Ct -> PredType

ctEvPred :: CtEvidence -> TcPredType

ctEvTerm :: CtEvidence -> EvTerm

ctEvId :: CtEvidence -> TcId

data WantedConstraints

Constructors

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

Instances

Outputable WantedConstraints |

insolubleWC :: WantedConstraints -> Bool

emptyWC :: WantedConstraints

isEmptyWC :: WantedConstraints -> Bool

andWC :: WantedConstraints -> WantedConstraints -> WantedConstraints

addFlats :: WantedConstraints -> Bag Ct -> WantedConstraints

addImplics :: WantedConstraints -> Bag Implication -> WantedConstraints

mkFlatWC :: [Ct] -> WantedConstraints

data Implication

Constructors

Implic |
Fields ic_untch :: Untouchables ic_env :: TcTypeEnv ic_skols :: [TcTyVar] ic_given :: [EvVar] ic_loc :: GivenLoc ic_wanted :: WantedConstraints ic_insol :: Bool ic_binds :: EvBindsVar

Instances

Outputable Implication |

data CtLoc orig

Constructors

CtLoc orig SrcSpan [ErrCtxt] |

ctLocSpan :: CtLoc o -> SrcSpan

ctLocOrigin :: CtLoc o -> o

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

data CtOrigin

Constructors

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

Instances

Outputable CtOrigin |

data EqOrigin

Constructors

UnifyOrigin |
Fields uo_actual :: TcType uo_expected :: TcType

Instances

Outputable EqOrigin |

type WantedLoc = CtLoc CtOrigin

type GivenLoc = CtLoc SkolemInfo

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

pushErrCtxtSameOrigin :: ErrCtxt -> CtLoc orig -> CtLoc orig

data SkolemInfo

Constructors

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

Instances

Outputable SkolemInfo |

data CtEvidence

Constructors

Given |
Fields ctev_gloc :: GivenLoc ctev_pred :: TcPredType ctev_evtm :: EvTerm
Wanted |
Fields ctev_wloc :: WantedLoc ctev_pred :: TcPredType ctev_evar :: EvVar
Derived |
Fields ctev_wloc :: WantedLoc ctev_pred :: TcPredType

Instances

Outputable CtEvidence |

pprFlavorArising :: CtEvidence -> SDoc

mkGivenLoc :: WantedLoc -> SkolemInfo -> GivenLoc

isWanted :: CtEvidence -> Bool

isGiven :: CtEvidence -> Bool

isDerived :: CtEvidence -> Bool

getWantedLoc :: CtEvidence -> WantedLoc

getGivenLoc :: CtEvidence -> GivenLoc

canSolve :: CtEvidence -> CtEvidence -> Bool

canRewrite :: CtEvidence -> CtEvidence -> Bool

pprEvVarTheta :: [EvVar] -> 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

Constructors

TcTyVarBind TcTyVar TcType |

Instances

Outputable TcTyVarBind |

type TcTyVarBinds = Bag TcTyVarBind