Isn't this tail recursive?

Bjorn Lisper
Wed, 13 Mar 2002 09:12:04 +0100 (MET)

Hal Daume III:
>Here's the basic idea.  Suppose we have the function:
>> sum [] acc = acc
>> sum (x:xs) acc = sum xs (acc+x)
>This is tail recursive, but not strict in the accumulator argument.

Just a nitpick here. sum is indeed strict in its second argument (given that
(+) is strict in its first argument). That is, sum l _|_ = _|_ for all
possible lists l.

It is of course possible that the compiler you use does not detect this and
generates nonstrict code.

But I think a decent strictness analyzer should detect this. Can the problem
be that + is overloaded in Haskell, so the compiler cannot assume any
semantical properties like strictness for it?

Björn Lisper