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
>>>
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]
Downloads
- random-1.2.1.2.tar.gz [browse] (Cabal source package)
- Package description (as included in the package)
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] |
Tested with | ghc ==8.0.2, ghc ==8.2.2, ghc ==8.4.3, ghc ==8.4.4, ghc ==8.6.3, ghc ==8.6.4, ghc ==8.6.5, ghc ==8.8.1, ghc ==8.8.2, ghc ==8.10.1 |
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 2024-02-04T16:26:32Z |
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 | 1026 direct, 9527 indirect [details] |
Downloads | 435179 total (607 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 2024-02-04 [all 1 reports] |