1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 145 146 147 148 149 150 151 152 153 154 155 156 157 158 159 160 161 162 163 164 165 166 167 168 169 170 171 172 173 174 175 176 177 178 179 180 181 182 183 184 185 186 187 188 189 190 191 192 193 194 195 196 197 198 199 200 201 202 203 204 205 206 207 208 209 210 211 212 213 214 215 216 217
|
cabal-version: >=1.10
name: random
version: 1.2.1.2
license: BSD3
license-file: LICENSE
maintainer: core-libraries-committee@haskell.org
bug-reports: https://github.com/haskell/random/issues
synopsis: Pseudo-random number generation
description:
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
<https://hackage.haskell.org/package/mwc-random 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.
category: System
build-type: Simple
extra-source-files:
README.md
CHANGELOG.md
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
source-repository head
type: git
location: https://github.com/haskell/random.git
library
exposed-modules:
System.Random
System.Random.Internal
System.Random.Stateful
other-modules:
System.Random.GFinite
hs-source-dirs: src
default-language: Haskell2010
ghc-options:
-Wall
if impl(ghc >= 8.0)
ghc-options:
-Wincomplete-record-updates -Wincomplete-uni-patterns
build-depends:
base >=4.8 && <5,
bytestring >=0.10.4 && <0.13,
deepseq >=1.1 && <2,
mtl >=2.2 && <2.4,
splitmix >=0.1 && <0.2
if impl(ghc < 8.0)
build-depends:
transformers
test-suite legacy-test
type: exitcode-stdio-1.0
main-is: Legacy.hs
hs-source-dirs: test-legacy
other-modules:
T7936
TestRandomIOs
TestRandomRs
Random1283
RangeTest
default-language: Haskell2010
ghc-options: -rtsopts -with-rtsopts=-M9M
if impl(ghc >= 8.0)
ghc-options:
-Wno-deprecations
build-depends:
base,
containers >=0.5 && <0.7,
random
test-suite doctests
type: exitcode-stdio-1.0
main-is: doctests.hs
hs-source-dirs: test
default-language: Haskell2010
build-depends:
base,
doctest >=0.15 && <0.23
if impl(ghc >= 8.2) && impl(ghc < 8.10)
build-depends:
mwc-random >=0.13 && <0.16,
primitive >=0.6 && <0.8,
random,
stm,
unliftio >=0.2 && <0.3,
vector >= 0.10 && <0.14
test-suite spec
type: exitcode-stdio-1.0
main-is: Spec.hs
hs-source-dirs: test
other-modules:
Spec.Range
Spec.Run
Spec.Stateful
default-language: Haskell2010
ghc-options: -Wall
build-depends:
base,
bytestring,
random,
smallcheck >=1.2 && <1.3,
stm,
tasty >=1.0 && <1.6,
tasty-smallcheck >=0.8 && <0.9,
tasty-hunit >=0.10 && <0.11,
transformers
-- Note. Fails when compiled with coverage:
-- https://github.com/haskell/random/issues/107
test-suite spec-inspection
type: exitcode-stdio-1.0
main-is: Spec.hs
hs-source-dirs: test-inspection
default-language: Haskell2010
ghc-options: -Wall
build-depends:
base,
random,
tasty >=1.0 && <1.6
if impl(ghc >= 8.0)
build-depends:
tasty-inspection-testing
other-modules:
Spec.Inspection
benchmark legacy-bench
type: exitcode-stdio-1.0
main-is: SimpleRNGBench.hs
hs-source-dirs: bench-legacy
other-modules: BinSearch
default-language: Haskell2010
ghc-options:
-Wall -O2 -threaded -rtsopts -with-rtsopts=-N
if impl(ghc >= 8.0)
ghc-options:
-Wno-deprecations
build-depends:
base,
random,
rdtsc,
split >=0.2 && <0.3,
time >=1.4 && <1.13
benchmark bench
type: exitcode-stdio-1.0
main-is: Main.hs
hs-source-dirs: bench
default-language: Haskell2010
ghc-options: -Wall -O2
build-depends:
base,
mtl,
primitive >= 0.7.1,
random,
splitmix >=0.1 && <0.2,
tasty-bench
|