Ticket #3427 (new bug)
control what sort of entity a deprecated pragma applies to
| Reported by: | igloo | Owned by: | |
|---|---|---|---|
| Priority: | low | Milestone: | 7.6.1 |
| Component: | Compiler | Version: | 6.10.4 |
| Keywords: | Cc: | ||
| Operating System: | Unknown/Multiple | Architecture: | Unknown/Multiple |
| Type of failure: | Difficulty: | Unknown | |
| Test Case: | Blocked By: | ||
| Blocking: | Related Tickets: |
Description
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 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.
