úÎ:,8w     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. IPerforman a generalized inverse dovetail shuffle, i.e. letting the cards  from a deck drop randomly into n* heaps and then stack them back together.   !      !"#$%&random-extras-0.15Data.Random.ExtrasData.Random.Dovetailshuffle shuffleSeqsample sampleSeq choiceExtractchoiceExtractSeqchoice safeChoiceiterativeChoice choiceSeq safeChoiceSeq choiceArraychoices safeChoices choicesArray splitDeckgeneralizedSplitDeck riffleDecksgeneralizedRiffleDecksinverseRiffleDecksgeneralizedInverseRiffleDecksdovetailgeneralizedDovetail dovetailsgeneralizedDovetailsinverseDovetailgeneralizedInverseDovetail.:extract extractSeqbacksaw shuffleSeq'baseGHC.EnummaxBound