Small refactor
authorSimon Peyton Jones <simonpj@microsoft.com>
Thu, 10 Jan 2019 12:08:47 +0000 (12:08 +0000)
committerBen Gamari <ben@well-typed.com>
Thu, 17 Jan 2019 18:39:40 +0000 (13:39 -0500)
...to use the same error message rather than duplicating it

compiler/typecheck/TcInstDcls.hs

index ba33fe2..fccf8b7 100644 (file)
@@ -21,7 +21,7 @@ import TcBinds
 import TcTyClsDecls
 import TcTyDecls ( addTyConsToGblEnv )
 import TcClassDcl( tcClassDecl2, tcATDefault,
-                   HsSigFun, mkHsSigFun,
+                   HsSigFun, mkHsSigFun, badMethodErr,
                    findMethodBind, instantiateMethod )
 import TcSigs
 import TcRnMonad
@@ -1539,13 +1539,11 @@ tcMethods dfun_id clas tyvars dfun_ev_vars inst_tys
     -- Check if any method bindings do not correspond to the class.
     -- See Note [Mismatched class methods and associated type families].
     checkMethBindMembership
-      = let bind_nms         = map unLoc $ collectMethodBinders binds
-            cls_meth_nms     = map (idName . fst) op_items
-            mismatched_meths = bind_nms `minusList` cls_meth_nms
-        in forM_ mismatched_meths $ \mismatched_meth ->
-             addErrTc $ hsep
-             [ text "Class", quotes (ppr (className clas))
-             , text "does not have a method", quotes (ppr mismatched_meth)]
+      = mapM_ (addErrTc . badMethodErr clas) mismatched_meths
+      where
+        bind_nms         = map unLoc $ collectMethodBinders binds
+        cls_meth_nms     = map (idName . fst) op_items
+        mismatched_meths = bind_nms `minusList` cls_meth_nms
 
 {-
 Note [Mismatched class methods and associated type families]