Case classes provide the equals method. Is this insufficient for your requirements?
I believe so.
Yes. Case classes do implement both equals and hashCode by structure.
scalaz.Equal
Except it doesn't have structural autogen yet...
Sure it does. It just looks a lot different and is flexible.
Equal composes.
Equal[A] => Equal[B] => Equal[B]
Combined with lenses, the effort required is proportional to the deviaton from the default. That is, the default requires no effort (is "generated").
Correction.
Equal composes (to records).
Equal[A] => Equal[B] => Equal[(A,B)]