ghc-lib-9.0.1.20210324: The GHC API, decoupled from GHC versions
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 #

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

Methods

ppr :: Delta -> SDoc #

pprPrec :: Rational -> Delta -> SDoc #

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

Methods

ppr :: PmCt -> SDoc #

pprPrec :: Rational -> PmCt -> SDoc #

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.