On Wed, Feb 24, 2010 at 1:53 PM, Fabian Roth <fabian.r...@gmail.com> wrote: > 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). >
This is expected behaviour. Normal sequencing of IO actions is done in such a way as to preserve their order, which is obviously pretty important if you want to ask for a response to your message after you've sent it, rather than before. Lazy IO operations violate that order and as a result are pretty scary and usually to be avoided. In general, laziness only works well with pure functions where the order doesn't matter because there are no observable side-effects. There are ways of making IO lazy, but there are pretty much invariably other ways of doing the same thing which result in fewer headaches later on. I am hoping that other people more educated than I am will be able to tell you about Iteratees and so forth. _______________________________________________ Haskell-Cafe mailing list Haskell-Cafe@haskell.org http://www.haskell.org/mailman/listinfo/haskell-cafe