ghc-8.0.0.20160111: The GHC API

Safe HaskellNone
LanguageHaskell2010

TcMType

Synopsis

Documentation

type TcTyVar = TyVar

type TcKind = Kind

type TcType = Type

newOpenFlexiTyVarTy :: TcM TcType

Create a tyvar that can be a lifted or unlifted type.

newOpenReturnTyVar :: TcM (TcTyVar, TcKind)

Create a *return* tyvar that can be a lifted or unlifted type.

tauTvForReturnTv :: TcType -> TcM TcType

If the type is a ReturnTv, fill it with a new meta-TauTv. Otherwise, no change. This function can look through ReturnTvs and returns a partially zonked type as an optimisation.

emitWanted :: CtOrigin -> TcPredType -> TcM EvTerm

Emits a new Wanted. Deals with both equalities and non-equalities.

emitWantedEq :: CtOrigin -> TypeOrKind -> Role -> TcType -> TcType -> TcM Coercion

Emits a new equality constraint

emitWantedEvVar :: CtOrigin -> TcPredType -> TcM EvVar

Creates a new EvVar and immediately emits it as a Wanted. No equality predicates here.

fillCoercionHole :: CoercionHole -> Coercion -> TcM ()

Put a value in a coercion hole

isFilledCoercionHole :: CoercionHole -> TcM Bool

Is a coercion hole filled in?

unpackCoercionHole :: CoercionHole -> TcM Coercion

Retrieve the contents of a coercion hole. Panics if the hole is unfilled

unpackCoercionHole_maybe :: CoercionHole -> TcM (Maybe Coercion)

Retrieve the contents of a coercion hole, if it is filled

checkCoercionHole :: Coercion -> CoercionHole -> Role -> Type -> Type -> TcM Coercion

Check that a coercion is appropriate for filling a hole. (The hole itself is needed only for printing. NB: This must be lazy in the coercion, as it's used in TcHsSyn in the presence of knots. Always returns the checked coercion, but this return value is necessary so that the input coercion is forced only when the output is forced.

tcInstType

Arguments

:: ([TyVar] -> TcM (TCvSubst, [TcTyVar]))

How to instantiate the type variables

-> TcType

Type to instantiate

-> TcM ([TcTyVar], TcThetaType, TcType)

Result (type vars, preds (incl equalities), rho)

instSkolTyCoVars :: (Unique -> Name -> Kind -> TyCoVar) -> [TyVar] -> TcRnIf gbl lcl (TCvSubst, [TyCoVar])

freshenTyVarBndrs :: [TyVar] -> TcRnIf gbl lcl (TCvSubst, [TyVar])

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

freshenCoVarBndrsX :: TCvSubst -> [CoVar] -> TcRnIf gbl lcl (TCvSubst, [CoVar])

Give fresh uniques to a bunch of CoVars Used in FamInst.newFamInst

mkTypeErrorThing :: TcType -> ErrorThing

Make an ErrorThing storing a type.

mkTypeErrorThingArgs :: TcType -> Int -> ErrorThing

Make an ErrorThing storing a type, with some extra args known about

tidyCt :: TidyEnv -> Ct -> Ct

zonkQuantifiedTyVarOrType :: TcTyVar -> TcM (Either TcTyVar TcType)

Like zonkQuantifiedTyVar, but if zonking reveals that the tyvar should become a type (when defaulting a levity var to Lifted), it returns the type instead.

defaultKindVar :: TcTyVar -> TcM Kind

Take an (unconstrained) meta tyvar and default it. Works only for kind vars (of type BOX) and levity vars (of type Levity).

zonkCo :: Coercion -> TcM Coercion

Zonk a coercion -- really, just zonk any types in the coercion

zonkTcTypeMapper :: TyCoMapper () TcM

A suitable TyCoMapper for zonking a type inside the knot, and before all metavars are filled in.

zonkCt :: Ct -> TcM Ct

tcGetGlobalTyCoVars :: TcM TcTyVarSet

tcGetGlobalTyCoVars returns a fully-zonked set of *scoped* tyvars free in the environment. To improve subsequent calls to the same function it writes the zonked set back into the environment. Note that this returns all variables free in anything (term-level or type-level) in scope. We thus don't have to worry about clashes with things that are not in scope, because if they are reachable, then they'll be returned here.