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 "&amp;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

Reply via email to