Functional Programming in Scala, Second Edition
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.