This document discusses the concepts of evaluation strategies, particularly lazy evaluation, in Haskell and Scala, highlighting how right folds can be applied to infinite lists due to the non-strictness of functions. It explains the distinction between innermost and outermost reductions in terms of function application and argument evaluation, emphasizing that lazy evaluation allows programming with infinite structures. Additionally, it concludes that lazy evaluation, based on call-by-name, ensures efficient termination and avoids unnecessary repeated evaluations of expressions.