-- 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: -- -- -- -- 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