https://medium.com/totally-typescript/how-and-why-to-curry-a-function-in-typescript-functional-programming-3b1faac0c318