compose function in the code below takes any number of functions, returns a function that takes the initial value, and then uses the
reduceRight function to iterate right-to-left over each function
functions argument and returns the accumulated value
y. In other words, the
compose function creates a pipeline of functions with the output of the function is connected to the input of the next function.
const compose = (...functions) => (x) =>functions.reduceRight((y, f) => f(y), x)const g = (n) => n + 1const f = (n) => n * 2const h = compose(f, g)h(20) // => 42