Generically generate a
Semigroup (
<>) operation
for any type implementing
Generic. This operation will append
two values by point-wise appending their component fields. It is only
defined for product types.
gmappend a (gmappend b c) = gmappend (gmappend a b) c