[Haskell-cafe] strict, lazy, non-strict, eager
Albert Y. C. Lai
trebla at vex.net
Sat Dec 24 08:31:21 CET 2011
Most individuals of the Haskell community have long been maintaining a
cognitive dissonance; some cases turn into plain hypocrisy. You might
excuse it for its ancient and prominent origin: Richard Bird and/or
Philip Wadler themselves wrote like "it is too lazy", "make it more
strict" 13 years ago and surely more. But perpetuating it is not helping.
I have not written this complaint until now because I have been waiting
for unmistakable evidence, a smoking gun, a red hand so caught that you
cannot explain away, for example you cannot explain that "one sentence
is from one person, the other sentence is from a different person".
So, on IRC in #haskell, from the same person, speaking on the same topic
in the same context, in the same interval of 3 minutes (the first two
sentences in the same minute):
1. a function f is strict if f ⊥ = ⊥
2. ⊥ represents any computation which does not terminate, i.e. an
exception or an infinite loop
3. "strict" describes the denotational semantics
People, could you please make up your mind already? It has been more
than 13 years.
Denotational semantics:
A. There are no computational steps. There is no termination, and there
is no non-termination, since there are no steps to finish, and no steps
to keep going.
B. ⊥ represents "no information", not "non-termination". There is no
"non-termination" to represent.
C. fix id = ⊥ because ⊥ is the least fixed point of id, not because fix
id non-terminates. There is nothing to terminate or non-terminate.
D. You say strict, more strict, less strict; non-strict, more
non-strict, less non-strict. You don't say eager, and you don't say lazy.
Operational semantics:
A. There is no ⊥; it does not appear in any sequence of computational
steps, finitely long or infinitely long.
B. You say eager, more eager, less eager; lazy, more lazy, less lazy; or
speculative, more speculative, less speculative; or any other adjectives
for evaluation strategies. You don't say strict, and you don't say
non-strict.
"Semantics", "semantically speaking":
A. Which semantics, which semantically? There are two.
B. Actually there are more, but apparently two is already enough to
cause all kinds of incoherent statements. If I draw your attention to
algebraic semantics, will you start saying "it is too lazy, need to make
it more idempotent"?
More information about the Haskell-Cafe
mailing list