[Haskell-cafe] WHNF versus HNF (was: Optimizing unamb by
determining the "state" of a thunk?)
Daniel Fischer
daniel.is.fischer at web.de
Wed Apr 22 18:22:13 EDT 2009
Am Mittwoch 22 April 2009 23:57:08 schrieb Peter Verswyvelen:
> I'm having difficulty to understand the difference between WHNF and HNF.
>
> Is this
> explanation<http://encyclopedia2.thefreedictionary.com/Weak+Head+Normal+For
>m> the
> correct one? Or is WHNF and HNF equivalent in Haskell land?
>
> The GHC documentation of seq says:
> Evaluates its first argument to head normal form, and then returns its
> second argument as the result.
>
> Let's try in GHCi
>
> *Main> let f = trace "\\x" $ \x -> ((trace "\\y" $ \y -> trace "y" y +
> trace "x" x) $ trace "2" 2)
> *Main> f `seq` ()
> \x
> ()
> *Main>
>
> That did not evaluate anything inside the body of the first lambda, so
> according to the article, seq reduces to weak head normal form, not hnf...
Yes, error in the docs. seq evaluates to WHNF, not HNF (unless the two coincide).
More information about the Haskell-Cafe
mailing list