Why is (monad) elegance so costly?
Saswat Anand
saswatan@comp.nus.edu.sg
Sat, 3 Nov 2001 14:55:30 +0800 (GMT-8)
Hi,
I feel embarrased when I post newbie questions after one year
of decent Haskell programming. But it feels much better to ask than to
suffer in ignorance.
My newbie question is: Could anyone explain why the second version of the
following function is better.
Is there a tutorial kind of paper(or related) that gives programmer-view
of closures? In particular when they are created, what do they contain and
where and how they should be avoided to make program faster.
Thank you very much,
Saswat
> You can see what is going on if you give the flag -ddump-simpl
> to GHC, and then look for the function Main.eval. You'll see
> that eval has a shape like
>
> eval (Var x) = let ... in \env -> ...
> eval (Add u v) = let ... in \env -> ...
>
> This is bad, because eval is building a function closure for
> the \env, instead of taking its two arguments together as does
> simplEval. We'd prefer
>
> eval (Var x) env = let ... in ...
> eval (Add u v) env = let .. in ...