Working through Functional Programming in Scala