module Control.Monad.Trans.MSF.Random
(
runRandS
, evalRandS
, getRandomS
, getRandomsS
, getRandomRS
, getRandomRS_
, getRandomsRS
, getRandomsRS_
) where
import Control.Monad.Random
import Data.MonadicStreamFunction
runRandS :: (RandomGen g, Monad m)
=> MSF (RandT g m) a b
-> g
-> MSF m a (g, b)
runRandS msf g = MSF $ \a -> do
((b, msf'), g') <- runRandT (unMSF msf a) g
return ((g', b), runRandS msf' g')
evalRandS :: (RandomGen g, Monad m) => MSF (RandT g m) a b -> g -> MSF m a b
evalRandS msf g = runRandS msf g >>> arr snd
getRandomS :: (MonadRandom m, Random b) => MSF m a b
getRandomS = arrM_ getRandom
getRandomsS :: (MonadRandom m, Random b) => MSF m a [b]
getRandomsS = arrM_ getRandoms
getRandomRS :: (MonadRandom m, Random b) => (b, b) -> MSF m a b
getRandomRS range = arrM_ $ getRandomR range
getRandomRS_ :: (MonadRandom m, Random b) => MSF m (b, b) b
getRandomRS_ = arrM getRandomR
getRandomsRS :: (MonadRandom m, Random b) => (b, b) -> MSF m a [b]
getRandomsRS range = arrM_ $ getRandomRs range
getRandomsRS_ :: (MonadRandom m, Random b) => MSF m (b, b) [b]
getRandomsRS_ = arrM getRandomRs