>      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.

If we are going to document the officially valid deficiencies of each compiler and machine architecture, perhaps that should not be in the *language* definition, but in the Haskell Platform users' guide.

And those who are trying to distinguish between terminating and nonterminating bottom are claiming to solve the Halting Problem. There is no general way to reliably distinguish these two, and I believe that valid program transformations exist that can convert one to the other. Bottom has only one value, not two. Otherwise bottom would have been called buttocks.

Dan

Malcolm Wallace wrote:
Yet I think it would be
valid to say that seq can turn a non-terminating (exceptioning) program
into a terminating one.
Do you have an example of that?

Sure.
     foldl (+) 0 [1..10000000] :: Integer
     *** Exception: stack overflow
     foldl' (+) 0 [1..10000000] :: Integer
     50000005000000

The only difference between foldl and foldl' is strictness (the use of seq). By "non-terminating (exceptioning)" I of course really meant "terminating with bottom" as opposed to "terminating with a defined value", but since non-termination and exceptions are semantically both bottom, you won't mind that slip. :-)

Regards,
     Malcolm

_______________________________________________
Haskell-prime mailing list
Haskell-prime@haskell.org
http://www.haskell.org/mailman/listinfo/haskell-prime



_______________________________________________
Haskell-prime mailing list
Haskell-prime@haskell.org
http://www.haskell.org/mailman/listinfo/haskell-prime

Reply via email to