f : int -> int boxed_f : f<int, int> apply_boxed_f : [`a, `b] f<`a, `b> * `a -> `b main : int