-- | Aggregate type class. module Data.CQRS.Aggregate ( Aggregate(..) ) where import Data.ByteString (ByteString) -- | Type class for aggregates. class Aggregate a where -- | 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. encodeAggregate :: a -> ByteString -- | Decode ByteString to aggregate state. If decoding is not -- possible should return 'Nothing'. decodeAggregate :: ByteString -> Maybe a