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.


[Skip to Readme]
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)
Change log CHANGELOG.md
Dependencies base (>=4.8 && <5), bytestring (>=0.10.4 && <0.12), deepseq (>=1.1 && <2), ghc-byteorder, mtl (==2.2.*), splitmix (==0.1.*), transformers [details]
License BSD-3-Clause
Author
Maintainer core-libraries-committee@haskell.org
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 2021-09-19T21:16:09Z
Distributions 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
Downloads 413514 total (2282 in the last 30 days)
Rating 2.5 (votes: 4) [estimated by Bayesian average]
Your Rating
  • λ
  • λ
  • λ
Status Hackage Matrix CI
Docs available [build log]
Last success reported on 2021-09-19 [all 1 reports]

Modules

[Index] [Quick Jump]

Downloads

Maintainer's Corner

For package maintainers and hackage trustees

Candidates


Readme for random-1.2.1

[back to package description]

The Haskell Standard Library

Random Number Generation

Status

Language Github Actions Drone.io Coveralls
GitHub top language Build Status Build Status Coverage Status
Github Repo Hackage Nightly LTS
random Hackage Nightly LTS

Description

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

The API documentation can be found here:

http://hackage.haskell.org/package/random/docs/System-Random.html

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

Please report bugs in the GitHub issue tracker (no longer in the GHC trac).