https://medium.com/@alexandragrosu03/functional-programming-in-javascript-paradigm-shift-a10caf7c7e95