úÎ!±­      TrustworthyQ splitmixSplitMix generator state.splitmix Generate a .Stake 3 $ map (printf "%x") $ unfoldr (Just . nextWord64) (mkSMGen 1337) :: [String]:["b5c19e300e8b07b3","d600e0e216c0ac76","c54efc3b3cc5af29"]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"]splitmix5Split a generator into a two uncorrelated generators.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 13679457532755275413 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 SMGen5Just (SMGen 9297814886316923340 13679457532755275413)splitmixseedsplitmixgamma        %splitmix-0.0.2-6QWXa8lryKE5Joc1C8UDcHSystem.Random.SplitMixSMGen nextWord64nextInt nextDouble splitSMGen seedSMGen seedSMGen' unseedSMGenmkSMGen initSMGennewSMGen$fRandomGenSMGen $fReadSMGen $fNFDataSMGen $fShowSMGenbaseGHC.WordWord64ghc-prim GHC.TypesIntDouble