[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