https://medium.com/@erimicel/modern-js-higher-order-functions-and-functional-programming-concepts-3df4a4b5d8a7