- class Monad m => MonadRandom m where
- getRandomWord8 :: m Word8
- getRandomWord16 :: m Word16
- getRandomWord32 :: m Word32
- getRandomWord64 :: m Word64
- getRandomDouble :: m Double
- getRandomNByteInteger :: MonadRandom m => Int -> m Integer

- class Monad m => RandomSource m s where
- getRandomWord8From :: s -> m Word8
- getRandomWord16From :: s -> m Word16
- getRandomWord32From :: s -> m Word32
- getRandomWord64From :: s -> m Word64
- getRandomDoubleFrom :: s -> m Double
- getRandomNByteIntegerFrom :: s -> Int -> m Integer

- monadRandom :: Q [Dec] -> Q [Dec]
- randomSource :: Q [Dec] -> Q [Dec]

# Documentation

class Monad m => MonadRandom m whereSource

A typeclass for monads with a chosen source of entropy. For example,
`RVar`

is such a monad - the source from which it is (eventually) sampled
is the only source from which a random variable is permitted to draw, so
when directly requesting entropy for a random variable these functions
are used.

Minimum implementation is either the internal `getRandomPrim`

or all
other functions. Additionally, this class's interface is subject to
extension at any time, so it is very, very strongly recommended that
the `monadRandom`

Template Haskell function be used to implement this
function rather than directly implementing it. That function takes care
of choosing default implementations for any missing functions; as long as
at least one function is implemented, it will derive sensible
implementations of all others.

To use `monadRandom`

, just wrap your instance declaration as follows (and
enable the TemplateHaskell and GADTs language extensions):

$(monadRandom [d| instance MonadRandom FooM where getRandomDouble = return pi getRandomWord16 = return 4 {- etc... -} |])

getRandomWord8 :: m Word8Source

Generate a uniformly distributed random `Word8`

getRandomWord16 :: m Word16Source

Generate a uniformly distributed random `Word16`

getRandomWord32 :: m Word32Source

Generate a uniformly distributed random `Word32`

getRandomWord64 :: m Word64Source

Generate a uniformly distributed random `Word64`

getRandomDouble :: m DoubleSource

Generate a uniformly distributed random `Double`

in the range 0 <= U < 1

getRandomNByteInteger :: MonadRandom m => Int -> m IntegerSource

Generate a uniformly distributed random `Integer`

in the range 0 <= U < 256^n

MonadRandom IO | |

Monad m0 => MonadRandom (StateT PureMT m0) | |

Monad m => MonadRandom (StateT StdGen m) | |

Monad m0 => MonadRandom (StateT PureMT m0) | |

Monad m => MonadRandom (StateT StdGen m) |

class Monad m => RandomSource m s whereSource

A source of entropy which can be used in the given monad.

See also `MonadRandom`

.

Minimum implementation is either the internal `getRandomPrimFrom`

or all
other functions. Additionally, this class's interface is subject to
extension at any time, so it is very, very strongly recommended that
the `randomSource`

Template Haskell function be used to implement this
function rather than directly implementing it. That function takes care
of choosing default implementations for any missing functions; as long as
at least one function is implemented, it will derive sensible
implementations of all others.

To use `randomSource`

, just wrap your instance declaration as follows (and
enable the TemplateHaskell, MultiParamTypeClasses and GADTs language
extensions, as well as any others required by your instances, such as
FlexibleInstances):

$(randomSource [d| instance RandomSource FooM Bar where {- at least one RandomSource function... -} |])

getRandomWord8From :: s -> m Word8Source

Generate a uniformly distributed random `Word8`

getRandomWord16From :: s -> m Word16Source

Generate a uniformly distributed random `Word16`

getRandomWord32From :: s -> m Word32Source

Generate a uniformly distributed random `Word32`

getRandomWord64From :: s -> m Word64Source

Generate a uniformly distributed random `Word64`

getRandomDoubleFrom :: s -> m DoubleSource

Generate a uniformly distributed random `Double`

in the range 0 <= U < 1

getRandomNByteIntegerFrom :: s -> Int -> m IntegerSource

Generate a uniformly distributed random `Integer`

in the range 0 <= U < 256^n

RandomSource IO DevRandom | |

MonadRandom m => RandomSource m StdRandom | |

RandomSource IO (Gen RealWorld) | |

Monad m => RandomSource m (GetPrim m) | |

(Monad m, ModifyRef (IORef StdGen) m StdGen) => RandomSource m (IORef StdGen) | |

MonadIO m0 => RandomSource m0 (IORef PureMT) | |

Monad m0 => RandomSource m0 (m0 Word8) | |

Monad m0 => RandomSource m0 (m0 Word16) | |

Monad m0 => RandomSource m0 (m0 Word32) | |

Monad m0 => RandomSource m0 (m0 Word64) | |

Monad m0 => RandomSource m0 (m0 Double) | |

(Monad m, ModifyRef (STRef s StdGen) m StdGen) => RandomSource m (STRef s StdGen) | |

(Monad m1, ModifyRef (Ref m2 StdGen) m1 StdGen) => RandomSource m1 (Ref m2 StdGen) | |

(Monad m10, ModifyRef (Ref m20 PureMT) m10 PureMT) => RandomSource m10 (Ref m20 PureMT) | |

(Monad m0, ModifyRef (STRef s0 PureMT) m0 PureMT) => RandomSource m0 (STRef s0 PureMT) | |

RandomSource (ST s0) (Gen s0) |

monadRandom :: Q [Dec] -> Q [Dec]Source

Complete a possibly-incomplete `MonadRandom`

implementation. It is
recommended that this macro be used even if the implementation is currently
complete, as the `MonadRandom`

class may be extended at any time.

To use `monadRandom`

, just wrap your instance declaration as follows (and
enable the TemplateHaskell and GADTs language extensions):

$(monadRandom [d| instance MonadRandom FooM where getRandomDouble = return pi getRandomWord16 = return 4 {- etc... -} |])

randomSource :: Q [Dec] -> Q [Dec]Source

Complete a possibly-incomplete `RandomSource`

implementation. It is
recommended that this macro be used even if the implementation is currently
complete, as the `RandomSource`

class may be extended at any time.

To use `randomSource`

, just wrap your instance declaration as follows (and
enable the TemplateHaskell, MultiParamTypeClasses and GADTs language
extensions, as well as any others required by your instances, such as
FlexibleInstances):

$(randomSource [d| instance RandomSource FooM Bar where {- at least one RandomSource function... -} |])