acme-memorandom-0.0.3: Memoized random number generation

Copyright© 2015 Johan Kiviniemi
LicenseMIT
MaintainerJohan Kiviniemi <devel@johan.kiviniemi.name>
Stabilityprovisional
PortabilityCPP, TypeFamilies, TypeOperators
Safe HaskellNone
LanguageHaskell2010

System.Random.Memoized

Description

A library for generating random numbers in a memoized manner. Implemented as a lazy table indexed by serialized StdGen. Monomorphism is used to facilitate memoization, users should adapt their design to work with random Int values only.

In a benchmark, the initial generation of 100000 random Ints took 10.30 seconds and consumed 2.5 gigabytes of memory. Generating the 100000 Ints again from the same seed only took 2.06 seconds, a 5-fold speedup thanks to memoization!

Incidentally, generating the 100000 Ints with the non-memoized function took 0.12 seconds, but that of course lacks all the benefits of memoization.

Synopsis

Documentation

randomR' :: (Int, Int) -> StdGen -> (Int, StdGen) Source

A memoized variant of randomR.

random' :: StdGen -> (Int, StdGen) Source

A memoized variant of random.

randomRs' :: (Int, Int) -> StdGen -> [Int] Source

A memoized variant of randomRs.

randoms' :: StdGen -> [Int] Source

A memoized variant of randoms.

randomRIO' :: (Int, Int) -> IO Int Source

A memoized variant of randomRIO.

randomIO' :: IO Int Source

A memoized variant of randomIO.