On Fri, 2009-02-06 at 00:51 +0100, Peter Verswyvelen wrote:
> On Thu, Feb 5, 2009 at 8:20 PM, ChrisK <[email protected]>
> wrote:
> Since this is strict there is no laziness and the code must
> evaluate the input and output "State RealWorld" to ensure they
> are not bottom or error.
> Interesting. I also thought it was the passing of the RealWorld that
> caused the sequencing, I never realized that the strictness played an
> important role here.
> So what would happen if it would be lazy instead of strict? What kind
> of craziness would occur?
The order of side effects would be demand-driven, rather than
order-of-statement driven. So if I said:
do
x <- getChar
y <- getChar
z <- getChar
then in the sequel, the first character I evaluated would be the first
character read. Of course, Haskell's order of evaluation is undefined,
so whether the string read from STDIN was
[x, y, z]
or [y, x, z]
or [z, x, y]
or some other permutation would be undefined. And, of course, if I
never evaluated y at all, y would never be read --- there would be only
two characters of input.
Essentially, the program would act as if every statement was wrapped up
in an unsafeInterleaveIO.
jcc
_______________________________________________
Haskell-Cafe mailing list
[email protected]
http://www.haskell.org/mailman/listinfo/haskell-cafe