ghc-9.0.0.20200925: The GHC API
Safe HaskellNone
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 # 
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 # 
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.