Thanks, Tom, for a nice description of lazy evaluation.
Besides the minor things Derek pointed out, there's one more subtle
but important thing to correct:
At 7:29 AM +0000 11/29/07, Thomas Davie wrote:
$! is the special case, which means strictly apply. It evaluates
its argument first, *then* does the application. This may or may
not be faster (and usually isn't, due to evaluating more of the
argument):
f ($!) x = seq x (f x)
seq is a special function that says "first fully evaluate my first
argument, then return my second argument", it breaks non-strict
semantics.
seq doesn't fully evaluate its first argument, rather only to what's
called "weak head normal form". Roughly, that means only enough to
establish the top-level constructor (e.g., to distinguish [] from
(_:_)).
Dean
_______________________________________________
Haskell-Cafe mailing list
Haskell-Cafe@haskell.org
http://www.haskell.org/mailman/listinfo/haskell-cafe