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.runGenState_ 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.0.tar.gz [browse] (Cabal source package)
- Package description (revised from the package)
Note: This package has metadata revisions in the cabal description newer than included in the tarball. To unpack the package including the revisions, use 'cabal get'.
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, 1.2.1.3, 1.3.0, 1.3.1 (info) |
|---|---|
| Change log | CHANGELOG.md |
| Dependencies | base (>=4.8 && <4.16), bytestring (>=0.10.4 && <0.12), deepseq (>=1.1 && <2), mtl (>=2.2 && <2.3), splitmix (>=0.1 && <0.2), transformers [details] |
| Tested with | ghc ==7.10.2, ghc ==7.10.3, 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 |
| Uploaded | by lehins at 2020-06-23T13:25:29Z |
| Revised | Revision 6 made by Bodigrim at 2021-07-11T22:38:05Z |
| Category | System |
| Bug tracker | https://github.com/haskell/random/issues |
| Source repo | head: git clone https://github.com/haskell/random.git |
| Distributions | Arch:1.2.1.3, Debian:1.1, Fedora:1.2.1.3, FreeBSD:1.1, LTSHaskell:1.2.1.3, NixOS:1.2.1.3, Stackage:1.3.1, openSUSE:1.3.1 |
| Reverse Dependencies | 1075 direct, 10151 indirect [details] |
| Downloads | 438351 total (37 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 2020-06-23 [all 1 reports] |