Functional Programming Patterns in Scala and Clojure by Michael BevilacquaLinn