Repository : ssh://darcs.haskell.org//srv/darcs/ghc On branch : master
http://hackage.haskell.org/trac/ghc/changeset/5a6a223f855538112ec9d089425e34853fb3542b >--------------------------------------------------------------- commit 5a6a223f855538112ec9d089425e34853fb3542b Author: Simon Peyton Jones <simo...@microsoft.com> Date: Wed Jan 2 11:57:00 2013 +0000 Add flag -fwarn-duplicate-constraints This fixes Trac #7541, and is on by default. Use -fno-warn-duplicate-constraints to switch it off. >--------------------------------------------------------------- compiler/main/DynFlags.hs | 5 ++++- compiler/typecheck/TcMType.lhs | 9 +++++---- docs/users_guide/flags.xml | 7 +++++++ docs/users_guide/using.xml | 19 +++++++++++++++++++ 4 files changed, 35 insertions(+), 5 deletions(-) diff --git a/compiler/main/DynFlags.hs b/compiler/main/DynFlags.hs index f3d0106..a07864c 100644 --- a/compiler/main/DynFlags.hs +++ b/compiler/main/DynFlags.hs @@ -384,6 +384,7 @@ data GeneralFlag data WarningFlag = Opt_WarnDuplicateExports + | Opt_WarnDuplicateConstraints | Opt_WarnHiShadows | Opt_WarnImplicitPrelude | Opt_WarnIncompletePatterns @@ -2324,6 +2325,7 @@ fWarningFlags = [ ( "warn-dodgy-exports", Opt_WarnDodgyExports, nop ), ( "warn-dodgy-imports", Opt_WarnDodgyImports, nop ), ( "warn-duplicate-exports", Opt_WarnDuplicateExports, nop ), + ( "warn-duplicate-constraints", Opt_WarnDuplicateConstraints, nop ), ( "warn-hi-shadowing", Opt_WarnHiShadows, nop ), ( "warn-implicit-prelude", Opt_WarnImplicitPrelude, nop ), ( "warn-incomplete-patterns", Opt_WarnIncompletePatterns, nop ), @@ -2740,7 +2742,8 @@ standardWarnings Opt_WarnAlternativeLayoutRuleTransitional, Opt_WarnPointlessPragmas, Opt_WarnUnsupportedCallingConventions, - Opt_WarnInlineRuleShadowing + Opt_WarnInlineRuleShadowing, + Opt_WarnDuplicateConstraints ] minusWOpts :: [WarningFlag] diff --git a/compiler/typecheck/TcMType.lhs b/compiler/typecheck/TcMType.lhs index 0877ece..6561b58 100644 --- a/compiler/typecheck/TcMType.lhs +++ b/compiler/typecheck/TcMType.lhs @@ -1266,10 +1266,11 @@ checkValidTheta ctxt theta check_valid_theta :: UserTypeCtxt -> [PredType] -> TcM () check_valid_theta _ [] = return () -check_valid_theta ctxt theta = do - dflags <- getDynFlags - warnTc (notNull dups) (dupPredWarn dups) - mapM_ (check_pred_ty dflags ctxt) theta +check_valid_theta ctxt theta + = do { dflags <- getDynFlags + ; warnTc (wopt Opt_WarnDuplicateConstraints dflags && + notNull dups) (dupPredWarn dups) + ; mapM_ (check_pred_ty dflags ctxt) theta } where (_,dups) = removeDups cmpPred theta diff --git a/docs/users_guide/flags.xml b/docs/users_guide/flags.xml index 2103260..e084315 100644 --- a/docs/users_guide/flags.xml +++ b/docs/users_guide/flags.xml @@ -1236,6 +1236,13 @@ </row> <row> + <entry><option>-fwarn-duplicate-constraints</option></entry> + <entry>warn when a constraint appears duplicated in a type signature</entry> + <entry>dynamic</entry> + <entry><option>-fno-warn-duplicate-constraints</option></entry> + </row> + + <row> <entry><option>-fwarn-duplicate-exports</option></entry> <entry>warn when an entity is exported multiple times</entry> <entry>dynamic</entry> diff --git a/docs/users_guide/using.xml b/docs/users_guide/using.xml index 292f4fe..adc3694 100644 --- a/docs/users_guide/using.xml +++ b/docs/users_guide/using.xml @@ -950,6 +950,7 @@ test.hs:(5,4)-(6,7): <option>-fwarn-overlapping-patterns</option>, <option>-fwarn-warnings-deprecations</option>, <option>-fwarn-deprecated-flags</option>, + <option>-fwarn-duplicate-constraints</option>, <option>-fwarn-duplicate-exports</option>, <option>-fwarn-missing-fields</option>, <option>-fwarn-missing-methods</option>, @@ -1195,6 +1196,24 @@ foreign import "&f" f :: FunPtr t </varlistentry> <varlistentry> + <term><option>-fwarn-duplicate-constraints</option>:</term> + <listitem> + <indexterm><primary><option>-fwarn-duplicate-constraints</option></primary></indexterm> + <indexterm><primary>duplicate constraints, warning</primary></indexterm> + + <para>Have the compiler warn about duplicate constraints in a type signature. For + example + <programlisting> + f :: (Eq a, Show a, Eq a) => a -> a + </programlisting> + The warning will indicate the duplicated <literal>Eq a</literal> constraint. + </para> + + <para>This option is on by default.</para> + </listitem> + </varlistentry> + + <varlistentry> <term><option>-fwarn-duplicate-exports</option>:</term> <listitem> <indexterm><primary><option>-fwarn-duplicate-exports</option></primary></indexterm> _______________________________________________ Cvs-ghc mailing list Cvs-ghc@haskell.org http://www.haskell.org/mailman/listinfo/cvs-ghc