text: import {compose} from "../../index.d.ts";
  
  // copied from DefinitelyTyped/compose-function
  
  const numberToNumber = (a: number): number => a + 2;
  const numberToString = (a: number): string => "foo";
  const stringToNumber = (a: string): number => 5;
  
  const t1: number = compose(numberToNumber, numberToNumber)(5);
  const t2: string = compose(numberToString, numberToNumber)(5);
  const t3: string = compose(numberToString, stringToNumber)("f");
  const t4: (a: string) => number = compose(
    (f: (a: string) => number) => ((p: string) => 5),
    (f: (a: number) => string) => ((p: string) => 4)
  )(numberToString);
  
  
  const t5: number = compose(stringToNumber, numberToString, numberToNumber)(5);
  const t6: string = compose(numberToString, stringToNumber, numberToString,
    numberToNumber)(5);
  
  const t7: string = compose(
    numberToString, numberToNumber, stringToNumber, numberToString,
    stringToNumber)("fo");
  
  
  const multiArgFn = (a: string, b: number, c: boolean): string => 'foo'
  
  const t8: string = compose(multiArgFn)('bar', 42, true);
  const t9: number = compose(stringToNumber, multiArgFn)('bar', 42, true);
  const t10: string = compose(numberToString, stringToNumber,
    multiArgFn)('bar', 42, true);
  
  const t11: number = compose(stringToNumber, numberToString, stringToNumber,
    multiArgFn)('bar', 42, true);
  
  
  const funcs = [stringToNumber, numberToString, stringToNumber];
  const t12 = compose(...funcs)('bar', 42, true);
  