
#13065: Prohibit user-defined Generic and Generic1 instances -------------------------------------+------------------------------------- Reporter: dfeuer | Owner: Type: feature request | Status: new Priority: normal | Milestone: 8.4.1 Component: Compiler | Version: 8.0.1 Resolution: | Keywords: Generics Operating System: Unknown/Multiple | Architecture: | Unknown/Multiple Type of failure: Other | Test Case: Blocked By: | Blocking: Related Tickets: | Differential Rev(s): Wiki Page: | -------------------------------------+------------------------------------- Comment (by RyanGlScott): GHC isn't able to derive `Generic` instances for GADTs since as it stands today, there's no sensible way to do it. The ones you hand-defined are bogus, since they would have you believe that there's //two// separate datatypes named `Foo`, each with different constructors. And then there's the separate issue that they don't capture the `'True` and `'False` existential equality information. I don't see what pattern synonyms change here. The issue is fundamentally about what promises `Generic` instances make, and if we want them to be honest, then we cannot allow hand-defined `Generic` instances at all, even if they might be temptingly convenient. `GHC.Generics` is a feature which necessarily mirrors the definition of datatype, so if a datatype's internal structure changes, then its `Generic` instance must change too. Full stop. -- Ticket URL: http://ghc.haskell.org/trac/ghc/ticket/13065#comment:7 GHC http://www.haskell.org/ghc/ The Glasgow Haskell Compiler