Automatically deriving Generic for every algebraic data type

Wolfgang Jeltsch g9ks157k at
Thu Feb 4 12:28:16 UTC 2016

Am Donnerstag, den 04.02.2016, 14:19 +0200 schrieb Wolfgang Jeltsch:
> Hi,
> if you do generic programming these days, you can use DeriveAnyClass to
> write code like the following (where Serializable is a class with a
> generic default implementation):
> > data Tree a = Leaf | Branch (Tree a) a (Tree a)
> >               deriving (Generic, Serializable)
> It would be great, if you could just write the following instead:
> > data Tree a = Leaf | Branch (Tree a) a (Tree a) deriving Serializable
> This would correspond exactly to what you do when using standard Haskell
> deriving. It could be made possible by letting the compiler instantiate
> the Generic class automatically every time an algebraic data type is
> declared. A potential downside of this would be that programmers would
> not be able to define non-standard instances of Generics, but I actually
> cannot see that this is very useful anyhow.

I want to add that this would probably allow us to implement all the
other deriving mechanisms (for standard classes, for Functor, etc.)
entirely in libraries, using generic programming, without forcing users
to change their code by adding deriving of Generic. Maybe a future
standard Haskell would not even have deriving rules hardwired into the
language anymore (which always felt somehow wrong to me). Wouldn’t this
be great? ;-) 

All the best,

More information about the ghc-devs mailing list