import System.Random import System.IO.Unsafe data Maze = Maze { cells :: [(Bool, Bool)] -- [(rightWall, downWall)] , width :: Int , height :: Int } rand :: Int -> Int -- Returns a random integer from 0 to max-1 rand max = unsafePerformIO $ randomRIO (0, max-1) shuffle :: [a] -> [a] -- Randomly shuffles a list shuffle = unsafePerformIO . shuffleM shuffleM :: [a] -> IO [a] -- DON'T BOTHER! Helper for shuffle shuffleM [] = return [] shuffleM n = do { r <- fmap (flip mod $ length n) randomIO; n1 <- return $ n !! r; fmap ((:) n1) $ shuffleM $ (take r n) ++ (drop (r+1) n) }