X-Git-Url: http://git.megacz.com/?a=blobdiff_plain;f=compiler%2Ftypecheck%2FTcClassDcl.lhs;h=87c18414ea3abc400c29e68c13d0be6b2d49c845;hb=e07e74e5a074490d25443aeff4db4f1f299040c4;hp=30dfc7c5e72f919ee1e6793d9ccf50a4b5d61e14;hpb=49c98d143c382a1341e1046f5ca00819a25691ba;p=ghc-hetmet.git diff --git a/compiler/typecheck/TcClassDcl.lhs b/compiler/typecheck/TcClassDcl.lhs index 30dfc7c..87c1841 100644 --- a/compiler/typecheck/TcClassDcl.lhs +++ b/compiler/typecheck/TcClassDcl.lhs @@ -271,7 +271,7 @@ tcDefMeth origin clas tyvars binds_in sig_fn prag_fn sel_id -- Check the context { dict_binds <- tcSimplifyCheck - (ptext SLIT("class") <+> ppr clas) + loc tyvars [this_dict] insts_needed @@ -362,18 +362,18 @@ tcMethodBind inst_tyvars inst_theta avail_insts sig_fn prag_fn let [(_, Just sig, local_meth_id)] = mono_bind_infos + loc = sig_loc sig in addErrCtxtM (sigCtxt sel_id inst_tyvars inst_theta (idType meth_id)) $ - newDictBndrs (sig_loc sig) (sig_theta sig) `thenM` \ meth_dicts -> + newDictBndrs loc (sig_theta sig) `thenM` \ meth_dicts -> let meth_tvs = sig_tvs sig all_tyvars = meth_tvs ++ inst_tyvars all_insts = avail_insts ++ meth_dicts in tcSimplifyCheck - (ptext SLIT("class or instance method") <+> quotes (ppr sel_id)) - all_tyvars all_insts meth_lie `thenM` \ lie_binds -> + loc all_tyvars all_insts meth_lie `thenM` \ lie_binds -> checkSigTyVars all_tyvars `thenM_` @@ -537,8 +537,8 @@ mkDefMethRhs origin clas inst_tys sel_id loc GenDefMeth other -> Nothing other -> Nothing -isInstDecl (SigOrigin (InstSkol _)) = True -isInstDecl (SigOrigin (ClsSkol _)) = False +isInstDecl (SigOrigin InstSkol) = True +isInstDecl (SigOrigin (ClsSkol _)) = False \end{code} @@ -727,15 +727,15 @@ mkGenericInstance clas (hs_ty, binds) tcAddDeclCtxt decl thing_inside = addErrCtxt ctxt thing_inside where - thing = case decl of - ClassDecl {} -> "class" - TySynonym {} -> "type synonym" - TyFunction {} -> "type function signature" - TyData {tcdND = NewType} -> "newtype" ++ maybeSig - TyData {tcdND = DataType} -> "data type" ++ maybeSig + thing | isClassDecl decl = "class" + | isTypeDecl decl = "type synonym" ++ maybeInst + | isDataDecl decl = if tcdND decl == NewType + then "newtype" ++ maybeInst + else "data type" ++ maybeInst + | isFamilyDecl decl = "family" - maybeSig | isKindSigDecl decl = " signature" - | otherwise = "" + maybeInst | isFamInstDecl decl = " family" + | otherwise = "" ctxt = hsep [ptext SLIT("In the"), text thing, ptext SLIT("declaration for"), quotes (ppr (tcdName decl))] @@ -767,7 +767,7 @@ badGenericInstance sel_id because notSimple inst_tys = vcat [ptext SLIT("because the instance type(s)"), nest 2 (ppr inst_tys), - ptext SLIT("is not a simple type of form (T a b c)")] + ptext SLIT("is not a simple type of form (T a1 ... an)")] notGeneric tycon = vcat [ptext SLIT("because the instance type constructor") <+> quotes (ppr tycon) <+>