id,summary,reporter,owner,description,type,status,priority,milestone,component,version,resolution,keywords,cc,os,architecture,failure,difficulty,testcase,blockedby,blocking,related
3427,control what sort of entity a deprecated pragma applies to,igloo,,"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.
",bug,new,low,7.6.2,Compiler,6.10.4,,,,Unknown/Multiple,Unknown/Multiple,,Unknown,,,,
