
#11370: Redundant superclass warnings being included in -Wall destroys the "3 Release Policy" -------------------------------------+------------------------------------- Reporter: ekmett | Owner: Type: bug | Status: new Priority: highest | Milestone: 8.0.1 Component: Compiler (Type | Version: 7.10.3 checker) | Resolution: | Keywords: Operating System: Unknown/Multiple | Architecture: Type of failure: Incorrect | Unknown/Multiple warning at compile-time | Test Case: Blocked By: | Blocking: Related Tickets: #11369, #11429 | Differential Rev(s): Wiki Page: | -------------------------------------+------------------------------------- Comment (by ekmett):
Does this sentence have an implicit “without losing 3-release compatibility”?
No. I mean explicitly that there is code that I have in the wild that can only work around this by turning off the warning. If you write any class that only supplies a law then it will always appear to be a "redundant constraint". GHC doesn't know about the laws. Examples from real math: Upgrading a braided monoidal category to a symmetric monoidal category, or needing to know that the Cayley-Dickson construction that yields the complex numbers from the reals needs a the ring structure it builds over to be trivially involutive for the lifted ring structure to be commutative. These will simply always trigger this warning. In some cases not just for my library but for users of my library. Now, I've already patched most of that code to include an explicit, messy {{{#!hs #if __GLASGOW_HASKELL__ >= 800 {-# OPTIONS_GHC -fno-warn-redundant-constraints #-} #endif }}} But it is telling to me that this is the first situation where I've had to hack in explicit `{-# OPTIONS_GHC #-}` to work around a warning going haywire. At present the only other code I can think of where I turn on explicit `{-# OPTIONS_GHC #-}` is to hack around changes in sharing behavior across GHC versions that breaks particularly tricky uses of `{-# NOINLINE #-}`. To get `reflection` to work across a wide enough array of GHC versions I wind up with a cocktail that looks like: {{{#!hs {-# OPTIONS_GHC -fno-cse -fno-full-laziness -fno-float-in #-} }}} but that isn't hacking around warnings, but rather buggy code motion that changes in behavior across GHC versions. -- Ticket URL: http://ghc.haskell.org/trac/ghc/ticket/11370#comment:27 GHC http://www.haskell.org/ghc/ The Glasgow Haskell Compiler