export type COMPOSE = <T>(fn1: (a: T) => T, ...fns: Array<(a: T) => T>) =>
                         (a: T) => T

export const compose: COMPOSE = (fn1, ...fns) =>
  fns.reduce(
    (prevFn, nextFn) =>
             (value) => prevFn(nextFn(value)),
    fn1
  );