Chapter 3. Functional data structures


We said in the introduction that functional programs don’t update variables or modify mutable data structures. This raises pressing questions: what sort of data structures can we use in functional programming, how do we define them in Scala, and how do we operate on them? In this chapter, we’ll learn the concept of functional data structures and how to work with them. We’ll use this as an opportunity to introduce how data types are defined in functional programming, learn about the related technique of pattern matching, and get practice writing and generalizing pure functions.

This chapter has a lot of exercises, particularly to help with this last point—writing and generalizing pure functions. Some of these exercises may be challenging. As always, consult the hints or the answers at our GitHub site (; see the preface), or ask for help online if you need to.

3.1. Defining functional data structures

3.2. Pattern matching

3.3. Data sharing in functional data structures

3.4. Recursion over lists and generalizing to higher-order functions

3.5. Trees

3.6. Summary