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.
- class (Functor m, Applicative m, Monad m) => MonadRandom m where
- newtype MonadRandomState gen a = MonadRandomState {
- runRandomState :: gen -> (a, gen)
- class RandomGen gen where
- getRandomPrimType :: forall randomly ty. (PrimType ty, MonadRandom randomly) => randomly ty
- withRandomGenerator :: RandomGen gen => gen -> MonadRandomState gen a -> (a, gen)
- type RNG = RNGv1
- data RNGv1
Documentation
class (Functor m, Applicative m, Monad m) => MonadRandom m where Source #
A monad constraint that allows to generate random bytes
MonadRandom IO Source # | |
RandomGen gen => MonadRandom (MonadRandomState gen) Source # | |
newtype MonadRandomState gen a Source #
A simple Monad class very similar to a State Monad with the state being a RandomGenerator.
MonadRandomState | |
|
Monad (MonadRandomState gen) Source # | |
Functor (MonadRandomState gen) Source # | |
Applicative (MonadRandomState gen) Source # | |
RandomGen gen => MonadRandom (MonadRandomState gen) 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 :: Size Word8 -> gen -> (UArray Word8, gen) Source #
Generate N bytes of randomness from a DRG
getRandomPrimType :: forall randomly ty. (PrimType ty, MonadRandom randomly) => randomly ty Source #
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.