Functional Programming in Scala, Second Edition - Michael Pilquist, RĂșnar Bjarnason, and Paul Chiusano
Learn functional programming from first principles, using the flexible Scala language. Hands-on exercises and examples make it easy to start thinking and coding functionally.