https://dnadavid.medium.com/understanding-monads-in-functional-programming-with-javascript-2d3c2269c16d