This document discusses recursion in Haskell. It notes that unlike imperative languages, computations in Haskell are done by declaring what something is rather than how to get it. It then provides examples of translating imperative functions like factorial and finding the maximum value in a list to recursive functions in Haskell. It also discusses features like lambda functions, folding, scanning, and the differences between foldl and foldr. Throughout it emphasizes defining functions recursively based on simple base cases and recursive calls.