"interact" behaves oddly if used interactively

Simon Marlow simonmar at microsoft.com
Wed Oct 1 15:05:05 EDT 2003

Malcolm Wallace writes:
> But the whole purpose of 'interact' is to use its argument as the
> demanding function which drives lazy consumption of the input.  It is
> *designed* to reveal the evaluation behaviour, by hoisting it into
> the I/O monad.

This is why interact is bad, IMO: it forces you to think about the
evaluation order.  The evaluation order for Haskell is not part of the
language definition - it is normally up to the implementation to pick a

Except when you get to lazy I/O.  The commonly accepted meaning for the
lazy I/O operations forces the implementation to adopt a lazy evaluation
strategy for values which require lazy I/O.  For example, eager
evaluation would be a completely valid implementation strategy for
Haskell if it were not for lazy I/O.

This has been swept under the carpet for far too long!


More information about the Haskell mailing list