
On Mon, Oct 22, 2012 at 9:14 AM, Simon Peyton-Jones
Do you mean “silently and forever”? Deprecation simply means that everything continues to work, but you get a little nudge to change. Isn’t that what it’s for? If you treat deprecation as equivalent to error, then there isn’t much point in having it.
Most people do treat deprecations as errors; having your compilation output warning clean makes you less likely to miss those warnings that are really important. If you look at some widely used languages, like Java, you see that they only deprecate things that are really error prone but avoid deprecations altogether otherwise. When they do deprecate something, they typically don't remove the deprecated entity, ever.
It’s possible that making Rank2Types = RankNTypes silently and forever is the right answer. It just doesn’t feel right to me. But I’m not a library author and I don’t feel terribly strongly.
I think so. -- Johan