-- Hoogle documentation, generated by Haddock
-- See Hoogle, http://www.haskell.org/hoogle/
-- | High-quality splittable pseudorandom number generator
--
-- This package contains an implementation of a high-quality splittable
-- pseudorandom number generator. The generator is based on a
-- cryptographic hash function built on top of the ThreeFish block
-- cipher. See the paper Splittable Pseudorandom Number Generators
-- Using Cryptographic Hashing by Claessen, Pałka for details and the
-- rationale of the design.
--
-- The package provides the following:
--
--
-- - A splittable PRNG that implements the standard
-- System.Random.RandomGen class.
-- - The generator also implements an alternative version of the
-- System.Random.TF.Gen.RandomGen class (exported from
-- System.Random.TF.Gen), which requires the generator to return
-- pseudorandom integers from the full 32-bit range, and contains an
-- n-way split function.
-- - An alternative version of the Random class is provided,
-- which is linked to the new RandomGen class, together with
-- Random instances for some integral types.
-- - Two functions for initialising the generator with a
-- non-deterministic seed: one using the system time, and one using the
-- /dev/urandom UNIX special file.
--
--
-- The package uses an adapted version of the reference C implementation
-- of ThreeFish from the reference package of the Skein hash function
-- (https://www.schneier.com/skein.html), originally written by
-- Doug Whiting.
--
-- Please note that even though the generator provides very high-quality
-- pseudorandom numbers, it has not been designed with cryptographic
-- applications in mind.
@package tf-random
@version 0.1
module System.Random.TF.Init
-- | Use system time create the random seed. This method of seeding may not
-- be relible.
mkSeedTime :: IO (Word64, Word64, Word64, Word64)
-- | Use the UNIX special file /dev/urandom to create the seed.
-- Inspired by random-mwc.
mkSeedUnix :: IO (Word64, Word64, Word64, Word64)
-- | This module provides the TFGen generator and the alternative
-- RandomGen class. TFGen also implements the standard
-- RandomGen class.
module System.Random.TF.Gen
-- | The generator type
data TFGen
-- | Alternative RandomGen class with a modified next
-- operation, and added splitn and level operations.
--
-- Using the generator requires that no more than one operation is called
-- on the same generator state, as the implementation does not guarantee
-- pseudorandomness otherwise. As an exception, calling splitn
-- many times on the same generator state is allowed as long as the
-- 'bits' argument is the same for all the calls.
class RandomGen g
next :: RandomGen g => g -> (Word32, g)
split :: RandomGen g => g -> (g, g)
splitn :: RandomGen g => g -> Int -> Word32 -> g
level :: RandomGen g => g -> g
-- | Create a generator from a random seed.
seedTFGen :: (Word64, Word64, Word64, Word64) -> TFGen
instance Show TFGenR
instance Read TFGenR
instance RandomGen TFGen
instance RandomGen TFGen
instance Read TFGen
instance Show TFGen
instance Read Hex
instance Show Hex
-- | This module defines alternative Random instances for common
-- integral types, which make use of the RandomGen class from
-- System.Random.TF.Gen.
module System.Random.TF.Instances
class Random a where randomRs ival g = myUnfoldr (randomR ival) g randoms g = myUnfoldr random g
randomR :: (Random a, RandomGen g) => (a, a) -> g -> (a, g)
random :: (Random a, RandomGen g) => g -> (a, g)
randomRs :: (Random a, RandomGen g) => (a, a) -> g -> [a]
randoms :: (Random a, RandomGen g) => g -> [a]
instance Random Int64
instance Random Int32
instance Random Word64
instance Random Word32
instance Random Integer
instance Random Bool
instance Random Char
instance Random Int
-- | This module exports System.Random.TF.Gen and
-- System.Random.TF.Init modules without exporting the alternative
-- RandomGen class from System.Random.TF.Gen. To use this
-- class and the Random instances written for it, please import
-- System.Random.TF.Gen and System.Random.TF.Instances
-- directly.
module System.Random.TF