bug in language definition (strictness)

Simon Marlow marlowsd at gmail.com
Fri Aug 7 18:21:17 EDT 2009


Dan Weston wrote:
> 
>  >      foldl (+) 0 [1..10000000] :: Integer
>  >      *** Exception: stack overflow
>  >      foldl' (+) 0 [1..10000000] :: Integer
>  >      50000005000000
> 
> I thought both of these were perfectly well defined in denotational 
> semantics (and equal to 50000005000000). The first is merely a failure 
> of one person's computer to implement the (perfectly well-defined) 
> denotational semantics of the program.

Quite.  It's slightly confusing that a stack overflow manifests in the 
same way as an exception that indicates _|_, such as error or divide by 
zero.

It's exactly the same as if you'd pressed Control-C during the first 
evaluation.  That doesn't cause the expression to have value _|_, but it 
does raise an exception.  The type of the exception is some help: 
StackOverflow is a constructor in the AsyncException datatype, 
indicating that it was an asynchronous exception.  Evaluating the 
expression again might yield a result.

Cheers,
	Simon


More information about the Haskell-prime mailing list