[Haskell-beginners] A basic misunderstanding of how to program with IO

Ken Overton koverton at lab49.com
Sat May 8 12:20:12 EDT 2010

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.


From: Ozgur Akgun [ozgurakgun at gmail.com]
Sent: Saturday, May 08, 2010 12:09 PM
To: Ken Overton
Cc: beginners at 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-

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.


On 8 May 2010 16:55, Ken Overton <koverton at lab49.com<mailto:koverton at 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 at haskell.org<mailto:Beginners at haskell.org>

Ozgur Akgun

More information about the Beginners mailing list