https://medium.com/@reynoldsfred675/unlocking-the-power-of-functional-programming-languages-0b28ec5e7956