This library provides pseudo-random number generators (PRNGs) comparable
to that of the Random module from OCaml's standard library, but with
two extensions: Generators are "splittable": they support a split
operation that
returns a new generator that is statistically independent from the
current generator. Both generators can be used in parallel, and can
be further splitted, without introducing statistical bias. This
splitting operation is particularly useful to implement the lazy
generation of pseudo-random infinite data structures such as
functions or streams., In addition to a stateful, imperative interface resembling that of
the Random.State
standard library module, another, purely
functional interface is provided. In the functional interface, the
current state of the PRNG appears as parameter but also as result of
the number generation functions. This interface can be used
directly within a state monad.