License | BSD-style |
---|---|
Stability | experimental |
Portability | Good |
Safe Haskell | None |
Language | Haskell2010 |
This module deals with the random subsystem abstractions.
It provide 2 different set of abstractions:
-
The first abstraction that allow a monad to generate random
through the
MonadRandom
class. -
The second abstraction to make generic random generator
RandomGen
and a small State monad like wrapperMonadRandomState
to abstract a generator.
Synopsis
-
class
(
Functor
m,
Applicative
m,
Monad
m) =>
MonadRandom
m
where
- getRandomBytes :: CountOf Word8 -> m ( UArray Word8 )
- getRandomWord64 :: m Word64
- getRandomF32 :: m Float
- getRandomF64 :: m Double
-
class
RandomGen
gen
where
- randomNew :: MonadRandom m => m gen
- randomNewFrom :: UArray Word8 -> Maybe gen
- randomGenerate :: CountOf Word8 -> gen -> ( UArray Word8 , gen)
- randomGenerateWord64 :: gen -> ( Word64 , gen)
- randomGenerateF32 :: gen -> ( Float , gen)
- randomGenerateF64 :: gen -> ( Double , gen)
-
newtype
MonadRandomState
gen a =
MonadRandomState
{
- runRandomState :: gen -> (a, gen)
- withRandomGenerator :: RandomGen gen => gen -> MonadRandomState gen a -> (a, gen)
- type RNG = RNGv1
- type RNGv1 = State
Documentation
class ( Functor m, Applicative m, Monad m) => MonadRandom m where Source #
A monad constraint that allows to generate random bytes
getRandomBytes :: CountOf Word8 -> m ( UArray Word8 ) Source #
getRandomWord64 :: m Word64 Source #
getRandomF32 :: m Float Source #
getRandomF64 :: m Double Source #
Instances
MonadRandom IO Source # | |
Defined in Foundation.Random.Class |
|
RandomGen gen => MonadRandom ( MonadRandomState gen) Source # | |
Defined in Foundation.Random.DRG getRandomBytes :: CountOf Word8 -> MonadRandomState gen ( UArray Word8 ) Source # getRandomWord64 :: MonadRandomState gen Word64 Source # getRandomF32 :: MonadRandomState gen Float Source # getRandomF64 :: MonadRandomState gen Double Source # |
class RandomGen gen where Source #
A Deterministic Random Generator (DRG) class
randomNew :: MonadRandom m => m gen Source #
Initialize a new random generator
randomNewFrom :: UArray Word8 -> Maybe gen Source #
Initialize a new random generator from a binary seed.
If
Nothing
is returned, then the data is not acceptable
for creating a new random generator.
randomGenerate :: CountOf Word8 -> gen -> ( UArray Word8 , gen) Source #
Generate N bytes of randomness from a DRG
randomGenerateWord64 :: gen -> ( Word64 , gen) Source #
Generate a Word64 from a DRG
randomGenerateF32 :: gen -> ( Float , gen) Source #
randomGenerateF64 :: gen -> ( Double , gen) Source #
newtype MonadRandomState gen a Source #
A simple Monad class very similar to a State Monad with the state being a RandomGenerator.
MonadRandomState | |
|
Instances
withRandomGenerator :: RandomGen gen => gen -> MonadRandomState gen a -> (a, gen) Source #
Run a pure computation with a Random Generator in the
MonadRandomState
An alias to the default choice of deterministic random number generator
Unless, you want to have the stability of a specific random number generator, e.g. for tests purpose, it's recommended to use this alias so that you would keep up to date with possible bugfixes, or change of algorithms.