random-1.3.0: Pseudo-random number generation

# random-1.3.0: Pseudo-random number generation

This package provides basic pseudo-random number generation, including the ability to split random number generators.

## System.Random: pure pseudo-random number interface

In pure code, use `uniform` and `uniformR` from System.Random to generate pseudo-random numbers with a pure pseudo-random number generator like `StdGen`.

As an example, here is how you can simulate rolls of a six-sided die using `uniformR`:

    >>> let roll = uniformR (1, 6)        :: RandomGen g => g -> (Word, g)
    >>> let rolls = unfoldr (Just . roll) :: RandomGen g => g -> [Word]
    >>> let pureGen = mkStdGen 42
    >>> take 10 (rolls pureGen)           :: [Word]
    [1,1,3,2,4,5,3,4,6,2]

See System.Random for more details.

## System.Random.Stateful: monadic pseudo-random number interface

In monadic code, use `uniformM` and `uniformRM` from System.Random.Stateful to generate pseudo-random numbers with a monadic pseudo-random number generator, or using a monadic adapter.

As an example, here is how you can simulate rolls of a six-sided die using `uniformRM`:

    >>> let rollM = uniformRM (1, 6)                 :: StatefulGen g m => g -> m Word
    >>> let pureGen = mkStdGen 42
    >>> runStateGen_ pureGen (replicateM 10 . rollM) :: [Word]
    [1,1,3,2,4,5,3,4,6,2]

The monadic adapter `runStateGen_` is used here to lift the pure pseudo-random number generator `pureGen` into the `StatefulGen` context.

The monadic interface can also be used with existing monadic pseudo-random number generators. In this example, we use the one provided in the mwc-random package:

    >>> import System.Random.MWC as MWC
    >>> let rollM = uniformRM (1, 6)       :: StatefulGen g m => g -> m Word
    >>> monadicGen <- MWC.create
    >>> replicateM 10 (rollM monadicGen) :: IO [Word]
    [2,3,6,6,4,4,3,1,5,4]

See System.Random.Stateful for more details.

Modules

random-1.3.0

- System
  Submodules
  - System.Random
    Submodules
    - System.Random.Stateful