Scala Cookbook: Recipes for Object-Oriented and Functional Programming