module Data.UUID.V4 (nextRandom) where
import Data.UUID
import Data.UUID.Types.Internal ( buildFromBytes )
import System.Entropy ( getEntropy )
import Data.ByteString ( unpack )
nextRandom :: IO UUID
nextRandom :: IO UUID
nextRandom = do
[Word8
b0, Word8
b1, Word8
b2, Word8
b3, Word8
b4, Word8
b5, Word8
b6, Word8
b7, Word8
b8, Word8
b9, Word8
ba, Word8
bb, Word8
bc, Word8
bd, Word8
be, Word8
bf]
<- ByteString -> [Word8]
unpack (ByteString -> [Word8]) -> IO ByteString -> IO [Word8]
forall a b. (a -> b) -> IO a -> IO b
forall (f :: * -> *) a b. Functor f => (a -> b) -> f a -> f b
`fmap` Int -> IO ByteString
getEntropy Int
16
UUID -> IO UUID
forall a. a -> IO a
forall (m :: * -> *) a. Monad m => a -> m a
return (UUID -> IO UUID) -> UUID -> IO UUID
forall a b. (a -> b) -> a -> b
$ Word8
-> Word8
-> Word8
-> Word8
-> Word8
-> Word8
-> Word8
-> Word8
-> Word8
-> Word8
-> Word8
-> Word8
-> Word8
-> Word8
-> Word8
-> Word8
-> Word8
-> UUID
buildFromBytes Word8
4 Word8
b0 Word8
b1 Word8
b2 Word8
b3 Word8
b4 Word8
b5 Word8
b6 Word8
b7 Word8
b8 Word8
b9 Word8
ba Word8
bb Word8
bc Word8
bd Word8
be Word8
bf