"interact" behaves oddly if used interactively
simonmar at microsoft.com
Wed Oct 1 22:54:44 EDT 2003
> Yes, the presence of lazy IO makes optimistic evaluation more
> complicated, but I do not see that it compromises the purity of the
> language in anyway (whatever purity is ;-).
So, we're agreed that the presence of lazy evaluation makes implementing
optimistic evaluation (and other evaluation strategies) more
complicated. Personally, I find it disturbing that the presence of this
family of library functions affects something as low-level as the
evaluation strategy of the language. Or, to put it another way, it
enforces a particular evaluation strategy on a part of the language,
when the rest of Haskell makes no such restrictions.
I would expect, in a pure language, that I could reduce any expression
in a program to HNF (or _|_) without affecting the meaning of the
program. In Haskell, I can only do this so long as the expression
doesn't involve any lazy I/O.
The real problem is that lazy I/O injects side effects into the pure
world of expressions. Haskell has a perfectly good system for
encapsulating side effects - the IO monad. So why put these sneaky side
effects into pure values?
More information about the Haskell-Cafe