ghc-8.10.4: The GHC API
Safe HaskellNone
LanguageHaskell2010

TcUnify

Synopsis

Documentation

tcWrapResultO :: CtOrigin -> HsExpr GhcRn -> HsExpr GhcTcId -> TcSigmaType -> ExpRhoType -> TcM (HsExpr GhcTcId) Source #

Sometimes we don't have a HsExpr Name to hand, and this is more convenient.

tcSkolemise Source #

Arguments

:: UserTypeCtxt 
-> TcSigmaType 
-> ([TcTyVar] -> TcType -> TcM result)

These are only ever used for scoped type variables.

-> TcM (HsWrapper, result)

The expression has type: spec_ty -> expected_ty

Take an "expected type" and strip off quantifiers to expose the type underneath, binding the new skolems for the thing_inside. The returned HsWrapper has type specific_ty -> expected_ty.

tcSkolemiseET :: UserTypeCtxt -> ExpSigmaType -> (ExpRhoType -> TcM result) -> TcM (HsWrapper, result) Source #

Variant of tcSkolemise that takes an ExpType

tcSubTypeHR Source #

Arguments

:: CtOrigin

of the actual type

-> Maybe (HsExpr GhcRn)

If present, it has type ty_actual

-> TcSigmaType 
-> ExpRhoType 
-> TcM HsWrapper 

Call this variant when you are in a higher-rank situation and you know the right-hand type is deeply skolemised.

tcSubTypeO Source #

Arguments

:: CtOrigin

of the actual type

-> UserTypeCtxt

of the expected type

-> TcSigmaType 
-> ExpRhoType 
-> TcM HsWrapper 

checkConstraints :: SkolemInfo -> [TcTyVar] -> [EvVar] -> TcM result -> TcM (TcEvBinds, result) Source #

checkTvConstraints :: SkolemInfo -> [TcTyVar] -> TcM result -> TcM result Source #

unifyType Source #

Arguments

:: Maybe (HsExpr GhcRn)

If present, has type ty1

-> TcTauType 
-> TcTauType 
-> TcM TcCoercionN 

tcInferNoInst :: (ExpSigmaType -> TcM a) -> TcM (a, TcSigmaType) Source #

Infer a type using a fresh ExpType See also Note [ExpType] in TcMType Does not attempt to instantiate the inferred type

matchActualFunTysPart :: SDoc -> CtOrigin -> Maybe (HsExpr GhcRn) -> Arity -> TcSigmaType -> [TcSigmaType] -> Arity -> TcM (HsWrapper, [TcSigmaType], TcSigmaType) Source #

Variant of matchActualFunTys that works when supplied only part (that is, to the right of some arrows) of the full function type

matchExpectedFunKind Source #

Arguments

:: Outputable fun 
=> fun

type, only for errors

-> Arity

n: number of desired arrows

-> TcKind

fun_ kind

-> TcM Coercion

co :: fun_kind ~ (arg1 -> ... -> argn -> res)

Breaks apart a function kind into its pieces.