Hi all,<div><br></div><div>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&#39;s some simplified code to reproduce the problem:</div>
<div><br></div><div>--------------------</div><div><br></div><div><div>import Control.Monad</div><div><br></div><div>main = do messages &lt;- readLazy</div><div>          mapM_ (\x -&gt; putStr $ show x ++ &quot;\n&quot;) $ messages</div>
<div>          return ()</div><div>          where</div><div>            readLazy :: IO [String]</div><div>            readLazy = do c &lt;- fancyIORead</div><div>                          liftM2 (++) (return c) readLazy</div>
<div>            fancyIORead :: IO [String]</div><div>            fancyIORead = return [&quot;aa&quot;,&quot;bb&quot;]</div><div>                        </div></div><div><div>--------------------</div></div><div><br></div>
<div>In my implementation fancyIORead reads blocks from the socket and returns a list of records.</div><div>But it seems readLazy doesn&#39;t ever return.</div><div><br></div><div>What could be the problem here?</div><div>
<br></div><div>Also, if anyone has a better solution to write this thing, pls let me know.</div><div><br></div><div>Thanks!</div><div>Fabian</div>