Interact should be able to handle line-by-line interaction as per this example, it should even be able to handle the exit case thanks to laziness:

> main :: IO ()
> main = interact (unlines . map reverse . lines . untilexit)
> untilexit :: String -> String
> untilexit ('e':'x':'i':'t':_) = []
> untilexit (c:t)               = c : untilexit t
> untilexit []                  = []

There will be a lot of things that it won't be able to do however.


On Mon, Apr 1, 2013 at 5:49 AM, Ovidiu D <ovidiudeac@gmail.com> wrote:
My problem with interact was that it doesn't give me the line when the user hits enter but instead it gives me all the lines at once when stdin is closed (unless I did something wrong)

The other problem is that I want to stop the command processing when the user types the command "exit" and it seems interact can't do that.


On Sun, Mar 31, 2013 at 2:52 PM, Lyndon Maydwell <maydwell@gmail.com> wrote:
Depending on what you're doing with the lines, it may be worth checking out the `interact` function as well :-)


On Sun, Mar 31, 2013 at 7:42 PM, Kim-Ee Yeoh <ky3@atamo.com> wrote:
On Sun, Mar 31, 2013 at 5:19 PM, Ovidiu D <ovidiudeac@gmail.com> wrote:
> 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.

You could use:

getContents >>= lines :: IO [String]

-- Kim-Ee

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


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



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