In the example code below the arrow function has correct type inference while the function example is unable to infer the parameter type and falls back to any.
declare function monitor<T extends (...args: any) => any>(
extractor: (...args: Parameters<T>) => Record<string, unknown>,
executor: T,
): (...args: Parameters<T>) => ReturnType<T>;
monitor((p) => ({ p }), (p: number) => p);
monitor((p) => ({ p }), function (p: number) { return p; });

