diff options
author | Simon Peyton Jones <simonpj@microsoft.com> | 2016-10-14 10:41:14 +0100 |
---|---|---|
committer | Simon Peyton Jones <simonpj@microsoft.com> | 2016-10-17 08:41:15 +0100 |
commit | 3174beb68919bf706ae5ec7d7d58d11759ba3584 (patch) | |
tree | b5eb9654028f57bc479fb4bff524063e1550e6aa /compiler | |
parent | afdde48baf98e552b860cf1aec093d71ccad1363 (diff) | |
download | haskell-3174beb68919bf706ae5ec7d7d58d11759ba3584.tar.gz |
Comments about -Wredundant-constraints
Diffstat (limited to 'compiler')
-rw-r--r-- | compiler/typecheck/TcErrors.hs | 1 | ||||
-rw-r--r-- | compiler/typecheck/TcSimplify.hs | 24 |
2 files changed, 18 insertions, 7 deletions
diff --git a/compiler/typecheck/TcErrors.hs b/compiler/typecheck/TcErrors.hs index d49ca64ca5..4837f52872 100644 --- a/compiler/typecheck/TcErrors.hs +++ b/compiler/typecheck/TcErrors.hs @@ -367,6 +367,7 @@ reportImplic ctxt implic@(Implic { ic_skols = tvs, ic_given = given _ -> [] warnRedundantConstraints :: ReportErrCtxt -> TcLclEnv -> SkolemInfo -> [EvVar] -> TcM () +-- See Note [Tracking redundant constraints] in TcSimplify warnRedundantConstraints ctxt env info ev_vars | null redundant_evs = return () diff --git a/compiler/typecheck/TcSimplify.hs b/compiler/typecheck/TcSimplify.hs index 39b2d8381a..d146c73094 100644 --- a/compiler/typecheck/TcSimplify.hs +++ b/compiler/typecheck/TcSimplify.hs @@ -1511,13 +1511,23 @@ works: ----- Shortcomings -Consider (see Trac #9939) - f2 :: (Eq a, Ord a) => a -> a -> Bool - -- Ord a redundant, but Eq a is reported - f2 x y = (x == y) - -We report (Eq a) as redundant, whereas actually (Ord a) is. But it's -really not easy to detect that! +After I introduced -Wredundant-constraints there was extensive discussion +about cases where it reported a redundant constraint but the programmer +really wanted it. See + + * #11370 (removed it from -Wdefault) + * #10635 (removed it from -Wall as well) + * #12142 + * #11474, #10100 (class not used, but its fundeps are) + * #11099 (redundant, but still desired) + * #10183 (constraint necessary to exclude omitted case) + + * #9939: f2 :: (Eq a, Ord a) => a -> a -> Bool + -- Ord a redundant, but Eq a is reported + f2 x y = (x == y) + + We report (Eq a) as redundant, whereas actually (Ord a) is. + But it's really not easy to detect that! Note [Cutting off simpl_loop] |