Malcolm Wallace wrote:
Simon Marlow <[EMAIL PROTECTED]> wrote:
When I use `seq`, it is sometimes in a construction like
unsafePerformIO (emit "squawk!) `seq` x
My take on this kind of thing is that if you want a specific
operational behaviour, then you're doing something
implementation-specific. We shouldn't mandate any kind of
operational behaviour across Haskell implementations. Yes, I'm
saying you can't do this portably, and it is good that you can't,
because it gives implementations more flexibility.
Hmmm. I absolutely agree with the general point that Haskell should, as
much as possible, not mandate any specific operational behaviour. But
what if I want to _observe_ or record the actual operational behaviour
of some particular implementation? For instance, to generate a heap
profile, or a computational trace, or a coverage log, or something. The
results may well be different for every different implementation, and I
am perfectly happy with that. I may actually want to see the
differences. But do you really want to say "The Haskell language
provides the programmer no mechanism to observe this"? "Use some other
language, or some compiler-specific hack"? To me, it is unacceptable to
be prevented from write an observational tool for a language in the
language itself.
Yes, I'm saying you have to do something compiler-specific in order to observe
the operational behaviour. Now that may well be unsafePerformIO+seq on compiler
X, but the point is that this isn't guaranteed to do what you want on all
implementations, precisely because we want to admit different evaluation strategies.
What does it even *mean* to "evaluate x before y"? For example, we might have
an evaluation strategy that uses spare CPUs to search for unevaluated objects in
the heap and speculatively evaluate them for a while; we might thereby evaluate
y (or some of y's free variables) at any time, and even revert y from an
evaluated to an unevaluated state. By even saying that there's a concept of
"evaluation order" you've already nailed too many doors shut, IMO.
Especially since we already have a couple of features in the language
that _do_ affect the operational behaviour.
what are you referring to specifically? hGetContents is the only one I'm aware
of.
Cheers,
Simon
_______________________________________________
Glasgow-haskell-users mailing list
Glasgow-haskell-users@haskell.org
http://www.haskell.org/mailman/listinfo/glasgow-haskell-users