úÎ!I´FŽ.      !"#$%&'()*+,-Safe ./01 Trustworthy$esplitmixSplitMix generator state.splitmix Generate a 2.Stake 3 $ map (printf "%x") $ unfoldr (Just . nextWord64) (mkSMGen 1337) :: [String]:["b5c19e300e8b07b3","d600e0e216c0ac76","c54efc3b3cc5af29"]splitmix Generate 3 by truncating .splitmix Generate two 3.splitmix Generate an 4.splitmix Generate a 5 in [0, 1) range.Vtake 8 $ map (printf "%0.3f") $ unfoldr (Just . nextDouble) (mkSMGen 1337) :: [String]A["0.710","0.836","0.771","0.409","0.297","0.527","0.589","0.067"]splitmix Generate a 6 in [0, 1) range.Utake 8 $ map (printf "%0.3f") $ unfoldr (Just . nextFloat) (mkSMGen 1337) :: [String]A["0.057","0.089","0.237","0.383","0.680","0.320","0.826","0.007"]splitmix Generate an 7 in closed [x, y] range.splitmix5Split a generator into a two uncorrelated generators. splitmixBitmask with rejection" method of generating subrange of 3. splitmixBitmask with rejection" method of generating subrange of 2.bitmaskWithRejection64 w643 generates random numbers in closed-open range of [0, w64).Btake 20 $ unfoldr (Just . bitmaskWithRejection64 5) (mkSMGen 1337))[3,1,4,1,2,3,1,1,0,3,4,2,3,0,2,3,3,4,1,0] splitmixBitmask with rejection" method of generating subrange of 3. splitmixBitmask with rejection" method of generating subrange of 2.bitmaskWithRejection64' w645 generates random numbers in closed-closed range of [0, w64].Ctake 20 $ unfoldr (Just . bitmaskWithRejection64' 5) (mkSMGen 1337))[3,1,4,1,2,3,1,1,0,3,4,5,2,3,0,2,3,5,3,4] splitmixCreate  using seed and gamma. seedSMGen 2 2 SMGen 2 3splitmixLike   but takes a pair.splitmixExtract current state of .splitmix-Preferred way to deterministically construct . mkSMGen 42.SMGen 9297814886316923340 13679457532755275413splitmix Initialize  using system time.splitmix0Derive a new generator instance from the global  using .splitmix$readMaybe "SMGen 1 1" :: Maybe SMGenJust (SMGen 1 1)$readMaybe "SMGen 1 2" :: Maybe SMGenNothing,readMaybe (show (mkSMGen 42)) :: Maybe SMGen5Just (SMGen 9297814886316923340 13679457532755275413) splitmixseedsplitmixgamma    TrustworthyEòsplitmixSplitMix generator state.splitmix Generate a 3.Stake 3 $ map (printf "%x") $ unfoldr (Just . nextWord32) (mkSMGen 1337) :: [String]"["e0cfe722","a6ced0f0","c3a6d889"]splitmix Generate a 2, by generating to 3s.splitmix Generate two 3.splitmix Generate an 4.splitmix Generate a 5 in [0, 1) range.Vtake 8 $ map (printf "%0.3f") $ unfoldr (Just . nextDouble) (mkSMGen 1337) :: [String]A["0.878","0.764","0.063","0.845","0.262","0.490","0.176","0.544"]splitmix Generate a 6 in [0, 1) range.Utake 8 $ map (printf "%0.3f") $ unfoldr (Just . nextFloat) (mkSMGen 1337) :: [String]A["0.878","0.652","0.764","0.631","0.063","0.180","0.845","0.645"]splitmix Generate an 7 in closed [x, y] range.splitmix5Split a generator into a two uncorrelated generators.8splitmix(1 + sqrt 5) / 2 * (2 ^^ bits) splitmixBitmask with rejection" method of generating subrange of 3.!splitmixBitmask with rejection" method of generating subrange of 2.bitmaskWithRejection64 w643 generates random numbers in closed-open range of [0, w64).Btake 20 $ unfoldr (Just . bitmaskWithRejection64 5) (mkSMGen 1337))[0,2,4,2,1,4,2,4,2,2,3,0,3,2,2,2,3,1,2,2]"splitmixBitmask with rejection" method of generating subrange of 3.#splitmixBitmask with rejection" method of generating subrange of 2.bitmaskWithRejection64' w645 generates random numbers in closed-closed range of [0, w64].Ctake 20 $ unfoldr (Just . bitmaskWithRejection64' 5) (mkSMGen 1337))[0,2,4,2,1,4,2,4,5,5,2,2,5,3,5,0,3,2,2,2]$splitmixCreate  using seed and gamma. seedSMGen 2 2 SMGen 2 3%splitmixLike $ but takes a pair.&splitmixExtract current state of .'splitmix-Preferred way to deterministically construct . mkSMGen 42SMGen 142593372 1604540297(splitmix Initialize  using system time.)splitmix0Derive a new generator instance from the global  using .+splitmix$readMaybe "SMGen 1 1" :: Maybe SMGenJust (SMGen 1 1)$readMaybe "SMGen 1 2" :: Maybe SMGenNothing,readMaybe (show (mkSMGen 42)) :: Maybe SMGen!Just (SMGen 142593372 1604540297)$splitmixseedsplitmixgamma !"#$%&'() "!#'()$%&9           !"!#$%&$%'$%()*+,-%splitmix-0.0.5-ASAXtC8HTYFF1yyUMaBIiQSystem.Random.SplitMixSystem.Random.SplitMix32Data.Bits.CompatSMGen nextWord64 nextWord32 nextTwoWord32nextInt nextDouble nextFloat nextInteger splitSMGenbitmaskWithRejection32bitmaskWithRejection64bitmaskWithRejection32'bitmaskWithRejection64' seedSMGen seedSMGen' unseedSMGenmkSMGen initSMGennewSMGen$fRandomGenSMGen $fReadSMGen $fNFDataSMGen $fShowSMGenbase Data.BitszeroBitspopCountcountLeadingZeros finiteBitSizeGHC.WordWord64Word32ghc-prim GHC.TypesIntDoubleFloat integer-gmpGHC.Integer.TypeInteger goldenGamma