Suppress "No explicit method or default decl given for m"
if the method name starts with an underscore
This in response to a suggestion by George Russel
mkGenOcc1, mkGenOcc2, mkLocalOcc,
isTvOcc, isTcOcc, isDataOcc, isDataSymOcc, isSymOcc, isValOcc,
mkGenOcc1, mkGenOcc2, mkLocalOcc,
isTvOcc, isTcOcc, isDataOcc, isDataSymOcc, isSymOcc, isValOcc,
occNameFS, occNameString, occNameUserString, occNameSpace, occNameFlavour,
setOccNameSpace,
occNameFS, occNameString, occNameUserString, occNameSpace, occNameFlavour,
setOccNameSpace,
+\begin{code}
+reportIfUnused :: OccName -> Bool
+ -- Haskell 98 encourages compilers to suppress warnings about
+ -- unused names in a pattern if they start with "_".
+reportIfUnused occ = case occNameUserString occ of
+ ('_' : _) -> False
+ zz_other -> True
+\end{code}
+
+
+
%************************************************************************
%* *
\subsection{Making system names}
%************************************************************************
%* *
\subsection{Making system names}
lookupFixity
)
import TcRnMonad
lookupFixity
)
import TcRnMonad
-import Name ( Name, getName, getSrcLoc, nameIsLocalOrFrom, isWiredInName,
- mkInternalName, mkExternalName, mkIPName, nameSrcLoc,
- nameOccName, setNameSrcLoc, nameModule )
+import Name ( Name, getName, nameIsLocalOrFrom,
+ isWiredInName, mkInternalName, mkExternalName, mkIPName,
+ nameSrcLoc, nameOccName, setNameSrcLoc, nameModule )
-import OccName ( OccName, tcName, isDataOcc, occNameUserString, occNameFlavour )
+import OccName ( OccName, tcName, isDataOcc, occNameUserString, occNameFlavour,
+ reportIfUnused )
import Module ( Module, ModuleName, moduleName, mkHomeModule,
lookupModuleEnv, lookupModuleEnvByName, extendModuleEnv_C )
import PrelNames ( mkUnboundName, intTyConName,
import Module ( Module, ModuleName, moduleName, mkHomeModule,
lookupModuleEnv, lookupModuleEnvByName, extendModuleEnv_C )
import PrelNames ( mkUnboundName, intTyConName,
groups = equivClasses cmp (filter reportable names)
(_,prov1) `cmp` (_,prov2) = prov1 `compare` prov2
groups = equivClasses cmp (filter reportable names)
(_,prov1) `cmp` (_,prov2) = prov1 `compare` prov2
+ reportable (name,_) = reportIfUnused (nameOccName name)
- reportable (name,_) = case occNameUserString (nameOccName name) of
- ('_' : _) -> False
- zz_other -> True
- -- Haskell 98 encourages compilers to suppress warnings about
- -- unused names in a pattern if they start with "_".
-------------------------
-------------------------
sep [msg <> colon, nest 4 (fsep (punctuate comma (map (ppr.fst) names)))]
where
(name1, prov1) = head names
sep [msg <> colon, nest 4 (fsep (punctuate comma (map (ppr.fst) names)))]
where
(name1, prov1) = head names
+ loc1 = nameSrcLoc name1
(def_loc, msg) = case prov1 of
LocalDef -> (loc1, unused_msg)
NonLocalDef (UserImport mod loc _) -> (loc, imp_from mod)
(def_loc, msg) = case prov1 of
LocalDef -> (loc1, unused_msg)
NonLocalDef (UserImport mod loc _) -> (loc, imp_from mod)
import Name ( Name, NamedThing(..) )
import NameEnv ( NameEnv, lookupNameEnv, emptyNameEnv, unitNameEnv, plusNameEnv )
import NameSet ( emptyNameSet, unitNameSet )
import Name ( Name, NamedThing(..) )
import NameEnv ( NameEnv, lookupNameEnv, emptyNameEnv, unitNameEnv, plusNameEnv )
import NameSet ( emptyNameSet, unitNameSet )
-import OccName ( mkClassTyConOcc, mkClassDataConOcc, mkWorkerOcc, mkSuperDictSelOcc )
+import OccName ( mkClassTyConOcc, mkClassDataConOcc, mkWorkerOcc,
+ mkSuperDictSelOcc, reportIfUnused )
import Outputable
import Var ( TyVar )
import CmdLineOpts
import Outputable
import Var ( TyVar )
import CmdLineOpts
= -- No default method
-- Warn only if -fwarn-missing-methods
doptM Opt_WarnMissingMethods `thenM` \ warn ->
= -- No default method
-- Warn only if -fwarn-missing-methods
doptM Opt_WarnMissingMethods `thenM` \ warn ->
- warnTc (isInstDecl origin && warn)
+ warnTc (isInstDecl origin
+ && warn
+ && reportIfUnused (getOccName sel_id))
(omittedMethodWarn sel_id) `thenM_`
returnM error_rhs
where
(omittedMethodWarn sel_id) `thenM_`
returnM error_rhs
where