https://medium.com/@abhishekranjandev/from-zero-to-hero-unmasking-functional-programming-in-scala-de64641a12d9