Hi Fabian

You need to yield with unsafeInterleaveIO to allow some of the list to
be be consumed.

Something like this (which never terminates of course, but do produce output):


import System.IO.Unsafe
import Control.Monad

main = do messages <- readLazy
          mapM_ (\x -> putStr $ show x ++ "\n") $ messages
          return ()
          where
            readLazy :: IO [String]
            readLazy = unsafeInterleaveIO $ do
                         { c <- fancyIORead
                         ; liftM2 (++) (return c) readLazy
                         }
            fancyIORead :: IO [String]
            fancyIORead = return ["aa","bb"]
_______________________________________________
Haskell-Cafe mailing list
Haskell-Cafe@haskell.org
http://www.haskell.org/mailman/listinfo/haskell-cafe

Reply via email to