13 Mar
2002
13 Mar
'02
12:28 a.m.
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. - Hal