Copyright | 2006-2007 Cale Gibbard, Russell O'Connor, Dan Doel, Remi Turk, Eric Kidd. |
---|---|

License | OtherLicense |

Stability | experimental |

Portability | non-portable (multi-parameter type classes, undecidable instances) |

Safe Haskell | Safe |

Language | Haskell2010 |

A type class for random number generation monads. See http://www.haskell.org/haskellwiki/NewMonads/MonadRandom for the original version of this code.

Instances of this type class include `Rand`

and
monads created using `RandT`

.

- class Monad m => MonadRandom m where
- getRandom :: Random a => m a
- getRandoms :: Random a => m [a]
- getRandomR :: Random a => (a, a) -> m a
- getRandomRs :: Random a => (a, a) -> m [a]

- class Monad m => MonadSplit s m | m -> s where
- getSplit :: m s

# Documentation

class Monad m => MonadRandom m where Source

An interface to random number generation monads.

getRandom :: Random a => m a Source

Return a randomly-selected value of type `a`

. See
`random`

for details.

getRandoms :: Random a => m [a] Source

Return an infinite stream of random values of type `a`

. See
`randoms`

for details.

getRandomR :: Random a => (a, a) -> m a Source

Return a randomly-selected value of type `a`

in the range
*[lo,hi]*. See `randomR`

for details.

getRandomRs :: Random a => (a, a) -> m [a] Source

Return an infinite stream of randomly-selected value of type `a`

in the range *[lo,hi]*. See `randomRs`

for details.

(Monad m, RandomGen g) => MonadRandom (RandT g m) Source |

class Monad m => MonadSplit s m | m -> s where Source

An interface to monads with splittable state (as most random number generation monads will have).
The intention is that the `getSplit`

action splits the state, returning one half of the result, and
setting the new state to the other.

(Monad m, RandomGen g) => MonadSplit g (RandT g m) Source |