named-sop (hackage): Sums and Maps (products) indexed by a typelevel map of their field (or constructor) names and types.  They can be combined and split again; their typelevel map is sorted to ensure that the end result is independent of the order you combine it in.  Data.NamedSOP.Generic contains functions for automatically converting between types with a Generic instance and named sums of products:
Keywords: data|library|mit