X-Git-Url: http://git.megacz.com/?a=blobdiff_plain;f=compiler%2Ftypecheck%2FTcInstDcls.lhs;h=b4d34983680bd4b8c80b155c8ddc3a91a5cee5f7;hb=e3dd39bf230380f02d73efc287226117bb2eb47f;hp=fe7b1d8b24254915b5335c724569cf62a4f874e7;hpb=84923cc7de2a93c22a2f72daf9ac863959efae13;p=ghc-hetmet.git diff --git a/compiler/typecheck/TcInstDcls.lhs b/compiler/typecheck/TcInstDcls.lhs index fe7b1d8..b4d3498 100644 --- a/compiler/typecheck/TcInstDcls.lhs +++ b/compiler/typecheck/TcInstDcls.lhs @@ -147,9 +147,8 @@ tcInstDecls1 tycl_decls inst_decls deriv_decls -- (they recover, so that we get more than one error each -- round) - -- (1) Do class instance declarations and instances of indexed - -- types - ; let { idxty_decls = filter (isIdxTyDecl . unLoc) tycl_decls } + -- (1) Do class and family instance declarations + ; let { idxty_decls = filter (isFamInstDecl . unLoc) tycl_decls } ; local_info_tycons <- mappM tcLocalInstDecl1 inst_decls ; idx_tycons <- mappM tcIdxTyInstDeclTL idxty_decls @@ -193,7 +192,7 @@ tcInstDecls1 tycl_decls inst_decls deriv_decls -- !!!TODO: Need to perform this check for the TyThing of type functions, -- too. tcIdxTyInstDeclTL ldecl@(L loc decl) = - do { tything <- tcIdxTyInstDecl ldecl + do { tything <- tcFamInstDecl ldecl ; setSrcSpan loc $ when (isAssocFamily tything) $ addErr $ assocInClassErr (tcdName decl) @@ -243,7 +242,7 @@ tcLocalInstDecl1 decl@(L loc (InstDecl poly_ty binds uprags ats)) ; (tyvars, theta, tau) <- tcHsInstHead poly_ty -- Next, process any associated types. - ; idx_tycons <- mappM tcIdxTyInstDecl ats + ; idx_tycons <- mappM tcFamInstDecl ats -- Now, check the validity of the instance. ; (clas, inst_tys) <- checkValidInstHead tau @@ -274,11 +273,11 @@ tcLocalInstDecl1 decl@(L loc (InstDecl poly_ty binds uprags ats)) checkValidAndMissingATs clas inst_tys ats = do { -- Issue a warning for each class AT that is not defined in this -- instance. - ; let classDefATs = listToNameSet . map tyConName . classATs $ clas - definedATs = listToNameSet . map (tcdName.unLoc.fst) $ ats - omitted = classDefATs `minusNameSet` definedATs + ; let class_ats = map tyConName (classATs clas) + defined_ats = listToNameSet . map (tcdName.unLoc.fst) $ ats + omitted = filterOut (`elemNameSet` defined_ats) class_ats ; warn <- doptM Opt_WarnMissingMethods - ; mapM_ (warnTc warn . omittedATWarn) (nameSetToList omitted) + ; mapM_ (warnTc warn . omittedATWarn) omitted -- Ensure that all AT indexes that correspond to class parameters -- coincide with the types in the instance head. All remaining