| 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
- ctHasNoRewriters :: Ct -> Bool
- wantedCtHasNoRewriters :: WantedCtEvidence -> Bool
- 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]
- boundOccNamesOfWC :: WantedConstraints -> [OccName]
- 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
- dictCtPred :: DictCt -> TcPredType
- data IrredCt = IrredCt {}
- irredCtEvidence :: IrredCt -> CtEvidence
- mkIrredCt :: CtIrredReason -> CtEvidence -> Ct
- ctIrredCt :: CtIrredReason -> Ct -> IrredCt
- irredCtPred :: IrredCt -> PredType
- data QCInst = QCI {}
- 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
- 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 :: Type -> Maybe CanEqLHS
- canTyFamEqLHS_maybe :: Type -> Maybe CanEqLHS
- canEqLHSKind :: CanEqLHS -> Kind
- canEqLHSType :: CanEqLHS -> Type
- eqCanEqLHS :: CanEqLHS -> CanEqLHS -> Bool
- data Hole = Hole {}
- data HoleSort
- isOutOfScopeHole :: Hole -> Bool
- data DelayedError
- data NotConcreteError = NCE_FRR {}
- 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
- addMultiplicityCoercionError :: WantedConstraints -> TcCoercion -> CtLoc -> 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
- approximateWCX :: Bool -> WantedConstraints -> ApproxWC
- approximateWC :: Bool -> WantedConstraints -> Bag Ct
- 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 EvNeedSet = ENS {}
- emptyEvNeedSet :: EvNeedSet
- unionEvNeedSet :: EvNeedSet -> EvNeedSet -> EvNeedSet
- extendEvNeedSet :: EvNeedSet -> Var -> EvNeedSet
- delGivensFromEvNeedSet :: EvNeedSet -> [Var] -> EvNeedSet
- 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 :: HasDebugCallStack => CtEvidence -> EqRel
- ctEvExpr :: HasDebugCallStack => CtEvidence -> EvExpr
- ctEvTerm :: CtEvidence -> EvTerm
- ctEvCoercion :: HasDebugCallStack => CtEvidence -> TcCoercion
- givenCtEvCoercion :: GivenCtEvidence -> TcCoercion
- ctEvEvId :: CtEvidence -> EvVar
- wantedCtEvEvId :: WantedCtEvidence -> EvVar
- ctEvRewriters :: CtEvidence -> RewriterSet
- setWantedCtEvRewriters :: WantedCtEvidence -> RewriterSet -> WantedCtEvidence
- ctEvUnique :: CtEvidence -> Unique
- tcEvDestUnique :: TcEvDest -> Unique
- ctEvRewriteRole :: HasDebugCallStack => CtEvidence -> Role
- ctEvRewriteEqRel :: CtEvidence -> EqRel
- setCtEvPredType :: HasDebugCallStack => CtEvidence -> Type -> CtEvidence
- setCtEvLoc :: CtEvidence -> CtLoc -> CtEvidence
- tyCoVarsOfCtEvList :: CtEvidence -> [TcTyCoVar]
- tyCoVarsOfCtEv :: CtEvidence -> TcTyCoVarSet
- tyCoVarsOfCtEvsList :: [CtEvidence] -> [TcTyCoVar]
- data GivenCtEvidence = GivenCt {}
- data WantedCtEvidence = WantedCt {}
- 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 :: HasDebugCallStack => CtEvidence -> CtFlavourRole
- ctFlavourRole :: HasDebugCallStack => Ct -> CtFlavourRole
- eqCtFlavourRole :: EqCt -> CtFlavourRole
- eqCanRewrite :: EqRel -> EqRel -> Bool
- eqCanRewriteFR :: CtFlavourRole -> CtFlavourRole -> Bool
- pprEvVarTheta :: [EvVar] -> SDoc
- pprEvVars :: [EvVar] -> SDoc
- pprEvVarWithType :: EvVar -> SDoc
Documentation
Constraint
Constructors
| CDictCan DictCt | A dictionary constraint (canonical) |
| CIrredCan IrredCt | An irreducible constraint (non-canonical) |
| CEqCan EqCt | An equality constraint (canonical) |
| CQuantCan QCInst | A quantified constraint (canonical) |
| CNonCanonical CtEvidence | A non-canonical constraint See Note [NonCanonical Semantics] in GHC.Tc.Solver.Monad |
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 #
ctHasNoRewriters :: Ct -> Bool #
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.
boundOccNamesOfWC :: WantedConstraints -> [OccName] #
A canonical equality constraint.
See Note [Canonical equalities] in GHC.Tc.Types.Constraint.
Instances
| Outputable EqCt # | |
Defined in GHC.Tc.Types.Constraint | |
eqCtEvidence :: EqCt -> CtEvidence #
A canonical dictionary constraint
Constructors
| DictCt | |
Fields
| |
Instances
| Outputable DictCt # | |
Defined in GHC.Tc.Types.Constraint | |
dictCtEvidence :: DictCt -> CtEvidence #
dictCtPred :: DictCt -> TcPredType #
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 #
A quantified constraint, also called a "local instance"
(a simplified version of ClsInst).
See Note [Quantified constraints] in GHC.Tc.Solver.Solve
Constructors
| QCI | A quantified constraint, of type |
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.Core.Predicate | |
canEqLHS_maybe :: Type -> 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 :: Type -> Maybe CanEqLHS #
canEqLHSKind :: CanEqLHS -> Kind #
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 in expressions] for holes in terms.
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 in expressions]. |
| DE_NotConcrete NotConcreteError | A type could not be ensured to be concrete. See Note [The Concrete mechanism] in GHC.Tc.Utils.Concrete. |
| DE_Multiplicity TcCoercion CtLoc | An error if the TcCoercion isn't a reflexivity constraint. See Note [Coercion errors in tcSubMult] in GHC.Tc.Utils.Unify. |
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 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.
approximateWCX :: Bool -> WantedConstraints -> ApproxWC #
approximateWC :: Bool -> WantedConstraints -> Bag Ct #
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 () #
Instances
| Outputable EvNeedSet # | |
Defined in GHC.Tc.Types.Constraint | |
unionEvNeedSet :: EvNeedSet -> EvNeedSet -> EvNeedSet #
extendEvNeedSet :: EvNeedSet -> Var -> EvNeedSet #
delGivensFromEvNeedSet :: EvNeedSet -> [Var] -> EvNeedSet #
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 GivenCtEvidence | |
| CtWanted WantedCtEvidence |
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 :: HasDebugCallStack => CtEvidence -> EqRel #
Get the equality relation relevant for a CtEvidence
ctEvExpr :: HasDebugCallStack => CtEvidence -> EvExpr #
ctEvTerm :: CtEvidence -> EvTerm #
ctEvCoercion :: HasDebugCallStack => CtEvidence -> TcCoercion #
ctEvEvId :: CtEvidence -> EvVar #
wantedCtEvEvId :: WantedCtEvidence -> 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.
setWantedCtEvRewriters :: WantedCtEvidence -> RewriterSet -> WantedCtEvidence #
Set the rewriter set of a Wanted constraint.
ctEvUnique :: CtEvidence -> Unique #
tcEvDestUnique :: TcEvDest -> Unique #
ctEvRewriteRole :: HasDebugCallStack => CtEvidence -> Role #
Get the rewrite-role relevant for a CtEvidence
See Note [The rewrite-role of a constraint]
ctEvRewriteEqRel :: CtEvidence -> EqRel #
Return the rewrite-role of an abitrary CtEvidence See Note [The rewrite-role of a constraint] We return ReprEq for (a ~R# b) and NomEq for all other preds
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 #
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.
data GivenCtEvidence #
Evidence for a Given constraint
Instances
| Outputable GivenCtEvidence # | |
Defined in GHC.Tc.Types.Constraint Methods ppr :: GivenCtEvidence -> SDoc # | |
data WantedCtEvidence #
Evidence for a Wanted constraint
Constructors
| WantedCt | |
Fields
| |
Instances
| Outputable WantedCtEvidence # | |
Defined in GHC.Tc.Types.Constraint Methods ppr :: WantedCtEvidence -> SDoc # | |
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 :: HasDebugCallStack => CtEvidence -> CtFlavourRole #
Extract the flavour, role, and boxity from a CtEvidence
ctFlavourRole :: HasDebugCallStack => 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 #