On Thursday 19 April 2012, 23:13:48, Tim Perry wrote:
Henk-Jan van Tuly is correct. Oops! Sorry I was mis-informed.
Note, however, that in the case here, the data-dependencies force the evaluation of the first number in order to determine the outermost constructor. So actually, your
So your use of seq only evaluates the first number and the cons. I.E., it evaluates to: s:(Thunk)
was factually correct (in this special case).
By the way, there is an excellent post about this topic on StackOverflow.com. It covers, seq, weak-head-normal-form, normal form, and thunks. See here: http://stackoverflow.com/questions/6872898/haskell-what-is-weak-head-no rmal-form/6889335#6889335
Hope that makes up for my earlier comment.
Tim
On Thu, Apr 19, 2012 at 2:31 AM, Henk-Jan van Tuyl
wrote: On Wed, 18 Apr 2012 16:45:05 +0200, Brent Yorgey
wrote: On Tue, Apr 17, 2012 at 02:41:15PM -0700, Tim Perry wrote:
seq evaluates to Weak Head Normal Form (WHNF). WHNF is the first contructor. So your use of seq only evaluates the first number and the cons. I.E., it evaluates to: s:(Thunk)
Actually, it doesn't even force the first number. You just get
Thunk : Thunk
A nice way to demonstrate this, is the following GHCi session: Prelude> undefined `seq` print "OK" *** Exception: Prelude.undefined Prelude> [undefined] `seq` print "OK" "OK"
Regards, Henk-Jan van Tuyl