Print which warning-flag controls an emitted warning
authorMichael Walker <mike@barrucadu.co.uk>
Thu, 25 Feb 2016 16:34:07 +0000 (17:34 +0100)
committerHerbert Valerio Riedel <hvr@gnu.org>
Thu, 25 Feb 2016 22:44:08 +0000 (23:44 +0100)
Both gcc and clang tell which warning flag a reported warning can be
controlled with, this patch makes ghc do the same. More generally, this
allows for annotated compiler output, where an optional annotation is
displayed in brackets after the severity.

This also adds a new flag `-f(no-)show-warning-groups` to control
whether to show which warning-group (such as `-Wall` or `-Wcompat`)
a warning belongs to. This flag is on by default.

This implements #10752

Reviewed By: quchen, bgamari, hvr

Differential Revision: https://phabricator.haskell.org/D1943

163 files changed:
compiler/coreSyn/CoreLint.hs
compiler/deSugar/Coverage.hs
compiler/ghci/Debugger.hs
compiler/ghci/Linker.hs
compiler/iface/BinIface.hs
compiler/iface/LoadIface.hs
compiler/main/CodeOutput.hs
compiler/main/DriverPipeline.hs
compiler/main/DynFlags.hs
compiler/main/ErrUtils.hs
compiler/main/ErrUtils.hs-boot
compiler/main/GhcMake.hs
compiler/main/SysTools.hs
compiler/main/TidyPgm.hs
compiler/rename/RnBinds.hs
compiler/rename/RnEnv.hs
compiler/rename/RnNames.hs
compiler/rename/RnSource.hs
compiler/rename/RnTypes.hs
compiler/simplCore/CoreMonad.hs
compiler/simplCore/SimplCore.hs
compiler/simplStg/SimplStg.hs
compiler/typecheck/Inst.hs
compiler/typecheck/TcAnnotations.hs
compiler/typecheck/TcBinds.hs
compiler/typecheck/TcClassDcl.hs
compiler/typecheck/TcDeriv.hs
compiler/typecheck/TcErrors.hs
compiler/typecheck/TcExpr.hs
compiler/typecheck/TcForeign.hs
compiler/typecheck/TcInstDcls.hs
compiler/typecheck/TcMatches.hs
compiler/typecheck/TcPat.hs
compiler/typecheck/TcRnDriver.hs
compiler/typecheck/TcRnMonad.hs
compiler/typecheck/TcSMonad.hs
compiler/typecheck/TcSimplify.hs
compiler/typecheck/TcSplice.hs
compiler/typecheck/TcTyClsDecls.hs
compiler/typecheck/TcValidity.hs
docs/users_guide/using-warnings.rst
ghc/GHCi/UI.hs
testsuite/tests/deSugar/should_compile/ds041.stderr
testsuite/tests/deSugar/should_compile/ds053.stderr
testsuite/tests/dependent/should_compile/T11241.stderr
testsuite/tests/deriving/should_compile/T4966.stderr
testsuite/tests/deriving/should_compile/deriving-1935.stderr
testsuite/tests/deriving/should_compile/drv003.stderr
testsuite/tests/driver/werror.stderr
testsuite/tests/ffi/should_compile/T1357.stderr
testsuite/tests/ghc-api/T7478/T7478.hs
testsuite/tests/ghc-api/apirecomp001/apirecomp001.stderr
testsuite/tests/ghci/scripts/T5820.stderr
testsuite/tests/ghci/scripts/T8353.stderr
testsuite/tests/ghci/scripts/ghci019.stderr
testsuite/tests/haddock/haddock_examples/haddock.Test.stderr
testsuite/tests/indexed-types/should_compile/Class3.stderr
testsuite/tests/indexed-types/should_compile/Simple2.stderr
testsuite/tests/indexed-types/should_compile/T3023.stderr
testsuite/tests/indexed-types/should_compile/T8889.stderr
testsuite/tests/indexed-types/should_compile/UnusedTyVarWarnings.stderr
testsuite/tests/indexed-types/should_compile/UnusedTyVarWarningsNamedWCs.stderr
testsuite/tests/indexed-types/should_fail/T7862.stderr
testsuite/tests/module/mod128.stderr
testsuite/tests/module/mod14.stderr
testsuite/tests/module/mod176.stderr
testsuite/tests/module/mod177.stderr
testsuite/tests/module/mod5.stderr
testsuite/tests/module/mod89.stderr
testsuite/tests/monadfail/MonadFailWarnings.stderr
testsuite/tests/monadfail/MonadFailWarningsWithRebindableSyntax.stderr
testsuite/tests/overloadedrecflds/should_fail/overloadedrecfldsfail05.stderr
testsuite/tests/overloadedrecflds/should_fail/overloadedrecfldsfail06.stderr
testsuite/tests/overloadedrecflds/should_fail/overloadedrecfldsfail11.stderr
testsuite/tests/overloadedrecflds/should_fail/overloadedrecfldsfail12.stderr
testsuite/tests/parser/should_compile/T2245.stderr
testsuite/tests/parser/should_compile/T3303.stderr
testsuite/tests/parser/should_compile/read014.stderr
testsuite/tests/partial-sigs/should_compile/ExprSigLocal.stderr
testsuite/tests/partial-sigs/should_compile/SplicesUsed.stderr
testsuite/tests/partial-sigs/should_compile/T10403.stderr
testsuite/tests/partial-sigs/should_compile/T10438.stderr
testsuite/tests/partial-sigs/should_compile/T10463.stderr
testsuite/tests/partial-sigs/should_compile/T10519.stderr
testsuite/tests/partial-sigs/should_compile/T11016.stderr
testsuite/tests/partial-sigs/should_compile/T11192.stderr
testsuite/tests/partial-sigs/should_compile/TypedSplice.stderr
testsuite/tests/partial-sigs/should_compile/WarningWildcardInstantiations.stderr
testsuite/tests/partial-sigs/should_fail/Defaulting1MROff.stderr
testsuite/tests/partial-sigs/should_fail/T11122.stderr
testsuite/tests/patsyn/should_compile/T11283.stderr
testsuite/tests/patsyn/should_fail/T11053.stderr
testsuite/tests/rename/should_compile/T1789.stderr
testsuite/tests/rename/should_compile/T17a.stderr
testsuite/tests/rename/should_compile/T17b.stderr
testsuite/tests/rename/should_compile/T17c.stderr
testsuite/tests/rename/should_compile/T17d.stderr
testsuite/tests/rename/should_compile/T17e.stderr
testsuite/tests/rename/should_compile/T1972.stderr
testsuite/tests/rename/should_compile/T3262.stderr
testsuite/tests/rename/should_compile/T3371.stderr
testsuite/tests/rename/should_compile/T3449.stderr
testsuite/tests/rename/should_compile/T4489.stderr
testsuite/tests/rename/should_compile/T5331.stderr
testsuite/tests/rename/should_compile/T5334.stderr
testsuite/tests/rename/should_compile/T5867.stderr
testsuite/tests/rename/should_compile/T7085.stderr
testsuite/tests/rename/should_compile/T7145b.stderr
testsuite/tests/rename/should_compile/T7167.stderr
testsuite/tests/rename/should_compile/T9778.stderr
testsuite/tests/rename/should_compile/mc10.stderr
testsuite/tests/rename/should_compile/rn037.stderr
testsuite/tests/rename/should_compile/rn039.stderr
testsuite/tests/rename/should_compile/rn040.stderr
testsuite/tests/rename/should_compile/rn041.stderr
testsuite/tests/rename/should_compile/rn046.stderr
testsuite/tests/rename/should_compile/rn047.stderr
testsuite/tests/rename/should_compile/rn050.stderr
testsuite/tests/rename/should_compile/rn055.stderr
testsuite/tests/rename/should_compile/rn063.stderr
testsuite/tests/rename/should_compile/rn064.stderr
testsuite/tests/rename/should_compile/rn066.stderr
testsuite/tests/rename/should_fail/T2723.stderr
testsuite/tests/rename/should_fail/T5211.stderr
testsuite/tests/rename/should_fail/T5281.stderr
testsuite/tests/rename/should_fail/T5892a.stderr
testsuite/tests/rename/should_fail/T7454.stderr
testsuite/tests/rename/should_fail/T8149.stderr
testsuite/tests/semigroup/SemigroupWarnings.stderr
testsuite/tests/simplCore/should_compile/simpl020.stderr
testsuite/tests/typecheck/prog001/typecheck.prog001.stderr
testsuite/tests/typecheck/should_compile/HasKey.stderr
testsuite/tests/typecheck/should_compile/T10935.stderr
testsuite/tests/typecheck/should_compile/T10971a.stderr
testsuite/tests/typecheck/should_compile/T2497.stderr
testsuite/tests/typecheck/should_compile/T3696.stderr
testsuite/tests/typecheck/should_compile/T4912.stderr
testsuite/tests/typecheck/should_compile/T7903.stderr
testsuite/tests/typecheck/should_compile/T9497a.stderr
testsuite/tests/typecheck/should_compile/holes.stderr
testsuite/tests/typecheck/should_compile/holes2.stderr
testsuite/tests/typecheck/should_compile/tc078.stderr
testsuite/tests/typecheck/should_compile/tc115.stderr
testsuite/tests/typecheck/should_compile/tc116.stderr
testsuite/tests/typecheck/should_compile/tc125.stderr
testsuite/tests/typecheck/should_compile/tc126.stderr
testsuite/tests/typecheck/should_compile/tc161.stderr
testsuite/tests/typecheck/should_compile/tc175.stderr
testsuite/tests/typecheck/should_compile/tc243.stderr
testsuite/tests/typecheck/should_compile/tc254.stderr
testsuite/tests/typecheck/should_fail/T5051.stderr
testsuite/tests/typecheck/should_fail/tcfail204.stderr
testsuite/tests/warnings/minimal/WarnMinimal.stderr
testsuite/tests/warnings/should_compile/DeprU.stderr
testsuite/tests/warnings/should_compile/PluralS.stderr
testsuite/tests/warnings/should_compile/T10890/T10890_2.stderr
testsuite/tests/warnings/should_compile/T11077.stderr
testsuite/tests/warnings/should_compile/T11128.stderr
testsuite/tests/warnings/should_compile/T11128b.stderr
testsuite/tests/warnings/should_compile/T2526.stderr
testsuite/tests/warnings/should_compile/T9178.stderr
testsuite/tests/wcompat-warnings/WCompatWarningsOn.stderr
utils/mkUserGuidePart/Options/Warnings.hs

index f9cb4be..f5d0f84 100644 (file)
@@ -284,7 +284,7 @@ displayLintResults :: DynFlags -> CoreToDo
                    -> IO ()
 displayLintResults dflags pass warns errs binds
   | not (isEmptyBag errs)
-  = do { log_action dflags dflags Err.SevDump noSrcSpan defaultDumpStyle
+  = do { log_action dflags dflags NoReason Err.SevDump noSrcSpan defaultDumpStyle
            (vcat [ lint_banner "errors" (ppr pass), Err.pprMessageBag errs
                  , text "*** Offending Program ***"
                  , pprCoreBindings binds
@@ -294,7 +294,7 @@ displayLintResults dflags pass warns errs binds
   | not (isEmptyBag warns)
   , not opt_NoDebugOutput
   , showLintWarnings pass
-  = log_action dflags dflags Err.SevDump noSrcSpan defaultDumpStyle
+  = log_action dflags dflags NoReason Err.SevDump noSrcSpan defaultDumpStyle
         (lint_banner "warnings" (ppr pass) $$ Err.pprMessageBag warns)
 
   | otherwise = return ()
@@ -324,7 +324,8 @@ lintInteractiveExpr what hsc_env expr
     dflags = hsc_dflags hsc_env
 
     display_lint_err err
-      = do { log_action dflags dflags Err.SevDump noSrcSpan defaultDumpStyle
+      = do { log_action dflags dflags NoReason Err.SevDump
+               noSrcSpan defaultDumpStyle
                (vcat [ lint_banner "errors" (text what)
                      , err
                      , text "*** Offending Program ***"
index ef21f5c..479d8cd 100644 (file)
@@ -111,7 +111,7 @@ addTicksToBinds hsc_env mod mod_loc exports tyCons binds
      modBreaks <- mkModBreaks hsc_env mod tickCount entries
 
      when (dopt Opt_D_dump_ticked dflags) $
-         log_action dflags dflags SevDump noSrcSpan defaultDumpStyle
+         log_action dflags dflags NoReason SevDump noSrcSpan defaultDumpStyle
              (pprLHsBinds binds1)
 
      return (binds1, HpcInfo tickCount hashNo, Just modBreaks)
index 81aab36..6424472 100644 (file)
@@ -170,7 +170,7 @@ showTerm term = do
                       -- XXX: this tries to disable logging of errors
                       -- does this still do what it is intended to do
                       -- with the changed error handling and logging?
-           let noop_log _ _ _ _ _ = return ()
+           let noop_log _ _ _ _ _ = return ()
                expr = "show " ++ showPpr dflags bname
            _ <- GHC.setSessionDynFlags dflags{log_action=noop_log}
            fhv <- liftIO $ mkFinalizedHValue hsc_env =<< mkRemoteRef val
index 2b471ee..4b8a322 100644 (file)
@@ -235,7 +235,7 @@ withExtendedLinkEnv new_env action
 showLinkerState :: DynFlags -> IO ()
 showLinkerState dflags
   = do pls <- readIORef v_PersistentLinkerState >>= readMVar
-       log_action dflags dflags SevDump noSrcSpan defaultDumpStyle
+       log_action dflags dflags NoReason SevDump noSrcSpan defaultDumpStyle
                  (vcat [text "----- Linker state -----",
                         text "Pkgs:" <+> ppr (pkgs_loaded pls),
                         text "Objs:" <+> ppr (objs_loaded pls),
@@ -374,7 +374,7 @@ classifyLdInput dflags f
   | isObjectFilename platform f = return (Just (Object f))
   | isDynLibFilename platform f = return (Just (DLLPath f))
   | otherwise          = do
-        log_action dflags dflags SevInfo noSrcSpan defaultUserStyle
+        log_action dflags dflags NoReason SevInfo noSrcSpan defaultUserStyle
             (text ("Warning: ignoring unrecognised input `" ++ f ++ "'"))
         return Nothing
     where platform = targetPlatform dflags
@@ -1397,7 +1397,12 @@ maybePutStr :: DynFlags -> String -> IO ()
 maybePutStr dflags s
     = when (verbosity dflags > 1) $
           do let act = log_action dflags
-             act dflags SevInteractive noSrcSpan defaultUserStyle (text s)
+             act dflags
+                 NoReason
+                 SevInteractive
+                 noSrcSpan
+                 defaultUserStyle
+                 (text s)
 
 maybePutStrLn :: DynFlags -> String -> IO ()
 maybePutStrLn dflags s = maybePutStr dflags (s ++ "\n")
index a7246af..0b70e8c 100644 (file)
@@ -80,7 +80,14 @@ readBinIface_ :: DynFlags -> CheckHiWay -> TraceBinIFaceReading -> FilePath
 readBinIface_ dflags checkHiWay traceBinIFaceReading hi_path ncu = do
     let printer :: SDoc -> IO ()
         printer = case traceBinIFaceReading of
-                      TraceBinIFaceReading -> \sd -> log_action dflags dflags SevOutput noSrcSpan defaultDumpStyle sd
+                      TraceBinIFaceReading -> \sd ->
+                          log_action dflags
+                                     dflags
+                                     NoReason
+                                     SevOutput
+                                     noSrcSpan
+                                     defaultDumpStyle
+                                     sd
                       QuietBinIFaceReading -> \_ -> return ()
         wantedGot :: Outputable a => String -> a -> a -> IO ()
         wantedGot what wanted got =
index c044136..64d100f 100644 (file)
@@ -861,7 +861,7 @@ showIface hsc_env filename = do
    iface <- initTcRnIf 's' hsc_env () () $
        readBinIface IgnoreHiWay TraceBinIFaceReading filename
    let dflags = hsc_dflags hsc_env
-   log_action dflags dflags SevDump noSrcSpan defaultDumpStyle (pprModIface iface)
+   log_action dflags dflags NoReason SevDump noSrcSpan defaultDumpStyle (pprModIface iface)
 
 pprModIface :: ModIface -> SDoc
 -- Show a ModIface
index 00a0801..422fd4e 100644 (file)
@@ -67,7 +67,13 @@ codeOutput dflags this_mod filenm location foreign_stubs pkg_deps cmm_stream
               do_lint cmm = do
                 { showPass dflags "CmmLint"
                 ; case cmmLint dflags cmm of
-                        Just err -> do { log_action dflags dflags SevDump noSrcSpan defaultDumpStyle err
+                        Just err -> do { log_action dflags
+                                                   dflags
+                                                   NoReason
+                                                   SevDump
+                                                   noSrcSpan
+                                                   defaultDumpStyle
+                                                   err
                                        ; ghcExit dflags 1
                                        }
                         Nothing  -> return ()
index 3de94fd..c384248 100644 (file)
@@ -1594,7 +1594,7 @@ mkExtraObj dflags extn xs
 mkExtraObjToLinkIntoBinary :: DynFlags -> IO FilePath
 mkExtraObjToLinkIntoBinary dflags = do
    when (gopt Opt_NoHsMain dflags && haveRtsOptsFlags dflags) $ do
-      log_action dflags dflags SevInfo noSrcSpan defaultUserStyle
+      log_action dflags dflags NoReason SevInfo noSrcSpan defaultUserStyle
           (text "Warning: -rtsopts and -with-rtsopts have no effect with -no-hs-main." $$
            text "    Call hs_init_ghc() from your main() function to set these options.")
 
@@ -1969,7 +1969,7 @@ linkDynLibCheck :: DynFlags -> [String] -> [UnitId] -> IO ()
 linkDynLibCheck dflags o_files dep_packages
  = do
     when (haveRtsOptsFlags dflags) $ do
-      log_action dflags dflags SevInfo noSrcSpan defaultUserStyle
+      log_action dflags dflags NoReason SevInfo noSrcSpan defaultUserStyle
           (text "Warning: -rtsopts and -with-rtsopts have no effect with -shared." $$
            text "    Call hs_init_ghc() from your main() function to set these options.")
 
index 3d23a09..ebfd861 100644 (file)
@@ -21,7 +21,7 @@ module DynFlags (
         -- * Dynamic flags and associated configuration types
         DumpFlag(..),
         GeneralFlag(..),
-        WarningFlag(..),
+        WarningFlag(..), WarnReason(..),
         Language(..),
         PlatformConstants(..),
         FatalMessager, LogAction, FlushOut(..), FlushErr(..),
@@ -173,7 +173,7 @@ import FastString
 import Outputable
 import Foreign.C        ( CInt(..) )
 import System.IO.Unsafe ( unsafeDupablePerformIO )
-import {-# SOURCE #-} ErrUtils ( Severity(..), MsgDoc, mkLocMessage )
+import {-# SOURCE #-} ErrUtils ( Severity(..), MsgDoc, mkLocMessageAnn )
 
 import System.IO.Unsafe ( unsafePerformIO )
 import Data.IORef
@@ -382,6 +382,7 @@ data GeneralFlag
    | Opt_NoLlvmMangler                 -- hidden flag
 
    | Opt_WarnIsError                    -- -Werror; makes warnings fatal
+   | Opt_ShowWarnGroups                 -- Show the group a warning belongs to
 
    | Opt_PrintExplicitForalls
    | Opt_PrintExplicitKinds
@@ -533,6 +534,11 @@ data GeneralFlag
    | Opt_PackageTrust
    deriving (Eq, Show, Enum)
 
+-- | Used when outputting warnings: if a reason is given, it is
+-- displayed. If a warning isn't controlled by a flag, this is made
+-- explicit at the point of use.
+data WarnReason = NoReason | Reason !WarningFlag
+
 data WarningFlag =
 -- See Note [Updating flag description in the User's Guide]
      Opt_WarnDuplicateExports
@@ -1616,13 +1622,20 @@ interpreterDynamic dflags
 --------------------------------------------------------------------------
 
 type FatalMessager = String -> IO ()
-type LogAction = DynFlags -> Severity -> SrcSpan -> PprStyle -> MsgDoc -> IO ()
+
+type LogAction = DynFlags
+              -> WarnReason
+              -> Severity
+              -> SrcSpan
+              -> PprStyle
+              -> MsgDoc
+              -> IO ()
 
 defaultFatalMessager :: FatalMessager
 defaultFatalMessager = hPutStrLn stderr
 
 defaultLogAction :: LogAction
-defaultLogAction dflags severity srcSpan style msg
+defaultLogAction dflags reason severity srcSpan style msg
     = case severity of
       SevOutput      -> printSDoc msg style
       SevDump        -> printSDoc (msg $$ blankLine) style
@@ -1630,7 +1643,7 @@ defaultLogAction dflags severity srcSpan style msg
       SevInfo        -> printErrs msg style
       SevFatal       -> printErrs msg style
       _              -> do hPutChar stderr '\n'
-                           printErrs (mkLocMessage severity srcSpan msg) style
+                           printErrs message style
                            -- careful (#2302): printErrs prints in UTF-8,
                            -- whereas converting to string first and using
                            -- hPutStr would just emit the low 8 bits of
@@ -1638,6 +1651,19 @@ defaultLogAction dflags severity srcSpan style msg
     where printSDoc  = defaultLogActionHPrintDoc  dflags stdout
           printErrs  = defaultLogActionHPrintDoc  dflags stderr
           putStrSDoc = defaultLogActionHPutStrDoc dflags stdout
+          -- Pretty print the warning flag, if any (#10752)
+          message = mkLocMessageAnn flagMsg severity srcSpan msg
+          flagMsg = case reason of
+                        NoReason -> Nothing
+                        Reason flag -> (\spec -> "-W" ++ flagSpecName spec ++ flagGrp flag) <$>
+                                          flagSpecOf flag
+
+          flagGrp flag
+              | gopt Opt_ShowWarnGroups dflags =
+                    case smallestGroups flag of
+                        [] -> ""
+                        groups -> " (in " ++ intercalate ", " (map ("-W"++) groups) ++ ")"
+              | otherwise = ""
 
 defaultLogActionHPrintDoc :: DynFlags -> Handle -> SDoc -> PprStyle -> IO ()
 defaultLogActionHPrintDoc dflags h d sty
@@ -3145,6 +3171,12 @@ useInstead flag turn_on
 nop :: TurnOnFlag -> DynP ()
 nop _ = return ()
 
+-- | Find the 'FlagSpec' for a 'WarningFlag'.
+flagSpecOf :: WarningFlag -> Maybe (FlagSpec WarningFlag)
+flagSpecOf flag = listToMaybe $ filter check wWarningFlags
+  where
+    check fs = flagSpecFlag fs == flag
+
 -- | These @-W\<blah\>@ flags can all be reversed with @-Wno-\<blah\>@
 wWarningFlags :: [FlagSpec WarningFlag]
 wWarningFlags = map snd wWarningFlagsDeps
@@ -3344,7 +3376,8 @@ fFlagsDeps = [
   flagSpec "unbox-strict-fields"              Opt_UnboxStrictFields,
   flagSpec "vectorisation-avoidance"          Opt_VectorisationAvoidance,
   flagSpec "vectorise"                        Opt_Vectorise,
-  flagSpec "worker-wrapper"                   Opt_WorkerWrapper
+  flagSpec "worker-wrapper"                   Opt_WorkerWrapper,
+  flagSpec "show-warning-groups"              Opt_ShowWarnGroups
   ]
 
 -- | These @-f\<blah\>@ flags can all be reversed with @-fno-\<blah\>@
@@ -3584,7 +3617,8 @@ defaultFlags settings
       Opt_ProfCountEntries,
       Opt_RPath,
       Opt_SharedImplib,
-      Opt_SimplPreInlining
+      Opt_SimplPreInlining,
+      Opt_ShowWarnGroups
     ]
 
     ++ [f | (ns,f) <- optLevelFlags, 0 `elem` ns]
@@ -3757,6 +3791,51 @@ removes an assertion failure. -}
 --  * utils/mkUserGuidePart/
 --  * docs/users_guide/using-warnings.rst
 
+-- | Warning groups.
+--
+-- As all warnings are in the Weverything set, it is ignored when
+-- displaying to the user which group a warning is in.
+warningGroups :: [(String, [WarningFlag])]
+warningGroups =
+    [ ("compat",       minusWcompatOpts)
+    , ("unused-binds", unusedBindsFlags)
+    , ("default",      standardWarnings)
+    , ("extra",        minusWOpts)
+    , ("all",          minusWallOpts)
+    , ("everything",   minusWeverythingOpts)
+    ]
+
+-- | Warning group hierarchies, where there is an explicit inclusion
+-- relation.
+--
+-- Each inner list is a hierarchy of warning groups, ordered from
+-- smallest to largest, where each group is a superset of the one
+-- before it.
+--
+-- Separating this from 'warningGroups' allows for multiple
+-- hierarchies with no inherent relation to be defined.
+--
+-- The special-case Weverything group is not included.
+warningHierarchies :: [[String]]
+warningHierarchies = hierarchies ++ map (:[]) rest
+  where
+    hierarchies = [["default", "extra", "all"]]
+    rest = filter (`notElem` "everything" : concat hierarchies) $
+           map fst warningGroups
+
+-- | Find the smallest group in every hierarchy which a warning
+-- belongs to, excluding Weverything.
+smallestGroups :: WarningFlag -> [String]
+smallestGroups flag = mapMaybe go warningHierarchies where
+    -- Because each hierarchy is arranged from smallest to largest,
+    -- the first group we find in a hierarchy which contains the flag
+    -- is the smallest.
+    go (group:rest) = fromMaybe (go rest) $ do
+        flags <- lookup group warningGroups
+        guard (flag `elem` flags)
+        pure (Just group)
+    go [] = Nothing
+
 -- | Warnings enabled unless specified otherwise
 standardWarnings :: [WarningFlag]
 standardWarnings -- see Note [Documenting warning flags]
index eafe4e8..7e68302 100644 (file)
@@ -23,7 +23,7 @@ module ErrUtils (
         pprLocErrMsg, printBagOfErrors,
 
         -- ** Construction
-        emptyMessages, mkLocMessage, makeIntoWarning,
+        emptyMessages, mkLocMessage, mkLocMessageAnn, makeIntoWarning,
         mkErrMsg, mkPlainErrMsg, mkErrDoc, mkLongErrMsg, mkWarnMsg,
         mkPlainWarnMsg,
         warnIsErrorMsg, mkLongWarnMsg,
@@ -110,7 +110,8 @@ data ErrMsg = ErrMsg {
         errMsgDoc         :: ErrDoc,
         -- | This has the same text as errDocImportant . errMsgDoc.
         errMsgShortString :: String,
-        errMsgSeverity    :: Severity
+        errMsgSeverity    :: Severity,
+        errMsgReason      :: WarnReason
         }
         -- The SrcSpan is used for sorting errors into line-number order
 
@@ -160,15 +161,18 @@ pprMessageBag :: Bag MsgDoc -> SDoc
 pprMessageBag msgs = vcat (punctuate blankLine (bagToList msgs))
 
 mkLocMessage :: Severity -> SrcSpan -> MsgDoc -> MsgDoc
+mkLocMessage = mkLocMessageAnn Nothing
+
+mkLocMessageAnn :: Maybe String -> Severity -> SrcSpan -> MsgDoc -> MsgDoc
   -- Always print the location, even if it is unhelpful.  Error messages
   -- are supposed to be in a standard format, and one without a location
   -- would look strange.  Better to say explicitly "<no location info>".
-mkLocMessage severity locn msg
+mkLocMessageAnn ann severity locn msg
     = sdocWithDynFlags $ \dflags ->
       let locn' = if gopt Opt_ErrorSpans dflags
                   then ppr locn
                   else ppr (srcSpanStart locn)
-      in hang (locn' <> colon <+> sev_info) 4 msg
+      in hang (locn' <> colon <+> sev_info <> opt_ann) 4 msg
   where
     -- Add prefixes, like    Foo.hs:34: warning:
     --                           <the warning message>
@@ -178,8 +182,13 @@ mkLocMessage severity locn msg
                  SevFatal -> text "fatal:"
                  _ -> empty
 
-makeIntoWarning :: ErrMsg -> ErrMsg
-makeIntoWarning err = err { errMsgSeverity = SevWarning }
+    -- Add optional information
+    opt_ann = text $ maybe "" (\i -> " ["++i++"]") ann
+
+makeIntoWarning :: WarnReason -> ErrMsg -> ErrMsg
+makeIntoWarning reason err = err
+    { errMsgSeverity = SevWarning
+    , errMsgReason = reason }
 
 -- -----------------------------------------------------------------------------
 -- Collecting up messages for later ordering and printing.
@@ -190,7 +199,8 @@ mk_err_msg dflags sev locn print_unqual doc
           , errMsgContext = print_unqual
           , errMsgDoc = doc
           , errMsgShortString = showSDoc dflags (vcat (errDocImportant doc))
-          , errMsgSeverity = sev }
+          , errMsgSeverity = sev
+          , errMsgReason = NoReason }
 
 mkErrDoc :: DynFlags -> SrcSpan -> PrintUnqualified -> ErrDoc -> ErrMsg
 mkErrDoc dflags = mk_err_msg dflags SevError
@@ -226,10 +236,11 @@ errorsFound _dflags (_warns, errs) = not (isEmptyBag errs)
 printBagOfErrors :: DynFlags -> Bag ErrMsg -> IO ()
 printBagOfErrors dflags bag_of_errors
   = sequence_ [ let style = mkErrStyle dflags unqual
-                in log_action dflags dflags sev s style (formatErrDoc dflags doc)
+                in log_action dflags dflags reason sev s style (formatErrDoc dflags doc)
               | ErrMsg { errMsgSpan      = s,
                          errMsgDoc       = doc,
                          errMsgSeverity  = sev,
+                         errMsgReason    = reason,
                          errMsgContext   = unqual } <- sortMsgBag (Just dflags)
                                                                   bag_of_errors ]
 
@@ -283,7 +294,13 @@ doIfSet_dyn dflags flag action | gopt flag dflags = action
 dumpIfSet :: DynFlags -> Bool -> String -> SDoc -> IO ()
 dumpIfSet dflags flag hdr doc
   | not flag   = return ()
-  | otherwise  = log_action dflags dflags SevDump noSrcSpan defaultDumpStyle (mkDumpDoc hdr doc)
+  | otherwise  = log_action dflags
+                            dflags
+                            NoReason
+                            SevDump
+                            noSrcSpan
+                            defaultDumpStyle
+                            (mkDumpDoc hdr doc)
 
 -- | a wrapper around 'dumpSDoc'.
 -- First check whether the dump flag is set
@@ -359,7 +376,7 @@ dumpSDoc dflags print_unqual flag hdr doc
               let (doc', severity)
                     | null hdr  = (doc, SevOutput)
                     | otherwise = (mkDumpDoc hdr doc, SevDump)
-              log_action dflags dflags severity noSrcSpan dump_style doc'
+              log_action dflags dflags NoReason severity noSrcSpan dump_style doc'
 
 
 -- | Choose where to put a dump file based on DynFlags
@@ -416,18 +433,18 @@ ifVerbose dflags val act
 
 errorMsg :: DynFlags -> MsgDoc -> IO ()
 errorMsg dflags msg
-   = log_action dflags dflags SevError noSrcSpan (defaultErrStyle dflags) msg
+   = log_action dflags dflags NoReason SevError noSrcSpan (defaultErrStyle dflags) msg
 
 warningMsg :: DynFlags -> MsgDoc -> IO ()
 warningMsg dflags msg
-   = log_action dflags dflags SevWarning noSrcSpan (defaultErrStyle dflags) msg
+   = log_action dflags dflags NoReason SevWarning noSrcSpan (defaultErrStyle dflags) msg
 
 fatalErrorMsg :: DynFlags -> MsgDoc -> IO ()
 fatalErrorMsg dflags msg = fatalErrorMsg' (log_action dflags) dflags msg
 
 fatalErrorMsg' :: LogAction -> DynFlags -> MsgDoc -> IO ()
 fatalErrorMsg' la dflags msg =
-    la dflags SevFatal noSrcSpan (defaultErrStyle dflags) msg
+    la dflags NoReason SevFatal noSrcSpan (defaultErrStyle dflags) msg
 
 fatalErrorMsg'' :: FatalMessager -> String -> IO ()
 fatalErrorMsg'' fm msg = fm msg
@@ -458,11 +475,13 @@ printOutputForUser dflags print_unqual msg
   = logOutput dflags (mkUserStyle print_unqual AllTheWay) msg
 
 logInfo :: DynFlags -> PprStyle -> MsgDoc -> IO ()
-logInfo dflags sty msg = log_action dflags dflags SevInfo noSrcSpan sty msg
+logInfo dflags sty msg
+  = log_action dflags dflags NoReason SevInfo noSrcSpan sty msg
 
 logOutput :: DynFlags -> PprStyle -> MsgDoc -> IO ()
 -- ^ Like 'logInfo' but with 'SevOutput' rather then 'SevInfo'
-logOutput dflags sty msg = log_action dflags dflags SevOutput noSrcSpan sty msg
+logOutput dflags sty msg
+  = log_action dflags dflags NoReason SevOutput noSrcSpan sty msg
 
 prettyPrintGhcErrors :: ExceptionMonad m => DynFlags -> m a -> m a
 prettyPrintGhcErrors dflags
index 31edcc0..b991ec4 100644 (file)
@@ -16,3 +16,4 @@ data Severity
 type MsgDoc = SDoc
 
 mkLocMessage :: Severity -> SrcSpan -> MsgDoc -> MsgDoc
+mkLocMessageAnn :: Maybe String -> Severity -> SrcSpan -> MsgDoc -> MsgDoc
index 7bbe4be..1729a5b 100644 (file)
@@ -678,7 +678,7 @@ checkStability hpt sccs all_home_mods = foldl checkSCC ([],[]) sccs
 -- | Each module is given a unique 'LogQueue' to redirect compilation messages
 -- to. A 'Nothing' value contains the result of compilation, and denotes the
 -- end of the message queue.
-data LogQueue = LogQueue !(IORef [Maybe (Severity, SrcSpan, PprStyle, MsgDoc)])
+data LogQueue = LogQueue !(IORef [Maybe (WarnReason, Severity, SrcSpan, PprStyle, MsgDoc)])
                          !(MVar ())
 
 -- | The graph of modules to compile and their corresponding result 'MVar' and
@@ -879,7 +879,7 @@ parUpsweep n_jobs old_hpt stable_mods cleanup sccs = do
             return (success_flag,ok_results)
 
   where
-    writeLogQueue :: LogQueue -> Maybe (Severity,SrcSpan,PprStyle,MsgDoc) -> IO ()
+    writeLogQueue :: LogQueue -> Maybe (WarnReason,Severity,SrcSpan,PprStyle,MsgDoc) -> IO ()
     writeLogQueue (LogQueue ref sem) msg = do
         atomicModifyIORef' ref $ \msgs -> (msg:msgs,())
         _ <- tryPutMVar sem ()
@@ -888,8 +888,8 @@ parUpsweep n_jobs old_hpt stable_mods cleanup sccs = do
     -- The log_action callback that is used to synchronize messages from a
     -- worker thread.
     parLogAction :: LogQueue -> LogAction
-    parLogAction log_queue _dflags !severity !srcSpan !style !msg = do
-        writeLogQueue log_queue (Just (severity,srcSpan,style,msg))
+    parLogAction log_queue _dflags !reason !severity !srcSpan !style !msg = do
+        writeLogQueue log_queue (Just (reason,severity,srcSpan,style,msg))
 
     -- Print each message from the log_queue using the log_action from the
     -- session's DynFlags.
@@ -902,8 +902,8 @@ parUpsweep n_jobs old_hpt stable_mods cleanup sccs = do
 
             print_loop [] = read_msgs
             print_loop (x:xs) = case x of
-                Just (severity,srcSpan,style,msg) -> do
-                    log_action dflags dflags severity srcSpan style msg
+                Just (reason,severity,srcSpan,style,msg) -> do
+                    log_action dflags dflags reason severity srcSpan style msg
                     print_loop xs
                 -- Exit the loop once we encounter the end marker.
                 Nothing -> return ()
index c3436ed..930ba9e 100644 (file)
@@ -1367,10 +1367,10 @@ builderMainLoop dflags filter_fn pgm real_args mb_env = do
               msg <- readChan chan
               case msg of
                 BuildMsg msg -> do
-                  log_action dflags dflags SevInfo noSrcSpan defaultUserStyle msg
+                  log_action dflags dflags NoReason SevInfo noSrcSpan defaultUserStyle msg
                   loop chan hProcess t p exitcode
                 BuildError loc msg -> do
-                  log_action dflags dflags SevError (mkSrcSpan loc loc) defaultUserStyle msg
+                  log_action dflags dflags NoReason SevError (mkSrcSpan loc loc) defaultUserStyle msg
                   loop chan hProcess t p exitcode
                 EOF ->
                   loop chan hProcess (t-1) p exitcode
index df31fda..5bbbdb5 100644 (file)
@@ -390,7 +390,7 @@ tidyProgram hsc_env  (ModGuts { mg_module    = mod
           -- Print one-line size info
         ; let cs = coreBindsStats tidy_binds
         ; when (dopt Opt_D_dump_core_stats dflags)
-               (log_action dflags dflags SevDump noSrcSpan defaultDumpStyle
+               (log_action dflags dflags NoReason SevDump noSrcSpan defaultDumpStyle
                           (text "Tidy size (terms,types,coercions)"
                            <+> ppr (moduleName mod) <> colon
                            <+> int (cs_tm cs)
index 33a1cb4..2f7e808 100644 (file)
@@ -462,7 +462,7 @@ rnBind _ bind@(PatBind { pat_lhs = pat
         --           or an occurrence of, a variable on the RHS
         ; whenWOptM Opt_WarnUnusedPatternBinds $
           when (null bndrs && not is_wild_pat) $
-          addWarn $ unusedPatBindWarn bind'
+          addWarn (Reason Opt_WarnUnusedPatternBinds) $ unusedPatBindWarn bind'
 
         ; fvs' `seq` -- See Note [Free-variable space leak]
           return (bind', bndrs, all_fvs) }
@@ -1104,7 +1104,7 @@ rnGRHS' ctxt rnBody (GRHS guards rhs)
                                     rnBody rhs
 
         ; unless (pattern_guards_allowed || is_standard_guard guards')
-                 (addWarn (nonStdGuardErr guards'))
+                 (addWarn NoReason (nonStdGuardErr guards'))
 
         ; return (GRHS guards' rhs', fvs) }
   where
index 5d74d7c..0ecd85e 100644 (file)
@@ -743,7 +743,8 @@ lookup_demoted rdr_name dflags
            Just demoted_name
              | data_kinds ->
              do { whenWOptM Opt_WarnUntickedPromotedConstructors $
-                  addWarn (untickedPromConstrWarn demoted_name)
+                  addWarn (Reason Opt_WarnUntickedPromotedConstructors)
+                          (untickedPromConstrWarn demoted_name)
                 ; return demoted_name }
              | otherwise  -> unboundNameX WL_Any rdr_name suggest_dk }
 
@@ -1068,7 +1069,8 @@ warnIfDeprecated gre@(GRE { gre_name = name, gre_imp = iss })
                    -- See Note [Handling of deprecations]
          do { iface <- loadInterfaceForName doc name
             ; case lookupImpDeprec iface gre of
-                Just txt -> addWarn (mk_msg imp_spec txt)
+                Just txt -> addWarn (Reason Opt_WarnWarningsDeprecations)
+                                   (mk_msg imp_spec txt)
                 Nothing  -> return () } }
   | otherwise
   = return ()
@@ -1738,7 +1740,9 @@ checkShadowedOccs (global_env,local_env) get_loc_occ ns
                 -- we don't find any GREs that are in scope qualified-only
 
           complain []      = return ()
-          complain pp_locs = addWarnAt loc (shadowedNameWarn occ pp_locs)
+          complain pp_locs = addWarnAt (Reason Opt_WarnNameShadowing)
+                                       loc
+                                       (shadowedNameWarn occ pp_locs)
 
     is_shadowed_gre :: GlobalRdrElt -> RnM Bool
         -- Returns False for record selectors that are shadowed, when
@@ -2118,7 +2122,8 @@ warnUnusedLocals names = do
 warnUnusedLocal :: NameEnv (FieldLabelString, Name) -> Name -> RnM ()
 warnUnusedLocal fld_env name
   = when (reportable name) $
-    addUnusedWarning occ (nameSrcSpan name)
+    addUnusedWarning Opt_WarnUnusedLocalBinds
+                     occ (nameSrcSpan name)
                      (text "Defined but not used")
   where
     occ = case lookupNameEnv fld_env name of
@@ -2132,7 +2137,7 @@ warnUnusedGRE gre@(GRE { gre_name = name, gre_lcl = lcl, gre_imp = is })
   | otherwise = when (reportable name) (mapM_ warn is)
   where
     occ = greOccName gre
-    warn spec = addUnusedWarning occ span msg
+    warn spec = addUnusedWarning Opt_WarnUnusedTopBinds occ span msg
         where
            span = importSpecLoc spec
            pp_mod = quotes (ppr (importSpecModule spec))
@@ -2154,9 +2159,9 @@ reportable name
                                   -- from Data.Tuple
   | otherwise = not (startsWithUnderscore (nameOccName name))
 
-addUnusedWarning :: OccName -> SrcSpan -> SDoc -> RnM ()
-addUnusedWarning occ span msg
-  = addWarnAt span $
+addUnusedWarning :: WarningFlag -> OccName -> SrcSpan -> SDoc -> RnM ()
+addUnusedWarning flag occ span msg
+  = addWarnAt (Reason flag) span $
     sep [msg <> colon,
          nest 2 $ pprNonVarNameSpace (occNameSpace occ)
                         <+> quotes (ppr occ)]
index 75191ad..70f76b9 100644 (file)
@@ -236,7 +236,8 @@ rnImportDecl this_mod
         _  | implicit   -> return () -- Do not bleat for implicit imports
            | qual_only  -> return ()
            | otherwise  -> whenWOptM Opt_WarnMissingImportList $
-                           addWarn (missingImportListWarn imp_mod_name)
+                           addWarn (Reason Opt_WarnMissingImportList)
+                                   (missingImportListWarn imp_mod_name)
 
     iface <- loadSrcInterface doc imp_mod_name want_boot (fmap sl_fs mb_pkg)
 
@@ -253,7 +254,8 @@ rnImportDecl this_mod
     -- the non-boot module depends on the compilation order, which
     -- is not deterministic.  The hs-boot test can show this up.
     dflags <- getDynFlags
-    warnIf (want_boot && not (mi_boot iface) && isOneShot (ghcMode dflags))
+    warnIf NoReason
+           (want_boot && not (mi_boot iface) && isOneShot (ghcMode dflags))
            (warnRedundantSourceImport imp_mod_name)
     when (mod_safe && not (safeImportsOn dflags)) $
         addErr (text "safe import can't be used as Safe Haskell isn't on!"
@@ -297,7 +299,8 @@ rnImportDecl this_mod
     -- Complain if we import a deprecated module
     whenWOptM Opt_WarnWarningsDeprecations (
        case (mi_warns iface) of
-          WarnAll txt -> addWarn $ moduleWarn imp_mod_name txt
+          WarnAll txt -> addWarn (Reason Opt_WarnWarningsDeprecations)
+                                (moduleWarn imp_mod_name txt)
           _           -> return ()
      )
 
@@ -814,11 +817,11 @@ filterImports iface decl_spec (Just (want_hiding, L l import_items))
         where
             -- Warn when importing T(..) if T was exported abstractly
             emit_warning (DodgyImport n) = whenWOptM Opt_WarnDodgyImports $
-              addWarn (dodgyImportWarn n)
+              addWarn (Reason Opt_WarnDodgyImports) (dodgyImportWarn n)
             emit_warning MissingImportList = whenWOptM Opt_WarnMissingImportList $
-              addWarn (missingImportListItem ieRdr)
+              addWarn (Reason Opt_WarnMissingImportList) (missingImportListItem ieRdr)
             emit_warning BadImportW = whenWOptM Opt_WarnDodgyImports $
-              addWarn (lookup_err_msg BadImport)
+              addWarn (Reason Opt_WarnDodgyImports) (lookup_err_msg BadImport)
 
             run_lookup :: IELookupM a -> TcRn (Maybe a)
             run_lookup m = case m of
@@ -1262,7 +1265,8 @@ exports_from_avail (Just (L _ rdr_items)) rdr_env imports this_mod
                              | (L _ (IEModuleContents (L _ mod))) <- ie_names ]
         , mod `elem` earlier_mods    -- Duplicate export of M
         = do { warn_dup_exports <- woptM Opt_WarnDuplicateExports ;
-               warnIf warn_dup_exports (dupModuleExport mod) ;
+               warnIf (Reason Opt_WarnDuplicateExports) warn_dup_exports
+                      (dupModuleExport mod) ;
                return acc }
 
         | otherwise
@@ -1276,7 +1280,8 @@ exports_from_avail (Just (L _ rdr_items)) rdr_env imports this_mod
                }
 
              ; checkErr exportValid (moduleNotImported mod)
-             ; warnIf (warnDodgyExports && exportValid && null gre_prs)
+             ; warnIf (Reason Opt_WarnDodgyExports)
+                      (warnDodgyExports && exportValid && null gre_prs)
                       (nullModuleExport mod)
 
              ; traceRn (text "efa" <+> (ppr mod $$ ppr all_gres))
@@ -1373,7 +1378,9 @@ exports_from_avail (Just (L _ rdr_items)) rdr_env imports this_mod
              warnDodgyExports <- woptM Opt_WarnDodgyExports
              when (null gres) $
                   if isTyConName name
-                  then when warnDodgyExports $ addWarn (dodgyExportWarn name)
+                  then when warnDodgyExports $
+                           addWarn (Reason Opt_WarnDodgyExports)
+                                   (dodgyExportWarn name)
                   else -- This occurs when you export T(..), but
                        -- only import T abstractly, or T is a synonym.
                        addErr (exportItemErr ie)
@@ -1416,7 +1423,8 @@ check_occs ie occs names  -- 'names' are the entities specifed by 'ie'
             -- by two different module exports. See ticket #4478.
             -> do unless (dupExport_ok name ie ie') $ do
                       warn_dup_exports <- woptM Opt_WarnDuplicateExports
-                      warnIf warn_dup_exports (dupExportWarn name_occ ie ie')
+                      warnIf (Reason Opt_WarnDuplicateExports) warn_dup_exports
+                             (dupExportWarn name_occ ie ie')
                   return occs
 
             | otherwise    -- Same occ name but different names: an error
@@ -1550,7 +1558,7 @@ warnUnusedImportDecls gbl_env
        ; traceRn (vcat [ text "Uses:" <+> ppr uses
                        , text "Import usage" <+> ppr usage])
        ; whenWOptM Opt_WarnUnusedImports $
-         mapM_ (warnUnusedImport fld_env) usage
+         mapM_ (warnUnusedImport Opt_WarnUnusedImports fld_env) usage
 
        ; whenGOptM Opt_D_dump_minimal_imports $
          printMinimalImports usage }
@@ -1570,9 +1578,15 @@ warnMissingSignatures gbl_env
        ; warn_pat_syns      <- woptM Opt_WarnMissingPatternSynonymSignatures
 
        ; let sig_warn
-               | warn_only_exported = topSigWarnIfExported exports sig_ns
-               | warn_missing_sigs || warn_pat_syns = topSigWarn sig_ns
-               | otherwise          = noSigWarn
+               | warn_only_exported
+                   = topSigWarnIfExported Opt_WarnMissingExportedSignatures
+                                          exports sig_ns
+               | warn_missing_sigs
+                   = topSigWarn Opt_WarnMissingSignatures sig_ns
+               | warn_pat_syns
+                   = topSigWarn Opt_WarnMissingPatternSynonymSignatures sig_ns
+               | otherwise
+                   = noSigWarn
 
 
        ; let binders = (if warn_pat_syns then ps_binders else [])
@@ -1591,35 +1605,36 @@ type SigWarn = [(Type, Name)] -> RnM ()
 noSigWarn :: SigWarn
 noSigWarn _ = return ()
 
-topSigWarnIfExported :: NameSet -> NameSet -> SigWarn
-topSigWarnIfExported exported sig_ns ids
-  = mapM_ (topSigWarnIdIfExported exported sig_ns) ids
+topSigWarnIfExported :: WarningFlag -> NameSet -> NameSet -> SigWarn
+topSigWarnIfExported flag exported sig_ns ids
+  = mapM_ (topSigWarnIdIfExported flag exported sig_ns) ids
 
-topSigWarnIdIfExported :: NameSet -> NameSet -> (Type, Name) -> RnM ()
-topSigWarnIdIfExported exported sig_ns (ty, name)
+topSigWarnIdIfExported :: WarningFlag -> NameSet -> NameSet -> (Type, Name)
+                       -> RnM ()
+topSigWarnIdIfExported flag exported sig_ns (ty, name)
   | name `elemNameSet` exported
-  = topSigWarnId sig_ns (ty, name)
+  = topSigWarnId flag sig_ns (ty, name)
   | otherwise
   = return ()
 
-topSigWarn :: NameSet -> SigWarn
-topSigWarn sig_ns ids = mapM_ (topSigWarnId sig_ns) ids
+topSigWarn :: WarningFlag -> NameSet -> SigWarn
+topSigWarn flag sig_ns ids = mapM_ (topSigWarnId flag sig_ns) ids
 
-topSigWarnId :: NameSet -> (Type, Name) -> RnM ()
+topSigWarnId :: WarningFlag -> NameSet -> (Type, Name) -> RnM ()
 -- The NameSet is the Ids that *lack* a signature
 -- We have to do it this way round because there are
 -- lots of top-level bindings that are generated by GHC
 -- and that don't have signatures
-topSigWarnId sig_ns (ty, name)
-  | name `elemNameSet` sig_ns      = warnMissingSig msg (ty, name)
+topSigWarnId flag sig_ns (ty, name)
+  | name `elemNameSet` sig_ns      = warnMissingSig flag msg (ty, name)
   | otherwise                      = return ()
   where
     msg = text "Top-level binding with no type signature:"
 
-warnMissingSig :: SDoc -> (Type, Name) -> RnM ()
-warnMissingSig msg (ty, name) = do
+warnMissingSig :: WarningFlag -> SDoc -> (Type, Name) -> RnM ()
+warnMissingSig flag msg (ty, name) = do
     tymsg <- getMsg ty
-    addWarnAt (getSrcSpan name) (mk_msg tymsg)
+    addWarnAt (Reason flag) (getSrcSpan name) (mk_msg tymsg)
   where
     mk_msg endmsg = sep [ msg, nest 2 $ pprPrefixName name <+> endmsg ]
 
@@ -1723,9 +1738,9 @@ extendImportMap gre imp_map
                    -- For srcSpanEnd see Note [The ImportMap]
         avail    = availFromGRE gre
 
-warnUnusedImport :: NameEnv (FieldLabelString, Name) -> ImportDeclUsage
-                 -> RnM ()
-warnUnusedImport fld_env (L loc decl, used, unused)
+warnUnusedImport :: WarningFlag -> NameEnv (FieldLabelString, Name)
+                 -> ImportDeclUsage -> RnM ()
+warnUnusedImport flag fld_env (L loc decl, used, unused)
   | Just (False,L _ []) <- ideclHiding decl
                 = return ()            -- Do not warn for 'import M()'
 
@@ -1733,9 +1748,9 @@ warnUnusedImport fld_env (L loc decl, used, unused)
   , not (null hides)
   , pRELUDE_NAME == unLoc (ideclName decl)
                 = return ()            -- Note [Do not warn about Prelude hiding]
-  | null used   = addWarnAt loc msg1   -- Nothing used; drop entire decl
+  | null used   = addWarnAt (Reason flag) loc msg1 -- Nothing used; drop entire decl
   | null unused = return ()            -- Everything imported is used; nop
-  | otherwise   = addWarnAt loc msg2   -- Some imports are unused
+  | otherwise   = addWarnAt (Reason flag) loc msg2 -- Some imports are unused
   where
     msg1 = vcat [pp_herald <+> quotes pp_mod <+> pp_not_used,
                  nest 2 (text "except perhaps to import instances from"
index 4f65509..f3851ba 100644 (file)
@@ -500,10 +500,12 @@ checkCanonicalInstances cls poly_ty mbinds = do
               case mbind of
                   FunBind { fun_id = L _ name, fun_matches = mg }
                       | name == pureAName, isAliasMG mg == Just returnMName
-                      -> addWarnNonCanonicalMethod1 "pure" "return"
+                      -> addWarnNonCanonicalMethod1
+                            Opt_WarnNonCanonicalMonadInstances "pure" "return"
 
                       | name == thenAName, isAliasMG mg == Just thenMName
-                      -> addWarnNonCanonicalMethod1 "(*>)" "(>>)"
+                      -> addWarnNonCanonicalMethod1
+                            Opt_WarnNonCanonicalMonadInstances "(*>)" "(>>)"
 
                   _ -> return ()
 
@@ -512,10 +514,12 @@ checkCanonicalInstances cls poly_ty mbinds = do
               case mbind of
                   FunBind { fun_id = L _ name, fun_matches = mg }
                       | name == returnMName, isAliasMG mg /= Just pureAName
-                      -> addWarnNonCanonicalMethod2 "return" "pure"
+                      -> addWarnNonCanonicalMethod2
+                            Opt_WarnNonCanonicalMonadInstances "return" "pure"
 
                       | name == thenMName, isAliasMG mg /= Just thenAName
-                      -> addWarnNonCanonicalMethod2 "(>>)" "(*>)"
+                      -> addWarnNonCanonicalMethod2
+                            Opt_WarnNonCanonicalMonadInstances "(>>)" "(*>)"
 
                   _ -> return ()
 
@@ -540,7 +544,9 @@ checkCanonicalInstances cls poly_ty mbinds = do
               case mbind of
                   FunBind { fun_id = L _ name, fun_matches = mg }
                       | name == failMName, isAliasMG mg == Just failMName_preMFP
-                      -> addWarnNonCanonicalMethod1 "fail" "Control.Monad.fail"
+                      -> addWarnNonCanonicalMethod1
+                            Opt_WarnNonCanonicalMonadFailInstances "fail"
+                            "Control.Monad.fail"
 
                   _ -> return ()
 
@@ -549,8 +555,9 @@ checkCanonicalInstances cls poly_ty mbinds = do
               case mbind of
                   FunBind { fun_id = L _ name, fun_matches = mg }
                       | name == failMName_preMFP, isAliasMG mg /= Just failMName
-                      -> addWarnNonCanonicalMethod2 "fail"
-                                                    "Control.Monad.Fail.fail"
+                      -> addWarnNonCanonicalMethod2
+                            Opt_WarnNonCanonicalMonadFailInstances "fail"
+                            "Control.Monad.Fail.fail"
                   _ -> return ()
 
       | otherwise = return ()
@@ -574,7 +581,8 @@ checkCanonicalInstances cls poly_ty mbinds = do
               case mbind of
                   FunBind { fun_id = L _ name, fun_matches = mg }
                       | name == sappendName, isAliasMG mg == Just mappendName
-                      -> addWarnNonCanonicalMethod1 "(<>)" "mappend"
+                      -> addWarnNonCanonicalMethod1
+                            Opt_WarnNonCanonicalMonoidInstances "(<>)" "mappend"
 
                   _ -> return ()
 
@@ -583,7 +591,8 @@ checkCanonicalInstances cls poly_ty mbinds = do
               case mbind of
                   FunBind { fun_id = L _ name, fun_matches = mg }
                       | name == mappendName, isAliasMG mg /= Just sappendName
-                      -> addWarnNonCanonicalMethod2NoDefault "mappend" "(<>)"
+                      -> addWarnNonCanonicalMethod2NoDefault
+                            Opt_WarnNonCanonicalMonoidInstances "mappend" "(<>)"
 
                   _ -> return ()
 
@@ -599,8 +608,9 @@ checkCanonicalInstances cls poly_ty mbinds = do
     isAliasMG _ = Nothing
 
     -- got "lhs = rhs" but expected something different
-    addWarnNonCanonicalMethod1 lhs rhs = do
-        addWarn $ vcat [ text "Noncanonical" <+>
+    addWarnNonCanonicalMethod1 flag lhs rhs = do
+        addWarn (Reason flag) $ vcat
+                       [ text "Noncanonical" <+>
                          quotes (text (lhs ++ " = " ++ rhs)) <+>
                          text "definition detected"
                        , instDeclCtxt1 poly_ty
@@ -610,8 +620,9 @@ checkCanonicalInstances cls poly_ty mbinds = do
                        ]
 
     -- expected "lhs = rhs" but got something else
-    addWarnNonCanonicalMethod2 lhs rhs = do
-        addWarn $ vcat [ text "Noncanonical" <+>
+    addWarnNonCanonicalMethod2 flag lhs rhs = do
+        addWarn (Reason flag) $ vcat
+                       [ text "Noncanonical" <+>
                          quotes (text lhs) <+>
                          text "definition detected"
                        , instDeclCtxt1 poly_ty
@@ -621,8 +632,9 @@ checkCanonicalInstances cls poly_ty mbinds = do
                        ]
 
     -- like above, but method has no default impl
-    addWarnNonCanonicalMethod2NoDefault lhs rhs = do
-        addWarn $ vcat [ text "Noncanonical" <+>
+    addWarnNonCanonicalMethod2NoDefault flag lhs rhs = do
+        addWarn (Reason flag) $ vcat
+                       [ text "Noncanonical" <+>
                          quotes (text lhs) <+>
                          text "definition detected"
                        , instDeclCtxt1 poly_ty
index 118a32b..7e82ddc 100644 (file)
@@ -1409,7 +1409,7 @@ warnUnusedForAll :: SDoc -> LHsTyVarBndr Name -> FreeVars -> TcM ()
 warnUnusedForAll in_doc (L loc tv) used_names
   = whenWOptM Opt_WarnUnusedForalls $
     unless (hsTyVarName tv `elemNameSet` used_names) $
-    addWarnAt loc $
+    addWarnAt (Reason Opt_WarnUnusedForalls) loc $
     vcat [ text "Unused quantified type variable" <+> quotes (ppr tv)
          , in_doc ]
 
index 13a7512..de22e65 100644 (file)
@@ -825,7 +825,7 @@ msg sev doc
              user_sty = mkUserStyle unqual AllTheWay
              dump_sty = mkDumpStyle unqual
        ; liftIO $
-         (log_action dflags) dflags sev loc sty doc }
+         (log_action dflags) dflags NoReason sev loc sty doc }
 
 -- | Output a String message to the screen
 putMsgS :: String -> CoreM ()
index 6badbf8..1e7020e 100644 (file)
@@ -428,7 +428,8 @@ ruleCheckPass current_phase pat guts = do
     dflags <- getDynFlags
     vis_orphs <- getVisibleOrphanMods
     liftIO $ Err.showPass dflags "RuleCheck"
-    liftIO $ log_action dflags dflags Err.SevDump noSrcSpan defaultDumpStyle
+    liftIO $ log_action dflags dflags NoReason Err.SevDump noSrcSpan
+                 defaultDumpStyle
                  (ruleCheckProgram current_phase pat
                     (RuleEnv rb vis_orphs) (mg_binds guts))
     return guts
index b8491fc..3b63688 100644 (file)
@@ -37,7 +37,7 @@ stg2stg dflags module_name binds
         ; us <- mkSplitUniqSupply 'g'
 
         ; when (dopt Opt_D_verbose_stg2stg dflags)
-               (log_action dflags dflags SevDump noSrcSpan defaultDumpStyle (text "VERBOSE STG-TO-STG:"))
+               (log_action dflags dflags NoReason SevDump noSrcSpan defaultDumpStyle (text "VERBOSE STG-TO-STG:"))
 
         ; (binds', us', ccs) <- end_pass us "Stg2Stg" ([],[],[]) binds
 
index 498687e..ab9a4e2 100644 (file)
@@ -639,7 +639,9 @@ newClsInst overlap_mode dfun_name tvs theta clas tys
        ; oflag <- getOverlapFlag overlap_mode
        ; let inst = mkLocalInstance dfun oflag tvs' clas tys'
        ; dflags <- getDynFlags
-       ; warnIf (isOrphan (is_orphan inst) && wopt Opt_WarnOrphans dflags) (instOrphWarn inst)
+       ; warnIf (Reason Opt_WarnOrphans)
+             (isOrphan (is_orphan inst) && wopt Opt_WarnOrphans dflags)
+             (instOrphWarn inst)
        ; return inst }
 
 instOrphWarn :: ClsInst -> SDoc
index b80d5bd..00dac01 100644 (file)
@@ -14,6 +14,8 @@ import {-# SOURCE #-} TcSplice ( runAnnotation )
 import Module
 import DynFlags
 import Control.Monad ( when )
+#else
+import DynFlags ( WarnReason(NoReason) )
 #endif
 
 import HsSyn
@@ -29,7 +31,7 @@ tcAnnotations :: [LAnnDecl Name] -> TcM [Annotation]
 -- No GHCI; emit a warning (not an error) and ignore. cf Trac #4268
 tcAnnotations [] = return []
 tcAnnotations anns@(L loc _ : _)
-  = do { setSrcSpan loc $ addWarnTc $
+  = do { setSrcSpan loc $ addWarnTc NoReason $
              (text "Ignoring ANN annotation" <> plural anns <> comma
              <+> text "because this is a stage-1 compiler or doesn't support GHCi")
        ; return [] }
index 58f3761..3d5a401 100644 (file)
@@ -707,7 +707,8 @@ mkExport prag_fn qtvs theta
                        tcSubType_NC sig_ctxt sel_poly_ty (mkCheckExpType poly_ty)
 
         ; warn_missing_sigs <- woptM Opt_WarnMissingLocalSignatures
-        ; when warn_missing_sigs $ localSigWarn poly_id mb_sig
+        ; when warn_missing_sigs $
+              localSigWarn Opt_WarnMissingLocalSignatures poly_id mb_sig
 
         ; return (ABE { abe_wrap = wrap
                         -- abe_wrap :: idType poly_id ~ (forall qtvs. theta => mono_ty)
@@ -797,7 +798,8 @@ chooseInferredQuantifiers inferred_theta tau_tvs qtvs
                  , ppr annotated_theta, ppr inferred_theta
                  , ppr inferred_diff ]
        ; case partial_sigs of
-           True | warn_partial_sigs -> reportWarning msg
+           True | warn_partial_sigs ->
+                      reportWarning (Reason Opt_WarnPartialTypeSignatures) msg
                 | otherwise         -> return ()
            False                    -> reportError msg
 
@@ -851,19 +853,19 @@ mk_inf_msg poly_name poly_ty tidy_env
 
 
 -- | Warn the user about polymorphic local binders that lack type signatures.
-localSigWarn :: Id -> Maybe TcIdSigInfo -> TcM ()
-localSigWarn id mb_sig
+localSigWarn :: WarningFlag -> Id -> Maybe TcIdSigInfo -> TcM ()
+localSigWarn flag id mb_sig
   | Just _ <- mb_sig               = return ()
   | not (isSigmaTy (idType id))    = return ()
-  | otherwise                      = warnMissingSignatures msg id
+  | otherwise                      = warnMissingSignatures flag msg id
   where
     msg = text "Polymorphic local binding with no type signature:"
 
-warnMissingSignatures :: SDoc -> Id -> TcM ()
-warnMissingSignatures msg id
+warnMissingSignatures :: WarningFlag -> SDoc -> Id -> TcM ()
+warnMissingSignatures flag msg id
   = do  { env0 <- tcInitTidyEnv
         ; let (env1, tidy_ty) = tidyOpenType env0 (idType id)
-        ; addWarnTcM (env1, mk_msg tidy_ty) }
+        ; addWarnTcM (Reason flag) (env1, mk_msg tidy_ty) }
   where
     mk_msg ty = sep [ msg, nest 2 $ pprPrefixName (idName id) <+> dcolon <+> ppr ty ]
 
@@ -1126,7 +1128,8 @@ tcSpecPrags poly_id prag_sigs
     is_bad_sig s = not (isSpecLSig s || isInlineLSig s)
 
     warn_discarded_sigs
-      = addWarnTc (hang (text "Discarding unexpected pragmas for" <+> ppr poly_id)
+      = addWarnTc NoReason
+                  (hang (text "Discarding unexpected pragmas for" <+> ppr poly_id)
                       2 (vcat (map (ppr . getLoc) bad_sigs)))
 
 --------------
@@ -1140,7 +1143,7 @@ tcSpecPrag poly_id prag@(SpecSig fun_name hs_tys inl)
 -- However we want to use fun_name in the error message, since that is
 -- what the user wrote (Trac #8537)
   = addErrCtxt (spec_ctxt prag) $
-    do  { warnIf (not (isOverloadedTy poly_ty || isInlinePragma inl))
+    do  { warnIf NoReason (not (isOverloadedTy poly_ty || isInlinePragma inl))
                  (text "SPECIALISE pragma for non-overloaded function"
                   <+> quotes (ppr fun_name))
                   -- Note [SPECIALISE pragmas]
@@ -1206,7 +1209,7 @@ tcImpSpec :: (Name, Sig Name) -> TcM [TcSpecPrag]
 tcImpSpec (name, prag)
  = do { id <- tcLookupId name
       ; unless (isAnyInlinePragma (idInlinePragma id))
-               (addWarnTc (impSpecErr name))
+               (addWarnTc NoReason (impSpecErr name))
       ; tcSpecPrag id prag }
 
 impSpecErr :: Name -> SDoc
index b1baabb..602ef64 100644 (file)
@@ -210,7 +210,8 @@ tcDefMeth clas tyvars this_dict binds_in hs_sig_fn prag_fn
 
        ; spec_prags <- discardConstraints $
                        tcSpecPrags global_dm_id prags
-       ; warnTc (not (null spec_prags))
+       ; warnTc NoReason
+                (not (null spec_prags))
                 (text "Ignoring SPECIALISE pragmas on default method"
                  <+> quotes (ppr sel_name))
 
@@ -280,7 +281,7 @@ tcClassMinimalDef _clas sigs op_info
         -- class ops without default methods are required, since we
         -- have no way to fill them in otherwise
         whenIsJust (isUnsatisfied (mindef `impliesAtom`) defMindef) $
-                   (\bf -> addWarnTc (warningMinimalDefIncomplete bf))
+                   (\bf -> addWarnTc NoReason (warningMinimalDefIncomplete bf))
         return mindef
   where
     -- By default require all methods without a default
@@ -487,7 +488,7 @@ warnMissingAT :: Name -> TcM ()
 warnMissingAT name
   = do { warn <- woptM Opt_WarnMissingMethods
        ; traceTc "warn" (ppr name <+> ppr warn)
-       ; warnTc warn  -- Warn only if -Wmissing-methods
+       ; warnTc (Reason Opt_WarnMissingMethods) warn  -- Warn only if -Wmissing-methods
                 (text "No explicit" <+> text "associated type"
                     <+> text "or default declaration for     "
                     <+> quotes (ppr name)) }
index c2b344d..e98ca88 100644 (file)
@@ -559,7 +559,7 @@ deriveStandalone (L loc (DerivDecl deriv_ty overlap_mode))
 warnUselessTypeable :: TcM ()
 warnUselessTypeable
   = do { warn <- woptM Opt_WarnDerivingTypeable
-       ; when warn $ addWarnTc
+       ; when warn $ addWarnTc (Reason Opt_WarnDerivingTypeable)
                    $ text "Deriving" <+> quotes (ppr typeableClassName) <+>
                      text "has no effect: all types now auto-derive Typeable" }
 
@@ -1499,7 +1499,8 @@ mkNewTypeEqn dflags overlap_mode tvs
 
       -- CanDerive/DerivableViaInstance
       _ -> do when (newtype_deriving && deriveAnyClass) $
-                addWarnTc (sep [ text "Both DeriveAnyClass and GeneralizedNewtypeDeriving are enabled"
+                addWarnTc NoReason
+                          (sep [ text "Both DeriveAnyClass and GeneralizedNewtypeDeriving are enabled"
                                , text "Defaulting to the DeriveAnyClass strategy for instantiating" <+> ppr cls ])
               go_for_it
   where
index 15cacaf..b1cc449 100644 (file)
@@ -343,13 +343,13 @@ warnRedundantConstraints ctxt env info ev_vars
    addErrCtxt (text "In" <+> ppr info) $
    do { env <- getLclEnv
       ; msg <- mkErrorReport ctxt env (important doc)
-      ; reportWarning msg }
+      ; reportWarning NoReason msg }
 
  | otherwise  -- But for InstSkol there already *is* a surrounding
               -- "In the instance declaration for Eq [a]" context
               -- and we don't want to say it twice. Seems a bit ad-hoc
  = do { msg <- mkErrorReport ctxt env (important doc)
-      ; reportWarning msg }
+      ; reportWarning NoReason msg }
  where
    doc = text "Redundant constraint" <> plural redundant_evs <> colon
          <+> pprEvVarTheta redundant_evs
@@ -573,8 +573,9 @@ reportGroup mk_err ctxt cts =
   case partition isMonadFailInstanceMissing cts of
         -- Only warn about missing MonadFail constraint when
         -- there are no other missing contstraints!
-        (monadFailCts, []) -> do { err <- mk_err ctxt monadFailCts
-                                 ; reportWarning err }
+        (monadFailCts, []) ->
+            do { err <- mk_err ctxt monadFailCts
+               ; reportWarning (Reason Opt_WarnMissingMonadFailInstances) err }
 
         (_, cts') -> do { err <- mk_err ctxt cts'
                         ; maybeReportError ctxt err
@@ -598,7 +599,7 @@ maybeReportHoleError ctxt ct err
     -- only if -fwarn_partial_type_signatures is on
     case cec_type_holes ctxt of
        HoleError -> reportError err
-       HoleWarn  -> reportWarning err
+       HoleWarn  -> reportWarning (Reason Opt_WarnPartialTypeSignatures) err
        HoleDefer -> return ()
 
   -- Otherwise this is a typed hole in an expression
@@ -606,7 +607,7 @@ maybeReportHoleError ctxt ct err
   = -- If deferring, report a warning only if -Wtyped-holds is on
     case cec_expr_holes ctxt of
        HoleError -> reportError err
-       HoleWarn  -> reportWarning err
+       HoleWarn  -> reportWarning (Reason Opt_WarnTypedHoles) err
        HoleDefer -> return ()
 
 maybeReportError :: ReportErrCtxt -> ErrMsg -> TcM ()
@@ -616,12 +617,12 @@ maybeReportError ctxt err
   = return ()            -- so suppress this error/warning
 
   | cec_errors_as_warns ctxt
-  = reportWarning err
+  = reportWarning NoReason err
 
   | otherwise
   = case cec_defer_type_errors ctxt of
       TypeDefer -> return ()
-      TypeWarn  -> reportWarning err
+      TypeWarn  -> reportWarning NoReason err
       TypeError -> reportError err
 
 addDeferredBinding :: ReportErrCtxt -> ErrMsg -> Ct -> TcM ()
@@ -2365,7 +2366,7 @@ warnDefaulting wanteds default_ty
                            , quotes (ppr default_ty) ])
                      2
                      ppr_wanteds
-       ; setCtLocM loc $ warnTc warn_default warn_msg }
+       ; setCtLocM loc $ warnTc (Reason Opt_WarnTypeDefaults) warn_default warn_msg }
 
 {-
 Note [Runtime skolems]
index b98e1de..a2b6bfc 100644 (file)
@@ -2227,7 +2227,8 @@ checkMissingFields con_like rbinds
 
     warn <- woptM Opt_WarnMissingFields
     unless (not (warn && notNull missing_ns_fields))
-           (warnTc True (missingFields con_like missing_ns_fields))
+           (warnTc (Reason Opt_WarnMissingFields) True
+               (missingFields con_like missing_ns_fields))
 
   where
     missing_s_fields
index bc3a928..cb4c9ce 100644 (file)
@@ -349,7 +349,8 @@ checkMissingAmpersand :: DynFlags -> [Type] -> Type -> TcM ()
 checkMissingAmpersand dflags arg_tys res_ty
   | null arg_tys && isFunPtrTy res_ty &&
     wopt Opt_WarnDodgyForeignImports dflags
-  = addWarn (text "possible missing & in foreign import of FunPtr")
+  = addWarn (Reason Opt_WarnDodgyForeignImports)
+        (text "possible missing & in foreign import of FunPtr")
   | otherwise
   = return ()
 
@@ -522,7 +523,8 @@ checkCConv StdCallConv  = do dflags <- getDynFlags
                                  then return StdCallConv
                                  else do -- This is a warning, not an error. see #3336
                                          when (wopt Opt_WarnUnsupportedCallingConventions dflags) $
-                                             addWarnTc (text "the 'stdcall' calling convention is unsupported on this platform," $$ text "treating as ccall")
+                                             addWarnTc (Reason Opt_WarnUnsupportedCallingConventions)
+                                                 (text "the 'stdcall' calling convention is unsupported on this platform," $$ text "treating as ccall")
                                          return CCallConv
 checkCConv PrimCallConv = do addErrTc (text "The `prim' calling convention can only be used with `foreign import'")
                              return PrimCallConv
index 460089e..9da27bf 100644 (file)
@@ -447,7 +447,7 @@ tcInstDecls1 tycl_decls inst_decls deriv_decls
            if isHsBootOrSig (tcg_src env)
              then
                do warn <- woptM Opt_WarnDerivingTypeable
-                  when warn $ addWarnTc $ vcat
+                  when warn $ addWarnTc (Reason Opt_WarnDerivingTypeable) $ vcat
                     [ ppTypeable <+> text "instances in .hs-boot files are ignored"
                     , text "This warning will become an error in future versions of the compiler"
                     ]
@@ -1571,7 +1571,7 @@ derivBindCtxt sel_id clas tys
 warnUnsatisfiedMinimalDefinition :: ClassMinimalDef -> TcM ()
 warnUnsatisfiedMinimalDefinition mindef
   = do { warn <- woptM Opt_WarnMissingMethods
-       ; warnTc warn message
+       ; warnTc (Reason Opt_WarnMissingMethods) warn message
        }
   where
     message = vcat [text "No explicit implementation for"
index 5f3bc5b..b96746d 100644 (file)
@@ -975,7 +975,9 @@ emitMonadFailConstraint pat res_ty
        ; return () }
 
 warnRebindableClash :: LPat TcId -> TcRn ()
-warnRebindableClash pattern = addWarnAt (getLoc pattern)
+warnRebindableClash pattern = addWarnAt
+    (Reason Opt_WarnMissingMonadFailInstances)
+    (getLoc pattern)
     (text "The failable pattern" <+> quotes (ppr pattern)
      $$
      nest 2 (text "is used together with -XRebindableSyntax."
index bd769bf..9594646 100644 (file)
@@ -219,7 +219,8 @@ addInlinePrags poly_id prags
          warn_multiple_inlines inl2 inls
        | otherwise
        = setSrcSpan loc $
-         addWarnTc (hang (text "Multiple INLINE pragmas for" <+> ppr poly_id)
+         addWarnTc NoReason
+                     (hang (text "Multiple INLINE pragmas for" <+> ppr poly_id)
                        2 (vcat (text "Ignoring all but the first"
                                 : map pp_inl (inl1:inl2:inls))))
 
index a2a04e9..93da03f 100644 (file)
@@ -310,7 +310,8 @@ tcRnModuleTcRnM hsc_env hsc_src
                                          implicit_prelude import_decls } ;
 
         whenWOptM Opt_WarnImplicitPrelude $
-             when (notNull prel_imports) $ addWarn (implicitPreludeWarn) ;
+             when (notNull prel_imports) $
+                  addWarn (Reason Opt_WarnImplicitPrelude) (implicitPreludeWarn) ;
 
         tcg_env <- {-# SCC "tcRnImports" #-}
                    tcRnImports hsc_env (prel_imports ++ import_decls) ;
@@ -1286,7 +1287,7 @@ tcPreludeClashWarn warnFlag name = do
     ; traceTc "tcPreludeClashWarn/prelude_functions"
                 (hang (ppr name) 4 (sep [ppr clashingElts]))
 
-    ; let warn_msg x = addWarnAt (nameSrcSpan (gre_name x)) (hsep
+    ; let warn_msg x = addWarnAt (Reason warnFlag) (nameSrcSpan (gre_name x)) (hsep
               [ text "Local definition of"
               , (quotes . ppr . nameOccName . gre_name) x
               , text "clashes with a future Prelude name." ]
@@ -1397,7 +1398,7 @@ tcMissingParentClassWarn warnFlag isName shouldName
            -- <should>" e.g. "Foo is an instance of Monad but not Applicative"
            ; let instLoc = srcLocSpan . nameSrcLoc $ getName isInst
                  warnMsg (Just name:_) =
-                      addWarnAt instLoc $
+                      addWarnAt (Reason warnFlag) instLoc $
                            hsep [ (quotes . ppr . nameOccName) name
                                 , text "is an instance of"
                                 , (ppr . nameOccName . className) isClass
index 8cf0d74..77ad2ac 100644 (file)
@@ -719,9 +719,10 @@ checkErr :: Bool -> MsgDoc -> TcRn ()
 -- Add the error if the bool is False
 checkErr ok msg = unless ok (addErr msg)
 
-warnIf :: Bool -> MsgDoc -> TcRn ()
-warnIf True  msg = addWarn msg
-warnIf False _   = return ()
+-- | Display a warning if a condition is met.
+warnIf :: WarnReason -> Bool -> MsgDoc -> TcRn ()
+warnIf reason True  msg = addWarn reason msg
+warnIf _      False _   = return ()
 
 addMessages :: Messages -> TcRn ()
 addMessages msgs1
@@ -777,9 +778,9 @@ reportError err
          (warns, errs) <- readTcRef errs_var ;
          writeTcRef errs_var (warns, errs `snocBag` err) }
 
-reportWarning :: ErrMsg -> TcRn ()
-reportWarning err
-  = do { let warn = makeIntoWarning err
+reportWarning :: WarnReason -> ErrMsg -> TcRn ()
+reportWarning reason err
+  = do { let warn = makeIntoWarning reason err
                     -- 'err' was built by mkLongErrMsg or something like that,
                     -- so it's of error severity.  For a warning we downgrade
                     -- its severity to SevWarning
@@ -1081,44 +1082,54 @@ failIfTcM True  err = failWithTcM err
 
 --         Warnings have no 'M' variant, nor failure
 
-warnTc :: Bool -> MsgDoc -> TcM ()
-warnTc warn_if_true warn_msg
-  | warn_if_true = addWarnTc warn_msg
+-- | Display a warning if a condition is met.
+warnTc :: WarnReason -> Bool -> MsgDoc -> TcM ()
+warnTc reason warn_if_true warn_msg
+  | warn_if_true = addWarnTc reason warn_msg
   | otherwise    = return ()
 
-warnTcM :: Bool -> (TidyEnv, MsgDoc) -> TcM ()
-warnTcM warn_if_true warn_msg
-  | warn_if_true = addWarnTcM warn_msg
+-- | Display a warning if a condition is met.
+warnTcM :: WarnReason -> Bool -> (TidyEnv, MsgDoc) -> TcM ()
+warnTcM reason warn_if_true warn_msg
+  | warn_if_true = addWarnTcM reason warn_msg
   | otherwise    = return ()
 
-addWarnTc :: MsgDoc -> TcM ()
-addWarnTc msg = do { env0 <- tcInitTidyEnv
-                   ; addWarnTcM (env0, msg) }
+-- | Display a warning in the current context.
+addWarnTc :: WarnReason -> MsgDoc -> TcM ()
+addWarnTc reason msg
+ = do { env0 <- tcInitTidyEnv ;
+      addWarnTcM reason (env0, msg) }
 
-addWarnTcM :: (TidyEnv, MsgDoc) -> TcM ()
-addWarnTcM (env0, msg)
+-- | Display a warning in a given context.
+addWarnTcM :: WarnReason -> (TidyEnv, MsgDoc) -> TcM ()
+addWarnTcM reason (env0, msg)
  = do { ctxt <- getErrCtxt ;
         err_info <- mkErrInfo env0 ctxt ;
-        add_warn msg err_info }
+        add_warn reason msg err_info }
 
-addWarn :: MsgDoc -> TcRn ()
-addWarn msg = add_warn msg Outputable.empty
+-- | Display a warning for the current source location.
+addWarn :: WarnReason -> MsgDoc -> TcRn ()
+addWarn reason msg = add_warn reason msg Outputable.empty
 
-addWarnAt :: SrcSpan -> MsgDoc -> TcRn ()
-addWarnAt loc msg = add_warn_at loc msg Outputable.empty
+-- | Display a warning for a given source location.
+addWarnAt :: WarnReason -> SrcSpan -> MsgDoc -> TcRn ()
+addWarnAt reason loc msg = add_warn_at reason loc msg Outputable.empty
 
-add_warn :: MsgDoc -> MsgDoc -> TcRn ()
-add_warn msg extra_info
+-- | Display a warning, with an optional flag, for the current source
+-- location.
+add_warn :: WarnReason -> MsgDoc -> MsgDoc -> TcRn ()
+add_warn reason msg extra_info
   = do { loc <- getSrcSpanM
-       ; add_warn_at loc msg extra_info }
+       ; add_warn_at reason loc msg extra_info }
 
-add_warn_at :: SrcSpan -> MsgDoc -> MsgDoc -> TcRn ()
-add_warn_at loc msg extra_info
+-- | Display a warning, with an optional flag, for a given location.
+add_warn_at :: WarnReason -> SrcSpan -> MsgDoc -> MsgDoc -> TcRn ()
+add_warn_at reason loc msg extra_info
   = do { dflags <- getDynFlags ;
          printer <- getPrintUnqualified dflags ;
          let { warn = mkLongWarnMsg dflags loc printer
                                     msg extra_info } ;
-         reportWarning warn }
+         reportWarning reason warn }
 
 tcInitTidyEnv :: TcM TidyEnv
 tcInitTidyEnv
@@ -1486,7 +1497,8 @@ failIfM msg
   = do  { env <- getLclEnv
         ; let full_msg = (if_loc env <> colon) $$ nest 2 msg
         ; dflags <- getDynFlags
-        ; liftIO (log_action dflags dflags SevFatal noSrcSpan (defaultErrStyle dflags) full_msg)
+        ; liftIO (log_action dflags dflags NoReason SevFatal
+                   noSrcSpan (defaultErrStyle dflags) full_msg)
         ; failM }
 
 --------------------
@@ -1522,7 +1534,13 @@ forkM_maybe doc thing_inside
                           dflags <- getDynFlags
                           let msg = hang (text "forkM failed:" <+> doc)
                                        2 (text (show exn))
-                          liftIO $ log_action dflags dflags SevFatal noSrcSpan (defaultErrStyle dflags) msg
+                          liftIO $ log_action dflags
+                                              dflags
+                                              NoReason
+                                              SevFatal
+                                              noSrcSpan
+                                              (defaultErrStyle dflags)
+                                              msg
 
                     ; traceIf (text "} ending fork (badly)" <+> doc)
                     ; return Nothing }
index 4e5cceb..303fee8 100644 (file)
@@ -2351,9 +2351,10 @@ wrapWarnTcS :: TcM a -> TcS a
 wrapWarnTcS = wrapTcS
 
 failTcS, panicTcS  :: SDoc -> TcS a
-warnTcS, addErrTcS :: SDoc -> TcS ()
+warnTcS   :: WarningFlag -> SDoc -> TcS ()
+addErrTcS :: SDoc -> TcS ()
 failTcS      = wrapTcS . TcM.failWith
-warnTcS      = wrapTcS . TcM.addWarn
+warnTcS flag = wrapTcS . TcM.addWarn (Reason flag)
 addErrTcS    = wrapTcS . TcM.addErr
 panicTcS doc = pprPanic "TcCanonical" doc
 
index a19ceaa..b99823e 100644 (file)
@@ -18,6 +18,7 @@ module TcSimplify(
 import Bag
 import Class         ( Class, classKey, classTyCon )
 import DynFlags      ( WarningFlag ( Opt_WarnMonomorphism )
+                     , WarnReason ( Reason )
                      , DynFlags( solverIterations ) )
 import Inst
 import ListSetOps
@@ -742,7 +743,7 @@ decideQuantification apply_mr sigs name_taus constraints
            -- Warn about the monomorphism restriction
        ; warn_mono <- woptM Opt_WarnMonomorphism
        ; let mr_bites = constrained_tvs `intersectsVarSet` zonked_tkvs
-       ; warnTc (warn_mono && mr_bites) $
+       ; warnTc (Reason Opt_WarnMonomorphism) (warn_mono && mr_bites) $
          hang (text "The Monomorphism Restriction applies to the binding"
                <> plural bndrs <+> text "for" <+> pp_bndrs)
              2 (text "Consider giving a type signature for"
index ac2ad01..cabe75e 100644 (file)
@@ -807,7 +807,7 @@ instance TH.Quasi TcM where
   -- 'msg' is forced to ensure exceptions don't escape,
   -- see Note [Exceptions in TH]
   qReport True msg  = seqList msg $ addErr  (text msg)
-  qReport False msg = seqList msg $ addWarn (text msg)
+  qReport False msg = seqList msg $ addWarn NoReason (text msg)
 
   qLocation = do { m <- getModule
                  ; l <- getSrcSpanM
index 6fee012..31eaeb0 100644 (file)
@@ -2141,13 +2141,13 @@ checkValidDataCon dflags existential_ok tc con
           (bad_bang n (text "Lazy annotation (~) without StrictData"))
     check_bang (HsSrcBang _ want_unpack strict_mark) rep_bang n
       | isSrcUnpacked want_unpack, not is_strict
-      = addWarnTc (bad_bang n (text "UNPACK pragma lacks '!'"))
+      = addWarnTc NoReason (bad_bang n (text "UNPACK pragma lacks '!'"))
       | isSrcUnpacked want_unpack
       , case rep_bang of { HsUnpack {} -> False; _ -> True }
       , not (gopt Opt_OmitInterfacePragmas dflags)
            -- If not optimising, se don't unpack, so don't complain!
            -- See MkId.dataConArgRep, the (HsBang True) case
-      = addWarnTc (bad_bang n (text "Ignoring unusable UNPACK pragma"))
+      = addWarnTc NoReason (bad_bang n (text "Ignoring unusable UNPACK pragma"))
       where
         is_strict = case strict_mark of
                       NoSrcStrict -> xopt LangExt.StrictData dflags
index 319c15d..784cfa0 100644 (file)
@@ -684,8 +684,9 @@ check_valid_theta _ _ []
   = return ()
 check_valid_theta env ctxt theta
   = do { dflags <- getDynFlags
-       ; warnTcM (wopt Opt_WarnDuplicateConstraints dflags &&
-                  notNull dups) (dupPredWarn env dups)
+       ; warnTcM (Reason Opt_WarnDuplicateConstraints)
+                 (wopt Opt_WarnDuplicateConstraints dflags && notNull dups)
+                 (dupPredWarn env dups)
        ; traceTc "check_valid_theta" (ppr theta)
        ; mapM_ (check_pred_ty env dflags ctxt) theta }
   where
@@ -1455,7 +1456,7 @@ checkValidCoAxiom ax@(CoAxiom { co_ax_tc = fam_tc, co_ax_branches = branches })
     --   (b) failure of injectivity
     check_branch_compat prev_branches cur_branch
       | cur_branch `isDominatedBy` prev_branches
-      = do { addWarnAt (coAxBranchSpan cur_branch) $
+      = do { addWarnAt NoReason (coAxBranchSpan cur_branch) $
              inaccessibleCoAxBranch ax cur_branch
            ; return prev_branches }
       | otherwise
index 24f8039..3f24f6a 100644 (file)
@@ -102,6 +102,15 @@ The following flags are simple ways to select standard "packages" of warnings:
     Warnings are treated only as warnings, not as errors. This is the
     default, but can be useful to negate a :ghc-flag:`-Werror` flag.
 
+When a warning is emitted, the specific warning flag which controls
+it, as well as the group it belongs to, are shown.
+
+.. ghc-flag:: -fshow-warning-groups
+
+    Name the group a warning flag belongs to.
+
+    This is enabled by default. Disable with ``-fno-show-warning-groups``.
+
 The full set of warning options is described below. To turn off any
 warning, simply give the corresponding ``-Wno-...`` option on the
 command line. For backwards compatibility with GHC versions prior to 8.0,
index deb3755..4b39159 100644 (file)
@@ -473,8 +473,8 @@ resetLastErrorLocations = do
     liftIO $ writeIORef (lastErrorLocations st) []
 
 ghciLogAction :: IORef [(FastString, Int)] ->  LogAction
-ghciLogAction lastErrLocations dflags severity srcSpan style msg = do
-    defaultLogAction dflags severity srcSpan style msg
+ghciLogAction lastErrLocations dflags flag severity srcSpan style msg = do
+    defaultLogAction dflags flag severity srcSpan style msg
     case severity of
         SevError -> case srcSpan of
             RealSrcSpan rsp -> modifyIORef lastErrLocations
index c276b77..5580c5e 100644 (file)
@@ -1,8 +1,8 @@
 
-ds041.hs:1:14: Warning:
+ds041.hs:1:14: warning:
     -XDatatypeContexts is deprecated: It was widely considered a misfeature, and has been removed from the Haskell language.
 
-ds041.hs:16:7: Warning:
-    Fields of ‘Foo’ not initialised: x
-    In the expression: Foo {}
-    In an equation for ‘foo’: foo = Foo {}
+ds041.hs:16:7: warning: [-Wmissing-fields (in -Wdefault)]
+    • Fields of ‘Foo’ not initialised: x
+    • In the expression: Foo {}
+      In an equation for ‘foo’: foo = Foo {}
index 52aa9d7..6e7cb25 100644 (file)
@@ -1,2 +1,3 @@
 
-ds053.hs:5:1: Warning: Defined but not used: ‘f’
+ds053.hs:5:1: warning: [-Wunused-local-binds (in -Wextra, -Wunused-binds)]
+    Defined but not used: ‘f’
index 49a39a9..f6ec57e 100644 (file)
@@ -1,5 +1,5 @@
 
-T11241.hs:5:21: warning:
+T11241.hs:5:21: warning: [-Wpartial-type-signatures (in -Wdefault)]
     • Found type wildcard ‘_’ standing for ‘*’
     • In the type signature:
         foo :: forall (a :: _). a -> a
index 765c697..9cd16e5 100644 (file)
@@ -1,8 +1,8 @@
 
-T4966.hs:3:14: Warning:
+T4966.hs:3:14: warning:
     -XDatatypeContexts is deprecated: It was widely considered a misfeature, and has been removed from the Haskell language.
 
-T4966.hs:35:30: Warning:
-    No explicit implementation for
-      either ‘==’ or ‘/=’
-    In the instance declaration for ‘Eq (TreeListObject a)’
+T4966.hs:35:30: warning: [-Wmissing-methods (in -Wdefault)]
+    • No explicit implementation for
+        either ‘==’ or ‘/=’
+    • In the instance declaration for ‘Eq (TreeListObject a)’
index 9901a36..091990b 100644 (file)
@@ -1,15 +1,15 @@
 
-deriving-1935.hs:17:11: Warning:
-    No explicit implementation for
-      either ‘==’ or ‘/=’
-    In the instance declaration for ‘Eq (T a)’
+deriving-1935.hs:17:11: warning: [-Wmissing-methods (in -Wdefault)]
+    • No explicit implementation for
+        either ‘==’ or ‘/=’
+    • In the instance declaration for ‘Eq (T a)’
 
-deriving-1935.hs:20:11: Warning:
-    No explicit implementation for
-      either ‘==’ or ‘/=’
-    In the instance declaration for ‘Eq (S a)’
+deriving-1935.hs:20:11: warning: [-Wmissing-methods (in -Wdefault)]
+    • No explicit implementation for
+        either ‘==’ or ‘/=’
+    • In the instance declaration for ‘Eq (S a)’
 
-deriving-1935.hs:21:11: Warning:
-    No explicit implementation for
-      either ‘compare’ or ‘<=’
-    In the instance declaration for ‘Ord (S a)’
+deriving-1935.hs:21:11: warning: [-Wmissing-methods (in -Wdefault)]
+    • No explicit implementation for
+        either ‘compare’ or ‘<=’
+    • In the instance declaration for ‘Ord (S a)’
index ead606d..f939631 100644 (file)
@@ -1,10 +1,10 @@
 
-drv003.hs:14:10: Warning:
-    No explicit implementation for
-      either ‘==’ or ‘/=’
-    In the instance declaration for ‘Eq (Foo a)’
+drv003.hs:14:10: warning: [-Wmissing-methods (in -Wdefault)]
+    • No explicit implementation for
+        either ‘==’ or ‘/=’
+    • In the instance declaration for ‘Eq (Foo a)’
 
-drv003.hs:17:10: Warning:
-    No explicit implementation for
-      either ‘==’ or ‘/=’
-    In the instance declaration for ‘Eq (Bar b)’
+drv003.hs:17:10: warning: [-Wmissing-methods (in -Wdefault)]
+    • No explicit implementation for
+        either ‘==’ or ‘/=’
+    • In the instance declaration for ‘Eq (Bar b)’
index 00240a0..0942496 100644 (file)
@@ -1,20 +1,22 @@
 
-werror.hs:6:1: warning:
+werror.hs:6:1: warning: [-Wmissing-signatures (in -Wall)]
     Top-level binding with no type signature: main :: IO ()
 
-werror.hs:7:13: warning:
+werror.hs:7:13: warning: [-Wname-shadowing (in -Wall)]
     This binding for ‘main’ shadows the existing binding
       defined at werror.hs:6:1
 
-werror.hs:7:13: warning: Defined but not used: ‘main’
+werror.hs:7:13: warning: [-Wunused-local-binds (in -Wextra, -Wunused-binds)]
+    Defined but not used: ‘main’
 
 werror.hs:8:1: warning:
     Tab character found here.
     Please use spaces instead.
 
-werror.hs:10:1: warning: Defined but not used: ‘f’
+werror.hs:10:1: warning: [-Wunused-local-binds (in -Wextra, -Wunused-binds)]
+    Defined but not used: ‘f’
 
-werror.hs:10:1: warning:
+werror.hs:10:1: warning: [-Wmissing-signatures (in -Wall)]
     Top-level binding with no type signature:
       f :: forall t t1. [t] -> [t1]
 
index 6678973..0a91e88 100644 (file)
@@ -1,3 +1,3 @@
 
-T1357.hs:5:1:
-    Warning: possible missing & in foreign import of FunPtr
+T1357.hs:5:1: warning: [-Wdodgy-foreign-imports (in -Wdefault)]
+    possible missing & in foreign import of FunPtr
index dc6edb2..bd6fb37 100644 (file)
@@ -41,9 +41,9 @@ compileInGhc targets handlerOutput = do
         TargetFile file Nothing -> file
         _ -> error "fileFromTarget: not a known target"
 
-    collectSrcError handlerOutput flags SevOutput _srcspan style msg
+    collectSrcError handlerOutput flags SevOutput _srcspan style msg
       = handlerOutput $ GHC.showSDocForUser flags (queryQual style) msg
-    collectSrcError _ _ _ _ _ _
+    collectSrcError _ _ _ _ _ _ _
       = return ()
 
 main :: IO ()
index d778df2..a943e48 100644 (file)
@@ -1,9 +1,9 @@
 
-B.hs:4:1: warning:
+B.hs:4:1: warning: [-Wmissing-signatures (in -Wall)]
     Top-level binding with no type signature:
       answer_to_live_the_universe_and_everything :: Int
 
-B.hs:5:12: warning:
+B.hs:5:12: warning: [-Wtype-defaults (in -Wall)]
     • Defaulting the following constraints to type ‘Integer’
         (Enum a0)
           arising from the arithmetic sequence ‘1 .. 23 * 2’ at B.hs:5:12-20
@@ -12,14 +12,14 @@ B.hs:5:12: warning:
       In the first argument of ‘(-)’, namely ‘length [1 .. 23 * 2]’
       In the expression: length [1 .. 23 * 2] - 4
 
-A.hs:7:1: warning:
+A.hs:7:1: warning: [-Wmissing-signatures (in -Wall)]
     Top-level binding with no type signature: main :: IO ()
 
-B.hs:4:1: warning:
+B.hs:4:1: warning: [-Wmissing-signatures (in -Wall)]
     Top-level binding with no type signature:
       answer_to_live_the_universe_and_everything :: Int
 
-B.hs:5:12: warning:
+B.hs:5:12: warning: [-Wtype-defaults (in -Wall)]
     • Defaulting the following constraints to type ‘Integer’
         (Enum a0)
           arising from the arithmetic sequence ‘1 .. 23 * 2’ at B.hs:5:12-20
@@ -28,5 +28,5 @@ B.hs:5:12: warning:
       In the first argument of ‘(-)’, namely ‘length [1 .. 23 * 2]’
       In the expression: length [1 .. 23 * 2] - 4
 
-A.hs:7:1: warning:
+A.hs:7:1: warning: [-Wmissing-signatures (in -Wall)]
     Top-level binding with no type signature: main :: IO ()
index dc89a5f..3f46fdb 100644 (file)
@@ -1,5 +1,5 @@
 
-T5820.hs:3:10: Warning:
-    No explicit implementation for
-      either ‘==’ or ‘/=’
-    In the instance declaration for ‘Eq Foo’
+T5820.hs:3:10: warning: [-Wmissing-methods (in -Wdefault)]
+    • No explicit implementation for
+        either ‘==’ or ‘/=’
+    • In the instance declaration for ‘Eq Foo’
index 8914820..41be935 100644 (file)
@@ -4,7 +4,7 @@ Defer03.hs:4:5: warning:
     • In the expression: 'p'
       In an equation for ‘a’: a = 'p'
 
-Defer03.hs:7:5: warning:
+Defer03.hs:7:5: warning: [-Wtyped-holes (in -Wdefault)]
     • Found hole: _ :: Int
     • In the expression: _
       In an equation for ‘f’: f = _
@@ -26,7 +26,7 @@ Defer03.hs:4:5: warning:
     • In the expression: 'p'
       In an equation for ‘a’: a = 'p'
 
-Defer03.hs:7:5: warning:
+Defer03.hs:7:5: warning: [-Wtyped-holes (in -Wdefault)]
     • Found hole: _ :: Int
     • In the expression: _
       In an equation for ‘f’: f = _
@@ -48,7 +48,7 @@ Defer03.hs:4:5: warning:
     • In the expression: 'p'
       In an equation for ‘a’: a = 'p'
 
-Defer03.hs:7:5: warning:
+Defer03.hs:7:5: warning: [-Wtyped-holes (in -Wdefault)]
     • Found hole: _ :: Int
     • In the expression: _
       In an equation for ‘f’: f = _
index aedf854..0d3378e 100644 (file)
@@ -1,5 +1,5 @@
 
-ghci019.hs:9:10: warning:
+ghci019.hs:9:10: warning: [-Wmissing-methods (in -Wdefault)]
     • No explicit implementation for
         either ‘Prelude.==’ or ‘Prelude./=’
     • In the instance declaration for ‘Prelude.Eq Foo’
index 2522579..96cafba 100644 (file)
@@ -186,10 +186,14 @@ m = undefined
 
 
 
-Test.hs:33:9: Warning: ‘p’ is exported by ‘p’ and ‘R(..)’
+Test.hs:33:9: warning: [-Wduplicate-exports (in -Wdefault)]
+    ‘p’ is exported by ‘p’ and ‘R(..)’
 
-Test.hs:33:12: Warning: ‘q’ is exported by ‘q’ and ‘R(..)’
+Test.hs:33:12: warning: [-Wduplicate-exports (in -Wdefault)]
+    ‘q’ is exported by ‘q’ and ‘R(..)’
 
-Test.hs:33:15: Warning: ‘u’ is exported by ‘u’ and ‘R(..)’
+Test.hs:33:15: warning: [-Wduplicate-exports (in -Wdefault)]
+    ‘u’ is exported by ‘u’ and ‘R(..)’
 
-Test.hs:39:9: Warning: ‘a’ is exported by ‘a’ and ‘C(a, b)’
+Test.hs:39:9: warning: [-Wduplicate-exports (in -Wdefault)]
+    ‘a’ is exported by ‘a’ and ‘C(a, b)’
index 2616c2e..86aa24c 100644 (file)
@@ -1,5 +1,5 @@
 
-Class3.hs:7:10: Warning:
-    No explicit implementation for
-      ‘foo’
-    In the instance declaration for ‘C ()’
+Class3.hs:7:10: warning: [-Wmissing-methods (in -Wdefault)]
+    • No explicit implementation for
+        ‘foo’
+    • In the instance declaration for ‘C ()’
index 11ea628..4b3b0f6 100644 (file)
@@ -1,31 +1,31 @@
 
-Simple2.hs:21:1: Warning:
-    No explicit associated type or default declaration for ‘S3n’
-    In the instance declaration for ‘C3 Char’
+Simple2.hs:21:1: warning: [-Wmissing-methods (in -Wdefault)]
+    • No explicit associated type or default declaration for      ‘S3n’
+    • In the instance declaration for ‘C3 Char’
 
-Simple2.hs:21:10: Warning:
-    No explicit implementation for
-      ‘foo3n’ and ‘bar3n’
-    In the instance declaration for ‘C3 Char’
+Simple2.hs:21:10: warning: [-Wmissing-methods (in -Wdefault)]
+    • No explicit implementation for
+        ‘foo3n’ and ‘bar3n’
+    • In the instance declaration for ‘C3 Char’
 
-Simple2.hs:29:1: Warning:
-    No explicit associated type or default declaration for ‘S3n’
-    In the instance declaration for ‘C3 Bool’
+Simple2.hs:29:1: warning: [-Wmissing-methods (in -Wdefault)]
+    • No explicit associated type or default declaration for      ‘S3n’
+    • In the instance declaration for ‘C3 Bool’
 
-Simple2.hs:29:10: Warning:
-    No explicit implementation for
-      ‘foo3n’ and ‘bar3n’
-    In the instance declaration for ‘C3 Bool’
+Simple2.hs:29:10: warning: [-Wmissing-methods (in -Wdefault)]
+    • No explicit implementation for
+        ‘foo3n’ and ‘bar3n’
+    • In the instance declaration for ‘C3 Bool’
 
-Simple2.hs:39:1: Warning:
-    No explicit associated type or default declaration for ‘S3’
-    In the instance declaration for ‘C3 Float’
+Simple2.hs:39:1: warning: [-Wmissing-methods (in -Wdefault)]
+    • No explicit associated type or default declaration for      ‘S3’
+    • In the instance declaration for ‘C3 Float’
 
-Simple2.hs:39:1: Warning:
-    No explicit associated type or default declaration for ‘S3n’
-    In the instance declaration for ‘C3 Float’
+Simple2.hs:39:1: warning: [-Wmissing-methods (in -Wdefault)]
+    • No explicit associated type or default declaration for      ‘S3n’
+    • In the instance declaration for ‘C3 Float’
 
-Simple2.hs:39:10: Warning:
-    No explicit implementation for
-      ‘foo3n’ and ‘bar3n’
-    In the instance declaration for ‘C3 Float’
+Simple2.hs:39:10: warning: [-Wmissing-methods (in -Wdefault)]
+    • No explicit implementation for
+        ‘foo3n’ and ‘bar3n’
+    • In the instance declaration for ‘C3 Float’
index 81afa91..95fee97 100644 (file)
@@ -1,3 +1,3 @@
 
-T3023.hs:18:1: Warning:
+T3023.hs:18:1: warning: [-Wmissing-signatures (in -Wall)]
     Top-level binding with no type signature: bar :: Bool -> Bool
index 44cb453..b93be8c 100644 (file)
@@ -1,5 +1,5 @@
 
-T8889.hs:12:1: warning:
+T8889.hs:12:1: warning: [-Wmissing-signatures (in -Wall)]
     Top-level binding with no type signature:
       f :: forall (f :: * -> *) a b.
            (C f, C_fmap f a) =>
index 1bfced7..1ff5858 100644 (file)
@@ -1,15 +1,12 @@
-UnusedTyVarWarnings.hs:8:5: warning:
+
+UnusedTyVarWarnings.hs:8:5: warning: [-Wunused-local-binds (in -Wextra, -Wunused-binds)]
     Defined but not used: type variable ‘b’
 
-UnusedTyVarWarnings.hs:11:18: warning:
+UnusedTyVarWarnings.hs:11:18: warning: [-Wunused-local-binds (in -Wextra, -Wunused-binds)]
     Defined but not used: type variable ‘b’
 
-UnusedTyVarWarnings.hs:27:5: warning:
+UnusedTyVarWarnings.hs:27:5: warning: [-Wunused-local-binds (in -Wextra, -Wunused-binds)]
     Defined but not used: type variable ‘a’
 
-UnusedTyVarWarnings.hs:33:17: warning:
+UnusedTyVarWarnings.hs:33:17: warning: [-Wunused-local-binds (in -Wextra, -Wunused-binds)]
     Defined but not used: type variable ‘b’
-
-
-
-
index c4895aa..889f192 100644 (file)
@@ -1,12 +1,12 @@
-UnusedTyVarWarningsNamedWCs.hs:8:5: warning:
+
+UnusedTyVarWarningsNamedWCs.hs:8:5: warning: [-Wunused-local-binds (in -Wextra, -Wunused-binds)]
     Defined but not used: type variable ‘b’
 
-UnusedTyVarWarningsNamedWCs.hs:11:18: warning:
+UnusedTyVarWarningsNamedWCs.hs:11:18: warning: [-Wunused-local-binds (in -Wextra, -Wunused-binds)]
     Defined but not used: type variable ‘b’
 
-UnusedTyVarWarningsNamedWCs.hs:27:5: warning:
+UnusedTyVarWarningsNamedWCs.hs:27:5: warning: [-Wunused-local-binds (in -Wextra, -Wunused-binds)]
     Defined but not used: type variable ‘a’
 
-UnusedTyVarWarningsNamedWCs.hs:33:17: warning:
+UnusedTyVarWarningsNamedWCs.hs:33:17: warning: [-Wunused-local-binds (in -Wextra, -Wunused-binds)]
     Defined but not used: type variable ‘b’
-
index 5a14fc3..d430310 100644 (file)
@@ -1,7 +1,7 @@
 
-T7862.hs:23:10: Warning:
-    No explicit implementation for
-      ‘+’, ‘*’, ‘abs’, ‘signum’, ‘fromInteger’, and (either ‘negate’
-                                                            or
-                                                            ‘-’)
-    In the instance declaration for ‘Num (Tower s a)’
+T7862.hs:23:10: warning: [-Wmissing-methods (in -Wdefault)]
+    • No explicit implementation for
+        ‘+’, ‘*’, ‘abs’, ‘signum’, ‘fromInteger’, and (either ‘negate’
+                                                              or
+                                                              ‘-’)
+    • In the instance declaration for ‘Num (Tower s a)’
index bfd02c6..c4e1e21 100644 (file)
@@ -1,2 +1,3 @@
 
-Mod128_A.hs:2:19: Warning: ‘T’ is exported by ‘T(Con)’ and ‘T’
+Mod128_A.hs:2:19: warning: [-Wduplicate-exports (in -Wdefault)]
+    ‘T’ is exported by ‘T(Con)’ and ‘T’
index 682cbe3..1eef269 100644 (file)
@@ -1,3 +1,3 @@
 
-mod14.hs:2:10: Warning:
+mod14.hs:2:10: warning: [-Wduplicate-exports (in -Wdefault)]
     ‘m2’ is exported by ‘C(m1, m2, m2, m3)’ and ‘C(m1, m2, m2, m3)’
index d69ba60..20ccfc1 100644 (file)
@@ -1,4 +1,4 @@
 
-mod176.hs:4:1: Warning:
+mod176.hs:4:1: warning: [-Wunused-imports (in -Wextra)]
     The import of ‘Monad, return’
     from module ‘Control.Monad’ is redundant
index d695eea..2f9ffbb 100644 (file)
@@ -1,5 +1,5 @@
 
-mod177.hs:5:1: warning:
+mod177.hs:5:1: warning: [-Wunused-imports (in -Wextra)]
     The import of ‘Data.Maybe’ is redundant
       except perhaps to import instances from ‘Data.Maybe’
     To import instances alone, use: import Data.Maybe()
index 07967f0..e8d5adb 100644 (file)
@@ -1,3 +1,3 @@
 
-mod5.hs:2:10: Warning:
+mod5.hs:2:10: warning: [-Wduplicate-exports (in -Wdefault)]
     ‘K1’ is exported by ‘T(K1, K1)’ and ‘T(K1, K1)’
index 5b2f422..a1e335c 100644 (file)
@@ -1,10 +1,10 @@
 
-mod89.hs:5:1: warning:
+mod89.hs:5:1: warning: [-Wdodgy-imports (in -Wextra)]
     The import item ‘map(..)’ suggests that
     ‘map’ has (in-scope) constructors or class methods,
     but it has none
 
-mod89.hs:5:1: warning:
+mod89.hs:5:1: warning: [-Wunused-imports (in -Wextra)]
     The import of ‘Prelude’ is redundant
       except perhaps to import instances from ‘Prelude’
     To import instances alone, use: import Prelude()
index af2606a..544f14a 100644 (file)
@@ -1,5 +1,5 @@
 
-MonadFailWarnings.hs:19:5: warning:
+MonadFailWarnings.hs:19:5: warning: [-Wmissing-monadfail-instances (in -Wcompat)]
     • Could not deduce (MonadFail m)
         arising from the failable pattern ‘Just x’
         (this will become an error in a future GHC release)
@@ -20,7 +20,7 @@ MonadFailWarnings.hs:19:5: warning:
             = do { Just x <- undefined;
                    undefined }
 
-MonadFailWarnings.hs:35:5: warning:
+MonadFailWarnings.hs:35:5: warning: [-Wmissing-monadfail-instances (in -Wcompat)]
     • No instance for (MonadFail Identity)
         arising from the failable pattern ‘Just x’
         (this will become an error in a future GHC release)
@@ -33,7 +33,7 @@ MonadFailWarnings.hs:35:5: warning:
             = do { Just x <- undefined;
                    undefined }
 
-MonadFailWarnings.hs:51:5: warning:
+MonadFailWarnings.hs:51:5: warning: [-Wmissing-monadfail-instances (in -Wcompat)]
     • No instance for (MonadFail (ST s))
         arising from the failable pattern ‘Just x’
         (this will become an error in a future GHC release)
@@ -46,7 +46,7 @@ MonadFailWarnings.hs:51:5: warning:
             = do { Just x <- undefined;
                    undefined }
 
-MonadFailWarnings.hs:59:5: warning:
+MonadFailWarnings.hs:59:5: warning: [-Wmissing-monadfail-instances (in -Wcompat)]
     • No instance for (MonadFail ((->) r))
         arising from the failable pattern ‘Just x’
         (this will become an error in a future GHC release)
index 9610f89..7b6cd1b 100644 (file)
@@ -1,5 +1,5 @@
 
-MonadFailWarningsWithRebindableSyntax.hs:13:5: warning:
+MonadFailWarningsWithRebindableSyntax.hs:13:5: warning: [-Wmissing-monadfail-instances (in -Wcompat)]
     The failable pattern ‘Just x’
       is used together with -XRebindableSyntax. If this is intentional,
       compile with -Wno-missing-monadfail-instances.
index 687d6d6..90d38fd 100644 (file)
@@ -1,5 +1,5 @@
 
-overloadedrecfldsfail05.hs:7:16: warning:
+overloadedrecfldsfail05.hs:7:16: warning: [-Wunused-local-binds (in -Wextra, -Wunused-binds)]
     Defined but not used: ‘foo’
 
 <no location info>: error: 
index 6a1b939..6161755 100644 (file)
@@ -1,29 +1,29 @@
 [1 of 2] Compiling OverloadedRecFldsFail06_A ( OverloadedRecFldsFail06_A.hs, OverloadedRecFldsFail06_A.o )
 
-OverloadedRecFldsFail06_A.hs:9:15: warning:
+OverloadedRecFldsFail06_A.hs:9:15: warning: [-Wunused-local-binds (in -Wextra, -Wunused-binds)]
     Defined but not used: data constructor ‘MkUnused’
 
-OverloadedRecFldsFail06_A.hs:9:42: warning:
+OverloadedRecFldsFail06_A.hs:9:42: warning: [-Wunused-local-binds (in -Wextra, -Wunused-binds)]
     Defined but not used: ‘unused2’
 
-OverloadedRecFldsFail06_A.hs:9:59: warning:
+OverloadedRecFldsFail06_A.hs:9:59: warning: [-Wunused-local-binds (in -Wextra, -Wunused-binds)]
     Defined but not used: ‘used_locally’
 [2 of 2] Compiling Main             ( overloadedrecfldsfail06.hs, overloadedrecfldsfail06.o )
 
-overloadedrecfldsfail06.hs:7:1: warning:
+overloadedrecfldsfail06.hs:7:1: warning: [-Wunused-imports (in -Wextra)]
     The import of ‘Unused(unused), V(x), U(y), MkV, Unused’
     from module ‘OverloadedRecFldsFail06_A’ is redundant
 
-overloadedrecfldsfail06.hs:8:1: warning:
+overloadedrecfldsfail06.hs:8:1: warning: [-Wunused-imports (in -Wextra)]
     The qualified import of ‘OverloadedRecFldsFail06_A’ is redundant
       except perhaps to import instances from ‘OverloadedRecFldsFail06_A’
     To import instances alone, use: import OverloadedRecFldsFail06_A()
 
-overloadedrecfldsfail06.hs:9:1: warning:
+overloadedrecfldsfail06.hs:9:1: warning: [-Wunused-imports (in -Wextra)]
     The qualified import of ‘V(y)’
     from module ‘OverloadedRecFldsFail06_A’ is redundant
 
-overloadedrecfldsfail06.hs:10:1: warning:
+overloadedrecfldsfail06.hs:10:1: warning: [-Wunused-imports (in -Wextra)]
     The qualified import of ‘U(x), U’
     from module ‘OverloadedRecFldsFail06_A’ is redundant
 
index 771a46f..dac6d29 100644 (file)
@@ -1,9 +1,9 @@
 [1 of 2] Compiling OverloadedRecFldsFail11_A ( OverloadedRecFldsFail11_A.hs, OverloadedRecFldsFail11_A.o )
 [2 of 2] Compiling Main             ( overloadedrecfldsfail11.hs, overloadedrecfldsfail11.o )
 
-overloadedrecfldsfail11.hs:5:15: warning:
+overloadedrecfldsfail11.hs:5:15: warning: [-Wdeprecations (in -Wdefault)]
     In the use of ‘foo’ (imported from OverloadedRecFldsFail11_A):
     "Warning on a record field"
 
-<no location info>: error:
+<no location info>: error: 
 Failing due to -Werror.
index f4a2f7b..7cd9151 100644 (file)
@@ -1,15 +1,15 @@
 [1 of 2] Compiling OverloadedRecFldsFail12_A ( OverloadedRecFldsFail12_A.hs, OverloadedRecFldsFail12_A.o )
 [2 of 2] Compiling Main             ( overloadedrecfldsfail12.hs, overloadedrecfldsfail12.o )
 
-overloadedrecfldsfail12.hs:10:11: warning:
+overloadedrecfldsfail12.hs:10:11: warning: [-Wdeprecations (in -Wdefault)]
     In the use of ‘foo’ (imported from OverloadedRecFldsFail12_A):
     "Deprecated foo"
 
-overloadedrecfldsfail12.hs:10:20: warning:
+overloadedrecfldsfail12.hs:10:20: warning: [-Wdeprecations (in -Wdefault)]
     In the use of ‘bar’ (imported from OverloadedRecFldsFail12_A):
     "Deprecated bar"
 
-overloadedrecfldsfail12.hs:13:5: warning:
+overloadedrecfldsfail12.hs:13:5: warning: [-Wdeprecations (in -Wdefault)]
     In the use of ‘foo’ (imported from OverloadedRecFldsFail12_A):
     "Deprecated foo"
 
index 783b751..7a4e868 100644 (file)
@@ -1,17 +1,17 @@
 
-T2245.hs:4:10: warning:
+T2245.hs:4:10: warning: [-Wmissing-methods (in -Wdefault)]
     • No explicit implementation for
         ‘+’, ‘*’, ‘abs’, ‘signum’, ‘fromInteger’, and (either ‘negate’
                                                               or
                                                               ‘-’)
     • In the instance declaration for ‘Num T’
 
-T2245.hs:5:10: warning:
+T2245.hs:5:10: warning: [-Wmissing-methods (in -Wdefault)]
     • No explicit implementation for
         ‘fromRational’ and (either ‘recip’ or ‘/’)
     • In the instance declaration for ‘Fractional T’
 
-T2245.hs:7:29: warning:
+T2245.hs:7:29: warning: [-Wtype-defaults (in -Wall)]
     • Defaulting the following constraints to type ‘T’
         (Fractional a0)
           arising from the literal ‘1e400’ at T2245.hs:7:29-33
index a8d2f63..3869044 100644 (file)
@@ -1,9 +1,9 @@
 
-T3303.hs:7:7: warning:
+T3303.hs:7:7: warning: [-Wdeprecations (in -Wdefault)]
     In the use of ‘foo’ (imported from T3303A):
     Deprecated: "This is a multi-line
                  deprecation message
                  for foo"
 
-T3303.hs:10:8: warning:
+T3303.hs:10:8: warning: [-Wdeprecations (in -Wdefault)]
     In the use of ‘foo2’ (imported from T3303A): Deprecated: ""
index 030b2c5..f7a6508 100644 (file)
@@ -1,13 +1,15 @@
 
-read014.hs:4:1: warning:
+read014.hs:4:1: warning: [-Wmissing-signatures (in -Wall)]
     Top-level binding with no type signature:
       ng1 :: forall t a. Num a => t -> a -> a
 
-read014.hs:4:5: warning: Defined but not used: ‘x’
+read014.hs:4:5: warning: [-Wunused-local-binds (in -Wextra, -Wunused-binds)]
+    Defined but not used: ‘x’
 
-read014.hs:6:10: warning:
+read014.hs:6:10: warning: [-Wmissing-methods (in -Wdefault)]
     • No explicit implementation for
         ‘+’, ‘*’, ‘abs’, ‘signum’, and ‘fromInteger’
     • In the instance declaration for ‘Num (a, b)’
 
-read014.hs:8:53: warning: Defined but not used: ‘x’
+read014.hs:8:53: warning: [-Wunused-local-binds (in -Wextra, -Wunused-binds)]
+    Defined but not used: ‘x’
index 7e02028..5a3f40f 100644 (file)
@@ -1,5 +1,5 @@
 
-ExprSigLocal.hs:9:35: warning:
+ExprSigLocal.hs:9:35: warning: [-Wpartial-type-signatures (in -Wdefault)]
     • Found type wildcard ‘_’ standing for ‘a’
       Where: ‘a’ is a rigid type variable bound by
                the inferred type of <expression> :: a -> a at ExprSigLocal.hs:9:27
@@ -9,7 +9,7 @@ ExprSigLocal.hs:9:35: warning:
     • Relevant bindings include
         y :: b -> b (bound at ExprSigLocal.hs:9:1)
 
-ExprSigLocal.hs:11:21: warning:
+ExprSigLocal.hs:11:21: warning: [-Wpartial-type-signatures (in -Wdefault)]
     • Found type wildcard ‘_’ standing for ‘a’
       Where: ‘a’ is a rigid type variable bound by
                the inferred type of g :: a -> a at ExprSigLocal.hs:11:13
index 333a78f..abc5f44 100644 (file)
@@ -1,14 +1,14 @@
 [1 of 2] Compiling Splices          ( Splices.hs, Splices.o )
 [2 of 2] Compiling SplicesUsed      ( SplicesUsed.hs, SplicesUsed.o )
 
-SplicesUsed.hs:7:16: warning:
+SplicesUsed.hs:7:16: warning: [-Wpartial-type-signatures (in -Wdefault)]
     • Found type wildcard ‘_’ standing for ‘Maybe Bool’
     • In the type signature:
         maybeBool :: _
     • Relevant bindings include
         maybeBool :: Maybe Bool (bound at SplicesUsed.hs:8:1)
 
-SplicesUsed.hs:8:15: warning:
+SplicesUsed.hs:8:15: warning: [-Wpartial-type-signatures (in -Wdefault)]
     • Found type wildcard ‘_a’ standing for ‘t’
       Where: ‘t’ is a rigid type variable bound by
                the inferred type of <expression> :: t -> t at SplicesUsed.hs:8:15
@@ -18,7 +18,7 @@ SplicesUsed.hs:8:15: warning:
     • Relevant bindings include
         maybeBool :: Maybe Bool (bound at SplicesUsed.hs:8:1)
 
-SplicesUsed.hs:8:27: warning:
+SplicesUsed.hs:8:27: warning: [-Wpartial-type-signatures (in -Wdefault)]
     • Found type wildcard ‘_’ standing for ‘Bool’
     • In an expression type signature: Maybe _
       In the first argument of ‘id :: _a -> _a’, namely
@@ -27,7 +27,7 @@ SplicesUsed.hs:8:27: warning:
     • Relevant bindings include
         maybeBool :: Maybe Bool (bound at SplicesUsed.hs:8:1)
 
-SplicesUsed.hs:10:17: warning:
+SplicesUsed.hs:10:17: warning: [-Wpartial-type-signatures (in -Wdefault)]
     • Found type wildcard ‘_’ standing for ‘(Char, a)’
       Where: ‘a’ is a rigid type variable bound by
                the inferred type of charA :: a -> (Char, a)
@@ -37,7 +37,7 @@ SplicesUsed.hs:10:17: warning:
     • Relevant bindings include
         charA :: a -> (Char, a) (bound at SplicesUsed.hs:11:1)
 
-SplicesUsed.hs:13:14: warning:
+SplicesUsed.hs:13:14: warning: [-Wpartial-type-signatures (in -Wdefault)]
     • Found type wildcard ‘_’ standing for ‘a -> Bool’
       Where: ‘a’ is a rigid type variable bound by
                the inferred type of filter' :: (a -> Bool) -> [a] -> [a]
@@ -47,7 +47,7 @@ SplicesUsed.hs:13:14: warning:
     • Relevant bindings include
         filter' :: (a -> Bool) -> [a] -> [a] (bound at SplicesUsed.hs:14:1)
 
-SplicesUsed.hs:13:14: warning:
+SplicesUsed.hs:13:14: warning: [-Wpartial-type-signatures (in -Wdefault)]
     • Found type wildcard ‘_’ standing for ‘[a]’
       Where: ‘a’ is a rigid type variable bound by
                the inferred type of filter' :: (a -> Bool) -> [a] -> [a]
@@ -57,7 +57,7 @@ SplicesUsed.hs:13:14: warning:
     • Relevant bindings include
         filter' :: (a -> Bool) -> [a] -> [a] (bound at SplicesUsed.hs:14:1)
 
-SplicesUsed.hs:13:14: warning:
+SplicesUsed.hs:13:14: warning: [-Wpartial-type-signatures (in -Wdefault)]
     • Found type wildcard ‘_’ standing for ‘[a]’
       Where: ‘a’ is a rigid type variable bound by
                the inferred type of filter' :: (a -> Bool) -> [a] -> [a]
@@ -67,12 +67,12 @@ SplicesUsed.hs:13:14: warning:
     • Relevant bindings include
         filter' :: (a -> Bool) -> [a] -> [a] (bound at SplicesUsed.hs:14:1)
 
-SplicesUsed.hs:16:3: warning:
+SplicesUsed.hs:16:3: warning: [-Wpartial-type-signatures (in -Wdefault)]
     Found constraint wildcard ‘_’ standing for ‘Eq a’
     In the type signature:
       foo :: _ => _
 
-SplicesUsed.hs:16:3: warning:
+SplicesUsed.hs:16:3: warning: [-Wpartial-type-signatures (in -Wdefault)]
     • Found type wildcard ‘_’ standing for ‘a -> a -> Bool’
       Where: ‘a’ is a rigid type variable bound by
                the inferred type of foo :: Eq a => a -> a -> Bool
@@ -82,14 +82,14 @@ SplicesUsed.hs:16:3: warning:
     • Relevant bindings include
         foo :: a -> a -> Bool (bound at SplicesUsed.hs:16:3)
 
-SplicesUsed.hs:18:3: warning:
+SplicesUsed.hs:18:3: warning: [-Wpartial-type-signatures (in -Wdefault)]
     • Found type wildcard ‘_a’ standing for ‘Bool’
     • In the type signature:
         bar :: _a -> _b -> (_a, _b)
     • Relevant bindings include
         bar :: Bool -> t -> (Bool, t) (bound at SplicesUsed.hs:18:3)
 
-SplicesUsed.hs:18:3: warning:
+SplicesUsed.hs:18:3: warning: [-Wpartial-type-signatures (in -Wdefault)]
     • Found type wildcard ‘_b’ standing for ‘t’
       Where: ‘t’ is a rigid type variable bound by
                the inferred type of bar :: Bool -> t -> (Bool, t)
index 9cda918..d814f67 100644 (file)
@@ -1,10 +1,10 @@
 
-T10403.hs:15:7: warning:
+T10403.hs:15:7: warning: [-Wpartial-type-signatures (in -Wdefault)]
     Found constraint wildcard ‘_’ standing for ‘Functor f’
     In the type signature:
       h1 :: _ => _
 
-T10403.hs:15:12: warning:
+T10403.hs:15:12: warning: [-Wpartial-type-signatures (in -Wdefault)]
     • Found type wildcard ‘_’ standing for ‘(a -> b) -> f a -> H f’
       Where: ‘f’ is a rigid type variable bound by
                the inferred type of h1 :: Functor f => (a -> b) -> f a -> H f
@@ -20,7 +20,7 @@ T10403.hs:15:12: warning:
     • Relevant bindings include
         h1 :: (a -> b) -> f a -> H f (bound at T10403.hs:17:1)
 
-T10403.hs:19:7: warning:
+T10403.hs:19:7: warning: [-Wpartial-type-signatures (in -Wdefault)]
     • Found type wildcard ‘_’ standing for ‘(a -> b) -> f0 a -> H f0’
       Where: ‘f0’ is an ambiguous type variable
              ‘b’ is a rigid type variable bound by
index d04fca2..3871a63 100644 (file)
@@ -1,5 +1,5 @@
 
-T10438.hs:7:22: warning:
+T10438.hs:7:22: warning: [-Wpartial-type-signatures (in -Wdefault)]
     • Found type wildcard ‘_’ standing for ‘t2’
       Where: ‘t2’ is a rigid type variable bound by
                the inferred type of g :: t2 -> t2 at T10438.hs:6:9
index 9a3215e..4ae894f 100644 (file)
@@ -1,8 +1,8 @@
 
-T10463.hs:5:9: warning:
-    Found type wildcard ‘_’ standing for ‘[Char]’
-    In a pattern type signature: _
-    In the pattern: x :: _
-    In an equation for ‘f’: f (x :: _) = x ++ ""
-    Relevant bindings include
-      f :: [Char] -> [Char] (bound at T10463.hs:5:1)
+T10463.hs:5:9: warning: [-Wpartial-type-signatures (in -Wdefault)]
+    • Found type wildcard ‘_’ standing for ‘[Char]’
+    • In a pattern type signature: _
+      In the pattern: x :: _
+      In an equation for ‘f’: f (x :: _) = x ++ ""
+    • Relevant bindings include
+        f :: [Char] -> [Char] (bound at T10463.hs:5:1)
index 603d0bc..ba98d7a 100644 (file)
@@ -1,5 +1,5 @@
 
-T10519.hs:5:18: warning:
+T10519.hs:5:18: warning: [-Wpartial-type-signatures (in -Wdefault)]
     Found constraint wildcard ‘_’ standing for ‘Eq a’
     In the type signature:
       foo :: forall a. _ => a -> a -> Bool
index 74dd18d..5d9ad09 100644 (file)
@@ -1,10 +1,10 @@
 
-T11016.hs:5:19: warning:
+T11016.hs:5:19: warning: [-Wpartial-type-signatures (in -Wdefault)]
     Found constraint wildcard ‘_’ standing for ‘()’
     In the type signature:
       f1 :: (?x :: Int, _) => Int
 
-T11016.hs:8:22: warning:
+T11016.hs:8:22: warning: [-Wpartial-type-signatures (in -Wdefault)]
     • Found type wildcard ‘_’ standing for ‘Int’
     • In the type signature:
         f2 :: (?x :: Int) => _
index f2892b7..558097c 100644 (file)
@@ -1,5 +1,5 @@
 
-T11192.hs:7:14: warning:
+T11192.hs:7:14: warning: [-Wpartial-type-signatures (in -Wdefault)]
     • Found type wildcard ‘_’ standing for ‘Int -> t -> t’
       Where: ‘t’ is a rigid type variable bound by
                the inferred type of go :: Int -> t -> t at T11192.hs:8:8
@@ -20,7 +20,7 @@ T11192.hs:7:14: warning:
         go :: Int -> t -> t (bound at T11192.hs:8:8)
         fails :: a (bound at T11192.hs:6:1)
 
-T11192.hs:13:14: warning:
+T11192.hs:13:14: warning: [-Wpartial-type-signatures (in -Wdefault)]
     • Found type wildcard ‘_’ standing for ‘t1 -> t -> t’
       Where: ‘t’ is a rigid type variable bound by
                the inferred type of go :: t1 -> t -> t at T11192.hs:14:8
index 2f92c65..a132b72 100644 (file)
@@ -1,16 +1,16 @@
 
-TypedSplice.hs:9:22: warning:
-    Found type wildcard ‘_’ standing for ‘Bool’
-    In an expression type signature: _ -> _b
-    In the Template Haskell quotation [|| not :: _ -> _b ||]
-    In the expression: [|| not :: _ -> _b ||]
-    Relevant bindings include
-      metaExp :: Q (TExp (Bool -> Bool)) (bound at TypedSplice.hs:9:1)
+TypedSplice.hs:9:22: warning: [-Wpartial-type-signatures (in -Wdefault)]
+    • Found type wildcard ‘_’ standing for ‘Bool’
+    • In an expression type signature: _ -> _b
+      In the Template Haskell quotation [|| not :: _ -> _b ||]
+      In the expression: [|| not :: _ -> _b ||]
+    • Relevant bindings include
+        metaExp :: Q (TExp (Bool -> Bool)) (bound at TypedSplice.hs:9:1)
 
-TypedSplice.hs:9:27: warning:
-    Found type wildcard ‘_b’ standing for ‘Bool’
-    In an expression type signature: _ -> _b
-    In the Template Haskell quotation [|| not :: _ -> _b ||]
-    In the expression: [|| not :: _ -> _b ||]
-    Relevant bindings include
-      metaExp :: Q (TExp (Bool -> Bool)) (bound at TypedSplice.hs:9:1)
+TypedSplice.hs:9:27: warning: [-Wpartial-type-signatures (in -Wdefault)]
+    • Found type wildcard ‘_b’ standing for ‘Bool’
+    • In an expression type signature: _ -> _b
+      In the Template Haskell quotation [|| not :: _ -> _b ||]
+      In the expression: [|| not :: _ -> _b ||]
+    • Relevant bindings include
+        metaExp :: Q (TExp (Bool -> Bool)) (bound at TypedSplice.hs:9:1)
index 3fd0860..7013696 100644 (file)
@@ -5,9 +5,9 @@ TYPE CONSTRUCTORS
 COERCION AXIOMS
 Dependent modules: []
 Dependent packages: [base-4.9.0.0, ghc-prim-0.5.0.0,
-                     integer-gmp-1.0.0.0]
+                     integer-gmp-1.0.0.1]
 
-WarningWildcardInstantiations.hs:5:14: warning:
+WarningWildcardInstantiations.hs:5:14: warning: [-Wpartial-type-signatures (in -Wdefault)]
     • Found type wildcard ‘_a’ standing for ‘a’
       Where: ‘a’ is a rigid type variable bound by
                the inferred type of foo :: (Show a, Enum a) => a -> String
@@ -17,19 +17,19 @@ WarningWildcardInstantiations.hs:5:14: warning:
     • Relevant bindings include
         foo :: a -> String (bound at WarningWildcardInstantiations.hs:6:1)
 
-WarningWildcardInstantiations.hs:5:18: warning:
+WarningWildcardInstantiations.hs:5:18: warning: [-Wpartial-type-signatures (in -Wdefault)]
     Found constraint wildcard ‘_’ standing for ‘Enum a’
     In the type signature:
       foo :: (Show _a, _) => _a -> _
 
-WarningWildcardInstantiations.hs:5:30: warning:
+WarningWildcardInstantiations.hs:5:30: warning: [-Wpartial-type-signatures (in -Wdefault)]
     • Found type wildcard ‘_’ standing for ‘String’
     • In the type signature:
         foo :: (Show _a, _) => _a -> _
     • Relevant bindings include
         foo :: a -> String (bound at WarningWildcardInstantiations.hs:6:1)
 
-WarningWildcardInstantiations.hs:8:8: warning:
+WarningWildcardInstantiations.hs:8:8: warning: [-Wpartial-type-signatures (in -Wdefault)]
     • Found type wildcard ‘_’ standing for ‘t1’
       Where: ‘t1’ is a rigid type variable bound by
                the inferred type of bar :: t1 -> (t1 -> t) -> t
@@ -40,7 +40,7 @@ WarningWildcardInstantiations.hs:8:8: warning:
         bar :: t1 -> (t1 -> t) -> t
           (bound at WarningWildcardInstantiations.hs:9:1)
 
-WarningWildcardInstantiations.hs:8:13: warning:
+WarningWildcardInstantiations.hs:8:13: warning: [-Wpartial-type-signatures (in -Wdefault)]
     • Found type wildcard ‘_’ standing for ‘t1 -> t’
       Where: ‘t’ is a rigid type variable bound by
                the inferred type of bar :: t1 -> (t1 -> t) -> t
@@ -54,7 +54,7 @@ WarningWildcardInstantiations.hs:8:13: warning:
         bar :: t1 -> (t1 -> t) -> t
           (bound at WarningWildcardInstantiations.hs:9:1)
 
-WarningWildcardInstantiations.hs:8:18: warning:
+WarningWildcardInstantiations.hs:8:18: warning: [-Wpartial-type-signatures (in -Wdefault)]
     • Found type wildcard ‘_’ standing for ‘t’
       Where: ‘t’ is a rigid type variable bound by
                the inferred type of bar :: t1 -> (t1 -> t) -> t
index 6cc4f94..460bc63 100644 (file)
@@ -1,5 +1,5 @@
 
-Defaulting1MROff.hs:7:10: warning:
+Defaulting1MROff.hs:7:10: warning: [-Wpartial-type-signatures (in -Wdefault)]
     • Found type wildcard ‘_’ standing for ‘Integer’
     • In the type signature:
         alpha :: _
index 57a74f9..4a8b75b 100644 (file)
@@ -1,5 +1,5 @@
 
-T11122.hs:19:18: warning:
+T11122.hs:19:18: warning: [-Wpartial-type-signatures (in -Wdefault)]
     • Found type wildcard ‘_’ standing for ‘Int’
     • In the type signature:
         parser :: Parser _
index 86d8575..15b5bd0 100644 (file)
@@ -1,5 +1,5 @@
 
-T11283.hs:6:5: warning:
+T11283.hs:6:5: warning: [-Wmissing-fields (in -Wdefault)]
     • Fields of ‘S’ not initialised: x
     • In the expression: S {..}
       In an equation for ‘e’: e = S {..}
index 8bc6563..e583aa1 100644 (file)
@@ -1,19 +1,19 @@
 
-T11053.hs:7:1: warning:
+T11053.hs:7:1: warning: [-Wmissing-pattern-synonym-signatures (in -Wall)]
     Top-level binding with no type signature: T :: Bool
 
-T11053.hs:9:1: warning:
+T11053.hs:9:1: warning: [-Wmissing-pattern-synonym-signatures (in -Wall)]
     Top-level binding with no type signature:
       J :: forall t. t -> Maybe t
 
-T11053.hs:11:1: warning:
+T11053.hs:11:1: warning: [-Wmissing-pattern-synonym-signatures (in -Wall)]
     Top-level binding with no type signature:
       J1 :: forall t. t -> Maybe t
 
-T11053.hs:13:1: warning:
+T11053.hs:13:1: warning: [-Wmissing-pattern-synonym-signatures (in -Wall)]
     Top-level binding with no type signature:
       J2 :: forall t. t -> Maybe t
 
-T11053.hs:15:1: warning:
+T11053.hs:15:1: warning: [-Wmissing-pattern-synonym-signatures (in -Wall)]
     Top-level binding with no type signature:
       J3 :: forall t. t -> Maybe t
index e405792..dc7f003 100644 (file)
@@ -1,12 +1,12 @@
 
-T1789.hs:6:1: Warning:
+T1789.hs:6:1: warning: [-Wmissing-import-lists]
     The module ‘Prelude’ does not have an explicit import list
 
-T1789.hs:7:1: Warning:
+T1789.hs:7:1: warning: [-Wmissing-import-lists]
     The module ‘Data.Map’ does not have an explicit import list
 
-T1789.hs:9:1: Warning:
+T1789.hs:9:1: warning: [-Wmissing-import-lists]
     The import item ‘Maybe(..)’ does not have an explicit import list
 
-T1789.hs:10:1: Warning:
+T1789.hs:10:1: warning: [-Wmissing-import-lists]
     The module ‘Data.Maybe’ does not have an explicit import list
index 308cabe..9d0457e 100644 (file)
@@ -1 +1,3 @@
- T17a.hs:8:1: Warning: Defined but not used: ‘top’ 
\ No newline at end of file
+
+T17a.hs:8:1: warning: [-Wunused-local-binds (in -Wextra, -Wunused-binds)]
+    Defined but not used: ‘top’
index 3291264..c94b869 100644 (file)
@@ -1 +1,3 @@
- T17b.hs:17:12: Warning: Defined but not used: ‘local’ 
\ No newline at end of file
+
+T17b.hs:17:12: warning: [-Wunused-local-binds (in -Wextra, -Wunused-binds)]
+    Defined but not used: ‘local’
index bfab9f8..194e598 100644 (file)
@@ -1 +1,3 @@
- T17c.hs:11:11: Warning: This pattern-binding binds no variables: True = True 
\ No newline at end of file
+
+T17c.hs:11:11: warning: [-Wunused-pattern-binds (in -Wextra, -Wunused-binds)]
+    This pattern-binding binds no variables: True = True
index babe6b7..6c99f17 100644 (file)
@@ -1 +1,3 @@
- T17d.hs:14:5: Warning: Defined but not used: ‘match’ 
\ No newline at end of file
+
+T17d.hs:14:5: warning: [-Wunused-local-binds (in -Wextra, -Wunused-binds)]
+    Defined but not used: ‘match’
index 48f28b8..e63f479 100644 (file)
@@ -1,7 +1,9 @@
 
-T17e.hs:8:1: Warning: Defined but not used: ‘top’
+T17e.hs:8:1: warning: [-Wunused-local-binds (in -Wextra, -Wunused-binds)]
+    Defined but not used: ‘top’
 
-T17e.hs:11:11: Warning:
+T17e.hs:11:11: warning: [-Wunused-pattern-binds (in -Wextra, -Wunused-binds)]
     This pattern-binding binds no variables: True = True
 
-T17e.hs:17:12: Warning: Defined but not used: ‘local’
+T17e.hs:17:12: warning: [-Wunused-local-binds (in -Wextra, -Wunused-binds)]
+    Defined but not used: ‘local’
index 32af87a..439684a 100644 (file)
@@ -1,12 +1,13 @@
 
-T1972.hs:12:3: warning:
+T1972.hs:12:3: warning: [-Wname-shadowing (in -Wall)]
     This binding for ‘name’ shadows the existing binding
       defined at T1972.hs:9:19
 
-T1972.hs:14:3: warning:
+T1972.hs:14:3: warning: [-Wname-shadowing (in -Wall)]
     This binding for ‘mapAccumL’ shadows the existing bindings
       imported from ‘Data.List’ at T1972.hs:7:1-16
       (and originally defined in ‘Data.Traversable’)
       defined at T1972.hs:16:1
 
-T1972.hs:20:10: warning: Defined but not used: ‘c’
+T1972.hs:20:10: warning: [-Wunused-local-binds (in -Wextra, -Wunused-binds)]
+    Defined but not used: ‘c’
index 0639076..6950017 100644 (file)
@@ -1,8 +1,8 @@
 
-T3262.hs:12:11: Warning:
+T3262.hs:12:11: warning: [-Wname-shadowing (in -Wall)]
     This binding for ‘not_ignored’ shadows the existing binding
       bound at T3262.hs:11:11
 
-T3262.hs:20:15: Warning:
+T3262.hs:20:15: warning: [-Wname-shadowing (in -Wall)]
     This binding for ‘not_ignored’ shadows the existing binding
       bound at T3262.hs:19:15
index 20a597f..d543404 100644 (file)
@@ -1,2 +1,3 @@
 
-T3371.hs:10:14: Warning: Defined but not used: ‘a’
+T3371.hs:10:14: warning: [-Wunused-local-binds (in -Wextra, -Wunused-binds)]
+    Defined but not used: ‘a’
index bfb0021..4f854d1 100644 (file)
@@ -1,2 +1,3 @@
 
-T3449.hs-boot:8:1: Warning: Defined but not used: ‘unused’
+T3449.hs-boot:8:1: warning: [-Wunused-local-binds (in -Wextra, -Wunused-binds)]
+    Defined but not used: ‘unused’
index 2e7f918..abb6438 100644 (file)
@@ -1,6 +1,6 @@
 
-T4489.hs:4:1: Warning:
+T4489.hs:4:1: warning: [-Wmissing-import-lists]
     The module ‘Data.Maybe’ does not have an explicit import list
 
-T4489.hs:5:1: Warning:
+T4489.hs:5:1: warning: [-Wmissing-import-lists]
     The import item ‘Maybe(..)’ does not have an explicit import list
index 6a783e5..9bc0b10 100644 (file)
@@ -1,12 +1,12 @@
 
-T5331.hs:8:17: warning:
+T5331.hs:8:17: warning: [-Wunused-foralls (in -Wextra)]
     Unused quantified type variable ‘a’
     In the definition of data constructor ‘S1’
 
-T5331.hs:11:16: warning:
+T5331.hs:11:16: warning: [-Wunused-foralls (in -Wextra)]
     Unused quantified type variable ‘a’
     In the type ‘forall a. W’
 
-T5331.hs:13:13: warning:
+T5331.hs:13:13: warning: [-Wunused-foralls (in -Wextra)]
     Unused quantified type variable ‘a’
     In the type ‘forall a. Int’
index 866eae2..3e15e5b 100644 (file)
@@ -1,13 +1,13 @@
 
-T5334.hs:7:5: Warning:
-    Fields of ‘T’ not initialised: b
-    In the expression: T {..}
-    In an equation for ‘t’:
-        t = T {..}
-          where
-              a = 1
+T5334.hs:7:5: warning: [-Wmissing-fields (in -Wdefault)]
+    • Fields of ‘T’ not initialised: b
+    • In the expression: T {..}
+      In an equation for ‘t’:
+          t = T {..}
+            where
+                a = 1
 
-T5334.hs:14:5: Warning:
-    Fields of ‘S’ not initialised: y
-    In the expression: S {x = 1}
-    In an equation for ‘s’: s = S {x = 1}
+T5334.hs:14:5: warning: [-Wmissing-fields (in -Wdefault)]
+    • Fields of ‘S’ not initialised: y
+    • In the expression: S {x = 1}
+      In an equation for ‘s’: s = S {x = 1}
index b347240..34724ad 100644 (file)
@@ -1,8 +1,8 @@
 
-T5867.hs:4:7: Warning:
+T5867.hs:4:7: warning: [-Wdeprecations (in -Wdefault)]
     In the use of ‘f’ (imported from T5867a):
     Deprecated: "Don't use f!"
 
-T5867.hs:5:7: Warning:
+T5867.hs:5:7: warning: [-Wdeprecations (in -Wdefault)]
     In the use of ‘f’ (imported from T5867a):
     Deprecated: "Don't use f!"
index b642ed6..eb54e06 100644 (file)
@@ -1,3 +1,3 @@
 
-T7085.hs:8:6: Warning:
+T7085.hs:8:6: warning: [-Wunused-pattern-binds (in -Wextra, -Wunused-binds)]
     This pattern-binding binds no variables: Nothing = Just n
index ed2333e..3327446 100644 (file)
@@ -1,2 +1,3 @@
 
-T7145b.hs:7:1: Warning: Defined but not used: ‘pure’
+T7145b.hs:7:1: warning: [-Wunused-local-binds (in -Wextra, -Wunused-binds)]
+    Defined but not used: ‘pure’
index ecad80c..22aaf64 100644 (file)
@@ -1,2 +1,3 @@
 
-T7167.hs:5:1: Warning: Module ‘Data.List’ does not export ‘foo’
+T7167.hs:5:1: warning: [-Wdodgy-imports (in -Wextra)]
+    Module ‘Data.List’ does not export ‘foo’
index 3d2e40f..81c69fd 100644 (file)
@@ -1,3 +1,4 @@
- T9778.hs:8:10: Warning:
-     Unticked promoted constructor: ‘A’.
-         Use ‘'A’ instead of ‘A’.
+
+T9778.hs:8:10: warning: [-Wunticked-promoted-constructors (in -Wall)]
+    Unticked promoted constructor: ‘A’.
+    Use ‘'A’ instead of ‘A’.
index b0d3255..aa33c14 100644 (file)
@@ -1,2 +1,3 @@
 
-mc10.hs:14:11: Warning: Defined but not used: ‘y’
+mc10.hs:14:11: warning: [-Wunused-local-binds (in -Wextra, -Wunused-binds)]
+    Defined but not used: ‘y’
index 8dea678..eaf268f 100644 (file)
@@ -1,5 +1,5 @@
 
-rn037.hs:3:1: Warning:
+rn037.hs:3:1: warning: [-Wunused-imports (in -Wextra)]
     The import of ‘Data.List’ is redundant
       except perhaps to import instances from ‘Data.List’
     To import instances alone, use: import Data.List()
index de8618d..b662775 100644 (file)
@@ -1,5 +1,5 @@
 
-rn039.hs:6:16: Warning:
+rn039.hs:6:16: warning: [-Wname-shadowing (in -Wall)]
     This binding for ‘-’ shadows the existing binding
       imported from ‘Prelude’ at rn039.hs:2:8-20
       (and originally defined in ‘GHC.Num’)
index f482b47..1e0d4a3 100644 (file)
@@ -1,4 +1,6 @@
 
-rn040.hs:6:12: Warning: Defined but not used: ‘y’
+rn040.hs:6:12: warning: [-Wunused-local-binds (in -Wextra, -Wunused-binds)]
+    Defined but not used: ‘y’
 
-rn040.hs:8:8: Warning: Defined but not used: ‘w’
+rn040.hs:8:8: warning: [-Wunused-local-binds (in -Wextra, -Wunused-binds)]
+    Defined but not used: ‘w’
index e9c2727..891a2b2 100644 (file)
@@ -1,6 +1,9 @@
 
-rn041.hs:7:1: Warning: Defined but not used: ‘f’
+rn041.hs:7:1: warning: [-Wunused-local-binds (in -Wextra, -Wunused-binds)]
+    Defined but not used: ‘f’
 
-rn041.hs:9:1: Warning: Defined but not used: ‘g’
+rn041.hs:9:1: warning: [-Wunused-local-binds (in -Wextra, -Wunused-binds)]
+    Defined but not used: ‘g’
 
-rn041.hs:10:1: Warning: Defined but not used: ‘h’
+rn041.hs:10:1: warning: [-Wunused-local-binds (in -Wextra, -Wunused-binds)]
+    Defined but not used: ‘h’
index c2a4195..458feae 100644 (file)
@@ -1,8 +1,8 @@
 
-rn046.hs:2:1: Warning:
+rn046.hs:2:1: warning: [-Wunused-imports (in -Wextra)]
     The import of ‘Data.List’ is redundant
       except perhaps to import instances from ‘Data.List’
     To import instances alone, use: import Data.List()
 
-rn046.hs:3:1: Warning:
+rn046.hs:3:1: warning: [-Wunused-imports (in -Wextra)]
     The import of ‘ord’ from module ‘Data.Char’ is redundant
index 0987f35..168adb5 100644 (file)
@@ -1,2 +1,3 @@
 
-rn047.hs:12:11: Warning: Defined but not used: ‘y’
+rn047.hs:12:11: warning: [-Wunused-local-binds (in -Wextra, -Wunused-binds)]
+    Defined but not used: ‘y’
index 472333e..93df1a9 100644 (file)
@@ -1,8 +1,8 @@
 
-rn050.hs:13:7: Warning:
+rn050.hs:13:7: warning: [-Wdeprecations (in -Wdefault)]
     In the use of ‘op’ (imported from Rn050_A):
     Deprecated: "Use bop instead"
 
-rn050.hs:13:10: Warning:
+rn050.hs:13:10: warning: [-Wdeprecations (in -Wdefault)]
     In the use of data constructor ‘C’ (imported from Rn050_A):
     Deprecated: "Use D instead"
index 1b928b4..93c74ff 100644 (file)
@@ -1,2 +1,3 @@
 
-rn055.hs:1:1: Warning: Module `Prelude' implicitly imported
+rn055.hs:1:1: warning: [-Wimplicit-prelude]
+    Module `Prelude' implicitly imported
index 93cd865..ff4d409 100644 (file)
@@ -1,4 +1,6 @@
 
-rn063.hs:10:9: Warning: Defined but not used: ‘x’
+rn063.hs:10:9: warning: [-Wunused-local-binds (in -Wextra, -Wunused-binds)]
+    Defined but not used: ‘x’
 
-rn063.hs:13:9: Warning: Defined but not used: ‘y’
+rn063.hs:13:9: warning: [-Wunused-local-binds (in -Wextra, -Wunused-binds)]
+    Defined but not used: ‘y’
index 09d9587..cac51b1 100644 (file)
@@ -1,4 +1,4 @@
 
-rn064.hs:13:12: Warning:
+rn064.hs:13:12: warning: [-Wname-shadowing (in -Wall)]
     This binding for ‘r’ shadows the existing binding
       bound at rn064.hs:15:9
index b82b50f..660129f 100644 (file)
@@ -1,8 +1,8 @@
 
-rn066.hs:13:7: Warning:
+rn066.hs:13:7: warning: [-Wdeprecations (in -Wdefault)]
     In the use of ‘op’ (imported from Rn066_A):
     "Is that really a good idea?"
 
-rn066.hs:13:10: Warning:
+rn066.hs:13:10: warning: [-Wdeprecations (in -Wdefault)]
     In the use of data constructor ‘C’ (imported from Rn066_A):
     "Are you sure you want to do that?"
index 66b2dee..682479a 100644 (file)
@@ -1,4 +1,4 @@
 
-T2723.hs:15:5: Warning:
+T2723.hs:15:5: warning: [-Wname-shadowing (in -Wall)]
     This binding for ‘field3’ shadows the existing binding
       defined at T2723.hs:7:1
index 2a736db..dc02ab4 100644 (file)
@@ -1,5 +1,5 @@
 
-T5211.hs:5:1: Warning:
+T5211.hs:5:1: warning: [-Wunused-imports (in -Wextra)]
     The qualified import of ‘Foreign.Storable’ is redundant
       except perhaps to import instances from ‘Foreign.Storable’
     To import instances alone, use: import Foreign.Storable()
index d8bcc8f..26d7b8d 100644 (file)
@@ -1,4 +1,4 @@
 
-T5281.hs:6:5: Warning:
+T5281.hs:6:5: warning: [-Wdeprecations (in -Wdefault)]
     In the use of ‘deprec’ (imported from T5281A):
     Deprecated: "This is deprecated"
index f382cd3..b3f1145 100644 (file)
@@ -1,10 +1,10 @@
 
-T5892a.hs:12:8: Warning:
-    Fields of ‘Node’ not initialised: subForest
-    In the expression: Node {..}
-    In the expression: let rootLabel = [] in Node {..}
-    In an equation for ‘foo’:
-        foo (Node {..}) = let rootLabel = ... in Node {..}
+T5892a.hs:12:8: warning: [-Wmissing-fields (in -Wdefault)]
+    • Fields of ‘Node’ not initialised: subForest
+    • In the expression: Node {..}
+      In the expression: let rootLabel = [] in Node {..}
+      In an equation for ‘foo’:
+          foo (Node {..}) = let rootLabel = ... in Node {..}
 
-<no location info>: 
+<no location info>: error: 
 Failing due to -Werror.
index 9f89985..8baef5d 100644 (file)
@@ -1,3 +1,3 @@
 
-T7454.hs:5:1: Warning:
+T7454.hs:5:1: warning: [-Wunused-imports (in -Wextra)]
     The import of ‘Arrow’ from module ‘Control.Arrow’ is redundant
index 1bb7f0d..3cef09b 100644 (file)
@@ -1,4 +1,4 @@
 
-T8149.hs:5:1: Warning:
+T8149.hs:5:1: warning: [-Wunused-imports (in -Wextra)]
     The import of ‘WriterT’
     from module ‘Control.Monad.Trans.Writer’ is redundant
index 2c75819..277fea6 100644 (file)
@@ -1,8 +1,8 @@
 
-SemigroupWarnings.hs:17:10: warning:
+SemigroupWarnings.hs:17:10: warning: [-Wsemigroup (in -Wcompat)]
     ‘LacksSemigroup’ is an instance of Monoid but not Semigroup.
     This will become an error in a future release.
 
-SemigroupWarnings.hs:34:1: warning:
+SemigroupWarnings.hs:34:1: warning: [-Wsemigroup (in -Wcompat)]
     Local definition of ‘<>’ clashes with a future Prelude name.
     This will become an error in a future release.
index b21a412..2ac861f 100644 (file)
@@ -1,5 +1,5 @@
 
-Simpl020_A.hs:26:10: warning:
+Simpl020_A.hs:26:10: warning: [-Wmissing-methods (in -Wdefault)]
     • No explicit implementation for
         ‘toGUIObject’ and ‘cset’
     • In the instance declaration for ‘GUIObject ()’
index 70e210f..3893a29 100644 (file)
@@ -1,5 +1,5 @@
 
-B.hs:7:10: Warning:
-    No explicit implementation for
-      ‘row’
-    In the instance declaration for ‘Matrix Bool Val’
+B.hs:7:10: warning: [-Wmissing-methods (in -Wdefault)]
+    • No explicit implementation for
+        ‘row’
+    • In the instance declaration for ‘Matrix Bool Val’
index dd4d290..76b78a6 100644 (file)
@@ -1,5 +1,5 @@
 
-HasKey.hs:22:10: Warning:
-    No explicit implementation for
-      either ‘compare’ or ‘<=’
-    In the instance declaration for ‘Ord (Keyed x)’
+HasKey.hs:22:10: warning: [-Wmissing-methods (in -Wdefault)]
+    • No explicit implementation for
+        either ‘compare’ or ‘<=’
+    • In the instance declaration for ‘Ord (Keyed x)’
index 2279cfc..b8db0fb 100644 (file)
@@ -1,6 +1,6 @@
 
-T10935.hs:5:11: warning:
-    The Monomorphism Restriction applies to the binding for ‘y’
-      Consider giving a type signature for ‘y’
-    In the expression: let y = x + 1 in (y, y)
-    In an equation for ‘f’: f x = let y = x + 1 in (y, y)
+T10935.hs:5:11: warning: [-Wmonomorphism-restriction]
+    • The Monomorphism Restriction applies to the binding for ‘y’
+        Consider giving a type signature for ‘y’
+    • In the expression: let y = x + 1 in (y, y)
+      In an equation for ‘f’: f x = let y = x + 1 in (y, y)
index eea8a11..0702b32 100644 (file)
@@ -1,38 +1,38 @@
 
-T10971a.hs:7:1: warning:
+T10971a.hs:7:1: warning: [-Wmissing-signatures (in -Wall)]
     Top-level binding with no type signature: f :: forall a. [a] -> Int
 
-T10971a.hs:7:11: warning:
+T10971a.hs:7:11: warning: [-Wtype-defaults (in -Wall)]
     • Defaulting the following constraint to type ‘[]’
         Foldable t0 arising from a use of ‘length’
     • In the expression: length x
       In the expression: \ x -> length x
       In an equation for ‘f’: f = \ x -> length x
 
-T10971a.hs:8:1: warning:
+T10971a.hs:8:1: warning: [-Wmissing-signatures (in -Wall)]
     Top-level binding with no type signature:
       g :: forall a b. (a -> b) -> [a] -> [b]
 
-T10971a.hs:8:6: warning:
+T10971a.hs:8:6: warning: [-Wname-shadowing (in -Wall)]
     This binding for ‘f’ shadows the existing binding
       defined at T10971a.hs:7:1
 
-T10971a.hs:8:13: warning:
+T10971a.hs:8:13: warning: [-Wtype-defaults (in -Wall)]
     • Defaulting the following constraint to type ‘[]’
         Traversable t0 arising from a use of ‘fmapDefault’
     • In the expression: fmapDefault f x
       In the expression: \ f x -> fmapDefault f x
       In an equation for ‘g’: g = \ f x -> fmapDefault f x
 
-T10971a.hs:9:1: warning:
+T10971a.hs:9:1: warning: [-Wmissing-signatures (in -Wall)]
     Top-level binding with no type signature:
       h :: forall b a. (a -> b) -> [a] -> ([b], Int)
 
-T10971a.hs:9:6: warning:
+T10971a.hs:9:6: warning: [-Wname-shadowing (in -Wall)]
     This binding for ‘f’ shadows the existing binding
       defined at T10971a.hs:7:1
 
-T10971a.hs:9:31: warning:
+T10971a.hs:9:31: warning: [-Wtype-defaults (in -Wall)]
     • Defaulting the following constraints to type ‘[]’
         (Foldable t0) arising from a use of ‘length’ at T10971a.hs:9:31-38
         (Traversable t0)
index da730a0..2fefbbd 100644 (file)
@@ -1,2 +1,3 @@
 
-T2497.hs:22:1: warning: Defined but not used: ‘beq’
+T2497.hs:22:1: warning: [-Wunused-local-binds (in -Wextra, -Wunused-binds)]
+    Defined but not used: ‘beq’
index 06229b8..6058e70 100644 (file)
@@ -1,3 +1,3 @@
 
-T3696.hs:9:1: warning:
+T3696.hs:9:1: warning: [-Wmissing-signatures (in -Wall)]
     Top-level binding with no type signature: def :: Int
index 02ff1ad..104275c 100644 (file)
@@ -1,11 +1,11 @@
 
-T4912.hs:10:1: warning:
+T4912.hs:10:1: warning: [-Worphans (in -Wall)]
     Orphan instance: instance Foo TheirData
     To avoid this
         move the instance declaration to the module of the class or of the type, or
         wrap the type with a newtype and declare the instance on the new type.
 
-T4912.hs:13:1: warning:
+T4912.hs:13:1: warning: [-Worphans (in -Wall)]
     Orphan instance: instance Bar OurData
     To avoid this
         move the instance declaration to the module of the class or of the type, or
index 7020e1c..efffb2e 100644 (file)
@@ -1,10 +1,10 @@
 
-T7903.hs:6:10: Warning:
-    No explicit implementation for
-      either ‘==’ or ‘/=’
-    In the instance declaration for ‘Eq (a -> b)’
+T7903.hs:6:10: warning: [-Wmissing-methods (in -Wdefault)]
+    • No explicit implementation for
+        either ‘==’ or ‘/=’
+    • In the instance declaration for ‘Eq (a -> b)’
 
-T7903.hs:7:10: Warning:
-    No explicit implementation for
-      either ‘compare’ or ‘<=’
-    In the instance declaration for ‘Ord (a -> b)’
+T7903.hs:7:10: warning: [-Wmissing-methods (in -Wdefault)]
+    • No explicit implementation for
+        either ‘compare’ or ‘<=’
+    • In the instance declaration for ‘Ord (a -> b)’
index ca22451..ddbb5b9 100644 (file)
@@ -1,5 +1,5 @@
 
-T9497a.hs:2:8: warning:
+T9497a.hs:2:8: warning: [-Wtyped-holes (in -Wdefault)]
     • Found hole: _main :: IO ()
       Or perhaps ‘_main’ is mis-spelled, or not in scope
     • In the expression: _main
index 8551f66..0d0582d 100644 (file)
@@ -1,5 +1,5 @@
 
-holes.hs:3:5: warning:
+holes.hs:3:5: warning: [-Wtyped-holes (in -Wdefault)]
     • Found hole: _ :: t
       Where: ‘t’ is a rigid type variable bound by
                the inferred type of f :: t at holes.hs:3:1
@@ -7,7 +7,7 @@ holes.hs:3:5: warning:
       In an equation for ‘f’: f = _
     • Relevant bindings include f :: t (bound at holes.hs:3:1)
 
-holes.hs:6:7: warning:
+holes.hs:6:7: warning: [-Wtyped-holes (in -Wdefault)]
     • Found hole: _ :: Char
     • In the expression: _
       In an equation for ‘g’: g x = _
@@ -15,14 +15,14 @@ holes.hs:6:7: warning:
         x :: Int (bound at holes.hs:6:3)
         g :: Int -> Char (bound at holes.hs:6:1)
 
-holes.hs:8:5: warning:
+holes.hs:8:5: warning: [-Wtyped-holes (in -Wdefault)]
     • Found hole: _ :: [Char]
     • In the first argument of ‘(++)’, namely ‘_’
       In the expression: _ ++ "a"
       In an equation for ‘h’: h = _ ++ "a"
     • Relevant bindings include h :: [Char] (bound at holes.hs:8:1)
 
-holes.hs:11:15: warning:
+holes.hs:11:15: warning: [-Wtyped-holes (in -Wdefault)]
     • Found hole: _ :: b0
       Where: ‘b0’ is an ambiguous type variable
     • In the second argument of ‘const’, namely ‘_’
index 08d1b46..51c4da9 100644 (file)
@@ -13,7 +13,7 @@ holes2.hs:3:5: warning:
     • In the expression: show _
       In an equation for ‘f’: f = show _
 
-holes2.hs:3:10: warning:
+holes2.hs:3:10: warning: [-Wtyped-holes (in -Wdefault)]
     • Found hole: _ :: a0
       Where: ‘a0’ is an ambiguous type variable
     • In the first argument of ‘show’, namely ‘_’
index fa9d3ac..453ad78 100644 (file)
@@ -1,10 +1,10 @@
 
-tc078.hs:9:10: Warning:
-    No explicit implementation for
-      either ‘==’ or ‘/=’
-    In the instance declaration for ‘Eq (Bar a)’
+tc078.hs:9:10: warning: [-Wmissing-methods (in -Wdefault)]
+    • No explicit implementation for
+        either ‘==’ or ‘/=’
+    • In the instance declaration for ‘Eq (Bar a)’
 
-tc078.hs:10:10: Warning:
-    No explicit implementation for
-      either ‘compare’ or ‘<=’
-    In the instance declaration for ‘Ord (Bar a)’
+tc078.hs:10:10: warning: [-Wmissing-methods (in -Wdefault)]
+    • No explicit implementation for
+        either ‘compare’ or ‘<=’
+    • In the instance declaration for ‘Ord (Bar a)’
index 4f7981a..449e4cd 100644 (file)
@@ -1,5 +1,5 @@
 
-tc115.hs:13:10: Warning:
-    No explicit implementation for
-      ‘foo’
-    In the instance declaration for ‘Foo [m a] (m a)’
+tc115.hs:13:10: warning: [-Wmissing-methods (in -Wdefault)]
+    • No explicit implementation for
+        ‘foo’
+    • In the instance declaration for ‘Foo [m a] (m a)’
index 074a795..d4de632 100644 (file)
@@ -1,5 +1,5 @@
 
-tc116.hs:13:10: Warning:
-    No explicit implementation for
-      ‘foo’
-    In the instance declaration for ‘Foo [m a] (m a)’
+tc116.hs:13:10: warning: [-Wmissing-methods (in -Wdefault)]
+    • No explicit implementation for
+        ‘foo’
+    • In the instance declaration for ‘Foo [m a] (m a)’
index d57cda2..b1136b6 100644 (file)
@@ -1,25 +1,26 @@
 
-tc125.hs:17:10: Warning:
-    No explicit implementation for
-      ‘add’
-    In the instance declaration for ‘Add Z a a’
+tc125.hs:17:10: warning: [-Wmissing-methods (in -Wdefault)]
+    • No explicit implementation for
+        ‘add’
+    • In the instance declaration for ‘Add Z a a’
 
-tc125.hs:18:10: Warning:
-    No explicit implementation for
-      ‘add’
-    In the instance declaration for ‘Add (S a) b (S c)’
+tc125.hs:18:10: warning: [-Wmissing-methods (in -Wdefault)]
+    • No explicit implementation for
+        ‘add’
+    • In the instance declaration for ‘Add (S a) b (S c)’
 
-tc125.hs:22:10: Warning:
-    No explicit implementation for
-      ‘mul’
-    In the instance declaration for ‘Mul Z a Z’
+tc125.hs:22:10: warning: [-Wmissing-methods (in -Wdefault)]
+    • No explicit implementation for
+        ‘mul’
+    • In the instance declaration for ‘Mul Z a Z’
 
-tc125.hs:23:10: Warning:
-    No explicit implementation for
-      ‘mul’
-    In the instance declaration for ‘Mul (S a) b d’
+tc125.hs:23:10: warning: [-Wmissing-methods (in -Wdefault)]
+    • No explicit implementation for
+        ‘mul’
+    • In the instance declaration for ‘Mul (S a) b d’
 
-tc125.hs:30:10: Warning:
-    No explicit implementation for
-      ‘add’
-    In the instance declaration for ‘Add (Q a b) (Q c d) (Q ad_bc bd)’
+tc125.hs:30:10: warning: [-Wmissing-methods (in -Wdefault)]
+    • No explicit implementation for
+        ‘add’
+    • In the instance declaration for
+        ‘Add (Q a b) (Q c d) (Q ad_bc bd)’
index 3c766d8..6ccb8d6 100644 (file)
@@ -1,10 +1,10 @@
 
-tc126.hs:16:25: Warning:
-    No explicit implementation for
-      ‘bug’
-    In the instance declaration for ‘Bug (Int -> r) Int r’
+tc126.hs:16:25: warning: [-Wmissing-methods (in -Wdefault)]
+    • No explicit implementation for
+        ‘bug’
+    • In the instance declaration for ‘Bug (Int -> r) Int r’
 
-tc126.hs:17:10: Warning:
-    No explicit implementation for
-      ‘bug’
-    In the instance declaration for ‘Bug f (c a) (c r)’
+tc126.hs:17:10: warning: [-Wmissing-methods (in -Wdefault)]
+    • No explicit implementation for
+        ‘bug’
+    • In the instance declaration for ‘Bug f (c a) (c r)’
index 163fde1..6140a7c 100644 (file)
@@ -1,5 +1,5 @@
 
-tc161.hs:17:10: Warning:
-    No explicit implementation for
-      ‘op’
-    In the instance declaration for ‘Foo Int’
+tc161.hs:17:10: warning: [-Wmissing-methods (in -Wdefault)]
+    • No explicit implementation for
+        ‘op’
+    • In the instance declaration for ‘Foo Int’
index b7a0eed..57959c1 100644 (file)
@@ -1,5 +1,5 @@
 
-tc175.hs:13:10: Warning:
-    No explicit implementation for
-      either ‘showsPrec’ or ‘show’
-    In the instance declaration for ‘Show (a -> b)’
+tc175.hs:13:10: warning: [-Wmissing-methods (in -Wdefault)]
+    • No explicit implementation for
+        either ‘showsPrec’ or ‘show’
+    • In the instance declaration for ‘Show (a -> b)’
index 0219817..f96fede 100644 (file)
@@ -1,3 +1,3 @@
 
-tc243.hs:10:1: warning:
+tc243.hs:10:1: warning: [-Wmissing-signatures (in -Wall)]
     Top-level binding with no type signature: (.+.) :: forall a. a
index 885b505..663279d 100644 (file)
@@ -1,4 +1,4 @@
 
-tc254.hs:8:1: Warning:
-    No explicit associated type or default declaration for ‘Typ’
-    In the instance declaration for ‘Cls Int’
+tc254.hs:8:1: warning: [-Wmissing-methods (in -Wdefault)]
+    • No explicit associated type or default declaration for      ‘Typ’
+    • In the instance declaration for ‘Cls Int’
index 2ad01e8..83a9ac8 100644 (file)
@@ -1,5 +1,5 @@
 
-T5051.hs:8:30: warning:
+T5051.hs:8:30: warning: [-Wmissing-methods (in -Wdefault)]
     • No explicit implementation for
         either ‘==’ or ‘/=’
     • In the instance declaration for ‘Eq [T]’
index f4b6ec7..f3326fa 100644 (file)
@@ -1,5 +1,5 @@
 
-tcfail204.hs:10:15: warning:
+tcfail204.hs:10:15: warning: [-Wtype-defaults (in -Wall)]
     • Defaulting the following constraints to type ‘Double’
         (Fractional a0)
           arising from the literal ‘6.3’ at tcfail204.hs:10:15-17
index d07eee8..d907a6c 100644 (file)
@@ -1,54 +1,54 @@
 
-WarnMinimal.hs:16:10: Warning:
-    No explicit implementation for
-      either ‘foo1’ or ‘foo2’
-    In the instance declaration for ‘Foo Int’
-
-WarnMinimal.hs:60:10: Warning:
-    No explicit implementation for
-      either ‘join'’ or ‘bind'’
-    In the instance declaration for ‘Monad' ((->) e)’
-
-WarnMinimal.hs:66:10: Warning:
-    No explicit implementation for
-      ‘return'’
-    In the instance declaration for ‘Monad' Id’
-
-WarnMinimal.hs:72:10: Warning:
-    No explicit implementation for
-      ‘return'’
-    In the instance declaration for ‘Monad' Id2’
-
-WarnMinimal.hs:79:10: Warning:
-    No explicit implementation for
-      ‘return'’ and (either (‘fmap'’ and ‘join'’) or ‘bind'’)
-    In the instance declaration for ‘Monad' Id3’
-
-WarnMinimal.hs:84:1: Warning:
-    The MINIMAL pragma does not require:
-      ‘cheater’
-    but there is no default implementation.
-    In the class declaration for ‘Cheater’
-
-WarnMinimal.hs:92:1: Warning:
-    The MINIMAL pragma does not require:
-      ‘cheater3b’
-    but there is no default implementation.
-    In the class declaration for ‘Cheater3’
-
-WarnMinimal.hs:99:10: Warning:
-    No explicit implementation for
-      ‘+’, ‘*’, ‘abs’, ‘signum’, ‘fromInteger’, and (either ‘negate’
-                                                            or
-                                                            ‘-’)
-    In the instance declaration for ‘Num Bool’
-
-WarnMinimal.hs:105:10: Warning:
-    No explicit implementation for
-      ‘needed’
-    In the instance declaration for ‘NoExplicit Int’
-
-WarnMinimal.hs:116:10: Warning:
-    No explicit implementation for
-      either ‘===’ or ‘/==’
-    In the instance declaration for ‘Eq' Blarg’
+WarnMinimal.hs:16:10: warning: [-Wmissing-methods (in -Wdefault)]
+    • No explicit implementation for
+        either ‘foo1’ or ‘foo2’
+    • In the instance declaration for ‘Foo Int’
+
+WarnMinimal.hs:60:10: warning: [-Wmissing-methods (in -Wdefault)]
+    • No explicit implementation for
+        either ‘join'’ or ‘bind'’
+    • In the instance declaration for ‘Monad' ((->) e)’
+
+WarnMinimal.hs:66:10: warning: [-Wmissing-methods (in -Wdefault)]
+    • No explicit implementation for
+        ‘return'’
+    • In the instance declaration for ‘Monad' Id’
+
+WarnMinimal.hs:72:10: warning: [-Wmissing-methods (in -Wdefault)]
+    • No explicit implementation for
+        ‘return'’
+    • In the instance declaration for ‘Monad' Id2’
+
+WarnMinimal.hs:79:10: warning: [-Wmissing-methods (in -Wdefault)]
+    • No explicit implementation for
+        ‘return'’ and (either (‘fmap'’ and ‘join'’) or ‘bind'’)
+    • In the instance declaration for ‘Monad' Id3’
+
+WarnMinimal.hs:84:1: warning:
+    • The MINIMAL pragma does not require:
+        ‘cheater’
+      but there is no default implementation.
+    • In the class declaration for ‘Cheater’
+
+WarnMinimal.hs:92:1: warning:
+    • The MINIMAL pragma does not require:
+        ‘cheater3b’
+      but there is no default implementation.
+    • In the class declaration for ‘Cheater3’
+
+WarnMinimal.hs:99:10: warning: [-Wmissing-methods (in -Wdefault)]
+    • No explicit implementation for
+        ‘+’, ‘*’, ‘abs’, ‘signum’, ‘fromInteger’, and (either ‘negate’
+                                                              or
+                                                              ‘-’)
+    • In the instance declaration for ‘Num Bool’
+
+WarnMinimal.hs:105:10: warning: [-Wmissing-methods (in -Wdefault)]
+    • No explicit implementation for
+        ‘needed’
+    • In the instance declaration for ‘NoExplicit Int’
+
+WarnMinimal.hs:116:10: warning: [-Wmissing-methods (in -Wdefault)]
+    • No explicit implementation for
+        either ‘===’ or ‘/==’
+    • In the instance declaration for ‘Eq' Blarg’
index c27dccb..158f252 100644 (file)
@@ -1,10 +1,10 @@
 [1 of 2] Compiling DeprM            ( DeprM.hs, DeprM.o )
 [2 of 2] Compiling A                ( DeprU.hs, DeprU.o )
 
-DeprU.hs:3:1: Warning:
+DeprU.hs:3:1: warning: [-Wdeprecations (in -Wdefault)]
     Module ‘DeprM’ is deprecated:
       Here can be your menacing deprecation warning!
 
-DeprU.hs:6:5: Warning:
+DeprU.hs:6:5: warning: [-Wdeprecations (in -Wdefault)]
     In the use of ‘f’ (imported from DeprM):
     Deprecated: "Here can be your menacing deprecation warning!"
index 1c975ab..a06ab5e 100644 (file)
@@ -1,12 +1,12 @@
 
-PluralS.hs:15:17: warning:
+PluralS.hs:15:17: warning: [-Wtype-defaults (in -Wall)]
     • Defaulting the following constraint to type ‘Integer’
         Num t0 arising from the literal ‘123’
     • In the first argument of ‘seq’, namely ‘123’
       In the expression: 123 `seq` ()
       In an equation for ‘defaultingNum’: defaultingNum = 123 `seq` ()
 
-PluralS.hs:17:29: warning:
+PluralS.hs:17:29: warning: [-Wtype-defaults (in -Wall)]
     • Defaulting the following constraints to type ‘Integer’
         (Num a0) arising from the literal ‘123’ at PluralS.hs:17:29-31
         (Show a0) arising from a use of ‘show’ at PluralS.hs:17:24-31
index a693c47..d676ca9 100644 (file)
@@ -1,5 +1,5 @@
 
-T10890_2.hs:12:1: warning:
+T10890_2.hs:12:1: warning: [-Wunused-imports (in -Wextra)]
     The import of ‘T10890_2B’ is redundant
       except perhaps to import instances from ‘T10890_2B’
     To import instances alone, use: import T10890_2B()
index 84034f8..fcaa385 100644 (file)
@@ -1,3 +1,3 @@
 
-T11077.hs:3:1: warning:
+T11077.hs:3:1: warning: [-Wmissing-exported-sigs]
     Top-level binding with no type signature: foo :: forall a. a
index f924a19..b8d7882 100644 (file)
@@ -1,20 +1,20 @@
 
-T11128.hs:28:5: warning:
+T11128.hs:28:5: warning: [-Wnoncanonical-monad-instances]
     Noncanonical ‘pure = return’ definition detected
     in the instance declaration for ‘Applicative T1’.
     Move definition from ‘return’ to ‘pure’
 
-T11128.hs:30:5: warning:
+T11128.hs:30:5: warning: [-Wnoncanonical-monad-instances]
     Noncanonical ‘(*>) = (>>)’ definition detected
     in the instance declaration for ‘Applicative T1’.
     Move definition from ‘(>>)’ to ‘(*>)’
 
-T11128.hs:34:5: warning:
+T11128.hs:34:5: warning: [-Wnoncanonical-monad-instances]
     Noncanonical ‘return’ definition detected
     in the instance declaration for ‘Monad T1’.
     Either remove definition for ‘return’ or define as ‘return = pure’
 
-T11128.hs:35:5: warning:
+T11128.hs:35:5: warning: [-Wnoncanonical-monad-instances]
     Noncanonical ‘(>>)’ definition detected
     in the instance declaration for ‘Monad T1’.
     Either remove definition for ‘(>>)’ or define as ‘(>>) = (*>)’
index 57aa22b..e3fd3e8 100644 (file)
@@ -1,10 +1,10 @@
 
-T11128b.hs:40:5: warning:
+T11128b.hs:40:5: warning: [-Wnoncanonical-monadfail-instances]
     Noncanonical ‘fail’ definition detected
     in the instance declaration for ‘Monad T1’.
     Either remove definition for ‘fail’ or define as ‘fail = Control.Monad.Fail.fail’
 
-T11128b.hs:43:5: warning:
+T11128b.hs:43:5: warning: [-Wnoncanonical-monadfail-instances]
     Noncanonical ‘fail = Control.Monad.fail’ definition detected
     in the instance declaration for ‘MonadFail T1’.
     Move definition from ‘Control.Monad.fail’ to ‘fail’
index 585c22d..07cf8d8 100644 (file)
@@ -1,3 +1,3 @@
 
-T2526.hs:4:1: Warning:
+T2526.hs:4:1: warning: [-Wmissing-exported-sigs]
     Top-level binding with no type signature: foo :: Integer
index d22f428..6edcbff 100644 (file)
@@ -1,7 +1,7 @@
 [1 of 2] Compiling T9178DataType    ( T9178DataType.hs, T9178DataType.o )
 [2 of 2] Compiling T9178            ( T9178.hs, T9178.o )
 
-T9178.hs:8:1: warning:
+T9178.hs:8:1: warning: [-Worphans (in -Wall)]
     Orphan instance: instance Show T9178_Type
     To avoid this
         move the instance declaration to the module of the class or of the type, or
index 9a28fb3..91d3189 100644 (file)
@@ -1,5 +1,5 @@
 
-WCompatWarningsOn.hs:13:5: warning:
+WCompatWarningsOn.hs:13:5: warning: [-Wmissing-monadfail-instances (in -Wcompat)]
     • Could not deduce (Control.Monad.Fail.MonadFail m)
         arising from the failable pattern ‘Just _’
         (this will become an error in a future GHC release)
@@ -20,16 +20,16 @@ WCompatWarningsOn.hs:13:5: warning:
             = do { Just _ <- undefined;
                    undefined }
 
-WCompatWarningsOn.hs:16:1: warning:
+WCompatWarningsOn.hs:16:1: warning: [-Wsemigroup (in -Wcompat)]
     Local definition of ‘<>’ clashes with a future Prelude name.
     This will become an error in a future release.
 
-WCompatWarningsOn.hs:22:3: warning:
+WCompatWarningsOn.hs:22:3: warning: [-Wnoncanonical-monoid-instances (in -Wcompat)]
     Noncanonical ‘(<>) = mappend’ definition detected
     in the instance declaration for ‘Semi.Semigroup S’.
     Move definition from ‘mappend’ to ‘(<>)’
 
-WCompatWarningsOn.hs:25:3: warning:
+WCompatWarningsOn.hs:25:3: warning: [-Wnoncanonical-monoid-instances (in -Wcompat)]
     Noncanonical ‘mappend’ definition detected
     in the instance declaration for ‘Monoid S’.
     Define as ‘mappend = (<>)’
index a72395e..b194bf2 100644 (file)
@@ -43,6 +43,11 @@ warningsOptions =
          , flagType = DynamicFlag
          , flagReverse = "-Wno-unrecognised-warning-flags"
          }
+  , flag { flagName = "-fshow-warning-groups"
+         , flagDescription = "show which group an emitted warning belongs to."
+         , flagType = DynamicFlag
+         , flagReverse = "-fno-show-warning-groups"
+         }
   , flag { flagName = "-fdefer-type-errors"
          , flagDescription =
            "Turn type errors into warnings, :ref:`deferring the error until "++