foundation-0.0.29: Alternative prelude with batteries and no dependencies
License BSD-style
Stability experimental
Portability Good
Safe Haskell None
Language Haskell2010

Foundation.Random

Description

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 wrapper MonadRandomState to abstract a generator.
Synopsis

Documentation

class RandomGen gen where Source #

A Deterministic Random Generator (DRG) class

Methods

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.

Constructors

MonadRandomState

Fields

Instances

Instances details
Monad ( MonadRandomState gen) Source #
Instance details

Defined in Foundation.Random.DRG

Functor ( MonadRandomState gen) Source #
Instance details

Defined in Foundation.Random.DRG

Applicative ( MonadRandomState gen) Source #
Instance details

Defined in Foundation.Random.DRG

RandomGen gen => MonadRandom ( MonadRandomState gen) Source #
Instance details

Defined in Foundation.Random.DRG

withRandomGenerator :: RandomGen gen => gen -> MonadRandomState gen a -> (a, gen) Source #

Run a pure computation with a Random Generator in the MonadRandomState

type RNG = RNGv1 Source #

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.