-- 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 &amp; Applications (OOPSLA '14). ACM, New York, NY, USA,
--   453-472. DOI: <a>https://doi.org/10.1145/2660193.2660195</a>
@package splitmix
@version 0


-- | <i>SplitMix</i> 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. <i>In Proceedings of the
--   2014 ACM International Conference on Object Oriented Programming
--   Systems Languages &amp; Applications</i> (OOPSLA '13). ACM, New York,
--   NY, USA, 453-472. DOI: <a>https://doi.org/10.1145/2660193.2660195</a>
module System.Random.SplitMix

-- | SplitMix generator state.
data SMGen

-- | Generate a <a>Word64</a>.
nextWord64 :: SMGen -> (Word64, SMGen)

-- | Generate an <a>Int</a>.
nextInt :: SMGen -> (Int, SMGen)

-- | Generate a <a>Double</a> in <tt>[0, 1)</tt> range.
nextDouble :: SMGen -> (Double, SMGen)

-- | Split a generator into a two uncorrelated generators.
splitSMGen :: SMGen -> (SMGen, SMGen)

-- | Preferred way to deterministically construct <a>SMGen</a>.
mkSMGen :: Word64 -> SMGen

-- | Initialize <a>SMGen</a> using system time.
initSMGen :: IO SMGen

-- | Derive a new generator instance from the global <a>SMGen</a> using
--   <a>splitSMGen</a>.
newSMGen :: IO SMGen

-- | Create <a>SMGen</a> using seed and gamma.
seedSMGen :: Word64 -> Word64 -> SMGen

-- | Like <a>seedSMGen</a> but takes a pair.
seedSMGen' :: (Word64, Word64) -> SMGen

-- | Extract current state of <a>SMGen</a>.
unseedSMGen :: SMGen -> (Word64, Word64)
instance GHC.Show.Show System.Random.SplitMix.SMGen
instance System.Random.RandomGen System.Random.SplitMix.SMGen
