// compose(f, g, h) is identical to doing (...args) => f(g(h(...args))). function compose(...funcs){ if(funcs.length == 0) return args => args; if(funcs.length == 1){ return funcs[0]; } return funcs.reduce((a, b) => (...args) => a(b(...args))); }