Learning Scala: Practical Functional Programming for the JVM