
17 Jan
2007
17 Jan
'07
5 p.m.
Hi,
It's probably eaiser to work with normal lists:
listChars :: IO [Char] listChars = do c <- getChar if c == 'q' then return c else liftM2 (:) (return c) listChars
But that is not lazy any more, is it? The idea of the OT was, I think, that he can use the first elements of the list even before the last one was entered.
But it's possible to make it lazy again using System.IO.Unsafe.unsafeInterleaveIO: listChars :: IO [Char] listChars = unsafeInterleaveIO $ do c <- getChar if c == 'q' then return c else liftM2 (:) (return c) listChars Regards, Martin.