https://medium.com/@akinolasamson1234/demystifying-first-class-and-higher-order-functions-bd2d1eb8373a