bug in language definition (strictness)

Malcolm Wallace malcolm.wallace at cs.york.ac.uk
Thu Aug 6 12:42:22 EDT 2009


>
>>> What semantics would you like Haskell to have, in which (x `seq` y
>>> `seq` e) and (y `seq` x `seq` e) are not equal?
>>
>> I can easily imagine that (x `seq` y `seq` e) might have *two*  
>> semantic
>> denotations: bottom (Exception: stack overflow), and e. And I would  
>> like
>> to be able to choose which one I get (please). This is the declared
>> purpose of seq, namely "to improve performance by avoiding unneeded
>> laziness".
>
> I'm afraid I don't really comprehend what you're getting at.  What  
> do you mean by an expression having two semantic denotations, and  
> how would you like to choose which one you get?  And I'm baffled by  
> the mention of stack overflow, where does that come in?

Whether it is a stack overflow, or some other kind of resource-related  
exception like out-of-memory, or too-many-open-file-handles, does not  
really matter.  As you were saying, semantically they are all just  
bottom.

My real point is that seq looks for all the world like it is intended  
to affect the operational behaviour of a program, yet some people  
insist that it is a purely denotational device, and that operational  
questions are not relevant.  The Report hints that using seq can  
"improve performance" (although the opposite is also true), and  
changes in performance are certainly an operational notion.  Yet I  
think it would be valid to say that seq can turn a non-terminating  
(exceptioning) program into a terminating one.

Regards,
     Malcolm



More information about the Haskell-prime mailing list