# random: 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 `System.Random.uniform`

and `System.Random.uniformR`

from
System.Random to generate pseudo-random numbers with a pure pseudo-random
number generator like `System.Random.StdGen`

.

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

:

`>>>`

`let roll = uniformR (1, 6) :: RandomGen g => g -> (Word, g)`

`>>>`

`let rolls = unfoldr (Just . roll) :: RandomGen g => g -> [Word]`

`>>>`

`let pureGen = mkStdGen 42`

`>>>`

[1,1,3,2,4,5,3,4,6,2]`take 10 (rolls pureGen) :: [Word]`

See System.Random for more details.

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

In monadic code, use `System.Random.Stateful.uniformM`

and
`System.Random.Stateful.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
`System.Random.Stateful.uniformRM`

:

`>>>`

`let rollM = uniformRM (1, 6) :: StatefulGen g m => g -> m Word`

`>>>`

`let pureGen = mkStdGen 42`

`>>>`

[1,1,3,2,4,5,3,4,6,2]`runStateGen_ pureGen (replicateM 10 . rollM) :: [Word]`

The monadic adapter `System.Random.Stateful.runGenState_`

is used here to lift
the pure pseudo-random number generator `pureGen`

into the
`System.Random.Stateful.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`

`>>>`

[2,3,6,6,4,4,3,1,5,4]`replicateM 10 (rollM monadicGen) :: IO [Word]`

See System.Random.Stateful for more details.

[Skip to Readme]

## Downloads

- random-1.2.0.tar.gz [browse] (Cabal source package)
- Package description (revised from the package)

Note: This package has metadata revisions in the cabal description newer than included in the tarball. To unpack the package including the revisions, use 'cabal get'.

#### Maintainer's Corner

For package maintainers and hackage trustees

Candidates

- No Candidates

Versions [RSS] | 1.0.0.0, 1.0.0.1, 1.0.0.2, 1.0.0.3, 1.0.1.0, 1.0.1.1, 1.0.1.3, 1.1, 1.2.0, 1.2.1, 1.2.1.1 (info) |
---|---|

Change log | CHANGELOG.md |

Dependencies | base (>=4.8 && <4.16), bytestring (>=0.10.4 && <0.12), deepseq (>=1.1 && <2), mtl (>=2.2 && <2.3), splitmix (>=0.1 && <0.2), transformers [details] |

License | BSD-3-Clause |

Author | |

Maintainer | core-libraries-committee@haskell.org |

Revised | Revision 6 made by Bodigrim at 2021-07-11T22:38:05Z |

Category | System |

Bug tracker | https://github.com/haskell/random/issues |

Source repo | head: git clone https://github.com/haskell/random.git |

Uploaded | by lehins at 2020-06-23T13:25:29Z |

Distributions | Arch:1.2.1.1, Debian:1.1, Fedora:1.2.0, FreeBSD:1.1, LTSHaskell:1.2.1.1, NixOS:1.2.1.1, Stackage:1.2.1.1, openSUSE:1.2.1 |

Reverse Dependencies | 977 direct, 8545 indirect [details] |

Downloads | 426442 total (447 in the last 30 days) |

Rating | 2.5 (votes: 5) [estimated by Bayesian average] |

Your Rating | |

Status | Docs available [build log] Last success reported on 2020-06-23 [all 1 reports] |