| Safe Haskell | Ignore |
|---|---|
| Language | GHC2021 |
GHC.Tc.Types.Constraint
Description
This module defines types and simple operations over constraints, as used in the type-checker and constraint solver.
Synopsis
- type Xi = TcType
- data Ct
- type Cts = Bag Ct
- singleCt :: Ct -> Cts
- listToCts :: [Ct] -> Cts
- ctsElts :: Cts -> [Ct]
- consCts :: Ct -> Cts -> Cts
- snocCts :: Cts -> Ct -> Cts
- extendCtsList :: Cts -> [Ct] -> Cts
- isEmptyCts :: Cts -> Bool
- emptyCts :: Cts
- andCts :: Cts -> Cts -> Cts
- ctsPreds :: Cts -> [PredType]
- isPendingScDictCt :: DictCt -> Bool
- isPendingScDict :: Ct -> Bool
- pendingScDict_maybe :: Ct -> Maybe Ct
- superClassesMightHelp :: WantedConstraints -> Bool
- getPendingWantedScs :: Cts -> ([Ct], Cts)
- isWantedCt :: Ct -> Bool
- isGivenCt :: Ct -> Bool
- isTopLevelUserTypeError :: PredType -> Bool
- containsUserTypeError :: PredType -> Bool
- getUserTypeErrorMsg :: PredType -> Maybe ErrorMsgType
- isUnsatisfiableCt_maybe :: Type -> Maybe ErrorMsgType
- ctEvidence :: Ct -> CtEvidence
- updCtEvidence :: (CtEvidence -> CtEvidence) -> Ct -> Ct
- ctLoc :: Ct -> CtLoc
- ctPred :: Ct -> PredType
- ctFlavour :: Ct -> CtFlavour
- ctEqRel :: Ct -> EqRel
- ctOrigin :: Ct -> CtOrigin
- ctRewriters :: Ct -> RewriterSet
- ctEvId :: HasDebugCallStack => Ct -> EvVar
- wantedEvId_maybe :: Ct -> Maybe EvVar
- mkTcEqPredLikeEv :: CtEvidence -> TcType -> TcType -> TcType
- mkNonCanonical :: CtEvidence -> Ct
- mkGivens :: CtLoc -> [EvId] -> [Ct]
- tyCoVarsOfCt :: Ct -> TcTyCoVarSet
- tyCoVarsOfCts :: Cts -> TcTyCoVarSet
- tyCoVarsOfCtList :: Ct -> [TcTyCoVar]
- tyCoVarsOfCtsList :: Cts -> [TcTyCoVar]
- data EqCt = EqCt {}
- eqCtEvidence :: EqCt -> CtEvidence
- eqCtLHS :: EqCt -> CanEqLHS
- data DictCt = DictCt {
- di_ev :: CtEvidence
- di_cls :: Class
- di_tys :: [Xi]
- di_pend_sc :: ExpansionFuel
- dictCtEvidence :: DictCt -> CtEvidence
- data IrredCt = IrredCt {}
- irredCtEvidence :: IrredCt -> CtEvidence
- mkIrredCt :: CtIrredReason -> CtEvidence -> Ct
- ctIrredCt :: CtIrredReason -> Ct -> IrredCt
- irredCtPred :: IrredCt -> PredType
- data QCInst = QCI {
- qci_ev :: CtEvidence
- qci_tvs :: [TcTyVar]
- qci_pred :: TcPredType
- qci_pend_sc :: ExpansionFuel
- pendingScInst_maybe :: QCInst -> Maybe QCInst
- type ExpansionFuel = Int
- doNotExpand :: ExpansionFuel
- consumeFuel :: ExpansionFuel -> ExpansionFuel
- pendingFuel :: ExpansionFuel -> Bool
- assertFuelPrecondition :: ExpansionFuel -> a -> a
- assertFuelPreconditionStrict :: ExpansionFuel -> a -> a
- data CtIrredReason
- isInsolubleReason :: CtIrredReason -> Bool
- data CheckTyEqResult
- data CheckTyEqProblem
- cteProblem :: CheckTyEqProblem -> CheckTyEqResult
- cterClearOccursCheck :: CheckTyEqResult -> CheckTyEqResult
- cteOK :: CheckTyEqResult
- cteImpredicative :: CheckTyEqProblem
- cteTypeFamily :: CheckTyEqProblem
- cteCoercionHole :: CheckTyEqProblem
- cteInsolubleOccurs :: CheckTyEqProblem
- cteSolubleOccurs :: CheckTyEqProblem
- cterSetOccursCheckSoluble :: CheckTyEqResult -> CheckTyEqResult
- cteConcrete :: CheckTyEqProblem
- cteSkolemEscape :: CheckTyEqProblem
- impredicativeProblem :: CheckTyEqResult
- insolubleOccursProblem :: CheckTyEqResult
- solubleOccursProblem :: CheckTyEqResult
- cterHasNoProblem :: CheckTyEqResult -> Bool
- cterHasProblem :: CheckTyEqResult -> CheckTyEqProblem -> Bool
- cterHasOnlyProblem :: CheckTyEqResult -> CheckTyEqProblem -> Bool
- cterHasOnlyProblems :: CheckTyEqResult -> CheckTyEqResult -> Bool
- cterRemoveProblem :: CheckTyEqResult -> CheckTyEqProblem -> CheckTyEqResult
- cterHasOccursCheck :: CheckTyEqResult -> Bool
- cterFromKind :: CheckTyEqResult -> CheckTyEqResult
- data CanEqLHS
- canEqLHS_maybe :: Xi -> Maybe CanEqLHS
- canTyFamEqLHS_maybe :: Xi -> Maybe CanEqLHS
- canEqLHSKind :: CanEqLHS -> TcKind
- canEqLHSType :: CanEqLHS -> TcType
- eqCanEqLHS :: CanEqLHS -> CanEqLHS -> Bool
- data Hole = Hole {}
- data HoleSort
- isOutOfScopeHole :: Hole -> Bool
- data DelayedError
- data NotConcreteError = NCE_FRR {}
- data NotConcreteReason
- data WantedConstraints = WC {}
- insolubleWC :: WantedConstraints -> Bool
- emptyWC :: WantedConstraints
- isEmptyWC :: WantedConstraints -> Bool
- isSolvedWC :: WantedConstraints -> Bool
- andWC :: WantedConstraints -> WantedConstraints -> WantedConstraints
- unionsWC :: [WantedConstraints] -> WantedConstraints
- mkSimpleWC :: [CtEvidence] -> WantedConstraints
- mkImplicWC :: Bag Implication -> WantedConstraints
- addInsols :: WantedConstraints -> Bag IrredCt -> WantedConstraints
- dropMisleading :: WantedConstraints -> WantedConstraints
- addSimples :: WantedConstraints -> Bag Ct -> WantedConstraints
- addImplics :: WantedConstraints -> Bag Implication -> WantedConstraints
- addHoles :: WantedConstraints -> Bag Hole -> WantedConstraints
- addNotConcreteError :: WantedConstraints -> NotConcreteError -> WantedConstraints
- addDelayedErrors :: WantedConstraints -> Bag DelayedError -> WantedConstraints
- tyCoVarsOfWC :: WantedConstraints -> TyCoVarSet
- tyCoVarsOfWCList :: WantedConstraints -> [TyCoVar]
- insolubleWantedCt :: Ct -> Bool
- insolubleCt :: Ct -> Bool
- insolubleIrredCt :: IrredCt -> Bool
- insolubleImplic :: Implication -> Bool
- nonDefaultableTyVarsOfWC :: WantedConstraints -> TyCoVarSet
- data Implication = Implic {}
- implicationPrototype :: CtLocEnv -> Implication
- checkTelescopeSkol :: SkolemInfoAnon -> Bool
- data ImplicStatus
- = IC_Solved { }
- | IC_Insoluble
- | IC_BadTelescope
- | IC_Unsolved
- isInsolubleStatus :: ImplicStatus -> Bool
- isSolvedStatus :: ImplicStatus -> Bool
- type UserGiven = Implication
- getUserGivensFromImplics :: [Implication] -> [UserGiven]
- data HasGivenEqs
- checkImplicationInvariants :: (HasCallStack, Applicative m) => Implication -> m ()
- data SubGoalDepth
- initialSubGoalDepth :: SubGoalDepth
- maxSubGoalDepth :: SubGoalDepth -> SubGoalDepth -> SubGoalDepth
- bumpSubGoalDepth :: SubGoalDepth -> SubGoalDepth
- subGoalDepthExceeded :: IntWithInf -> SubGoalDepth -> Bool
- data CtLoc = CtLoc {}
- ctLocSpan :: CtLoc -> RealSrcSpan
- ctLocEnv :: CtLoc -> CtLocEnv
- ctLocLevel :: CtLoc -> TcLevel
- ctLocOrigin :: CtLoc -> CtOrigin
- ctLocTypeOrKind_maybe :: CtLoc -> Maybe TypeOrKind
- ctLocDepth :: CtLoc -> SubGoalDepth
- bumpCtLocDepth :: CtLoc -> CtLoc
- isGivenLoc :: CtLoc -> Bool
- setCtLocOrigin :: CtLoc -> CtOrigin -> CtLoc
- updateCtLocOrigin :: CtLoc -> (CtOrigin -> CtOrigin) -> CtLoc
- setCtLocEnv :: CtLoc -> CtLocEnv -> CtLoc
- setCtLocSpan :: CtLoc -> RealSrcSpan -> CtLoc
- pprCtLoc :: CtLoc -> SDoc
- adjustCtLoc :: Bool -> Bool -> CtLoc -> CtLoc
- adjustCtLocTyConBinder :: TyConBinder -> CtLoc -> CtLoc
- data CtLocEnv = CtLocEnv {
- ctl_ctxt :: ![ErrCtxt]
- ctl_loc :: !RealSrcSpan
- ctl_bndrs :: !TcBinderStack
- ctl_tclvl :: !TcLevel
- ctl_in_gen_code :: !Bool
- ctl_rdr :: !LocalRdrEnv
- setCtLocEnvLoc :: CtLocEnv -> SrcSpan -> CtLocEnv
- setCtLocEnvLvl :: CtLocEnv -> TcLevel -> CtLocEnv
- getCtLocEnvLoc :: CtLocEnv -> RealSrcSpan
- getCtLocEnvLvl :: CtLocEnv -> TcLevel
- ctLocEnvInGeneratedCode :: CtLocEnv -> Bool
- data CtEvidence
- data TcEvDest
- isWanted :: CtEvidence -> Bool
- isGiven :: CtEvidence -> Bool
- ctEvPred :: CtEvidence -> TcPredType
- ctEvLoc :: CtEvidence -> CtLoc
- ctEvOrigin :: CtEvidence -> CtOrigin
- ctEvEqRel :: CtEvidence -> EqRel
- ctEvExpr :: HasDebugCallStack => CtEvidence -> EvExpr
- ctEvTerm :: CtEvidence -> EvTerm
- ctEvCoercion :: HasDebugCallStack => CtEvidence -> TcCoercion
- ctEvEvId :: CtEvidence -> EvVar
- ctEvRewriters :: CtEvidence -> RewriterSet
- ctEvUnique :: CtEvidence -> Unique
- tcEvDestUnique :: TcEvDest -> Unique
- mkKindEqLoc :: TcType -> TcType -> CtLoc -> CtLoc
- toKindLoc :: CtLoc -> CtLoc
- toInvisibleLoc :: CtLoc -> CtLoc
- mkGivenLoc :: TcLevel -> SkolemInfoAnon -> CtLocEnv -> CtLoc
- ctEvRole :: CtEvidence -> Role
- setCtEvPredType :: HasDebugCallStack => CtEvidence -> Type -> CtEvidence
- setCtEvLoc :: CtEvidence -> CtLoc -> CtEvidence
- arisesFromGivens :: Ct -> Bool
- tyCoVarsOfCtEvList :: CtEvidence -> [TcTyCoVar]
- tyCoVarsOfCtEv :: CtEvidence -> TcTyCoVarSet
- tyCoVarsOfCtEvsList :: [CtEvidence] -> [TcTyCoVar]
- newtype RewriterSet = RewriterSet (UniqSet CoercionHole)
- emptyRewriterSet :: RewriterSet
- isEmptyRewriterSet :: RewriterSet -> Bool
- addRewriter :: RewriterSet -> CoercionHole -> RewriterSet
- unitRewriterSet :: CoercionHole -> RewriterSet
- unionRewriterSet :: RewriterSet -> RewriterSet -> RewriterSet
- rewriterSetFromCts :: Bag Ct -> RewriterSet
- wrapType :: Type -> [TyVar] -> [PredType] -> Type
- data CtFlavour
- ctEvFlavour :: CtEvidence -> CtFlavour
- type CtFlavourRole = (CtFlavour, EqRel)
- ctEvFlavourRole :: CtEvidence -> CtFlavourRole
- ctFlavourRole :: Ct -> CtFlavourRole
- eqCtFlavourRole :: EqCt -> CtFlavourRole
- eqCanRewrite :: EqRel -> EqRel -> Bool
- eqCanRewriteFR :: CtFlavourRole -> CtFlavourRole -> Bool
- pprEvVarTheta :: [EvVar] -> SDoc
- pprEvVars :: [EvVar] -> SDoc
- pprEvVarWithType :: EvVar -> SDoc
Documentation
Constructors
| CDictCan DictCt | |
| CIrredCan IrredCt | |
| CEqCan EqCt | |
| CQuantCan QCInst | |
| CNonCanonical CtEvidence |
Instances
| Outputable Ct # | |
Defined in GHC.Tc.Types.Constraint | |
extendCtsList :: Cts -> [Ct] -> Cts #
isEmptyCts :: Cts -> Bool #
isPendingScDictCt :: DictCt -> Bool #
isPendingScDict :: Ct -> Bool #
pendingScDict_maybe :: Ct -> Maybe Ct #
superClassesMightHelp :: WantedConstraints -> 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 superclasses help]
getPendingWantedScs :: Cts -> ([Ct], Cts) #
isWantedCt :: Ct -> Bool #
isTopLevelUserTypeError :: PredType -> Bool #
Is this an user error message type, i.e. either the form TypeError err or
Unsatisfiable err?
containsUserTypeError :: PredType -> Bool #
Does this constraint contain an user error message?
That is, the type is either of the form Unsatisfiable err, or it contains
a type of the form TypeError msg, either at the top level or nested inside
the type.
getUserTypeErrorMsg :: PredType -> Maybe ErrorMsgType #
A constraint is considered to be a custom type error, if it contains custom type errors anywhere in it. See Note [Custom type errors in constraints]
isUnsatisfiableCt_maybe :: Type -> Maybe ErrorMsgType #
Is this type an unsatisfiable constraint? If so, return the error message.
ctEvidence :: Ct -> CtEvidence #
updCtEvidence :: (CtEvidence -> CtEvidence) -> Ct -> Ct #
ctRewriters :: Ct -> RewriterSet #
ctEvId :: HasDebugCallStack => Ct -> EvVar #
wantedEvId_maybe :: Ct -> Maybe EvVar #
mkTcEqPredLikeEv :: CtEvidence -> TcType -> TcType -> TcType #
Makes a new equality predicate with the same role as the given evidence.
mkNonCanonical :: CtEvidence -> Ct #
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 GHC.Utils.FV.
tyCoVarsOfCtList :: Ct -> [TcTyCoVar] #
Returns free variables of constraints as a deterministically ordered list. See Note [Deterministic FV] in GHC.Utils.FV.
tyCoVarsOfCtsList :: Cts -> [TcTyCoVar] #
Returns free variables of a bag of constraints as a deterministically ordered list. See Note [Deterministic FV] in GHC.Utils.FV.
Instances
| Outputable EqCt # | |
Defined in GHC.Tc.Types.Constraint | |
eqCtEvidence :: EqCt -> CtEvidence #
Constructors
| DictCt | |
Fields
| |
Instances
| Outputable DictCt # | |
Defined in GHC.Tc.Types.Constraint | |
dictCtEvidence :: DictCt -> CtEvidence #
Constructors
| IrredCt | |
Fields | |
Instances
| Outputable IrredCt # | |
Defined in GHC.Tc.Types.Constraint | |
irredCtEvidence :: IrredCt -> CtEvidence #
mkIrredCt :: CtIrredReason -> CtEvidence -> Ct #
ctIrredCt :: CtIrredReason -> Ct -> IrredCt #
irredCtPred :: IrredCt -> PredType #
Constructors
| QCI | |
Fields
| |
Instances
| Outputable QCInst # | |
Defined in GHC.Tc.Types.Constraint | |
pendingScInst_maybe :: QCInst -> Maybe QCInst #
type ExpansionFuel = Int #
Says how many layers of superclasses can we expand. Invariant: ExpansionFuel should always be >= 0 see Note [Expanding Recursive Superclasses and ExpansionFuel]
doNotExpand :: ExpansionFuel #
Do not expand superclasses any further
consumeFuel :: ExpansionFuel -> ExpansionFuel #
Consumes one unit of fuel. Precondition: fuel > 0
pendingFuel :: ExpansionFuel -> Bool #
Returns True if we have any fuel left for superclass expansion
assertFuelPrecondition :: ExpansionFuel -> a -> a #
asserts if fuel is non-negative
assertFuelPreconditionStrict :: ExpansionFuel -> a -> a #
asserts if fuel is strictly greater than 0
data CtIrredReason #
Used to indicate extra information about why a CIrredCan is irreducible
Constructors
| IrredShapeReason | This constraint has a non-canonical shape (e.g. |
| NonCanonicalReason CheckTyEqResult | An equality where some invariant other than (TyEq:H) of |
| ReprEqReason | An equality that cannot be decomposed because it is representational.
Example: |
| ShapeMismatchReason | A nominal equality that relates two wholly different types,
like |
| AbstractTyConReason | An equality like |
| PluginReason | A typechecker plugin returned this in the pluginBadCts field of TcPluginProgress |
Instances
| Outputable CtIrredReason # | |
Defined in GHC.Tc.Types.Constraint Methods ppr :: CtIrredReason -> SDoc # | |
isInsolubleReason :: CtIrredReason -> Bool #
Are we sure that more solving will never solve this constraint?
data CheckTyEqResult #
A set of problems in checking the validity of a type equality.
See checkTypeEq.
Instances
| Monoid CheckTyEqResult # | |
Defined in GHC.Tc.Types.Constraint Methods mappend :: CheckTyEqResult -> CheckTyEqResult -> CheckTyEqResult # mconcat :: [CheckTyEqResult] -> CheckTyEqResult # | |
| Semigroup CheckTyEqResult # | |
Defined in GHC.Tc.Types.Constraint Methods (<>) :: CheckTyEqResult -> CheckTyEqResult -> CheckTyEqResult # sconcat :: NonEmpty CheckTyEqResult -> CheckTyEqResult # stimes :: Integral b => b -> CheckTyEqResult -> CheckTyEqResult # | |
| Outputable CheckTyEqResult # | |
Defined in GHC.Tc.Types.Constraint Methods ppr :: CheckTyEqResult -> SDoc # | |
data CheckTyEqProblem #
An individual problem that might be logged in a CheckTyEqResult
Instances
| Outputable CheckTyEqProblem # | |
Defined in GHC.Tc.Types.Constraint Methods ppr :: CheckTyEqProblem -> SDoc # | |
| Eq CheckTyEqProblem # | |
Defined in GHC.Tc.Types.Constraint Methods (==) :: CheckTyEqProblem -> CheckTyEqProblem -> Bool # (/=) :: CheckTyEqProblem -> CheckTyEqProblem -> Bool # | |
No problems in checking the validity of a type equality.
cterSetOccursCheckSoluble :: CheckTyEqResult -> CheckTyEqResult #
Mark a CheckTyEqResult as not having an insoluble occurs-check: any occurs
check under a type family or in a representation equality is soluble.
cterHasNoProblem :: CheckTyEqResult -> Bool #
Check whether a CheckTyEqResult is marked successful.
cterHasProblem :: CheckTyEqResult -> CheckTyEqProblem -> Bool #
Check whether a CheckTyEqResult has a CheckTyEqProblem
cterHasOnlyProblem :: CheckTyEqResult -> CheckTyEqProblem -> Bool #
Check whether a CheckTyEqResult has one CheckTyEqProblem and no other
cterFromKind :: CheckTyEqResult -> CheckTyEqResult #
Retain only information about occurs-check failures, because only that matters after recurring into a kind.
A CanEqLHS is a type that can appear on the left of a canonical
equality: a type variable or exactly-saturated type family application.
Instances
| Outputable CanEqLHS # | |
Defined in GHC.Tc.Types.Constraint | |
canEqLHS_maybe :: Xi -> Maybe CanEqLHS #
Is a type a canonical LHS? That is, is it a tyvar or an exactly-saturated type family application? Does not look through type synonyms.
canTyFamEqLHS_maybe :: Xi -> Maybe CanEqLHS #
canEqLHSKind :: CanEqLHS -> TcKind #
Retrieve the kind of a CanEqLHS
A hole stores the information needed to report diagnostics about holes in terms (unbound identifiers or underscores) or in types (also called wildcards, as used in partial type signatures). See Note [Holes].
Constructors
| Hole | |
Instances
| Outputable Hole # | |
Defined in GHC.Tc.Types.Constraint | |
Used to indicate which sort of hole we have.
Constructors
| ExprHole HoleExprRef | Either an out-of-scope variable or a "true" hole in an expression (TypedHoles). The HoleExprRef says where to write the the erroring expression for -fdefer-type-errors. |
| TypeHole | A hole in a type (PartialTypeSignatures) |
| ConstraintHole | A hole in a constraint, like @f :: (_, Eq a) => ... Differentiated from TypeHole because a ConstraintHole is simplified differently. See Note [Do not simplify ConstraintHoles] in GHC.Tc.Solver. |
Instances
| Outputable HoleSort # | |
Defined in GHC.Tc.Types.Constraint | |
isOutOfScopeHole :: Hole -> Bool #
Does this hole represent an "out of scope" error? See Note [Insoluble holes]
data DelayedError #
A delayed error, to be reported after constraint solving, in order to benefit from deferred unifications.
Constructors
| DE_Hole Hole | A hole (in a type or in a term). See Note [Holes]. |
| DE_NotConcrete NotConcreteError | A type could not be ensured to be concrete. See Note [The Concrete mechanism] in GHC.Tc.Utils.Concrete. |
Instances
| Outputable DelayedError # | |
Defined in GHC.Tc.Types.Constraint Methods ppr :: DelayedError -> SDoc # | |
data NotConcreteError #
Why did we require that a certain type be concrete?
Constructors
| NCE_FRR | Concreteness was required by a representation-polymorphism check. See Note [The Concrete mechanism] in GHC.Tc.Utils.Concrete. |
Fields
| |
Instances
| Outputable NotConcreteError # | |
Defined in GHC.Tc.Types.Constraint Methods ppr :: NotConcreteError -> SDoc # | |
data NotConcreteReason #
Why did we decide that a type was not concrete?
Constructors
| NonConcreteTyCon TyCon [TcType] | The type contains a See Note [Concrete types] in GHC.Tc.Utils.Concrete. |
| NonConcretisableTyVar TyVar | The type contains a type variable that could not be made concrete (e.g. a skolem type variable). |
| ContainsCast TcType TcCoercionN | The type contains a cast. |
| ContainsForall ForAllTyBinder TcType | The type contains a forall. |
| ContainsCoercionTy TcCoercion | The type contains a |
data WantedConstraints #
Constructors
| WC | |
Fields
| |
Instances
| Outputable WantedConstraints # | |
Defined in GHC.Tc.Types.Constraint Methods ppr :: WantedConstraints -> SDoc # | |
insolubleWC :: WantedConstraints -> Bool #
isEmptyWC :: WantedConstraints -> Bool #
isSolvedWC :: WantedConstraints -> Bool #
Checks whether a the given wanted constraints are solved, i.e. that there are no simple constraints left and all the implications are solved.
unionsWC :: [WantedConstraints] -> WantedConstraints #
mkSimpleWC :: [CtEvidence] -> WantedConstraints #
addInsols :: WantedConstraints -> Bag IrredCt -> WantedConstraints #
addSimples :: WantedConstraints -> Bag Ct -> WantedConstraints #
addHoles :: WantedConstraints -> Bag Hole -> WantedConstraints #
tyCoVarsOfWC :: WantedConstraints -> TyCoVarSet #
Returns free variables of WantedConstraints as a non-deterministic set. See Note [Deterministic FV] in GHC.Utils.FV.
tyCoVarsOfWCList :: WantedConstraints -> [TyCoVar] #
Returns free variables of WantedConstraints as a deterministically ordered list. See Note [Deterministic FV] in GHC.Utils.FV.
insolubleWantedCt :: Ct -> Bool #
insolubleCt :: Ct -> Bool #
Returns True of constraints that are definitely insoluble,
as well as TypeError constraints.
Can return True for Given constraints, unlike insolubleWantedCt.
The function is tuned for application after constraint solving i.e. assuming canonicalisation has been done That's why it looks only for IrredCt; all insoluble constraints are put into CIrredCan
insolubleIrredCt :: IrredCt -> Bool #
insolubleImplic :: Implication -> Bool #
nonDefaultableTyVarsOfWC :: WantedConstraints -> TyCoVarSet #
Gather all the type variables from WantedConstraints
that it would be unhelpful to default. For the moment,
these are only ConcreteTv metavariables participating
in a nominal equality whose other side is not concrete;
it's usually better to report those as errors instead of
defaulting.
data Implication #
Constructors
| Implic | |
Fields
| |
Instances
| Outputable Implication # | |
Defined in GHC.Tc.Types.Constraint Methods ppr :: Implication -> SDoc # | |
data ImplicStatus #
Constructors
| IC_Solved | |
| IC_Insoluble | |
| IC_BadTelescope | |
| IC_Unsolved | |
Instances
| Outputable ImplicStatus # | |
Defined in GHC.Tc.Types.Constraint Methods ppr :: ImplicStatus -> SDoc # | |
isInsolubleStatus :: ImplicStatus -> Bool #
isSolvedStatus :: ImplicStatus -> Bool #
type UserGiven = Implication #
getUserGivensFromImplics :: [Implication] -> [UserGiven] #
data HasGivenEqs #
Constructors
| NoGivenEqs | |
| LocalGivenEqs | |
| MaybeGivenEqs |
Instances
| Monoid HasGivenEqs # | |
Defined in GHC.Tc.Types.Constraint Methods mempty :: HasGivenEqs # mappend :: HasGivenEqs -> HasGivenEqs -> HasGivenEqs # mconcat :: [HasGivenEqs] -> HasGivenEqs # | |
| Semigroup HasGivenEqs # | |
Defined in GHC.Tc.Types.Constraint Methods (<>) :: HasGivenEqs -> HasGivenEqs -> HasGivenEqs # sconcat :: NonEmpty HasGivenEqs -> HasGivenEqs # stimes :: Integral b => b -> HasGivenEqs -> HasGivenEqs # | |
| Outputable HasGivenEqs # | |
Defined in GHC.Tc.Types.Constraint Methods ppr :: HasGivenEqs -> SDoc # | |
| Eq HasGivenEqs # | |
Defined in GHC.Tc.Types.Constraint | |
checkImplicationInvariants :: (HasCallStack, Applicative m) => Implication -> m () #
data SubGoalDepth #
See Note [SubGoalDepth]
Instances
| Outputable SubGoalDepth # | |
Defined in GHC.Tc.Types.Constraint Methods ppr :: SubGoalDepth -> SDoc # | |
| Eq SubGoalDepth # | |
Defined in GHC.Tc.Types.Constraint | |
| Ord SubGoalDepth # | |
Defined in GHC.Tc.Types.Constraint Methods compare :: SubGoalDepth -> SubGoalDepth -> Ordering # (<) :: SubGoalDepth -> SubGoalDepth -> Bool # (<=) :: SubGoalDepth -> SubGoalDepth -> Bool # (>) :: SubGoalDepth -> SubGoalDepth -> Bool # (>=) :: SubGoalDepth -> SubGoalDepth -> Bool # max :: SubGoalDepth -> SubGoalDepth -> SubGoalDepth # min :: SubGoalDepth -> SubGoalDepth -> SubGoalDepth # | |
maxSubGoalDepth :: SubGoalDepth -> SubGoalDepth -> SubGoalDepth #
subGoalDepthExceeded :: IntWithInf -> SubGoalDepth -> Bool #
Constructors
| CtLoc | |
Fields
| |
ctLocSpan :: CtLoc -> RealSrcSpan #
ctLocLevel :: CtLoc -> TcLevel #
ctLocOrigin :: CtLoc -> CtOrigin #
ctLocDepth :: CtLoc -> SubGoalDepth #
bumpCtLocDepth :: CtLoc -> CtLoc #
isGivenLoc :: CtLoc -> Bool #
setCtLocOrigin :: CtLoc -> CtOrigin -> CtLoc #
setCtLocEnv :: CtLoc -> CtLocEnv -> CtLoc #
setCtLocSpan :: CtLoc -> RealSrcSpan -> CtLoc #
adjustCtLocTyConBinder :: TyConBinder -> CtLoc -> CtLoc #
Local typechecker environment for a constraint.
Used to restore the environment of a constraint
when reporting errors, see setCtLocM.
See also TcLclCtxt.
Constructors
| CtLocEnv | |
Fields
| |
setCtLocEnvLoc :: CtLocEnv -> SrcSpan -> CtLocEnv #
setCtLocEnvLvl :: CtLocEnv -> TcLevel -> CtLocEnv #
getCtLocEnvLoc :: CtLocEnv -> RealSrcSpan #
getCtLocEnvLvl :: CtLocEnv -> TcLevel #
ctLocEnvInGeneratedCode :: CtLocEnv -> Bool #
data CtEvidence #
Constructors
| CtGiven | |
| CtWanted | |
Fields
| |
Instances
| Outputable CtEvidence # | |
Defined in GHC.Tc.Types.Constraint Methods ppr :: CtEvidence -> SDoc # | |
A place for type-checking evidence to go after it is generated.
- Wanted equalities use HoleDest,
- other Wanteds use EvVarDest.
Constructors
| EvVarDest EvVar | bind this var to the evidence EvVarDest is always used for non-type-equalities e.g. class constraints |
| HoleDest CoercionHole | fill in this hole with the evidence HoleDest is always used for type-equalities See Note [Coercion holes] in GHC.Core.TyCo.Rep |
Instances
| Outputable TcEvDest # | |
Defined in GHC.Tc.Types.Constraint | |
isWanted :: CtEvidence -> Bool #
isGiven :: CtEvidence -> Bool #
ctEvPred :: CtEvidence -> TcPredType #
ctEvLoc :: CtEvidence -> CtLoc #
ctEvOrigin :: CtEvidence -> CtOrigin #
ctEvEqRel :: CtEvidence -> EqRel #
Get the equality relation relevant for a CtEvidence
ctEvExpr :: HasDebugCallStack => CtEvidence -> EvExpr #
ctEvTerm :: CtEvidence -> EvTerm #
ctEvCoercion :: HasDebugCallStack => CtEvidence -> TcCoercion #
ctEvEvId :: CtEvidence -> EvVar #
ctEvRewriters :: CtEvidence -> RewriterSet #
Extract the set of rewriters from a CtEvidence
See Note [Wanteds rewrite Wanteds]
If the provided CtEvidence is not for a Wanted, just
return an empty set.
ctEvUnique :: CtEvidence -> Unique #
tcEvDestUnique :: TcEvDest -> Unique #
toInvisibleLoc :: CtLoc -> CtLoc #
mkGivenLoc :: TcLevel -> SkolemInfoAnon -> CtLocEnv -> CtLoc #
ctEvRole :: CtEvidence -> Role #
Get the role relevant for a CtEvidence
setCtEvPredType :: HasDebugCallStack => CtEvidence -> Type -> CtEvidence #
Set the type of CtEvidence.
This function ensures that the invariants on CtEvidence hold, by updating
the evidence and the ctev_pred in sync with each other.
See Note [CtEvidence invariants].
setCtEvLoc :: CtEvidence -> CtLoc -> CtEvidence #
arisesFromGivens :: Ct -> Bool #
tyCoVarsOfCtEvList :: CtEvidence -> [TcTyCoVar] #
Returns free variables of constraints as a deterministically ordered list. See Note [Deterministic FV] in GHC.Utils.FV.
tyCoVarsOfCtEv :: CtEvidence -> TcTyCoVarSet #
Returns free variables of constraints as a non-deterministic set
tyCoVarsOfCtEvsList :: [CtEvidence] -> [TcTyCoVar] #
Returns free variables of a bag of constraints as a deterministically ordered list. See Note [Deterministic FV] in GHC.Utils.FV.
newtype RewriterSet #
Stores a set of CoercionHoles that have been used to rewrite a constraint. See Note [Wanteds rewrite Wanteds].
Constructors
| RewriterSet (UniqSet CoercionHole) |
Instances
| Monoid RewriterSet # | |
Defined in GHC.Tc.Types.Constraint Methods mempty :: RewriterSet # mappend :: RewriterSet -> RewriterSet -> RewriterSet # mconcat :: [RewriterSet] -> RewriterSet # | |
| Semigroup RewriterSet # | |
Defined in GHC.Tc.Types.Constraint Methods (<>) :: RewriterSet -> RewriterSet -> RewriterSet # sconcat :: NonEmpty RewriterSet -> RewriterSet # stimes :: Integral b => b -> RewriterSet -> RewriterSet # | |
| Outputable RewriterSet # | |
Defined in GHC.Tc.Types.Constraint Methods ppr :: RewriterSet -> SDoc # | |
isEmptyRewriterSet :: RewriterSet -> Bool #
addRewriter :: RewriterSet -> CoercionHole -> RewriterSet #
unionRewriterSet :: RewriterSet -> RewriterSet -> RewriterSet #
rewriterSetFromCts :: Bag Ct -> RewriterSet #
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 GHC.Tc.Solver.InertSet
ctEvFlavourRole :: CtEvidence -> CtFlavourRole #
Extract the flavour, role, and boxity from a CtEvidence
ctFlavourRole :: Ct -> CtFlavourRole #
Extract the flavour and role from a Ct
eqCtFlavourRole :: EqCt -> CtFlavourRole #
Extract the flavour and role from a Ct
eqCanRewrite :: EqRel -> EqRel -> Bool #
eqCanRewriteFR :: CtFlavourRole -> CtFlavourRole -> Bool #
pprEvVarTheta :: [EvVar] -> SDoc #
pprEvVarWithType :: EvVar -> SDoc #