ghc-lib-parser-9.12.2.20250421: The GHC API, decoupled from GHC versions

Safe Haskell | Ignore
Language | GHC2021

GHC.Core.Predicate

Synopsis

- data Pred
  - = ClassPred Class [Type]
  - | EqPred EqRel Type Type
  - | IrredPred PredType
  - | ForAllPred [TyVar] [PredType] PredType
- classifyPredType :: PredType -> Pred
- isPredTy :: HasDebugCallStack => Type -> Bool
- isEvVarType :: Type -> Bool
- data EqRel
  - = NomEq
  - | ReprEq
- eqRelRole :: EqRel -> Role
- isEqPrimPred :: PredType -> Bool
- isNomEqPred :: PredType -> Bool
- isReprEqPrimPred :: PredType -> Bool
- isEqPred :: PredType -> Bool
- isCoVarType :: Type -> Bool
- getEqPredTys :: PredType -> (Type, Type)
- getEqPredTys_maybe :: PredType -> Maybe (Role, Type, Type)
- getEqPredRole :: PredType -> Role
- predTypeEqRel :: PredType -> EqRel
- mkPrimEqPred :: Type -> Type -> Type
- mkReprPrimEqPred :: Type -> Type -> Type
- mkPrimEqPredRole :: Role -> Type -> Type -> PredType
- mkNomPrimEqPred :: Kind -> Type -> Type -> Type
- mkClassPred :: Class -> [Type] -> PredType
- isDictTy :: Type -> Bool
- typeDeterminesValue :: Type -> Bool
- isClassPred :: PredType -> Bool
- isEqualityClass :: Class -> Bool
- isCTupleClass :: Class -> Bool
- getClassPredTys :: HasDebugCallStack => PredType -> (Class, [Type])
- getClassPredTys_maybe :: PredType -> Maybe (Class, [Type])
- classMethodTy :: Id -> Type
- classMethodInstTy :: Id -> [Type] -> Type
- isIPLikePred :: Type -> Bool
- mentionsIP :: Type -> Class -> [Type] -> Bool
- isIPTyCon :: TyCon -> Bool
- isIPClass :: Class -> Bool
- isCallStackTy :: Type -> Bool
- isCallStackPred :: Class -> [Type] -> Maybe FastString
- isCallStackPredTy :: Type -> Bool
- isExceptionContextPred :: Class -> [Type] -> Maybe FastString
- isIPPred_maybe :: Class -> [Type] -> Maybe (Type, Type)
- type DictId = EvId
- isEvVar :: Var -> Bool
- isDictId :: Id -> Bool

# Documentation

data Pred Source #

A predicate in the solver. The solver tries to prove Wanted predicates from Given ones.

Constructors

ClassPred Class [Type] | A typeclass predicate.
EqPred EqRel Type Type | A type equality predicate, (t1 ~#N t2) or (t1 ~#R t2)
IrredPred PredType | An irreducible predicate.
ForAllPred [TyVar] [PredType] PredType | A quantified predicate. See Note [Quantified constraints] in GHC.Tc.Solver.Solve

classifyPredType :: PredType -> Pred Source #

isPredTy :: HasDebugCallStack => Type -> Bool Source #

isEvVarType :: Type -> Bool Source #

data EqRel Source #

A choice of equality relation. This is separate from the type `Role` because `Phantom` does not define a (non-trivial) equality relation.

Constructors

NomEq |
ReprEq |

#### Instances

Instances details

Outputable EqRel Source # |
Instance details Defined in GHC.Core.Predicate Methods ppr :: EqRel -> SDoc Source #
Eq EqRel Source # |
Instance details Defined in GHC.Core.Predicate Methods (==) :: EqRel -> EqRel -> Bool Source # (/=) :: EqRel -> EqRel -> Bool Source #
Ord EqRel Source # |
Instance details Defined in GHC.Core.Predicate Methods compare :: EqRel -> EqRel -> Ordering Source # (<) :: EqRel -> EqRel -> Bool Source # (<=) :: EqRel -> EqRel -> Bool Source # (>) :: EqRel -> EqRel -> Bool Source # (>=) :: EqRel -> EqRel -> Bool Source # max :: EqRel -> EqRel -> EqRel Source # min :: EqRel -> EqRel -> EqRel Source #

eqRelRole :: EqRel -> Role Source #

isEqPrimPred :: PredType -> Bool Source #

isNomEqPred :: PredType -> Bool Source #

isReprEqPrimPred :: PredType -> Bool Source #

isEqPred :: PredType -> Bool Source #

isCoVarType :: Type -> Bool Source #

Does this type classify a core (unlifted) Coercion? At either role nominal or representational (t1 ~# t2) or (t1 ~R# t2) See Note [Types for coercions, predicates, and evidence] in GHC.Core.TyCo.Rep

getEqPredTys :: PredType -> (Type, Type) Source #

getEqPredTys_maybe :: PredType -> Maybe (Role, Type, Type) Source #

getEqPredRole :: PredType -> Role Source #

predTypeEqRel :: PredType -> EqRel Source #

Get the equality relation relevant for a pred type Returns NomEq for dictionary predicates, etc

mkPrimEqPred :: Type -> Type -> Type Source #

Creates a primitive nominal type equality predicate. t1 ~# t2 Invariant: the types are not Coercions

mkReprPrimEqPred :: Type -> Type -> Type Source #

Creates a primitive representational type equality predicate. t1 ~R# t2 Invariant: the types are not Coercions

mkPrimEqPredRole :: Role -> Type -> Type -> PredType Source #

Makes a lifted equality predicate at the given role

mkNomPrimEqPred :: Kind -> Type -> Type -> Type Source #

Creates a primitive nominal type equality predicate with an explicit (but homogeneous) kind: (~#) k k ty1 ty2

mkClassPred :: Class -> [Type] -> PredType Source #

isDictTy :: Type -> Bool Source #

typeDeterminesValue :: Type -> Bool Source #

isClassPred :: PredType -> Bool Source #

isEqualityClass :: Class -> Bool Source #

isCTupleClass :: Class -> Bool Source #

getClassPredTys :: HasDebugCallStack => PredType -> (Class, [Type]) Source #

getClassPredTys_maybe :: PredType -> Maybe (Class, [Type]) Source #

classMethodTy :: Id -> Type Source #

classMethodInstTy :: Id -> [Type] -> Type Source #

isIPLikePred :: Type -> Bool Source #

mentionsIP :: Type -> Class -> [Type] -> Bool Source #

isIPTyCon :: TyCon -> Bool Source #

isIPClass :: Class -> Bool Source #

isCallStackTy :: Type -> Bool Source #

Is a type a `CallStack`?

isCallStackPred :: Class -> [Type] -> Maybe FastString Source #

Is a `PredType` a `CallStack` implicit parameter?

If so, return the name of the parameter.

isCallStackPredTy :: Type -> Bool Source #

isExceptionContextPred :: Class -> [Type] -> Maybe FastString Source #

Is a `PredType` an `ExceptionContext` implicit parameter?

If so, return the name of the parameter.

isIPPred_maybe :: Class -> [Type] -> Maybe (Type, Type) Source #

Decomposes a predicate if it is an implicit parameter. Does not look in superclasses. See also [Local implicit parameters].

type DictId = EvId Source #

Dictionary Identifier

isEvVar :: Var -> Bool Source #

isDictId :: Id -> Bool Source #