On Tue, May 20, 2008 at 09:15:57AM +0100, Yann Golanski wrote: > 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)
Note that there is a standard function "lines" which splits a string into lines. > Nice, simple and I understand what it is doing. > > 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. > > Any pointers as to how to do that? import System.Random removeRandomElement :: [a] -> IO (a, [a]) removeRandomElement l = do i <- randomRIO (0, length l - 1) return (removeAt i l) where removeAt is from problem 20 above. And you use it like anything else in the IO monad: do ... images <- parseImageFile ... ... (chosen, rest) <- removeRandomElement images ... > 3- Wait and do something later.... How, I have no idea how to do that! > Help? Control.Concurrent.threadDelay is the simplest way to make a thread sleep for a while. However, if you're using some GUI library, you may want to use the library's own timers. > 4- I guess that progress bars and updating text will be somewhere in the > GUI (I chose wxHaskell)... Again, no idea where. I'm not familiar with wxHaskell, sorry. > 5- How do you call an external program in Haskell? Either xv or > Esetroot will do the job of displaying the image. Is there a Haskell > native way to do that? There is a direct X11 library for Haskell, but you're probably better off just calling an external program. See the System.Process module. Hope this helps. Lauri _______________________________________________ Haskell-Cafe mailing list [email protected] http://www.haskell.org/mailman/listinfo/haskell-cafe
