A pseudo derivation. For each field in the data type, deriving
Set generates setFieldName v x = x{fieldName = v}.
This derivation is intended to work around the fact that in Haskell
assigning to a field is not a first class object (although
extracting from a field is).