@@ -67,13 +67,14 @@ instance Show UUID where
6767
6868getUUID :: RandomGen g => g -> UUID
6969getUUID gen =
70− let [a,b,c,d,e,f,g,h,i,j,k,l,m,n,o,p] = take 16 $ randoms gen :: [Word8]
71− -- set variant
72− i' = i `setBit` 7 `clearBit` 6
73− -- set version (0100 for random)
74− g' = g `clearBit` 7 `setBit` 6 `clearBit` 5 `clearBit` 4
75− in
76− UUID a b c d e f g' h i' j k l m n o p
70+ case take 16 (randoms gen :: [Word8]) of
71+ [a,b,c,d,e,f,g,h,i,j,k,l,m,n,o,p] ->
72+ -- set variant
73+ let i' = i `setBit` 7 `clearBit` 6
74+ -- set version (0100 for random)
75+ g' = g `clearBit` 7 `setBit` 6 `clearBit` 5 `clearBit` 4
76+ in UUID a b c d e f g' h i' j k l m n o p
77+ _ -> error "not enough random numbers for UUID" -- should not happen
7778
7879getRandomUUID :: IO UUID
7980getRandomUUID = getUUID <$> getStdGen