-- Hoogle documentation, generated by Haddock
-- See Hoogle, http://www.haskell.org/hoogle/
-- | Additional functions for random values.
--
-- Additional functions for random values, based on MonadRandom. Inspired
-- by random-shuffle.
@package random-extras
@version 0.2
-- | Additional monadic random functions, based on MonadRandom.
module Control.Monad.Random.Extras
-- | Shuffle a list randomly. The method is based on Oleg Kiselyov's
-- perfect shuffle
-- http://okmij.org/ftp/Haskell/perfect-shuffle.txt, but much
-- simpler because it uses existing data structures. The efficiency of
-- both methods should be comparable.
--
-- Complexity: O(n * log n)
shuffle :: (MonadRandom m) => [a] -> m [a]
-- | Shuffle a sequence randomly. This is being used by shuffle, so
-- it logically uses the same method.
--
-- Complexity: O(n * log n)
shuffleSeq :: (MonadRandom m) => Seq a -> m [a]
-- | Take a random sample from a list.
--
-- Complexity: O(n + m * log n)
sample :: (MonadRandom m) => Int -> [a] -> m [a]
-- | Take a random sample from a sequence.
--
-- Complexity: O(m * log n)
sampleSeq :: (MonadRandom m) => Int -> Seq a -> m [a]
-- | Randomly choose and extract an element from a list.
--
-- Complexity: O(n)
choiceExtract :: (MonadRandom m) => [a] -> m (Maybe ([a], a))
-- | Randomly choose and extract an element from a sequence.
--
-- Complexity: O(log n)
choiceExtractSeq :: (MonadRandom m) => Seq a -> m (Maybe (Seq a, a))
-- | Select a random element from a list.
--
-- Complexity: O(n).
choice :: (MonadRandom m) => [a] -> m a
-- | Select a random element from a sequence.
--
-- Complexity: O(log n).
choiceSeq :: (MonadRandom m) => Seq a -> m a
-- | Select a random element from an array.
--
-- Complexity: O(1).
choiceArray :: (MonadRandom m, IArray arr a, Ix i, Random i) => arr i a -> m a
-- | Select m random elements from a list.
--
-- Complexity: O(m)
choices :: (MonadRandom m) => Int -> [a] -> m [a]
-- | Select m random elements from an array.
--
-- Complexity: O(m)
choicesArray :: (MonadRandom m, IArray arr a, Ix i, Random i) => Int -> arr i a -> m [a]