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.
The Haskell Standard Library
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:
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).