In this chapter, we focused on unification. We saw how there is a unification between functions and classes, ADTs, class hierarchies, as well as modules and objects. This allows us to be much more expressive and write cleaner and more efficient code. We also covered what pattern matching is and how it can be used in Scala to write good code.
Some of the concepts covered in this chapter will be useful in the following chapters where we will be implementing concrete design patterns. They can also be used to write good software outside the defined design patterns just because the expressivity of Scala allows it, and this defies the need to do the extra work that design patterns add.
In the next chapter, we will look at abstract and self-types and what they can be useful for.