[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