Programming in Scala: A Comprehensive Step-by-Step Guide, 2nd Edition