-- Hoogle documentation, generated by Haddock
-- See Hoogle, http://www.haskell.org/hoogle/
-- | Fast Splittable PRNG
--
-- Pure Haskell implementation of SplitMix described in
--
-- Guy L. Steele, Jr., Doug Lea, and Christine H. Flood. 2014. Fast
-- splittable pseudorandom number generators. In Proceedings of the 2014
-- ACM International Conference on Object Oriented Programming Systems
-- Languages & Applications (OOPSLA '14). ACM, New York, NY, USA,
-- 453-472. DOI: https://doi.org/10.1145/2660193.2660195
--
-- The paper describes a new algorithm SplitMix for
-- splittable pseudorandom number generator that is quite fast: 9
-- 64 bit arithmetic/logical operations per 64 bits generated.
--
-- SplitMix is tested with two standard statistical test suites
-- (DieHarder and TestU01, this implementation only using the former) and
-- it appears to be adequate for "everyday" use, such as Monte Carlo
-- algorithms and randomized data structures where speed is important.
--
-- In particular, it should not be used for cryptographic or security
-- applications, because generated sequences of pseudorandom values
-- are too predictable (the mixing functions are easily inverted, and two
-- successive outputs suffice to reconstruct the internal state).
@package splitmix
@version 0.0.1
-- | SplitMix is a splittable pseudorandom number generator (PRNG)
-- that is quite fast.
--
-- Guy L. Steele, Jr., Doug Lea, and Christine H. Flood. 2014. Fast
-- splittable pseudorandom number generators. In Proceedings of the
-- 2014 ACM International Conference on Object Oriented Programming
-- Systems Languages & Applications (OOPSLA '13). ACM, New York,
-- NY, USA, 453-472. DOI: https://doi.org/10.1145/2660193.2660195
--
-- Guy L. Steele, Jr., Doug Lea, and Christine H. Flood. 2014. Fast
-- splittable pseudorandom number generators. In Proceedings of the 2014
-- ACM International Conference on Object Oriented Programming Systems
-- Languages & Applications (OOPSLA '14). ACM, New York, NY, USA,
-- 453-472. DOI: https://doi.org/10.1145/2660193.2660195
--
-- The paper describes a new algorithm SplitMix for
-- splittable pseudorandom number generator that is quite fast: 9
-- 64 bit arithmetic/logical operations per 64 bits generated.
--
-- SplitMix is tested with two standard statistical test suites
-- (DieHarder and TestU01, this implementation only using the former) and
-- it appears to be adequate for "everyday" use, such as Monte Carlo
-- algorithms and randomized data structures where speed is important.
--
-- In particular, it should not be used for cryptographic or security
-- applications, because generated sequences of pseudorandom values
-- are too predictable (the mixing functions are easily inverted, and two
-- successive outputs suffice to reconstruct the internal state).
module System.Random.SplitMix
-- | SplitMix generator state.
data SMGen
-- | Generate a Word64.
nextWord64 :: SMGen -> (Word64, SMGen)
-- | Generate an Int.
nextInt :: SMGen -> (Int, SMGen)
-- | Generate a Double in [0, 1) range.
nextDouble :: SMGen -> (Double, SMGen)
-- | Split a generator into a two uncorrelated generators.
splitSMGen :: SMGen -> (SMGen, SMGen)
-- | Preferred way to deterministically construct SMGen.
mkSMGen :: Word64 -> SMGen
-- | Initialize SMGen using system time.
initSMGen :: IO SMGen
-- | Derive a new generator instance from the global SMGen using
-- splitSMGen.
newSMGen :: IO SMGen
-- | Create SMGen using seed and gamma.
seedSMGen :: Word64 -> Word64 -> SMGen
-- | Like seedSMGen but takes a pair.
seedSMGen' :: (Word64, Word64) -> SMGen
-- | Extract current state of SMGen.
unseedSMGen :: SMGen -> (Word64, Word64)
instance GHC.Show.Show System.Random.SplitMix.SMGen
instance Control.DeepSeq.NFData System.Random.SplitMix.SMGen
instance System.Random.RandomGen System.Random.SplitMix.SMGen