/* @flow */ /* eslint-disable */ function composeImpl(...funcs) { if (funcs.length === 0) { return arg => arg; } const last = funcs[funcs.length - 1]; const rest = funcs.slice(0, -1); return (...args) => rest.reduceRight((composed, f) => f(composed), last(...args)); } type FN = (a: A) => R; const compose: (end: void) => (x: T) => T & (m1: FN, end: void) => FN & (m1: FN, m2: FN, end: void) => FN & (m1: FN, m2: FN, m3: FN, end: void) => FN & (m1: FN, m2: FN, m3: FN, m4: FN, end: void) => FN & (m1: FN, m2: FN, m3: FN, m4: FN, m5: FN, end: void) => FN & (m1: FN, m2: FN, m3: FN, m4: FN, m5: FN, m6: FN, end: void) => FN & (m1: FN, m2: FN, m3: FN, m4: FN, m5: FN, m6: FN, m7: FN, end: void) => FN & (m1: FN, m2: FN, m3: FN, m4: FN, m5: FN, m6: FN, m7: FN, m8: FN, end: void) => FN & (m1: FN, m2: FN, m3: FN, m4: FN, m5: FN, m6: FN, m7: FN, m8: FN, m9: FN, end: void) => FN & (m1: FN, m2: FN, m3: FN, m4: FN, m5: FN, m6: FN, m7: FN, m8: FN, m9: FN, m10: FN, end: void) => FN & (...funcs: Array>) => FN = (composeImpl: any); export default compose;