
Yann Golanski
1- Get a list out of a file: I managed to do that using the following:
parseImageFile :: FilePath -> IO [String] parseImageFile file = do inpStr <- readFile file return $ filter (/="") (breaks (=='\n') inpStr)
Nice, simple and I understand what it is doing.
Can be improved: breaks (=='\n') == lines -- easier to read, no? filter (/="") == filter (not . null) -- more polymorphic, not important here do x <- expr1 == expr1 >>= return . expr2 return $ expr2 x -- i.e. "readFile f >>= return . filter (not.null) . lines"
2- Get a random element from a list and remove it: Okay, this I understand less well. I looked at the solutions of problems 23 and 20 in http://www.haskell.org/haskellwiki/99_questions so there is a skeleton there. However, my list is IO [String].... Hum, monads.
Since you really want to shuffle the list, how about assigning each entry a random number, and sorting the list? shuffle :: [String] -> IO [String] shuffle fs = do rs <- randoms return (map snd $ sort $ zipWith rs fs)
5- How do you call an external program in Haskell?
See the 'System.Process' or 'System.Cmd' modules. -k -- If I haven't seen further, it is by standing in the footprints of giants