Aggregate type class.
Type class for aggregates.
Encode aggregate into a ByteString representation. The representation should contain some metadata (a UUID for example) which can be used to check reliably whether the encoded representation is valid upon decoding. This can be used if the actual aggregate structure changes.
Decode ByteString to aggregate state. If decoding is not
possible should return