//// [genericsAndHigherOrderFunctions.ts] // no errors expected var combine: (f: (_: T) => S) => (g: (_: U) => T) => (x: U) => S = (f: (_: T) => S) => (g: (_: U) => T) => (x: U) => f(g(x)) var foo: (g: (x: K) => N) => (h: (_: (_: K) => (_: M) => M) => (_: M) => M) => (f: (_: N) => (_: R) => R) => (_: R) => R = (g: (x: K) => N) => (h: (_: (_: K) => (_: M) => M) => (_: M) => M) => (f: (_: N) => (_: R) => R) => h(combine(f)(g)) //// [genericsAndHigherOrderFunctions.js] // no errors expected var combine = function (f) { return function (g) { return function (x) { return f(g(x)); }; }; }; var foo = function (g) { return function (h) { return function (f) { return h(combine(f)(g)); }; }; };