
#11451: Inconsistent warnings for unused binders -------------------------------------+------------------------------------- Reporter: simonpj | Owner: Type: bug | Status: new Priority: normal | Milestone: Component: Compiler | Version: 7.10.3 Resolution: | Keywords: Operating System: Unknown/Multiple | Architecture: | Unknown/Multiple Type of failure: None/Unknown | Test Case: Blocked By: | Blocking: Related Tickets: | Differential Rev(s): Wiki Page: | -------------------------------------+------------------------------------- Comment (by simonpj): All that you say is true about type function too. In {{{ type instance F a a = Int }}} the `a` is definitely not unused becuase it is repeated. In both your examples the type variables patently are used, and no one is suggesting they are reported as unused: {{{ instance C a a where ... instance D a b => C (a,b) where... }}} But it really does seem useful an convenient to be able to write {{{ type instance F (Maybe _) = Int }}} to stress that the argument to `Maybe` plays no further role in matching or on the RHS. Isn't it? Similarly would it not be reasonable to allow {{{ instance C (Maybe _) where ... }}} to stress that the argument type of the `Maybe` plays no further role in resolving this class instance. So let me be more concrete. Here's a proposal: * If a type variable (a) is bound in a type pattern (b) appears at exactly once anywhere in its scope, then it is reported as unused. * A "type pattern" is * a type on the LHS of a `type instance` or * a type in the head of a class `instance` (i.e. the bit after the `=>`) * a type in a pattern type signature e.g. `case x of Just (x :: (a,b)) -> blah` Now, can you give me an example where that would be annoying? Mabye you are right, but let's see. -- Ticket URL: http://ghc.haskell.org/trac/ghc/ticket/11451#comment:11 GHC http://www.haskell.org/ghc/ The Glasgow Haskell Compiler