isUnLiftedType, -- Source types are always lifted
isUnboxedTupleType, -- Ditto
- isPrimitiveType,
+ isPrimitiveType, isTyVarTy,
tidyTopType, tidyType, tidyPred, tidyTypes, tidyFreeTyVars, tidyOpenType, tidyOpenTypes,
tidyTyVarBndr, tidyOpenTyVar, tidyOpenTyVars,
Kind, Type, SourceType(..), PredType, ThetaType,
unliftedTypeKind, liftedTypeKind, openTypeKind, mkArrowKind, mkArrowKinds,
mkForAllTy, mkForAllTys, defaultKind, isTypeKind, isAnyTypeKind,
- mkFunTy, mkFunTys, zipFunTys,
+ mkFunTy, mkFunTys, zipFunTys, isTyVarTy,
mkTyConApp, mkGenTyConApp, mkAppTy, mkAppTys, mkSynTy, applyTy, applyTys,
mkTyVarTy, mkTyVarTys, mkTyConTy, mkPredTy, mkPredTys,
isUnLiftedType, isUnboxedTupleType, isPrimitiveType,
hoist orig_ty (ForAllTy tv ty) = case hoist ty ty of
(tvs,theta,tau) -> (tv:tvs,theta,tau)
hoist orig_ty (FunTy arg res)
- | isPredTy arg = case hoist res res of
- (tvs,theta,tau) -> (tvs,arg:theta,tau)
+ | isPredTy arg' = case hoist res res of
+ (tvs,theta,tau) -> (tvs,arg':theta,tau)
| otherwise = case hoist res res of
- (tvs,theta,tau) -> (tvs,theta,mkFunTy arg tau)
+ (tvs,theta,tau) -> (tvs,theta,mkFunTy arg' tau)
+ where
+ arg' = hoistForAllTys arg -- Don't forget to apply hoist recursively
+ -- to the argument type
hoist orig_ty (NoteTy _ ty) = hoist orig_ty ty
hoist orig_ty ty = ([], [], orig_ty)