ghc-8.2.2: The GHC API

Safe HaskellNone




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 #


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


:: 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.

tcSubTypeO #


:: CtOrigin

of the actual type

-> UserTypeCtxt

of the expected type

-> TcSigmaType 
-> ExpRhoType 
-> TcM HsWrapper 

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

unifyType #


:: 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.

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

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

matchExpectedFunTys :: forall a. SDoc -> Arity -> ExpRhoType -> ([ExpSigmaType] -> ExpRhoType -> TcM a) -> TcM (a, HsWrapper) #

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 #


:: 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.