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