main = interact (unlines . lines)

This *appears* to somewhat reliably get me functionality that looks like take a line of input, and print it out.

Is this behavior something I can rely on working?

I like the idea that lines can pull lines lazily from "getContents" which lazily consume the input.  But I'm concerned that relying on a pure function like "unlines . lines" to sequence IO is a bit too implicit in nature.

I really like the idea of doing things through functions like Interact in that they appear to allow me to keep most of my code pure, but if I can't get the IO sequencing I want to be guaranteed to work, I suppose I'll have to dive back into "imperative IO" land that I get from the IO Monad.

Should I feel guilty for doing so?  :-) 

Dave