Scala Programming by Martin Odersky