ghc-8.0.2: The GHC API

Safe HaskellNone
LanguageHaskell2010

TcUnify

Synopsis

Documentation

tcWrapResultO :: CtOrigin -> HsExpr TcId -> TcSigmaType -> ExpRhoType -> TcM (HsExpr TcId) #

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

tcSkolemise #

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) #

Variant of tcSkolemise that takes an ExpType

tcSubTypeHR #

Arguments

:: Outputable a 
=> CtOrigin

of the actual type

-> Maybe a

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.

tcSubType #

Arguments

:: Outputable a 
=> UserTypeCtxt 
-> Maybe a

If present, it has type ty_actual

-> TcSigmaType 
-> ExpSigmaType 
-> TcM HsWrapper 

tcSubTypeO #

Arguments

:: CtOrigin

of the actual type

-> UserTypeCtxt

of the expected type

-> TcSigmaType 
-> ExpSigmaType 
-> TcM HsWrapper 

tcSubTypeDS #

Arguments

:: Outputable a 
=> UserTypeCtxt 
-> Maybe a

has type ty_actual

-> TcSigmaType 
-> ExpRhoType 
-> TcM HsWrapper 

tcSubTypeDS_O :: Outputable a => CtOrigin -> UserTypeCtxt -> Maybe a -> TcSigmaType -> ExpRhoType -> TcM HsWrapper #

Like tcSubTypeDS, but takes a CtOrigin to use when instantiating the "actual" type

tcSubTypeDS_NC #

Arguments

:: Outputable a 
=> UserTypeCtxt 
-> Maybe a

If present, this has type ty_actual

-> TcSigmaType 
-> ExpRhoType 
-> TcM HsWrapper 

tcSubTypeET :: CtOrigin -> ExpSigmaType -> TcSigmaType -> TcM HsWrapper #

This is like tcSubType but accepts an ExpType as the actual type. You probably want this only when looking at patterns, never expressions.

tcSubTypeET_NC :: UserTypeCtxt -> ExpSigmaType -> TcSigmaType -> TcM HsWrapper #

This is like tcSubType but accepts an ExpType as the actual type. You probably want this only when looking at patterns, never expressions. Does not add context.

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

unifyType_ #

Arguments

:: Outputable a 
=> Maybe a

If present, has type ty1

-> TcTauType 
-> TcTauType 
-> TcM () 

Unify two types, discarding a resultant coercion. Any constraints generated will still need to be solved, however.

unifyType #

Arguments

:: Outputable a 
=> Maybe a

If present, has type ty1

-> TcTauType 
-> TcTauType 
-> TcM TcCoercionN 

noThing :: Maybe (HsExpr Name) #

Use this instead of Nothing when calling unifyType without a good "thing" (where the "thing" has the "actual" type passed in) This has an Outputable instance, avoiding amgiguity problems.

unifyExpType :: Outputable a => Maybe a -> TcTauType -> ExpType -> TcM TcCoercionN #

Variant of unifyType that takes an ExpType as its second type

tcInfer :: (ExpRhoType -> TcM a) -> TcM (a, TcType) #

Infer a type using a fresh ExpType See also Note [ExpType] in TcMType

matchActualFunTysPart :: Outputable a => SDoc -> CtOrigin -> Maybe a -> Arity -> TcSigmaType -> [TcSigmaType] -> Arity -> TcM (HsWrapper, [TcSigmaType], TcSigmaType) #

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

matchExpectedFunKind #

Arguments

:: Arity

# of args remaining, only for errors

-> TcType

type, only for errors

-> TcKind

function kind

-> TcM (Coercion, TcKind, TcKind)

co :: old_kind ~ arg -> res

Breaks apart a function kind into its pieces.