| Safe Haskell | None |
|---|---|
| Language | Haskell2010 |
TcRnTypes
- 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 {}
- 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_exports :: [AvailInfo]
- tcg_imports :: ImportAvails
- tcg_dus :: DefUses
- tcg_used_gres :: TcRef [GlobalRdrElt]
- tcg_keep :: TcRef NameSet
- tcg_th_used :: TcRef Bool
- tcg_th_splice_used :: TcRef Bool
- tcg_th_top_level_locs :: TcRef (Set RealSrcSpan)
- 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_th_remote_state :: TcRef (Maybe (ForeignRef (IORef QState)))
- tcg_ev_binds :: Bag EvBind
- tcg_tr_module :: Maybe Id
- 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_self_boot :: SelfBootInfo
- tcg_main :: Maybe Name
- tcg_safeInfer :: TcRef (Bool, WarningMessages)
- 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 :: TcIdBinderStack
- 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 {}
- tcVisibleOrphanMods :: TcGblEnv -> ModuleSet
- data FrontendResult = FrontendTypecheck TcGblEnv
- type ErrCtxt = (Bool, TidyEnv -> TcM (TidyEnv, MsgDoc))
- type RecFieldEnv = NameEnv [FieldLabel]
- data ImportAvails = ImportAvails {
- imp_mods :: ImportedMods
- imp_dep_mods :: ModuleNameEnv (ModuleName, IsBootInterface)
- imp_dep_pkgs :: [UnitId]
- imp_trust_pkgs :: [UnitId]
- imp_trust_own_pkg :: Bool
- imp_orphs :: [Module]
- imp_finsts :: [Module]
- emptyImportAvails :: ImportAvails
- plusImportAvails :: ImportAvails -> ImportAvails -> ImportAvails
- data WhereFrom
- mkModDeps :: [(ModuleName, IsBootInterface)] -> ModuleNameEnv (ModuleName, IsBootInterface)
- type TcTypeEnv = NameEnv TcTyThing
- type TcIdBinderStack = [TcIdBinder]
- data TcIdBinder
- data TcTyThing
- = AGlobal TyThing
- | ATcId {
- tct_id :: TcId
- tct_closed :: TopLevelFlag
- | ATyVar Name TcTyVar
- | ATcTyCon TyCon
- | APromotionErr PromotionErr
- data PromotionErr
- data SelfBootInfo
- = NoSelfBoot
- | SelfBoot { }
- pprTcTyThingCategory :: TcTyThing -> SDoc
- pprPECategory :: PromotionErr -> SDoc
- type DsM = TcRnIf DsGblEnv DsLclEnv
- data DsLclEnv = DsLclEnv {}
- 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
- data ThStage
- data SpliceType
- data PendingStuff
- topStage :: ThStage
- topAnnStage :: ThStage
- topSpliceStage :: ThStage
- type ThLevel = Int
- impLevel :: ThLevel
- outerLevel :: ThLevel
- thLevel :: ThStage -> ThLevel
- data ArrowCtxt
- type TcSigFun = Name -> Maybe TcSigInfo
- data TcSigInfo
- data TcIdSigInfo = TISI {
- sig_bndr :: TcIdSigBndr
- sig_skols :: [(Name, TcTyVar)]
- sig_theta :: TcThetaType
- sig_tau :: TcSigmaType
- sig_ctxt :: UserTypeCtxt
- sig_loc :: SrcSpan
- data TcPatSynInfo = TPSI {}
- data TcIdSigBndr
- findScopedTyVars :: TcType -> [TcTyVar] -> [(Name, TcTyVar)]
- isPartialSig :: TcIdSigInfo -> Bool
- noCompleteSig :: Maybe TcSigInfo -> Bool
- tcSigInfoName :: TcSigInfo -> Name
- completeIdSigPolyId :: TcIdSigInfo -> TcId
- completeSigPolyId_maybe :: TcSigInfo -> Maybe TcId
- completeIdSigPolyId_maybe :: TcIdSigInfo -> Maybe TcId
- type Xi = Type
- data Ct
- = CDictCan {
- cc_ev :: CtEvidence
- cc_class :: Class
- cc_tyargs :: [Xi]
- cc_pend_sc :: Bool
- | CIrredEvCan {
- cc_ev :: CtEvidence
- | CTyEqCan { }
- | CFunEqCan { }
- | CNonCanonical {
- cc_ev :: CtEvidence
- | CHoleCan {
- cc_ev :: CtEvidence
- cc_hole :: Hole
- = CDictCan {
- 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
- isPendingScDict :: Ct -> Maybe Ct
- superClassesMightHelp :: 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
- isOutOfScopeCt :: Ct -> Bool
- isExprHoleCt :: Ct -> Bool
- isTypeHoleCt :: Ct -> Bool
- isUserTypeErrorCt :: Ct -> Bool
- getUserTypeErrorMsg :: Ct -> Maybe Type
- ctEvidence :: Ct -> CtEvidence
- ctLoc :: Ct -> CtLoc
- setCtLoc :: Ct -> CtLoc -> Ct
- ctPred :: Ct -> PredType
- ctFlavour :: Ct -> CtFlavour
- ctEqRel :: Ct -> EqRel
- ctOrigin :: Ct -> CtOrigin
- mkTcEqPredLikeEv :: CtEvidence -> TcType -> TcType -> TcType
- mkNonCanonical :: CtEvidence -> Ct
- mkNonCanonicalCt :: Ct -> Ct
- ctEvPred :: CtEvidence -> TcPredType
- ctEvLoc :: CtEvidence -> CtLoc
- ctEvOrigin :: CtEvidence -> CtOrigin
- ctEvEqRel :: CtEvidence -> EqRel
- ctEvTerm :: CtEvidence -> EvTerm
- ctEvCoercion :: CtEvidence -> Coercion
- ctEvId :: CtEvidence -> TcId
- tyCoVarsOfCt :: Ct -> TcTyCoVarSet
- tyCoVarsOfCts :: Cts -> TcTyCoVarSet
- tyCoVarsOfCtList :: Ct -> [TcTyCoVar]
- tyCoVarsOfCtsList :: Cts -> [TcTyCoVar]
- toDerivedCt :: Ct -> Ct
- data WantedConstraints = WC {}
- insolubleWC :: TcLevel -> WantedConstraints -> Bool
- emptyWC :: WantedConstraints
- isEmptyWC :: WantedConstraints -> Bool
- toDerivedWC :: WantedConstraints -> WantedConstraints
- andWC :: WantedConstraints -> WantedConstraints -> WantedConstraints
- unionsWC :: [WantedConstraints] -> WantedConstraints
- mkSimpleWC :: [CtEvidence] -> WantedConstraints
- mkImplicWC :: Bag Implication -> WantedConstraints
- addInsols :: WantedConstraints -> Bag Ct -> WantedConstraints
- addSimples :: WantedConstraints -> Bag Ct -> WantedConstraints
- addImplics :: WantedConstraints -> Bag Implication -> WantedConstraints
- tyCoVarsOfWC :: WantedConstraints -> TyCoVarSet
- dropDerivedWC :: WantedConstraints -> WantedConstraints
- dropDerivedSimples :: Cts -> Cts
- dropDerivedInsols :: Cts -> Cts
- isDroppableDerivedLoc :: CtLoc -> Bool
- insolubleImplic :: Implication -> Bool
- arisesFromGivens :: Ct -> Bool
- 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_binds :: Maybe EvBindsVar
- ic_status :: ImplicStatus
- data ImplicStatus
- = IC_Solved { }
- | IC_Insoluble
- | IC_Unsolved
- isInsolubleStatus :: ImplicStatus -> Bool
- data SubGoalDepth
- initialSubGoalDepth :: SubGoalDepth
- bumpSubGoalDepth :: SubGoalDepth -> SubGoalDepth
- subGoalDepthExceeded :: DynFlags -> SubGoalDepth -> Bool
- data CtLoc = CtLoc {}
- ctLocSpan :: CtLoc -> RealSrcSpan
- ctLocEnv :: CtLoc -> TcLclEnv
- ctLocLevel :: CtLoc -> TcLevel
- ctLocOrigin :: CtLoc -> CtOrigin
- ctLocTypeOrKind_maybe :: CtLoc -> Maybe TypeOrKind
- ctLocDepth :: CtLoc -> SubGoalDepth
- bumpCtLocDepth :: CtLoc -> CtLoc
- setCtLocOrigin :: CtLoc -> CtOrigin -> CtLoc
- setCtLocEnv :: CtLoc -> TcLclEnv -> CtLoc
- setCtLocSpan :: CtLoc -> RealSrcSpan -> CtLoc
- data CtOrigin
- = GivenOrigin SkolemInfo
- | OccurrenceOf Name
- | OccurrenceOfRecSel RdrName
- | AppOrigin
- | SpecPragOrigin UserTypeCtxt
- | TypeEqOrigin { }
- | KindEqOrigin TcType (Maybe TcType) CtOrigin (Maybe TypeOrKind)
- | IPOccOrigin HsIPName
- | OverLabelOrigin FastString
- | LiteralOrigin (HsOverLit Name)
- | NegateOrigin
- | ArithSeqOrigin (ArithSeqInfo Name)
- | PArrSeqOrigin (ArithSeqInfo Name)
- | SectionOrigin
- | TupleOrigin
- | ExprSigOrigin
- | PatSigOrigin
- | PatOrigin
- | ProvCtxtOrigin (PatSynBind Name Name)
- | RecordUpdOrigin
- | ViewPatOrigin
- | ScOrigin TypeSize
- | DerivOrigin
- | DerivOriginDC DataCon Int
- | DerivOriginCoerce Id Type Type
- | StandAloneDerivOrigin
- | DefaultOrigin
- | DoOrigin
- | DoPatOrigin (LPat Name)
- | MCompOrigin
- | MCompPatOrigin (LPat Name)
- | IfOrigin
- | ProcOrigin
- | AnnOrigin
- | FunDepOrigin1 PredType CtLoc PredType CtLoc
- | FunDepOrigin2 PredType CtOrigin PredType SrcSpan
- | HoleOrigin
- | UnboundOccurrenceOf OccName
- | ListOrigin
- | StaticOrigin
- | FailablePattern (LPat TcId)
- | Shouldn'tHappenOrigin String
- exprCtOrigin :: HsExpr Name -> CtOrigin
- matchesCtOrigin :: MatchGroup Name (LHsExpr Name) -> CtOrigin
- grhssCtOrigin :: GRHSs Name (LHsExpr Name) -> CtOrigin
- data ErrorThing = Outputable a => ErrorThing a (Maybe Arity) (TidyEnv -> a -> TcM (TidyEnv, a))
- mkErrorThing :: Outputable a => a -> ErrorThing
- errorThingNumArgs_maybe :: ErrorThing -> Maybe Arity
- data TypeOrKind
- isTypeLevel :: TypeOrKind -> Bool
- isKindLevel :: TypeOrKind -> Bool
- pprCtOrigin :: CtOrigin -> SDoc
- pprCtLoc :: CtLoc -> SDoc
- pushErrCtxt :: CtOrigin -> ErrCtxt -> CtLoc -> CtLoc
- pushErrCtxtSameOrigin :: ErrCtxt -> CtLoc -> CtLoc
- data SkolemInfo
- pprSigSkolInfo :: UserTypeCtxt -> ExpType -> SDoc
- pprSkolInfo :: SkolemInfo -> SDoc
- data CtEvidence
- data TcEvDest
- mkGivenLoc :: TcLevel -> SkolemInfo -> TcLclEnv -> CtLoc
- mkKindLoc :: TcType -> TcType -> CtLoc -> CtLoc
- toKindLoc :: CtLoc -> CtLoc
- isWanted :: CtEvidence -> Bool
- isGiven :: CtEvidence -> Bool
- isDerived :: CtEvidence -> Bool
- ctEvRole :: CtEvidence -> Role
- data TcPlugin = 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 -> Maybe EvBindsVar -> TcM a
- unsafeTcPluginTcM :: TcM a -> TcPluginM a
- getEvBindsTcPluginM_maybe :: TcPluginM (Maybe EvBindsVar)
- data CtFlavour
- ctEvFlavour :: CtEvidence -> CtFlavour
- type CtFlavourRole = (CtFlavour, EqRel)
- ctEvFlavourRole :: CtEvidence -> CtFlavourRole
- ctFlavourRole :: Ct -> CtFlavourRole
- eqCanRewrite :: CtEvidence -> CtEvidence -> Bool
- eqCanRewriteFR :: CtFlavourRole -> CtFlavourRole -> Bool
- eqCanDischarge :: CtEvidence -> CtEvidence -> Bool
- funEqCanDischarge :: CtEvidence -> CtEvidence -> Bool
- funEqCanDischargeFR :: CtFlavourRole -> CtFlavourRole -> Bool
- pprEvVarTheta :: [EvVar] -> SDoc
- pprEvVars :: [EvVar] -> SDoc
- pprEvVarWithType :: EvVar -> SDoc
- type TcId = Id
- type TcIdSet = IdSet
- data Hole
- holeOcc :: Hole -> OccName
Documentation
Instances
| ContainsModule gbl => ContainsModule (Env gbl lcl) # | |
| ContainsDynFlags (Env gbl lcl) # | |
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
| |
Instances
Constructors
| TcLclEnv | |
Fields
| |
data FrontendResult #
FrontendResult describes the result of running the
frontend of a Haskell module. Usually, you'll get
a FrontendTypecheck, since running the frontend involves
typechecking a program, but for an hs-boot merge you'll
just get a ModIface, since no actual typechecking occurred.
This data type really should be in HscTypes, but it needs to have a TcGblEnv which is only defined here.
Constructors
| FrontendTypecheck TcGblEnv |
type RecFieldEnv = NameEnv [FieldLabel] #
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
| |
plusImportAvails :: ImportAvails -> ImportAvails -> ImportAvails #
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.
Constructors
| ImportByUser IsBootInterface | |
| ImportBySystem | |
| ImportByPlugin |
Instances
mkModDeps :: [(ModuleName, IsBootInterface)] -> ModuleNameEnv (ModuleName, IsBootInterface) #
type TcIdBinderStack = [TcIdBinder] #
data TcIdBinder #
Constructors
| TcIdBndr TcId TopLevelFlag | |
| TcIdBndr_ExpType Name ExpType TopLevelFlag |
Instances
A typecheckable thing available in a local context. Could be
AGlobal TyThing, but also lexically scoped variables, etc.
See TcEnv for how to retrieve a TyThing given a Name.
Constructors
| AGlobal TyThing | |
| ATcId | |
Fields
| |
| ATyVar Name TcTyVar | |
| ATcTyCon TyCon | |
| APromotionErr PromotionErr | |
Instances
data PromotionErr #
Constructors
| TyConPE | |
| ClassPE | |
| FamDataConPE | |
| PatSynPE | |
| RecDataConPE | |
| NoDataKindsTC | |
| NoDataKindsDC | |
| NoTypeInTypeTC | |
| NoTypeInTypeDC |
Instances
data SelfBootInfo #
Constructors
| NoSelfBoot | |
| SelfBoot | |
pprTcTyThingCategory :: TcTyThing -> SDoc #
pprPECategory :: PromotionErr -> SDoc #
Constructors
| DsGblEnv | |
Fields
| |
Instances
data PArrBuiltin #
Constructors
| PArrBuiltin | |
Fields
| |
Constructors
| Splice SpliceType | |
| Comp | |
| Brack ThStage PendingStuff |
Instances
data SpliceType #
data PendingStuff #
Constructors
| RnPendingUntyped (TcRef [PendingRnSplice]) | |
| RnPendingTyped | |
| TcPending (TcRef [PendingTcSplice]) (TcRef WantedConstraints) |
topAnnStage :: ThStage #
outerLevel :: ThLevel #
Constructors
| NoArrowCtxt | |
| ArrowCtxt LocalRdrEnv (TcRef WantedConstraints) |
Constructors
| TcIdSig TcIdSigInfo | |
| TcPatSynSig TcPatSynInfo |
Instances
data TcIdSigInfo #
Constructors
| TISI | |
Fields
| |
Instances
data TcPatSynInfo #
Constructors
| TPSI | |
Fields
| |
Instances
isPartialSig :: TcIdSigInfo -> Bool #
noCompleteSig :: Maybe TcSigInfo -> Bool #
No signature or a partial signature
tcSigInfoName :: TcSigInfo -> Name #
completeIdSigPolyId :: TcIdSigInfo -> TcId #
Constructors
| CDictCan | |
Fields
| |
| CIrredEvCan | |
Fields
| |
| CTyEqCan | |
| CFunEqCan | |
| CNonCanonical | |
Fields
| |
| CHoleCan | |
Fields
| |
Instances
andManyCts :: [Cts] -> Cts #
extendCtsList :: Cts -> [Ct] -> Cts #
isEmptyCts :: Cts -> Bool #
isCTyEqCan :: Ct -> Bool #
isCFunEqCan :: Ct -> Bool #
isPendingScDict :: Ct -> Maybe Ct #
superClassesMightHelp :: Ct -> Bool #
True if taking superclasses of givens, or of wanteds (to perhaps expose more equalities or functional dependencies) might help to solve this constraint. See Note [When superclases help]
isCDictCan_Maybe :: Ct -> Maybe Class #
isCIrredEvCan :: Ct -> Bool #
isCNonCanonical :: Ct -> Bool #
isWantedCt :: Ct -> Bool #
isDerivedCt :: Ct -> Bool #
isOutOfScopeCt :: Ct -> Bool #
isExprHoleCt :: Ct -> Bool #
isTypeHoleCt :: Ct -> Bool #
isUserTypeErrorCt :: Ct -> Bool #
getUserTypeErrorMsg :: Ct -> Maybe Type #
The following constraints are considered to be a custom type error: 1. TypeError msg a b c 2. TypeError msg a b c ~ Something (and the other way around) 4. C (TypeError msg a b c) (for any parameter of class constraint)
ctEvidence :: Ct -> CtEvidence #
mkTcEqPredLikeEv :: CtEvidence -> TcType -> TcType -> TcType #
Makes a new equality predicate with the same role as the given evidence.
mkNonCanonical :: CtEvidence -> Ct #
mkNonCanonicalCt :: Ct -> Ct #
ctEvPred :: CtEvidence -> TcPredType #
ctEvLoc :: CtEvidence -> CtLoc #
ctEvOrigin :: CtEvidence -> CtOrigin #
ctEvEqRel :: CtEvidence -> EqRel #
Get the equality relation relevant for a CtEvidence
ctEvTerm :: CtEvidence -> EvTerm #
ctEvCoercion :: CtEvidence -> Coercion #
ctEvId :: CtEvidence -> TcId #
tyCoVarsOfCt :: Ct -> TcTyCoVarSet #
Returns free variables of constraints as a non-deterministic set
tyCoVarsOfCts :: Cts -> TcTyCoVarSet #
Returns free variables of a bag of constraints as a non-deterministic set. See Note [Deterministic FV] in FV.
tyCoVarsOfCtList :: Ct -> [TcTyCoVar] #
Returns free variables of constraints as a deterministically ordered. list. See Note [Deterministic FV] in FV.
tyCoVarsOfCtsList :: Cts -> [TcTyCoVar] #
Returns free variables of a bag of constraints as a deterministically odered list. See Note [Deterministic FV] in FV.
toDerivedCt :: Ct -> Ct #
Convert a Wanted to a Derived
data WantedConstraints #
Instances
insolubleWC :: TcLevel -> WantedConstraints -> Bool #
isEmptyWC :: WantedConstraints -> Bool #
toDerivedWC :: WantedConstraints -> WantedConstraints #
Convert all Wanteds into Deriveds (ignoring insolubles)
unionsWC :: [WantedConstraints] -> WantedConstraints #
mkSimpleWC :: [CtEvidence] -> WantedConstraints #
addInsols :: WantedConstraints -> Bag Ct -> WantedConstraints #
addSimples :: WantedConstraints -> Bag Ct -> WantedConstraints #
dropDerivedSimples :: Cts -> Cts #
dropDerivedInsols :: Cts -> Cts #
isDroppableDerivedLoc :: CtLoc -> Bool #
insolubleImplic :: Implication -> Bool #
arisesFromGivens :: Ct -> Bool #
data Implication #
Constructors
| Implic | |
Fields
| |
Instances
isInsolubleStatus :: ImplicStatus -> Bool #
subGoalDepthExceeded :: DynFlags -> SubGoalDepth -> Bool #
Constructors
| CtLoc | |
Fields
| |
ctLocSpan :: CtLoc -> RealSrcSpan #
ctLocLevel :: CtLoc -> TcLevel #
ctLocOrigin :: CtLoc -> CtOrigin #
ctLocDepth :: CtLoc -> SubGoalDepth #
bumpCtLocDepth :: CtLoc -> CtLoc #
setCtLocOrigin :: CtLoc -> CtOrigin -> CtLoc #
setCtLocEnv :: CtLoc -> TcLclEnv -> CtLoc #
setCtLocSpan :: CtLoc -> RealSrcSpan -> CtLoc #
Constructors
Instances
exprCtOrigin :: HsExpr Name -> CtOrigin #
Extract a suitable CtOrigin from a HsExpr
matchesCtOrigin :: MatchGroup Name (LHsExpr Name) -> CtOrigin #
Extract a suitable CtOrigin from a MatchGroup
grhssCtOrigin :: GRHSs Name (LHsExpr Name) -> CtOrigin #
Extract a suitable CtOrigin from guarded RHSs
data ErrorThing #
A thing that can be stored for error message generation only. It is stored with a function to zonk and tidy the thing.
Constructors
| Outputable a => ErrorThing a (Maybe Arity) (TidyEnv -> a -> TcM (TidyEnv, a)) |
Instances
mkErrorThing :: Outputable a => a -> ErrorThing #
Make an ErrorThing that doesn't need tidying or zonking
errorThingNumArgs_maybe :: ErrorThing -> Maybe Arity #
Retrieve the # of arguments in the error thing, if known
isTypeLevel :: TypeOrKind -> Bool #
isKindLevel :: TypeOrKind -> Bool #
pprCtOrigin :: CtOrigin -> SDoc #
pushErrCtxtSameOrigin :: ErrCtxt -> CtLoc -> CtLoc #
data SkolemInfo #
Constructors
Instances
pprSigSkolInfo :: UserTypeCtxt -> ExpType -> SDoc #
pprSkolInfo :: SkolemInfo -> SDoc #
data CtEvidence #
Instances
A place for type-checking evidence to go after it is generated. Wanted equalities are always HoleDest; other wanteds are always EvVarDest.
Constructors
| EvVarDest EvVar | bind this var to the evidence |
| HoleDest CoercionHole | fill in this hole with the evidence See Note [Coercion holes] in TyCoRep |
Instances
mkGivenLoc :: TcLevel -> SkolemInfo -> TcLclEnv -> CtLoc #
isWanted :: CtEvidence -> Bool #
isGiven :: CtEvidence -> Bool #
isDerived :: CtEvidence -> Bool #
ctEvRole :: CtEvidence -> Role #
Get the role relevant for a CtEvidence
Constructors
| TcPlugin | |
Fields
| |
data TcPluginResult #
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 #
runTcPluginM :: TcPluginM a -> Maybe EvBindsVar -> TcM a #
unsafeTcPluginTcM :: TcM a -> TcPluginM a #
getEvBindsTcPluginM_maybe :: TcPluginM (Maybe EvBindsVar) #
Access the EvBindsVar carried by the TcPluginM during
constraint solving. Returns Nothing if invoked during
tcPluginInit or tcPluginStop.
ctEvFlavour :: CtEvidence -> CtFlavour #
type CtFlavourRole = (CtFlavour, EqRel) #
Whether or not one Ct can rewrite another is determined by its
flavour and its equality relation. See also
Note [Flavours with roles] in TcSMonad
ctEvFlavourRole :: CtEvidence -> CtFlavourRole #
Extract the flavour, role, and boxity from a CtEvidence
ctFlavourRole :: Ct -> CtFlavourRole #
Extract the flavour, role, and boxity from a Ct
eqCanRewrite :: CtEvidence -> CtEvidence -> Bool #
eqCanRewriteFR :: CtFlavourRole -> CtFlavourRole -> Bool #
eqCanDischarge :: CtEvidence -> CtEvidence -> Bool #
funEqCanDischarge :: CtEvidence -> CtEvidence -> Bool #
funEqCanDischargeFR :: CtFlavourRole -> CtFlavourRole -> Bool #
pprEvVarTheta :: [EvVar] -> SDoc #
pprEvVarWithType :: EvVar -> SDoc #
An expression or type hole
Constructors
| ExprHole UnboundVar | Either an out-of-scope variable or a "true" hole in an expression (TypedHoles) |
| TypeHole OccName | A hole in a type (PartialTypeSignatures) |