úÎLÀJ;'      !"#$%&portable experimental'()*+=Shuffle a list randomly. The method is based on Oleg Kiselyov's  perfect shuffle  0http://okmij.org/ftp/Haskell/perfect-shuffle.txt, K but much simpler because it uses existing data structures. The efficiency ' of both methods should be comparable.  Complexity: O(n * log n), where n" is the length of the input list. 3Shuffle a sequence randomly. This is being used by , ' so it logically uses the same method.  Complexity: O(n * log n), where n& is the length of the input sequence. ,"Take a random sample from a list.  Complexity: O(n + m * log n), where n" is the length of the input list  and m is the sample size. &Take a random sample from a sequence.  Complexity: O(m * log n), where n& is the length of the input sequence  and m is the sample size. 4Randomly choose and extract an element from a list.  Complexity: O(n), where n" is the length of the input list. 8Randomly choose and extract an element from a sequence.  Complexity: O(log n), where n& is the length of the input sequence. %Select a random element from a list. Partial function:3 This function is only defined on non-empty lists.  Complexity: O(n), where n" is the length of the input list. ,Safely select a random element from a list.  Complexity: O(n), where n" is the length of the input list. DSelect a random element from a list, traversing the list only once. Partial function:2 This function is only defined on non-empty lists * with a length below (- + 1 :: Int).  Complexity: O(n), where n" is the length of the input list. )Select a random element from a sequence. Partial function:7 This function is only defined on non-empty sequences.  Complexity: O(log n), where n& is the length of the input sequence. 0Safely select a random element from a sequence.  Complexity: O(log n), where n& is the length of the input sequence. 'Select a random element from an array.  Complexity: O(1). )A stream of random elements from a list. Partial function:3 This function is only defined on non-empty lists.  Complexity:! O(n) base and O(1) per element. 4Safely get a stream of random elements from a list.  Complexity:' O(n) base and O(1) per element, where n is the length of  the input list. +A stream of random elements from an array.  Complexity: O(1) per element.    portable experimental Split a deck into two  roughly equal halves. Split a deck into n  roughly equal parts. +Riffle two halves of a deck into one deck. Riffle n parts into one deck. DPerform an inverse riffle, i.e. letting the cards from a deck drop  randomly into two heaps. CPerform an inverse riffle, i.e. letting the cards from a deck drop  randomly into n heaps. HDovetail shuffle a deck, i.e. split the deck with splitDeck and riffle  the resulting halves with . @Dovetail shuffle a deck (generalized), i.e. split the deck into n parts  and riffle them back together. 'Dovetail shuffle a deck repeatedly for n times. 'Dovetail shuffle a deck repeatedly for shuffles times,  using parts parts.  Invocation: (generalizedDovetails shuffles parts deck BPerform an inverse dovetail shuffle, i.e. letting the cards from A a deck drop randomly into two heaps and then stack these heaps. GPerform a generalized inverse dovetail shuffle, i.e. letting the cards  from a deck drop randomly into n* heaps and then stack them back together.  Perform a face up, face down+ shuffle, which is like a dovetail shuffle 0 where the lower of the two halves is reversed.   portable experimentalDA class for excluding discrete values. No change for floating point  values. Note: ./8 is exclusive on the second argument for floating point  values, so - does not need to exclude anything for them. 9A uniform distribution that excludes the first parameter  , but includes the second. Note: ./5 behaves the opposite way for floating point values. HA uniformly distributed random value that excludes the first parameter.    portable experimental0!5Randomly shuffle a CDF map according to its weights. ";Randomly shuffle a weighted list according to its weights. #Randomly draw n3 elements from a CDF map according to its weights. $Randomly draw n9 elements from a weighted list according to its weights. %IRandomly extract an element from a CDF map according to its weights. The & element is removed and the resulting  weight gap closed. &)Generate a CDF map from a weighted list. !"#$%&!"#$%&!"#$%&1      !"#$%&'()*+,-./01234567567,8random-extras-0.17Data.Random.ExtrasData.Random.Dovetail*Data.Random.Distribution.Uniform.ExclusiveData.Random.Shuffle.Weightedshuffle shuffleSeqsample sampleSeq choiceExtractchoiceExtractSeqchoice safeChoiceiterativeChoice choiceSeq safeChoiceSeq choiceArraychoices safeChoices choicesArray splitDeckgeneralizedSplitDeck riffleDecksgeneralizedRiffleDecksinverseRiffleDecksgeneralizedInverseRiffleDecksdovetailgeneralizedDovetail dovetailsgeneralizedDovetailsinverseDovetailgeneralizedInverseDovetailfaceUpFaceDown ExcludablesmallerbiggeruniformExclusiveDistuniformExclusiveweightedShuffleCDFweightedShuffleweightedSampleCDFweightedSampleweightedChoiceExtractCDFcdfMapFromList moduleError.:extract extractSeqbacksaw shuffleSeq'baseGHC.EnummaxBoundrandom-fu-0.1.0.0 Data.Random.Distribution.UniformUniform