bug in language definition (strictness)

Peter Gammie peteg42 at gmail.com
Thu Aug 6 09:20:15 EDT 2009


On 06/08/2009, at 10:59 PM, Simon Marlow wrote:
> On 06/08/2009 13:49, Thomas Davie wrote:
>> On 6 Aug 2009, at 14:37, Nils Anders Danielsson wrote:
>>
>>> On 2009-08-06 11:08, Malcolm Wallace wrote:
>>>> yet, because of the definition of $!, this applies the  
>>>> constructor to
>>>> its arguments right-to-left instead of the intuitive left-to-right.
>>>
>>> I do not think that there is a bug: x `seq` y `seq` e has the same
>>> denotation as y `seq` x `seq` e.
>>
>> Not if one considers the "kind" of bottom one receives:
>>
>> undefined `seq` error "it exploded" `seq` e will print  
>> "Prelude.undefined"
>> while
>> error "it exploded" `seq` undefined `seq` e will print "Error: it  
>> exploded"
>
> There's only one kind of bottom in Haskell 98.  And even with the  
> imprecise exceptions extension, both expressions still have the same  
> denotation - they denote the same set of exceptions, one of which is  
> non-deterministically picked when the program is run.

If the FFI Addendum is considered part of Haskell 98, then we have  
unsafePerformIO, and so an appeal to denotational equivalence is not  
sufficient. When grafting a pure interface onto a notionally-pure  
library (specifically a BDD library), I often used seq to get these  
effects buried in "pure" values under control.

I also think the principle of least surprise is clearly violated here.

cheers
peter

-- 
http://peteg.org/



More information about the Haskell-prime mailing list