
#15434: DerivingVia (and perhaps even GND) works badly with DeriveGeneric -------------------------------------+------------------------------------- Reporter: konn | Owner: (none) Type: bug | Status: new Priority: normal | Milestone: 8.6.1 Component: Compiler | Version: Resolution: | Keywords: deriving Operating System: Unknown/Multiple | Architecture: | Unknown/Multiple Type of failure: None/Unknown | Test Case: Blocked By: | Blocking: Related Tickets: | Differential Rev(s): Wiki Page: | -------------------------------------+------------------------------------- Comment (by konn): Replying to [comment:3 RyanGlScott]:
True, 90% of the time, this is what you want, but for the other 10%, having explicit control through `DerivingStrategies` is quite handy.
I agree. In general, it is desirable to have the flexibility on the choice of a deriving strategy.
There are folks out there who write `Generic` instances which differ from what `stock` deriving would give you for various reasons. One reason is that some people like to define data types abstractly and only allow creating/matching on values of that data type through pattern synonyms.
I think what you want is for GHC to be able to verify that a particular `Generic` instance's structure actually matches the data type it was derived for. This is a reasonable desire, since there are certain
I've just taken a simple survey searching `instance Generic` in codes on GitHub and count how many custom instances for `Generic` are defined, using [https://github.com/konn/crawl-github this code]. It reported that there are 2 out of 892 modules with custom `Generic` instance and have 12 custom instances as a total; it turns out that `Generic` instances in one of the modules are not related to GHC's Generics. One instance is something like mapping the Rep of `Map k v` to that of `[(k, v)]`. Since there are some modules that cannot be parsed by `haskell-src-exts` and not counted in my survey, there might be more custom instances. Anyway, there is at least one use-case and there might be other custom instances doing the similar things. properties about data types that can easily be discerned from a `Rep` instance, but only if you have confidence that the `Rep` instance isn't "lying". dfeuer (cc'd) has toyed with some ideas for how this could be achieved in GHC—perhaps he could chime in here. I find this option is reasonable. If GHC can warn that one can avoid unintended derived instance, and if one really wants to write custom instance, then one can turn off that warning. -- Ticket URL: http://ghc.haskell.org/trac/ghc/ticket/15434#comment:4 GHC http://www.haskell.org/ghc/ The Glasgow Haskell Compiler