-------------------------------------------------------------------------------- -- | -- Module : Database.EventStore.Internal.Generator -- Copyright : (C) 2015 Yorick Laupa -- License : (see the file LICENSE) -- -- Maintainer : Yorick Laupa -- Stability : provisional -- Portability : non-portable -- -- Pure UUID generator. -------------------------------------------------------------------------------- module Database.EventStore.Internal.Generator ( Generator , nextUUID , newGenerator , splitGenerator ) where -------------------------------------------------------------------------------- import Data.UUID import System.Random -------------------------------------------------------------------------------- -- | Pure 'UUID' generator. newtype Generator = Generator StdGen -------------------------------------------------------------------------------- -- | Gets the next fresh 'UUID'. nextUUID :: Generator -> (UUID, Generator) nextUUID (Generator g) = let (u, nxt) = random g in (u, Generator nxt) -------------------------------------------------------------------------------- -- | Builds 2 new 'Generator's out of one. splitGenerator :: Generator -> (Generator, Generator) splitGenerator (Generator g) = let (g1, g2) = split g in (Generator g1, Generator g2) -------------------------------------------------------------------------------- -- | Creates a new 'Generator'. newGenerator :: IO Generator newGenerator = fmap Generator getStdGen