random-1.2.1.2: 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 uniform and uniformR from
System.Random to generate pseudo-random numbers with a pure pseudo-random
number generator like StdGen.
As an example, here is how you can simulate rolls of a six-sided die using
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 uniformM and
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
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 runStateGen_ is used here to lift
the pure pseudo-random number generator pureGen into the
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
random-1.2.1.2
- System