Programming in Scala: Updated for Scala 2.12