I have no particular opinions on the internals of LVish.
I do have concern than your supplied Generic for Set seems rather borked though, so I felt I should explain the issue lest someone take it as a model for how to define a custom Generic! =)
A real valid 'virtual' Rep (Set a) would be a fair bit more complicated with something like
instance Generic Set where
type Rep (Set a) = D1 D_Set (C1 C_fromList (S1 NoSelector (Rec0 [a]))
to (M1 (M1 (M1 (K1 as))) = fromList as
from as = M1 (M1 (M1 (K1 (toList as)
instance Generic1 Set where
type Rep1 Set = D1 D1_Set (C1 C1_fromList (S1 NoSelector (Rec1 []))
...
with a custom Datatype instances D_Set, D1_Set and custom virtual Constructor instances C_fromList and C1_fromList.
Otherwise it won't deal correctly with any code out there that was written to assume a properly constructed Generic.
Headaches like that are why few of us ever implement Generic or Generic1 by hand. ;)
Actually, I can't think of anyone else who has bothered. I was forced to figure it out back when Generic1 deriving was broken.
-Edward