newTyVarTys, -- Int -> Kind -> NF_TcM [TcType]
-----------------------------------------
- TcType, TcTauType, TcThetaType, TcRhoType, TcClassContext,
+ TcType, TcTauType, TcThetaType, TcRhoType,
-- Find the type to which a type variable is bound
tcPutTyVar, -- :: TcTyVar -> TcType -> NF_TcM TcType
--------------------------------
zonkTcTyVar, zonkTcTyVars, zonkTcTyVarsAndFV, zonkTcSigTyVars,
zonkTcType, zonkTcTypes, zonkTcClassConstraints, zonkTcThetaType,
+ zonkTcPredType,
zonkTcTypeToType, zonkTcTyVarToTyVar, zonkKindEnv
tcInstType :: TcType -> NF_TcM ([TcTyVar], TcThetaType, TcType)
tcInstType ty
= case splitForAllTys ty of
- ([], _) -> returnNF_Tc ([], [], ty) -- Nothing to do
+ ([], rho) -> tcSplitRhoTy rho `thenNF_Tc` \ (theta, tau) ->
+ returnNF_Tc ([], theta, tau)
(tyvars, rho) -> tcInstTyVars tyvars `thenNF_Tc` \ (tyvars', _, tenv) ->
tcSplitRhoTy (substTy tenv rho) `thenNF_Tc` \ (theta, tau) ->
returnNF_Tc (tyvars', theta, tau)
zonkTcThetaType theta = mapNF_Tc zonkTcPredType theta
zonkTcPredType :: TcPredType -> NF_TcM TcPredType
-zonkTcPredType (Class c ts) =
+zonkTcPredType (ClassP c ts) =
zonkTcTypes ts `thenNF_Tc` \ new_ts ->
- returnNF_Tc (Class c new_ts)
+ returnNF_Tc (ClassP c new_ts)
zonkTcPredType (IParam n t) =
zonkTcType t `thenNF_Tc` \ new_t ->
returnNF_Tc (IParam n new_t)
-- Void if it has kind Lifted
-- :Void otherwise
zonk_unbound_tyvar tv
- | kind == liftedTypeKind
+ | kind == liftedTypeKind || kind == openTypeKind
= tcPutTyVar tv voidTy -- Just to avoid creating a new tycon in
-- this vastly common case
| otherwise
go ty `thenNF_Tc` \ ty' ->
returnNF_Tc (ForAllTy tyvar' ty')
- go_pred (Class c tys) = mapNF_Tc go tys `thenNF_Tc` \ tys' ->
- returnNF_Tc (Class c tys')
+ go_pred (ClassP c tys) = mapNF_Tc go tys `thenNF_Tc` \ tys' ->
+ returnNF_Tc (ClassP c tys')
go_pred (IParam n ty) = go ty `thenNF_Tc` \ ty' ->
returnNF_Tc (IParam n ty')