Derivable type classes

Simon Peyton-Jones
Wed, 16 Apr 2003 13:06:41 +0100

Gentle GHC users

I'm thinking of removing the "Derivable type classes" stuff from GHC.
It's described in a paper that Ralph Hinze and I wrote
and in the GHC user manual at

But it's quite complicated to implement, it's incomplete (needs
constructor-name stuff, and better lifting), and it sometimes gives huge
types in the intermediate language (because of the encoding into
tuples).  So the benefit-to-cost ratio seems poor.

Instead, I'm planning to implement the "Scrap your boilerplate" ideas
for generic programming, described in another paper
The plan would be to automatically derive classes 'Typable' and 'Term'
for every data type, and make TypeReps a bit more efficient and clean.

Now, I could add the latter without removing the former, but GHC is big
and fat enough already.  So this message is really to ask

	is anyone actually using the derivable-type-class stuff?
	does anyone mind if they die

Speak now or forever hold your peace.


Just to remind you, derivable type classes let you write definitions
  class Eq t where
    (=3D=3D), (/=3D)				:: t -> t -> Bool
    -- generic default method
    (=3D=3D){1}     Unit        Unit	=3D  True
    (=3D=3D){a + b} (Inl x1)    (Inl  x2)	=3D  x1 =3D=3D x2
    (=3D=3D){a + b} (Inr y1)    (Inr y2)	=3D  y1 =3D=3D y2
    (=3D=3D){a + b} _           _		=3D  False
    (=3D=3D){a * b} (x1 :*: y1) (x2 :*: y2)	=3D  x1 =3D=3D x2 && y1 =
=3D=3D y2