ghc-9.6.3: The GHC API

Safe Haskell | Safe-Inferred
Language | Haskell2010

GHC.Tc.Utils.Instantiate

Synopsis

- topSkolemise :: SkolemInfo -> TcSigmaType -> TcM (HsWrapper, [(Name, TyVar)], [EvVar], TcRhoType)
- topInstantiate :: CtOrigin -> TcSigmaType -> TcM (HsWrapper, TcRhoType)
- instantiateSigma :: CtOrigin -> [TyVar] -> TcThetaType -> TcSigmaType -> TcM ([TcTyVar], HsWrapper, TcSigmaType)
- instCall :: CtOrigin -> [TcType] -> TcThetaType -> TcM HsWrapper
- instDFunType :: DFunId -> [DFunInstType] -> TcM ([TcType], TcThetaType)
- instStupidTheta :: CtOrigin -> TcThetaType -> TcM ()
- instTyVarsWith :: CtOrigin -> [TyVar] -> [TcType] -> TcM Subst
- newWanted :: CtOrigin -> Maybe TypeOrKind -> PredType -> TcM CtEvidence
- newWanteds :: CtOrigin -> ThetaType -> TcM [CtEvidence]
- tcInstType :: ([TyVar] -> TcM (Subst, [TcTyVar])) -> Id -> TcM ([(Name, TcTyVar)], TcThetaType, TcType)
- tcInstTypeBndrs :: Type -> TcM ([(Name, InvisTVBinder)], TcThetaType, TcType)
- tcSkolemiseInvisibleBndrs :: SkolemInfoAnon -> Type -> TcM ([TcTyVar], TcType)
- tcInstSkolTyVars :: SkolemInfo -> [TyVar] -> TcM (Subst, [TcTyVar])
- tcInstSkolTyVarsX :: SkolemInfo -> Subst -> [TyVar] -> TcM (Subst, [TcTyVar])
- tcSkolDFunType :: Type -> TcM (SkolemInfoAnon, [TcTyVar], TcThetaType, Class, [TcType])
- tcSuperSkolTyVars :: TcLevel -> SkolemInfo -> [TyVar] -> (Subst, [TcTyVar])
- tcInstSuperSkolTyVarsX :: SkolemInfo -> Subst -> [TyVar] -> TcM (Subst, [TcTyVar])
- freshenTyVarBndrs :: [TyVar] -> TcM (Subst, [TyVar])
- freshenCoVarBndrsX :: Subst -> [CoVar] -> TcM (Subst, [CoVar])
- tcInstInvisibleTyBindersN :: Int -> TcKind -> TcM ([TcType], TcKind)
- tcInstInvisibleTyBinders :: TcType -> TcKind -> TcM (TcType, TcKind)
- tcInstInvisibleTyBinder :: Subst -> PiTyVarBinder -> TcM (Subst, TcType)
- newOverloadedLit :: HsOverLit GhcRn -> ExpRhoType -> TcM (HsOverLit GhcTc)
- mkOverLit :: OverLitVal -> TcM (HsLit GhcTc)
- newClsInst :: Maybe OverlapMode -> Name -> [TyVar] -> ThetaType -> Class -> [Type] -> TcM ClsInst
- tcGetInsts :: TcM [ClsInst]
- tcGetInstEnvs :: TcM InstEnvs
- getOverlapFlag :: Maybe OverlapMode -> TcM OverlapFlag
- tcExtendLocalInstEnv :: [ClsInst] -> TcM a -> TcM a
- instCallConstraints :: CtOrigin -> TcThetaType -> TcM HsWrapper
- newMethodFromName :: CtOrigin -> Name -> [TcRhoType] -> TcM (HsExpr GhcTc)
- tcSyntaxName :: CtOrigin -> TcType -> (Name, HsExpr GhcRn) -> TcM (Name, HsExpr GhcTc)
- tyCoVarsOfWC :: WantedConstraints -> TyCoVarSet
- tyCoVarsOfCt :: Ct -> TcTyCoVarSet
- tyCoVarsOfCts :: Cts -> TcTyCoVarSet

# Documentation

topSkolemise :: SkolemInfo -> TcSigmaType -> TcM (HsWrapper, [(Name, TyVar)], [EvVar], TcRhoType) Source #

topInstantiate :: CtOrigin -> TcSigmaType -> TcM (HsWrapper, TcRhoType) Source #

instantiateSigma :: CtOrigin -> [TyVar] -> TcThetaType -> TcSigmaType -> TcM ([TcTyVar], HsWrapper, TcSigmaType) Source #

instCall :: CtOrigin -> [TcType] -> TcThetaType -> TcM HsWrapper Source #

instDFunType :: DFunId -> [DFunInstType] -> TcM ([TcType], TcThetaType) Source #

instStupidTheta :: CtOrigin -> TcThetaType -> TcM () Source #

instTyVarsWith :: CtOrigin -> [TyVar] -> [TcType] -> TcM Subst Source #

newWanted :: CtOrigin -> Maybe TypeOrKind -> PredType -> TcM CtEvidence Source #

Create a new Wanted constraint with the given `CtOrigin`, and location information taken from the `TcM` environment.

newWanteds :: CtOrigin -> ThetaType -> TcM [CtEvidence] Source #

Create new Wanted constraints with the given `CtOrigin`, and location information taken from the `TcM` environment.

tcInstType Source #

Arguments

:: ([TyVar] -> TcM (Subst, [TcTyVar])) | How to instantiate the type variables
-> Id | Type to instantiate
-> TcM ([(Name, TcTyVar)], TcThetaType, TcType) | Result (type vars, preds (incl equalities), rho)

tcInstTypeBndrs :: Type -> TcM ([(Name, InvisTVBinder)], TcThetaType, TcType) Source #

tcSkolemiseInvisibleBndrs :: SkolemInfoAnon -> Type -> TcM ([TcTyVar], TcType) Source #

tcInstSkolTyVars :: SkolemInfo -> [TyVar] -> TcM (Subst, [TcTyVar]) Source #

Given a list of `[`TyVar`]`, skolemize the type variables, returning a substitution mapping the original tyvars to the skolems, and the list of newly bound skolems.

tcInstSkolTyVarsX :: SkolemInfo -> Subst -> [TyVar] -> TcM (Subst, [TcTyVar]) Source #

tcSkolDFunType :: Type -> TcM (SkolemInfoAnon, [TcTyVar], TcThetaType, Class, [TcType]) Source #

tcSuperSkolTyVars :: TcLevel -> SkolemInfo -> [TyVar] -> (Subst, [TcTyVar]) Source #

tcInstSuperSkolTyVarsX :: SkolemInfo -> Subst -> [TyVar] -> TcM (Subst, [TcTyVar]) Source #

freshenTyVarBndrs :: [TyVar] -> TcM (Subst, [TyVar]) Source #

Give fresh uniques to a bunch of TyVars, but they stay as TyVars, rather than becoming TcTyVars Used in `newFamInst`, and `newClsInst`

freshenCoVarBndrsX :: Subst -> [CoVar] -> TcM (Subst, [CoVar]) Source #

Give fresh uniques to a bunch of CoVars Used in "GHC.Tc.Instance.Family.newFamInst"

tcInstInvisibleTyBindersN :: Int -> TcKind -> TcM ([TcType], TcKind) Source #

tcInstInvisibleTyBinders :: TcType -> TcKind -> TcM (TcType, TcKind) Source #

Given ty::forall k1 k2. k, instantiate all the invisible forall-binders returning ty `kk1` kk2 :: k[kk1k1, kk2k1] Called only to instantiate kinds, in user-written type signatures

tcInstInvisibleTyBinder :: Subst -> PiTyVarBinder -> TcM (Subst, TcType) Source #

newOverloadedLit :: HsOverLit GhcRn -> ExpRhoType -> TcM (HsOverLit GhcTc) Source #

mkOverLit :: OverLitVal -> TcM (HsLit GhcTc) Source #

newClsInst :: Maybe OverlapMode -> Name -> [TyVar] -> ThetaType -> Class -> [Type] -> TcM ClsInst Source #

tcGetInsts :: TcM [ClsInst] Source #

tcGetInstEnvs :: TcM InstEnvs Source #

getOverlapFlag :: Maybe OverlapMode -> TcM OverlapFlag Source #

tcExtendLocalInstEnv :: [ClsInst] -> TcM a -> TcM a Source #

instCallConstraints :: CtOrigin -> TcThetaType -> TcM HsWrapper Source #

newMethodFromName Source #

Arguments

:: CtOrigin | why do we need this?
-> Name | name of the method
-> [TcRhoType] | types with which to instantiate the class
-> TcM (HsExpr GhcTc) |

Used when `Name` is the wired-in name for a wired-in class method, so the caller knows its type for sure, which should be of form

    forall a. C a => <blah>

`newMethodFromName` is supposed to instantiate just the outer type variable and constraint

tcSyntaxName Source #

Arguments

:: CtOrigin |
-> TcType | Type to instantiate it at
-> (Name, HsExpr GhcRn) | (Standard name, user name)
-> TcM (Name, HsExpr GhcTc) | (Standard name, suitable expression) USED ONLY FOR CmdTop (sigh) *** See Note [CmdSyntaxTable] in GHC.Hs.Expr

tyCoVarsOfWC :: WantedConstraints -> TyCoVarSet Source #

Returns free variables of WantedConstraints as a non-deterministic set. See Note [Deterministic FV] in GHC.Utils.FV.

tyCoVarsOfCt :: Ct -> TcTyCoVarSet Source #

Returns free variables of constraints as a non-deterministic set

tyCoVarsOfCts :: Cts -> TcTyCoVarSet Source #

Returns free variables of a bag of constraints as a non-deterministic set. See Note [Deterministic FV] in GHC.Utils.FV.