RosettaCodeData/Task/Best-shuffle/Haskell/best-shuffle-5.hs
2016-12-05 22:15:40 +01:00

10 lines
284 B
Haskell

randomShuffle :: [a] -> IO [a]
randomShuffle [] = return []
randomShuffle lst = do
i <- getRandomR (0,length lst-1)
let (a, x:b) = splitAt i lst
xs <- randomShuffle $ a ++ b
return (x:xs)
shuffleR :: Eq a => [a] -> IO [a]
shuffleR lst = swapShuffle lst <$> randomShuffle lst