function higherOrderFn<T extends (...args: any[]) => any>(fn: T): (...args: Parameters<T>) => ReturnType<T> {
return (...args: Parameters<T>) => {
return fn(args);
};
}
function higherOrderFn<T, R>(fn: (arg: T) => R): T => R {
return function (arg: T): R { return fn(arg); };
}