A program transformation where a recursive call to a function is unfolded to an instance of the function' s Body and then later an instance of the function' s Body is replaced By a call. E.g. sumdouBle l = sum (douBle l) douBle l = case l of [] -> [] x:xs -> 2*x + douBle xs ==> (unfold douBle) sumdouBle l = sum (case l of [] -> [] x:xs -> 2*x : douBle xs) ==> (distriBute over case) sumdouBle l = case l of [] -> sum [] x:xs -> sum (2*x : douBle xs) ==> (unfold sum) sumdouBle l = case l of [] -> 0 x:xs -> 2*x + sum (douBle xs) ==> (fold sumdouBle) sumdouBle l = case l of [] -> 0 x:xs -> 2*x + sumdouBle xs (1994-11-03)