You can use sequence which will turn your [IO String] into a IO [String]. If you want to "map a function" along the way, you can use mapM (or traverse):

That is:
mapM :: (String -> IO b) -> [IO String] -> IO [b]

For further reading, there is a paper about this function called The Essence of the Iterator Pattern.

On 31/03/13 20:19, Ovidiu D wrote:
I have the function f which reads lines form the stdin and looks like this:

f :: [IO String]
f = getLine : f

What I don't like is the fact that the line processing I'm doing will have to be in the IO Monad

I would like to make this function to have the signature
f : IO [String]
...such that I can get rid of the IO monad and pass the pure string list to the processing function.

Can I do this?

Thanks


_______________________________________________
Beginners mailing list
Beginners@haskell.org
http://www.haskell.org/mailman/listinfo/beginners


-- 
Tony Morris
http://tmorris.net/