
#9757: Warn about derivable instances -------------------------------------+------------------------------------- Reporter: dfeuer | Owner: Type: feature | Status: new request | Milestone: Priority: normal | Version: 7.9 Component: Compiler | Keywords: Resolution: | Architecture: Unknown/Multiple Operating System: | Difficulty: Unknown Unknown/Multiple | Blocked By: Type of failure: | Related Tickets: None/Unknown | Test Case: | Blocking: | Differential Revisions: | -------------------------------------+------------------------------------- Comment (by goldfire): Replying to [comment:2 dfeuer]:
Replying to [comment:1 goldfire]:
To my knowledge, GHC can ''not'' derive instances better than anyone else. Since the advent of `coerce`, `GeneralizedNewtypeDeriving` has no magic -- any GND instance can be written by hand, sometimes with lots of type annotations and `ScopedTypeVariables`, though.
I don't ''think'' this is exactly right. As I understand it, `coerce` should let you hand-build an exact ''copy'' of an existing dictionary, but `GeneralizedNewtypeDeriving` lets you actually ''reuse'' the dictionary.
No, GND doesn't let you reuse dictionaries. Superclass instances might be different between the representation type and the newtype, and so reusing a dictionary might be wrong. GND builds a copy. (This surprised me, too, when I learned it.)
It's useful because GHC can derive a lot more things today than in olden times, and there's a lot of old code that hasn't noticed yet.
I still think this would be quite a bit of work and one more thing to maintain within GHC. The feature would also necessarily be heuristic in nature. It strikes me this would make a great feature in HLint, but I personally don't think GHC is the right home for it. -- Ticket URL: http://ghc.haskell.org/trac/ghc/ticket/9757#comment:3 GHC http://www.haskell.org/ghc/ The Glasgow Haskell Compiler