Hi all,

I am trying to read structured data from a socket and return a lazy list of records. However, the socket reading operation seems to be strict and never returns (until stack overflow). Here's some simplified code to reproduce the problem:

--------------------

import Control.Monad

main = do messages <- readLazy
          mapM_ (\x -> putStr $ show x ++ "\n") $ messages
          return ()
          where
            readLazy :: IO [String]
            readLazy = do c <- fancyIORead
                          liftM2 (++) (return c) readLazy
            fancyIORead :: IO [String]
            fancyIORead = return ["aa","bb"]
                        
--------------------

In my implementation fancyIORead reads blocks from the socket and returns a list of records.
But it seems readLazy doesn't ever return.

What could be the problem here?

Also, if anyone has a better solution to write this thing, pls let me know.

Thanks!
Fabian