# random: Pseudo-random number generation

[ bsd3, library, system ] [ Propose Tags ]

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
>>> 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 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
>>> runStateGen_ pureGen (replicateM 10 . rollM) :: [Word]
[1,1,3,2,4,5,3,4,6,2]


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
>>> replicateM 10 (rollM monadicGen) :: IO [Word]
[2,3,6,6,4,4,3,1,5,4]


See System.Random.Stateful for more details.

Versions [RSS] [faq] 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 (info) CHANGELOG.md base (>=4.8 && <4.16), bytestring (>=0.10.4 && <0.12), deepseq (>=1.1 && <2), mtl (==2.2.*), splitmix (==0.1.*), transformers [details] BSD-3-Clause core-libraries-committee@haskell.org Revision 6 made by Bodigrim at 2021-07-11T22:38:05Z System https://github.com/haskell/random/issues head: git clone https://github.com/haskell/random.git by lehins at 2020-06-23T13:25:29Z Arch:1.2.1, Debian:1.1, Fedora:1.2.0, FreeBSD:1.1, LTSHaskell:1.2.0, NixOS:1.2.0, Stackage:1.2.1, openSUSE:1.1 413514 total (2282 in the last 30 days) 2.5 (votes: 4) [estimated by Bayesian average] λ λ λ Docs available Last success reported on 2020-06-23

## Modules

[Index] [Quick Jump]

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

[back to package description]

## Random Number Generation

### Status

Language Travis Coveralls
Package Hackage Nightly LTS
random

### Description

This library provides a basic interface for (splittable) pseudo-random number generators.

The API documentation can be found here:

An older version of this library is included with GHC in the haskell98 package. This newer version is included in the Haskell Platform.