random-shuffle 0.0.3 → 0.0.4
raw patch · 2 files changed
+6/−4 lines, 2 filesnew-uploader
Files
- random-shuffle.cabal +1/−1
- src/System/Random/Shuffle.hs +5/−3
random-shuffle.cabal view
@@ -1,7 +1,7 @@ cabal-version: >= 1.6 build-type: Simple name: random-shuffle-version: 0.0.3+version: 0.0.4 license: BSD3 license-file: LICENSE category: System
src/System/Random/Shuffle.hs view
@@ -16,7 +16,7 @@ import Data.Function (fix) import System.Random (RandomGen, randomR)-import Control.Monad (liftM2)+import Control.Monad (liftM,liftM2) import Control.Monad.Random (MonadRandom, getRandomR) @@ -100,8 +100,10 @@ -- |shuffle' wrapped in a random monad shuffleM :: (MonadRandom m) => [a] -> m [a]-shuffleM elements = return . shuffle elements =<< rseqM (length elements - 1)+shuffleM elements+ | null elements = return []+ | otherwise = liftM (shuffle elements) (rseqM (length elements - 1)) where rseqM :: (MonadRandom m) => Int -> m [Int] rseqM 0 = return []- rseqM i = (:) `liftM2` getRandomR (0, i) $ rseqM (i - 1)+ rseqM i = liftM2 (:) (getRandomR (0, i)) (rseqM (i - 1))