module Vivid.Randomness (
pick
, picks
, exprand
, module System.Random.Shuffle
) where
import Control.Monad.Random (getRandomR, getRandomRs, MonadRandom)
import System.Random (Random)
import System.Random.Shuffle
pick :: MonadRandom m => [a] -> m a
pick l = (l !!) <$> getRandomR (0, (length::[a]->Int) l 1)
picks :: (MonadRandom m) => [a] -> m [a]
picks l =
(map (l !!)) <$> getRandomRs (0, (length::[a]->Int) l 1)
exprand :: (Fractional n, Floating n, MonadRandom m, Random n) => n -> n -> m n
exprand lo hi = do
r <- getRandomR (0, 1)
pure $ lo * exp (log (hi / lo) * r)