Source: https://blog.engineering.publicissapient.fr/wp-content/uploads/2015/05/Scala1.pdf