---------------- |sum . map (*2)| ---------------- [1, 2, 3] ↓ [2*1] ──> (2*1 + 0) -- Celula [2*1] e creată, adunată și eliberată ↓ [2*2] ──> (2*2 + (2*1 + 0)) -- Celula [2*2] e creată, adunată și eliberată ↓ [2*3] ──> (2*3 + (2*2 + (2*1 + 0))) -- Celula [2*3] e creată, adunată și eliberată ↓ Evaluare: 12 ---------------------- |foldr ((+) . (*2)) 0| ---------------------- [1, 2, 3] ↓ (2*1 + ) -- Nimic calculat, adunarea e depusă pe stivă ↓ (2*1 + (2*2 + )) -- Altă adunare stivuită ↓ (2*1 + (2*2 + (2*3 + 0))) -- Ultima adunare stivuită ↓ Evaluare: 12 Concluzie: - Optimizarea nu este la nivel de stivă, ci la nivel de heap - prin eliminarea structurilor intermediare.