laziness in IO
Christopher Milton
cmiltonperl@yahoo.com
Thu, 9 Jan 2003 15:48:20 -0800 (PST)
Hal's solution reminds me of the paper by
Levent Erkök and John Launchbury:
Recursive monadic Bindings: Technical Development and Details.
http://www.cse.ogi.edu/PacSoft/projects/rmb/mfixTR.pdf
One of their examples uses MonadRec and IOExts.
webpage:
Value recursion in Monadic Computations
(a.k.a. Recursive Monadic Bindings)
http://www.cse.ogi.edu/PacSoft/projects/rmb/index.html
How to use the mdo-notation in Hugs and GHC
http://www.cse.ogi.edu/PacSoft/projects/rmb/usage.html
Or maybe module Control.Monad.List would be useful.
--- Hal Daume III <hdaume@ISI.EDU> wrote:
> The following works for me:
>
> import IOExts
>
> main = do xs <- unsafeInterleaveIO getStrings
> putStrLn (head xs)
>
> getStrings = do
> x <- getLine
> if x == "stop"
> then return []
> else do xs <- unsafeInterleaveIO getStrings; return (x:xs)
>
>
> in this particular case, the unsafeInterleaveIO on the recursive call to
> getStrings isn't necessary, but if you change 'putStrLn (head xs)' to
> 'mapM_ putStrLn (take 3 xs)' then it's necessary (I believe).
>
> HTH
>
> - Hal
>
> --
> Hal Daume III
>
> "Computer science is no more about computers | hdaume@isi.edu
> than astronomy is about telescopes." -Dijkstra | www.isi.edu/~hdaume
>
> On Wed, 8 Jan 2003, Amanda Clare wrote:
>
> > How can I recursively collect a list of things while in the IO monad,
> > and return the list lazily as it's constructed rather than waiting until
> > they've all been collected?
> >
> > Perhaps an example will make things clearer:
> >
> >
> > main =
> > do xs <- getStrings
> > putStrLn (head xs)
> >
> > getStrings =
> > do x <- getLine
> > if x == "stop"
> > then return []
> > else do xs <- getStrings
> > return (x:xs)
> >
> >
> > How can I make getStrings lazy? main should be able to terminate
> > immediately after I've entered just one line.
> >
> > Amanda
> >
> > ps: This is a fake example, I'm really trying to lazily retrieve answers
> > fetched from an Oracle SQL query.
> >
> > _______________________________________________
> > Haskell mailing list
> > Haskell@haskell.org
> > http://www.haskell.org/mailman/listinfo/haskell
> >
>
> _______________________________________________
> Haskell mailing list
> Haskell@haskell.org
> http://www.haskell.org/mailman/listinfo/haskell
=====
Christopher Milton
cmiltonperl@yahoo.com
__________________________________________________
Do you Yahoo!?
Yahoo! Mail Plus - Powerful. Affordable. Sign up now.
http://mailplus.yahoo.com