úÎ!O2L(,      !"#$%&'()*+Safe†,-./ Trustworthy'%splitmixSplitMix generator state.splitmix Generate a 0.Stake 3 $ map (printf "%x") $ unfoldr (Just . nextWord64) (mkSMGen 1337) :: [String]:["b5c19e300e8b07b3","d600e0e216c0ac76","c54efc3b3cc5af29"]splitmix Generate 1 by truncating .splitmix Generate two 1.splitmix Generate an 2.splitmix Generate a 3 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 4 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 5 in closed [x, y] range.splitmix5Split a generator into a two uncorrelated generators. splitmixBitmask with rejection" method of generating subrange of 1.bitmaskWithRejection32 w323 generates random numbers in closed-open range of [0, w32). splitmixBitmask with rejection" method of generating subrange of 0.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 1.bitmaskWithRejection32' w325 generates random numbers in closed-closed range of [0, w32]. splitmixBitmask with rejection" method of generating subrange of 0.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    TrustworthyKŒsplitmixSplitMix generator state.splitmix Generate a 1.Stake 3 $ map (printf "%x") $ unfoldr (Just . nextWord32) (mkSMGen 1337) :: [String]"["e0cfe722","a6ced0f0","c3a6d889"]splitmix Generate a 0, by generating to 1s.splitmix Generate two 1.splitmix Generate an 2.splitmix Generate a 3 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 4 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 5 in closed [x, y] range.splitmix5Split a generator into a two uncorrelated generators.6splitmix(1 + sqrt 5) / 2 * (2 ^^ bits)splitmixBitmask with rejection" method of generating subrange of 1.bitmaskWithRejection32 w323 generates random numbers in closed-open range of [0, w32). splitmixBitmask with rejection" method of generating subrange of 0.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 1.bitmaskWithRejection32' w325 generates random numbers in closed-closed range of [0, w32]."splitmixBitmask with rejection" method of generating subrange of 0.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 !"#$%&'(! "&'(#$%7           ! "#$%#$&#$'()*+,'splitmix-0.1.0.1-7qYFvOTAtTuDzz8khuIGNzSystem.Random.SplitMixSystem.Random.SplitMix32Data.Bits.CompatSMGen nextWord64 nextWord32 nextTwoWord32nextInt nextDouble nextFloat nextInteger splitSMGenbitmaskWithRejection32bitmaskWithRejection64bitmaskWithRejection32'bitmaskWithRejection64' seedSMGen seedSMGen' unseedSMGenmkSMGen initSMGennewSMGen $fReadSMGen $fNFDataSMGen $fShowSMGenbase Data.BitszeroBitspopCountcountLeadingZeros finiteBitSizeGHC.WordWord64Word32ghc-prim GHC.TypesIntDoubleFloat integer-gmpGHC.Integer.TypeInteger goldenGamma