module Sound.SC3.Lang.Random.IO where
import Control.Monad.IO.Class
import Sound.SC3.Lang.Random.Gen as R
import System.Random
randomM :: (Random a, MonadIO m) => (a, a) -> m a
randomM = liftIO . randomRIO
rand :: (MonadIO m,Random n,Num n) => n -> m n
rand n = randomM (0,n)
rand2 :: (MonadIO m,Random n,Num n) => n -> m n
rand2 n = randomM (n,n)
randomG :: MonadIO m => (StdGen -> (a, StdGen)) -> m a
randomG = liftIO . getStdRandom
nrand2 :: (Random a, Num a) => Int -> a -> IO [a]
nrand2 k = randomG . R.nrand2 k
rrand :: (MonadIO m,Random n) => n -> n -> m n
rrand l r = randomM (l,r)
nrrand :: (MonadIO m,Random a, Num a) => Int -> a -> a -> m [a]
nrrand k l = randomG . R.nrrand k l
choose :: MonadIO m => [a] -> m a
choose = randomG . R.choose
exprand :: (MonadIO m,Floating n,Random n) => n -> n -> m n
exprand l = randomG . R.exprand l
coin :: (MonadIO m,Random n,Fractional n,Ord n) => n -> m Bool
coin = randomG . R.coin
scramble :: MonadIO m => [t] -> m [t]
scramble = randomG . R.scramble
wchoose :: (MonadIO m,Random a,Ord a,Fractional a) => [b] -> [a] -> m b
wchoose l = randomG . R.wchoose l