random-mhs: Pseudo-random number generation
This is a package candidate release! Here you can preview how this package release will appear once published to the main package index (which can be accomplished via the 'maintain' link below). Please note that once a package has been published to the main package index it cannot be undone! Please consult the package uploading documentation for more information.
Warnings:
- [option-o2] 'ghc-options: -O2' is rarely needed. Check that it is giving a real benefit and not just imposing longer compile times on your users.
This package is a fork of random
with changes to make it compile with MicroHs.
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]
Properties
Versions | 1.3.1, 1.3.2, 1.3.2 |
---|---|
Change log | CHANGELOG.md |
Dependencies | base (>=4.9 && <5), bytestring (>=0.10.4 && <0.13), data-array-byte (>=0.1 && <9.9), deepseq (>=1.1 && <2), mtl (>=2.2 && <2.4), splitmix (>=0.1 && <0.2), transformers (>=0.4 && <0.7) [details] |
License | BSD-3-Clause |
Author | |
Maintainer | lennart@augustsson.net |
Category | System |
Bug tracker | https://github.com/augustss/random-mhs/issues |
Source repo | head: git clone https://github.com/augustss/random-mhs.git |
Uploaded | by LennartAugustsson at 2025-09-05T22:04:34Z |
Modules
[Index] [Quick Jump]
- System
- System.Random
- System.Random.Internal
- System.Random.Stateful
- System.Random
Downloads
- random-mhs-1.3.2.tar.gz [browse] (Cabal source package)
- Package description (as included in the package)
Maintainer's Corner
Package maintainers
For package maintainers and hackage trustees