# 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.runStateGen_`

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.1.1.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, 1.2.1.2 (info) |
---|---|

Change log | CHANGELOG.md |

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

License | BSD-3-Clause |

Author | |

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

Revised | Revision 1 made by Bodigrim at 2023-09-30T20:57:11Z |

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 2022-05-09T02:32:03Z |

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

Reverse Dependencies | 1023 direct, 9506 indirect [details] |

Downloads | 434442 total (522 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 2022-05-09 [all 1 reports] |