Data.Random.Source.PureMT
Description
This module provides functions useful for implementing new MonadRandom
and RandomSource instances for state-abstractions containing PureMT
values (the pure pseudorandom generator provided by the
mersenne-random-pure64 package), as well as instances for some common
cases.
- getRandomWordFromMTRef :: ModifyRef sr m PureMT => sr -> m Word64
- getRandomByteFromMTRef :: (Monad m, ModifyRef sr m PureMT) => sr -> m Word8
- getRandomDoubleFromMTRef :: (Monad m, ModifyRef sr m PureMT) => sr -> m Double
- getRandomWordFromMTState :: MonadState PureMT m => m Word64
- getRandomByteFromMTState :: MonadState PureMT m => m Word8
- getRandomDoubleFromMTState :: MonadState PureMT m => m Double
Documentation
getRandomWordFromMTRef :: ModifyRef sr m PureMT => sr -> m Word64Source
Given a mutable reference to a PureMT generator, we can make a
RandomSource usable in any monad in which the reference can be modified.
For example, if x :: TVar PureMT, getRandomWordFromMTRef x can be
used as a RandomSource in IO, STM, or any monad which is an instance
of MonadIO. These functions can also be used to implement additional
RandomSource instances for mutable references to PureMT states.
getRandomWordFromMTState :: MonadState PureMT m => m Word64Source
Similarly, getRandomWordFromMTState x can be used in any "state"
monad in the mtl sense whose state is a PureMT generator.
Additionally, the standard mtl state monads have MonadRandom instances
which do precisely that, allowing an easy conversion of RVars and
other Distribution instances to "pure" random variables (e.g., by
runState . sample :: Distribution d t => d t -> PureMT -> (t, PureMT).
PureMT in the type there can be replaced by StdGen or anything else
satisfying MonadRandom (State s) => s).
getRandomByteFromMTState :: MonadState PureMT m => m Word8Source