Functional Programming in Scala, Second Edition - Michael Pilquist