In functional programming, functions are first class values. It means that functions can be returned as values, and one can pass functions as arguments. In this chapter, we will start with recursive functions and gradually move to higher order functions, functions that take other functions as arguments. Our goal is to be able to write functions that are correct and tested. Haskell is a lazy language. We can take advantage of this fact, and write interesting and compact functions to take advantage of its laziness.
We will start with recursive functions, and see how recursion works. We will then move to tail recursive functions. We will explore a useful worker pattern while working with tail recursion. Next we will take advantage of laziness while calculating Fibonacci numbers recursively.
We will then work with maps and filters, which are very useful in many situations...