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


See System.Random.Stateful for more details.

## Modules

[Index] [Quick Jump]

#### Maintainer's Corner

Package maintainers

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) CHANGELOG.md 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] BSD-3-Clause core-libraries-committee@haskell.org System https://github.com/haskell/random/issues head: git clone https://github.com/haskell/random.git by lehins at 2024-02-04T16:26:32Z 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 1017 direct, 9469 indirect [details] 433355 total (476 in the last 30 days) 2.5 (votes: 5) [estimated by Bayesian average] λ λ λ Docs available Last success reported on 2024-02-04

[back to package description]

## Random Number Generation

### Status

Language Github Actions Drone.io Coveralls
Github Repo 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.