is the compiler smart enough to detect that something is unchanged, and then not copy it again ( on stacks, or whatever ) f(A) ->2* g(A). is A copied on the stack, or just passed around ? ( Ais big in my case, and quite deep recursion is happenning) generally speaking , in FP , are things passed around as values or pointer ?