Re: Evaluation Annotations (Was Re: Proposal: Relaxing restrictions in Curry

From: Bernd Brassel <>
Date: Wed, 10 Nov 2004 09:37:40 +0100

Wolfgang Lux schrieb:
> Bernd Brassel wrote:
>> Without wishing to open up an old topic again: What were the reasons
>> to make seq rigid? Why should it not correspond to head normal form?
>> You could always define the old seq as
>> oldseq x y = case x of _ -> y
>> or does that taste too much like a hack?
> No, not like a hack, but it will not work as you expect. The expression
> case x of _ -> y is equivalent to let _ = x in y and since there is no
> demand for x in that expression, it simply does not evaluate x at all.

Ah yes, you are totally right. I was mislead by the treatment of case in
the operational semantics: first compute hnf and then look for pattern
matches. Of course in the operational semantics, there is no underscore.

Thus, I agree now that we need a primitive to introduce the behaviour
formally known as rigid branching. I would like to discuss the name,
"rigid" is in my opinion understandable only in the contrast to
"flexible". As there is no dual function to the new primitive, I would
like to see it called differently. Here are a few suggestions:

1) waitOn - nicely expresses the identity on its argument but might
be too operational (on the other hand, we would like to influence only
operational behaviour with it)

2) suspendOn - similiar

3) groundVal - returns the ground value of its argument, (not a
predicate as it is not called isGrundVal). Might sound like it should
compute what ground does in Wolfgangs former mail:

> function ground :: a -> a, which (again lazily) ensures that its result
> is a ground term

so maybe rather:

4) groundHnf - returns the ground head normal form of its argument

5) binding - returns the binding of its argument

What do you think of these (or others)?


curry mailing list
Received on Mi Nov 10 2004 - 11:09:30 CET

This archive was generated by hypermail 2.3.0 : Mi Okt 21 2020 - 07:15:03 CEST