#7398: RULES don't apply to a newtype constructor
----------------------------------------+-----------------------------------
Reporter:  shachaf                      |          Owner:                  
    Type:  bug                          |         Status:  new             
Priority:  normal                       |      Component:  Compiler        
 Version:  7.6.1                        |       Keywords:                  
      Os:  Unknown/Multiple             |   Architecture:  Unknown/Multiple
 Failure:  Incorrect result at runtime  |      Blockedby:                  
Blocking:                               |        Related:                  
----------------------------------------+-----------------------------------
 For some reason, RULES that involve a newtype constructor never seem to
 fire. The following program demonstrates the problem:

 {{{
 module Main where

 newtype Foo a = Foo { unFoo :: a }
   deriving Show

 foo :: a -> Foo a
 foo = Foo

 {-# RULES "rule Foo"  forall v.  Foo v = error "Foo" #-}
 {-# RULES "rule foo"  forall v.  foo v = error "foo" #-}

 main :: IO ()
 main = do
     print (Foo ())
     print (foo ())
 }}}

 "rule foo" fires, but "rule Foo" doesn't. The program prints

 {{{
 Foo {unFoo = ()}
 D: foo
 }}}

 Note that this doesn't seem to affect selectors, only constructors.

-- 
Ticket URL: <http://hackage.haskell.org/trac/ghc/ticket/7398>
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