Random.MWC.Monadic
Description
Monadic functions for random number generation.
Because manually threading the correct Seed
value around is
tedious and error-prone, one common approach is to use some
kind of state monad to hide it. This module provides the
convenience functions to make this easy; just write a
RandomM
instance for your particular monad, and then you
can easily and conveniently generate random numbers.
- data Seed
- class Monad m => RandomM m where
- get_random_seed :: m Seed
- set_random_seed :: Seed -> m ()
- bounded_randomM :: (RandomM m, BoundedRandom x) => m x
- unit_randomM :: (RandomM m, UnitRandom x) => m x
- range_randomM :: (RandomM m, RangeRandom x) => (x, x) -> m x
Random seed
Random monads
class Monad m => RandomM m whereSource
The class of monads holding a single random Seed
within their
state.
Methods
get_random_seed :: m SeedSource
Fetch the current Seed
value.
set_random_seed :: Seed -> m ()Source
Replace the current Seed
value.
Monadic operations
bounded_randomM :: (RandomM m, BoundedRandom x) => m xSource
The monadic analogue of bounded_random
.
Return a value randomly chosen between minBound
and maxBound
.
Uses the current Seed
value from within the monad, automatically
updating said seed value in the process. Thus, repeatedly calling
this function will yield different successive values.
unit_randomM :: (RandomM m, UnitRandom x) => m xSource
The monadic analogue of unit_random
.
Returns a value randomly chosen between "zero" and "one". Uses
the current Seed
value from within the monad, automatically
updating said seed value in the process. Thus, repeatedly calling
this function will yield different successive values.
range_randomM :: (RandomM m, RangeRandom x) => (x, x) -> m xSource
The monadic analogue of range_random
.
Returns a value randomly chosen from a user-specified range
(inclusive). Uses the current Seed
value from within the monad,
automatically updating said seed value in the process. Thus,
repeatedly calling this function will yield different successive
values.