Thanks; I guess my 'problem' is that I naturally gravitate to a function that returns *the result of the interaction* rather than IO, but that seems impossible anywhere IO is used. So looking at the 'real' interact function, I guess the Haskell way is to pass in my function that acts on the data that was read. I guess that makes sense as then I can separate all my 'action' code from IO code. Is that a reasonable understanding? Sorry if this was so obvious; is this kind of pattern documented in greater detail somewhere? I haven't noticed anything yet, but maybe I've been hoogling the wrong names. --kov ________________________________________ From: Ozgur Akgun [ozgurakgun@gmail.com] Sent: Saturday, May 08, 2010 12:09 PM To: Ken Overton Cc: beginners@haskell.org Subject: Re: [Haskell-beginners] A basic misunderstanding of how to program with IO I might have misunderstood you, but what about using the existing interact function: http://haskell.org/ghc/docs/6.12.1/html/libraries/base-4.2.0.0/Prelude.html#... And for your interact, since it is not in the IO monad, you cannot write such a function. [ don't tell him about the unsafePerformIO :) ] I am sure you'll get better answers. Best, On 8 May 2010 16:55, Ken Overton <koverton@lab49.com<mailto:koverton@lab49.com>> wrote: Sorry for such a beginner-y question, but is there a way to make a function like: interact :: String -> Resp interact txt = putStrLn txt rsp <- getLine return parseResp rsp parseResp :: String -> Resp Or is that simply a wrong way of programming in Haskell with IO? Thanks (and apologies), -- kov_______________________________________________ Beginners mailing list Beginners@haskell.org<mailto:Beginners@haskell.org> http://www.haskell.org/mailman/listinfo/beginners -- Ozgur Akgun