Make Generic1 kind polymorphic
It looks to me that the Generic1 class (and the Rep1 associated type) can immediately be generalized to forall k. k -> *. If k was instantiated to anything other than *, you wouldn't be able to make an instance for Par1, but then I don't think it would ever come up so that would be exactly the right behavior. This allows, in particular, DataKinds to be used as a parameter to instances of Generic1.
I don't know if this would affect deriving, but I wouldn't really expect it to.
Edited by Simon Peyton Jones