Isn't this tail recursive?
Hal Daume III
Tue, 12 Mar 2002 16:28:37 -0800 (PST)
Oops, I made a false statement:
> > f $! a = f a
> but the difference is that $! causes "a" to be reduced completely, so it
> won't build a huge thunk.
This isn't true. $! will only perform one reduction, so for instance:
> id $! (a+1,b+1)
will not cause a+1 and b+1 to be calculated; it will only perform the
computation which creates the tuple. similarly,
> id $! [a+5]
will not cause a+5 to be calculated, it will only result in the list being
created (i.e., reduced from a computation which will compute [a+5] to
simply the value [a+5]). if you want what i was talking about, use the
DeepSeq module (http://www.isi.edu/~hdaume/haskell/Util/DeepSeq.hs) and
then you can write:
> id $!! [a+5]
which will actually perform the calculation.