
#12014: Make it possible to deprecate a method instantiation of a typeclass instance -------------------------------------+------------------------------------- Reporter: niteria | Owner: Type: feature | Status: new request | Priority: normal | Milestone: Component: Compiler | Version: Keywords: | Operating System: Unknown/Multiple Architecture: | Type of failure: None/Unknown Unknown/Multiple | Test Case: | Blocked By: Blocking: | Related Tickets: Differential Rev(s): | Wiki Page: -------------------------------------+------------------------------------- Consider: {{{ module A where data Foo = Foo instance Eq Foo where -- {-# DEPRECATED (==) "Deprecated for no reason as well" #-} _a == _b = True {-# DEPRECATED (==.) "Deprecated for no reason" #-} (==.) :: Foo -> Foo -> Bool (==.) _a _b = True }}} Deprecating `(==.)` is possible, but it's not possible to deprecate `(==)` of the `Eq Foo` instance. I'd be useful for my use-case of finding out where `Ord Unique` is used, as these would be a potential sources of non-determinism. Currently the best I can do is to remove the instance, get a compile error, suppress it by fixing up the code and repeat for every affected file. I imagine it would also be useful if a method turned out to be a bad idea for a particular type and the library author tried to phase it out. It could be that one method is implementable, but has terrible performance. For my use-case I would be happy with instance level granularity. Related (but not quite the same): * https://ghc.haskell.org/trac/ghc/wiki/Design/DeprecationMechanisms#Classmeth... * https://ghc.haskell.org/trac/ghc/wiki/Design/DeprecationMechanisms/TypeClass... -- Ticket URL: http://ghc.haskell.org/trac/ghc/ticket/12014 GHC http://www.haskell.org/ghc/ The Glasgow Haskell Compiler