ghc-9.0.2: The GHC API
Safe HaskellSafe-Inferred
LanguageHaskell2010

GHC.HsToCore.PmCheck.Oracle

Description

The pattern match oracle. The main export of the module are the functions addPmCts for adding facts to the oracle, and provideEvidence to turn a Delta into a concrete evidence for an equation.

Synopsis

Documentation

mkPmId :: Type -> DsM Id Source #

Generate a fresh Id of a given type

data Delta Source #

An inert set of canonical (i.e. mutually compatible) term and type constraints.

Instances

Instances details
Outputable Delta Source # 
Instance details

Defined in GHC.HsToCore.PmCheck.Types

data PmCt Source #

An oracle constraint.

Constructors

PmTyCt !TyCt

PmTy pred_ty carries PredTypes, for example equality constraints.

Instances

Instances details
Outputable PmCt Source # 
Instance details

Defined in GHC.HsToCore.PmCheck.Oracle

pattern PmVarCt :: Id -> Id -> PmCt Source #

pattern PmCoreCt :: Id -> CoreExpr -> PmCt Source #

pattern PmConCt :: Id -> PmAltCon -> [TyVar] -> [Id] -> PmCt Source #

pattern PmNotConCt :: Id -> PmAltCon -> PmCt Source #

pattern PmBotCt :: Id -> PmCt Source #

pattern PmNotBotCt :: Id -> PmCt Source #

addPmCts :: Delta -> PmCts -> DsM (Maybe Delta) Source #

Adds new constraints to Delta and returns Nothing if that leads to a contradiction.

canDiverge :: Delta -> Id -> Bool Source #

Check whether adding a constraint x ~ BOT to Delta succeeds.

provideEvidence :: [Id] -> Int -> Delta -> DsM [Delta] Source #

provideEvidence vs n delta returns a list of at most n (but perhaps empty) refinements of delta that instantiate vs to compatible constructor applications or wildcards. Negative information is only retained if literals are involved or when for recursive GADTs.