Source: https://infoscience.epfl.ch/record/52656/files/ScalaOverview.pdf