packages feed

fearOfView-0.1.0.0: Rand.hs

module Rand where

import           Control.Monad.Random

import qualified Data.Set             as S

-- | Argument must be non-empty
randElemUnsafe :: [a] -> Rand StdGen a
randElemUnsafe as = (as!!) <$> getRandomR (0, length as - 1)

randElem :: [a] -> Rand StdGen (Maybe a)
randElem [] = pure Nothing
randElem as = Just <$> randElemUnsafe as

-- | Argument must be non-empty
randMemberUnsafe :: S.Set a -> Rand StdGen a
randMemberUnsafe s = (S.toList s !!) <$> getRandomR (0,S.size s - 1)

randMember :: S.Set a -> Rand StdGen (Maybe a)
randMember s | S.null s = pure Nothing
randMember s = Just <$> randMemberUnsafe s

shuffle :: [a] -> Rand StdGen [a]
shuffle = liftRand . uniformShuffleList