-- | Globally Unique IDentifiers.
module Data.CQRS.GUID
       ( GUID
       , mkGUID
       ) where

import Data.Binary (Binary(..))
import Data.ByteString (ByteString)
import Data.Typeable (Typeable)

-- | A GUID for values of type 'a'.
newtype GUID a = GUID ByteString
              deriving (Show, Typeable, Eq)

-- | Binary instance.
instance forall a . Binary (GUID a) where
  get = fmap GUID get
  put (GUID g) = put g

-- | Make a GUID.
mkGUID :: ByteString -> GUID a
mkGUID s = GUID s