[GHC] #12700: Don't warn about redundant constraints for type equalities

GHC ghc-devs at haskell.org
Fri Oct 14 03:04:31 UTC 2016


#12700: Don't warn about redundant constraints for type equalities
-------------------------------------+-------------------------------------
           Reporter:  crockeea       |             Owner:
               Type:  bug            |            Status:  new
           Priority:  normal         |         Milestone:
          Component:  Compiler       |           Version:  8.0.1
           Keywords:                 |  Operating System:  Unknown/Multiple
       Architecture:                 |   Type of failure:  Incorrect
  Unknown/Multiple                   |  warning at compile-time
          Test Case:                 |        Blocked By:
           Blocking:                 |   Related Tickets:
Differential Rev(s):                 |         Wiki Page:
-------------------------------------+-------------------------------------
 With `-Wall`, the following code

 {{{
 {-# LANGUAGE TypeFamilies #-}

 type family Foo x where
   Foo Double = Int

 foo :: (RealFrac a, Integral b, b ~ Foo a) => a -> b
 foo = round
 }}}

 produces the warning

 {{{
 • Redundant constraint: b ~ Foo a
 • In the type signature for:
        foo :: (RealFrac a, Integral b, b ~ Foo a) => a -> b
 }}}

 Technically, I suppose this is correct in the sense that if we remove the
 constraint `b ~ Foo a`, `foo` still compiles. However, the ''meaning''
 changes without the type equality, because the function I wrote is
 equivalent to `foo :: (RealFrac a, Integral (Foo a)) => a -> Foo a` (which
 requires `-XFlexibleContexts`), while the function it suggests is the much
 more general `foo :: (RealFrac a, Integral b) => a -> b`. Since this is
 the case, I think the warning is invalid.

--
Ticket URL: <http://ghc.haskell.org/trac/ghc/ticket/12700>
GHC <http://www.haskell.org/ghc/>
The Glasgow Haskell Compiler


More information about the ghc-tickets mailing list