#7336: Defined but not used is not detected for data types with instances
------------------------------------------+---------------------------------
  Reporter:  maeder                       |          Owner:                  
      Type:  bug                          |         Status:  closed          
  Priority:  normal                       |      Milestone:                  
 Component:  Compiler                     |        Version:  7.6.1           
Resolution:  fixed                        |       Keywords:                  
        Os:  Unknown/Multiple             |   Architecture:  Unknown/Multiple
   Failure:  None/Unknown                 |     Difficulty:  Unknown         
  Testcase:  rename/should_compile/T7336  |      Blockedby:                  
  Blocking:                               |        Related:                  
------------------------------------------+---------------------------------
Changes (by simonpj):

  * status:  new => closed
  * difficulty:  => Unknown
  * resolution:  => fixed
  * testcase:  => rename/should_compile/T7336


Comment:

 Good point. Here's a fix:
 {{{
 commit 910a642294eb3547d0cbb3d5735ad81b964f137b
 Author: Simon Peyton Jones <simo...@microsoft.com>
 Date:   Mon Oct 29 23:25:25 2012 +0000

     Do not treat a constructor in a *pattern* as a *use* of that
 constructor

     Occurrences in terms are uses, in patterns they are not.
     In this way we get unused-constructor warnings from modules like this

        module M( f, g, T ) where
          data T = T1 | T2 Bool

          f x = T2 x

          g T1 = True
          g (T2 x) = x

     Here a T1 value cannot be constructed, so we can warn. The use
     in a pattern doesn't count.  See Note [Patterns are not uses]
     in RnPat.

     Interestingly this change exposed three module in GHC itself
     that had unused constructors, which I duly removed:
       * ghc/Main.hs
       * compiler/ghci/ByteCodeAsm
       * compiler/nativeGen/PPC/RegInfo
     Their changes are in this patch.
 }}}
 The fix does not treat "deriving" specially; it simply changes the way
 that constructors appearing in pattern matches are treated.  Nice and
 simple, and it showed up some unused constructors in GHC itself (see the
 commit message).

 Thanks for the suggestion.

 Simon

-- 
Ticket URL: <http://hackage.haskell.org/trac/ghc/ticket/7336#comment:1>
GHC <http://www.haskell.org/ghc/>
The Glasgow Haskell Compiler

_______________________________________________
Glasgow-haskell-bugs mailing list
Glasgow-haskell-bugs@haskell.org
http://www.haskell.org/mailman/listinfo/glasgow-haskell-bugs

Reply via email to