This module provides functions useful for implementing new `MonadRandom`

and `RandomSource`

instances for state-abstractions containing `StdGen`

values (the pure pseudorandom generator provided by the System.Random
module in the "random" package), as well as instances for some common
cases.

- getRandomPrimFromStdGenIO :: Prim a -> IO a
- getRandomPrimFromRandomGenRef :: (Monad m, ModifyRef sr m g, RandomGen g) => sr -> Prim a -> m a
- getRandomPrimFromRandomGenState :: (RandomGen g, MonadState g m) => Prim a -> m a

# Documentation

getRandomPrimFromStdGenIO :: Prim a -> IO aSource

getRandomPrimFromRandomGenRef :: (Monad m, ModifyRef sr m g, RandomGen g) => sr -> Prim a -> m aSource

Given a mutable reference to a `RandomGen`

generator, we can make a
`RandomSource`

usable in any monad in which the reference can be modified.

See Data.Random.Source.PureMT.`getRandomPrimFromMTRef`

for more detailed
usage hints - this function serves exactly the same purpose except for a
`StdGen`

generator instead of a `PureMT`

generator.

getRandomPrimFromRandomGenState :: (RandomGen g, MonadState g m) => Prim a -> m aSource

Similarly, `getRandomWordFromRandomGenState x`

can be used in any "state"
monad in the mtl sense whose state is a `RandomGen`

generator.
Additionally, the standard mtl state monads have `MonadRandom`

instances
which do precisely that, allowing an easy conversion of `RVar`

s and
other `Distribution`

instances to "pure" random variables.

Again, see Data.Random.Source.PureMT.`getRandomPrimFromMTState`

for more
detailed usage hints - this function serves exactly the same purpose except
for a `StdGen`

generator instead of a `PureMT`

generator.