[GHC] #11451: Inconsistent warnings for unused binders

GHC ghc-devs at haskell.org
Mon Jan 18 09:54:01 UTC 2016


#11451: Inconsistent warnings for unused binders
-------------------------------------+-------------------------------------
           Reporter:  simonpj        |             Owner:
               Type:  bug            |            Status:  new
           Priority:  normal         |         Milestone:
          Component:  Compiler       |           Version:  7.10.3
           Keywords:                 |  Operating System:  Unknown/Multiple
       Architecture:                 |   Type of failure:  None/Unknown
  Unknown/Multiple                   |
          Test Case:                 |        Blocked By:
           Blocking:                 |   Related Tickets:
Differential Rev(s):                 |         Wiki Page:
-------------------------------------+-------------------------------------
 Consider compiling this with `-Wunused-matches`:
 {{{
 class C a where
   op :: a -> a
 instance C (Maybe a) where
   op x = x
 }}}
 We get no warnings, even though `a` is patently unused.

 But suppose we add an associated type
 {{{
 class C a where
   type T a
   op :: a -> a
 instance C (Maybe a) where
   type T (Maybe a) = Int  -- Warning on this line
   op x = x
 }}}
 Now we get a warning for an unused binding for `a` on the `type instance`.

 Edward complained about this inconsistent behaviour in
 [https://mail.haskell.org/pipermail/glasgow-haskell-
 users/2016-January/026114.html this email thread].

 My thoughts:

  * Currently GHC does not warn about type variables bound in the instance
 head but unused in the `where` part.  Fixing that might be a good idea,
 but would be a new feature.

  * However, given that we don't warn about them, we should definitely not
 warn about instance type variables being unused in an associated type.
 But we could warn about ones specific to the associated type itself. Eg
 {{{
 class C2 a where
   type T2 a b
 instance C2 (Maybe a) where
   type T2 (Maybe a) x = Int    -- Line XXX
 }}}
   Here, on line `XXX`, we might reasonably warn about the unused `x`, but
 not about the unused `a`.

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


More information about the ghc-tickets mailing list