Lazy streams and unsafeInterleaveIO
Sun, 22 Dec 2002 18:32:43 -0800
Hal Daume III wrote:
>>BTW, I already found a major problem with the code I attached earlier,
>>using unsafeInterleaveIO: Run in GHCi (as I had done), it works fine;
>>but compiled by GHC and run as an executable, it waits for input and
>>*then* displays the prompt after the user hits Enter ... not very
>>helpful. I didn't think it would do that, since (putStr "? " >> readLn)
>>seemed pretty explicit as to order of evaluation, but I guess that's
>>what I get for breaking referential transparency ...
>You probably want to set the buffering otherwise. [...]
Ah, you're right ... I changed (putStr "? " >> readLn) to (putStr "? "
>> hFlush stdout >> readLn) and it worked.
So is this lazy-stream-via-unsafeInterleaveIO not so nasty, then, so
long as a few precautions (not reading too far into the stream,
accounting for buffering, etc.) are taken? I like the idiom Hudak uses
(passing a stream of I/O results to the purely functional part of the
program), so if it's kosher enough I'd like to get hacking elsewhere ...