Source: http://people.cs.ksu.edu/~schmidt/705a/Scala/scala_tutorial.pdf