Future.Argsval nil : ('r, 'r) tnil the empty argument list *
step t ~f transforms argument values in some way. For example, one can label a function argument like so:
step ~f:(fun f x -> f ~foo:x) : ('a -> 'r1, 'r2) t -> (foo:'a -> 'r1, 'r2) tapplyN f args applies function stored in future f to args