implementation module RandomGetallen import StdEnv, Random random_n :: Int RandomSeed -> ([Int],RandomSeed) random_n 0 seed = ([], seed) random_n n seed = ([r:rs], s`) where (rs,s`) = random_n (n-1) s (r,s) = random seed random_inf :: RandomSeed -> [Int] random_inf s = iterateSt random s iterateSt :: (s -> (a,s)) s -> [a] iterateSt f s = [a : iterateSt f s`] where (a,s`) = f s shuffle :: [a] RandomSeed -> [a] shuffle xs s = (perms xs)!!(fst (random s) rem (factorial (length xs))) perms :: [a] -> [[a]] perms [] = [[]] perms xs = [[xs!!i : xs`] \\ i <- [0..length xs - 1] , xs` <- perms (take i xs ++ drop (i+1) xs)] factorial :: Int -> Int factorial 0 = 1 factorial n = n * factorial (n-1)