Plain Functional Programming by Martin Odersky