<html><body><div>I stumbled across this example as a shiny way of explaining why Lazy eval matters....</div><div><br></div><div><div>    fact = fix $ \f n -> if n == 0 then 1 else n * f (n-1)</div></div><div>fix f = f (fix f)</div><div><br></div><div>With lazy eval, I get </div><div><br></div><div>fact 4 = fix $ \f 4 (......)</div><div>since haskell goes outside to inside I have,</div><div><br></div><div>fac 4 = $ \f 4 (......) (fix $ \f 4 (......))</div><div>Now the first chunk can get evaluated, but what about the rest of the expression. The outer "f" from "fix f" function has the parameter (fix f). So when writing "f (fix f)" apparently f got evaluated without using this parameter. I understand that the anonymous lambda does have 4 as the param, but somehow "f (fix f)" doesn't feel complete. </div><div><br></div><div>-Animesh</div><div><br></div><div><br></div></body></html>