vivid-0.2.0.0: Vivid/Randomness.hs
{-# LANGUAGE NoMonomorphismRestriction #-}
module Vivid.Randomness (
pick
, picks
, module System.Random.Shuffle
) where
import Control.Monad.Random (getRandomR, getRandomRs, MonadRandom)
import System.Random.Shuffle
-- | Picks a random element from the provided list
pick :: MonadRandom m => [a] -> m a
pick l = (l !!) <$> getRandomR (0, (length::[a]->Int) l - 1)
-- | Returns an infinite list of randomly-chosen elements from the provided list
--
-- e.g.
--
-- >> > take 5 <$> picks [1,2,3,4]
-- >> [2,3,1,1,3]
picks :: (MonadRandom m) => [a] -> m [a]
picks l =
(map (l !!)) <$> getRandomRs (0, (length::[a]->Int) l - 1)