úÎ!<&9b(      !"#$%&'SafeZ()*+ TrustworthyÄsplitmixSplitMix generator state.splitmix Generate a ,.Stake 3 $ map (printf "%x") $ unfoldr (Just . nextWord64) (mkSMGen 1337) :: [String]:["b5c19e300e8b07b3","d600e0e216c0ac76","c54efc3b3cc5af29"]splitmix Generate - by truncating .splitmix Generate two -.splitmix Generate an ..splitmix Generate a / 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 0 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"]splitmix5Split a generator into a two uncorrelated generators.splitmixBitmask with rejection" method of generating subrange of -. splitmixBitmask with rejection" method of generating subrange of ,.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] 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 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    Trustworthy8ÞsplitmixSplitMix generator state.splitmix Generate a -.Stake 3 $ map (printf "%x") $ unfoldr (Just . nextWord32) (mkSMGen 1337) :: [String]"["e0cfe722","a6ced0f0","c3a6d889"]splitmix Generate a ,, by generating to -s.splitmix Generate two -.splitmix Generate an ..splitmix Generate a / 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 0 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"]splitmix5Split a generator into a two uncorrelated generators.1splitmix(1 + sqrt 5) / 2 * (2 ^^ bits)splitmixBitmask with rejection" method of generating subrange of -.splitmixBitmask with rejection" method of generating subrange of ,.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]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 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 !"#!"# 2           !"#!"$!"%&'%splitmix-0.0.3-Bx64LU9jZHV8hGbjzuFVkVSystem.Random.SplitMixSystem.Random.SplitMix32Data.Bits.CompatSMGen nextWord64 nextWord32 nextTwoWord32nextInt nextDouble nextFloat splitSMGenbitmaskWithRejection32bitmaskWithRejection64 seedSMGen seedSMGen' unseedSMGenmkSMGen initSMGennewSMGen$fRandomGenSMGen $fReadSMGen $fNFDataSMGen $fShowSMGenbase Data.BitszeroBitspopCountcountLeadingZeros finiteBitSizeGHC.WordWord64Word32ghc-prim GHC.TypesIntDoubleFloat goldenGamma