X-Git-Url: http://git.megacz.com/?p=ghc-hetmet.git;a=blobdiff_plain;f=compiler%2Ftypecheck%2FTcHsType.lhs;h=4fe6b60376461ec9bc3b870cf7fb99f13e1a4114;hp=2174be39206ccea4fd5d633d266b70984f6b8735;hb=HEAD;hpb=b2524b3960999fffdb3767900f58825903f6560f diff --git a/compiler/typecheck/TcHsType.lhs b/compiler/typecheck/TcHsType.lhs index 2174be3..4fe6b60 100644 --- a/compiler/typecheck/TcHsType.lhs +++ b/compiler/typecheck/TcHsType.lhs @@ -37,7 +37,7 @@ import TcMType import TcUnify import TcIface import TcType -import TypeRep ( ecKind ) +import TysPrim ( ecKind ) import {- Kind parts of -} Type import Var import VarSet @@ -300,7 +300,7 @@ kc_check_hs_type (HsParTy ty) exp_kind = do { ty' <- kc_check_lhs_type ty exp_kind; return (HsParTy ty') } kc_check_hs_type ty@(HsAppTy ty1 ty2) exp_kind - = do { let (fun_ty, arg_tys) = splitHsAppTys ty1 ty2 + = do { let (fun_ty, arg_tys) = splitHsAppTys ty1 [ty2] ; (fun_ty', fun_kind) <- kc_lhs_type fun_ty ; arg_tys' <- kcCheckApps fun_ty fun_kind arg_tys ty exp_kind ; return (mkHsAppTys fun_ty' arg_tys') } @@ -370,6 +370,11 @@ kc_hs_type (HsModalBoxType ecn ty) = do ty' <- kcLiftedType ty return (HsModalBoxType ecn ty', liftedTypeKind) +kc_hs_type (HsKappaTy ty1 ty2) = do + ty1' <- kc_check_lhs_type ty1 (EK argTypeKind EkUnk) + ty2' <- kcTypeType ty2 + return (HsKappaTy ty1' ty2', liftedTypeKind) + kc_hs_type (HsKindSig ty k) = do ty' <- kc_check_lhs_type ty (EK k EkKindSig) return (HsKindSig ty' k, k) @@ -393,11 +398,10 @@ kc_hs_type (HsOpTy ty1 op ty2) = do return (HsOpTy ty1' op ty2', res_kind) kc_hs_type (HsAppTy ty1 ty2) = do + let (fun_ty, arg_tys) = splitHsAppTys ty1 [ty2] (fun_ty', fun_kind) <- kc_lhs_type fun_ty (arg_tys', res_kind) <- kcApps fun_ty fun_kind arg_tys return (mkHsAppTys fun_ty' arg_tys', res_kind) - where - (fun_ty, arg_tys) = splitHsAppTys ty1 ty2 kc_hs_type (HsPredTy pred) = wrongPredErr pred @@ -464,20 +468,6 @@ kcCheckApps the_fun fun_kind args ty exp_kind -- This improves error message; Trac #2994 ; kc_check_lhs_types args_w_kinds } -splitHsAppTys :: LHsType Name -> LHsType Name -> (LHsType Name, [LHsType Name]) -splitHsAppTys fun_ty arg_ty = split fun_ty [arg_ty] - where - split (L _ (HsAppTy f a)) as = split f (a:as) - split f as = (f,as) - -mkHsAppTys :: LHsType Name -> [LHsType Name] -> HsType Name -mkHsAppTys fun_ty [] = pprPanic "mkHsAppTys" (ppr fun_ty) -mkHsAppTys fun_ty (arg_ty:arg_tys) - = foldl mk_app (HsAppTy fun_ty arg_ty) arg_tys - where - mk_app fun arg = HsAppTy (noLoc fun) arg -- Add noLocs for inner nodes of - -- the application; they are - -- never used --------------------------- splitFunKind :: SDoc -> Int -> TcKind -> [b] -> TcM ([(b,ExpKind)], TcKind) @@ -596,6 +586,11 @@ ds_type (HsModalBoxType ecn ty) = do checkWiredInTyCon hetMetCodeTypeTyCon return (mkHetMetCodeTypeTy (mkTyVar ecn ecKind) tau_ty) +ds_type (HsKappaTy ty1 ty2) = do + tau_ty1 <- dsHsType ty1 + tau_ty2 <- dsHsType ty2 + return (mkHetMetKappaTy tau_ty1 tau_ty2) + ds_type (HsTupleTy boxity tys) = do tau_tys <- dsHsTypes tys checkWiredInTyCon tycon