#3427: control what sort of entity a deprecated pragma applies to
-------------------------------+--------------------------------------------
  Reporter:  igloo             |          Owner:                  
      Type:  bug               |         Status:  new             
  Priority:  normal            |      Milestone:  6.14.1          
 Component:  Compiler          |        Version:  6.10.4          
  Severity:  normal            |       Keywords:                  
Difficulty:  Unknown           |       Testcase:                  
        Os:  Unknown/Multiple  |   Architecture:  Unknown/Multiple
-------------------------------+--------------------------------------------
 Originally reported as part of #3303.

 ----

 It's annoying not being able to control whether a type or identically
 named constructor is being deprecated. Consider:
 {{{
 data Foo = Foo ...
 }}}
 This is a very common idiom. But now we want to switch to smart
 constructors
 {{{
 foo :: ... -> Foo
 }}}
 and eventually stop exporting the constructor Foo. But we cannot specify
 just the constructor, only both. According to the
 [http://haskell.org/ghc/docs/latest/html/users_guide/pragmas.html#warning-
 deprecated-pragma user guide] the workaround would be to have a module
 that imports one but not the other, however while that's possible for the
 type it's not possible for the constructor.

 How about
 {{{
 {-# DEPRECATED constructor Foo "use `foo' instead" #-}
 }}}
 and while we're at it, might as well have
 {{{
 {-# DEPRECATED type Foo "..." #-}
 }}}
 leaving the unqualified case meaning both as it does now.

-- 
Ticket URL: <http://hackage.haskell.org/trac/ghc/ticket/3427>
GHC <http://www.haskell.org/ghc/>
The Glasgow Haskell Compiler
_______________________________________________
Glasgow-haskell-bugs mailing list
[email protected]
http://www.haskell.org/mailman/listinfo/glasgow-haskell-bugs

Reply via email to