> 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