[Haskell] Space behaviour & hyperseq
Colin Runciman
colin at cs.york.ac.uk
Fri Jun 18 09:34:00 EDT 2004
Johannes,
>> the result of an application 'normal x' is always true ...
>
> I understand how this works,
> but do we agree that it looks outright ugly?
I don't see why
f x | normal x = ... x ...
is any more ugly than
f x@(x : xs) = ... x ...
or (far worse)
f ~(x : xs) = ... x ...
or strictness annotations, or uses of `seq`, all of which I try to avoid.
I prefer to use the ordinary stuff of a programming language to achieve
pragmatic ends, so far as possible, rather than adding "magical"
decorations.
> We mean one thing (strictness) but we write something quite different
> (an "obviously useless" computation of the constant True).
A 'normal' application doesn't have to mean one thing only: it is
polymorphic, allowing distinct degrees of evaluation to be defined for
distinct types. The result of a normal application may be "useless" but
the effect of computing it can be extremely useful for pragmatic reasons.
> Can you explain this to students? Would you be proud of it?
I can and have explained it to students. It is nothing wonderful, but
it is nothing to be ashamed of. It can even be rather elegant if used
with care.
Well ... that's my opinion anyway!
Colin R
More information about the Haskell
mailing list