Note, in Caml it is better to use Curried function definitions for multiple-argument functions, not tuples.
when comparing 'a -> 'b -> 'c
calling conventions to 'a * 'b -> 'c
.
When working with SML/NJ I got used to using tuple types for both input and output : ('a * 'b) -> ('c * 'd)
so using tuples to express multiple inputs seems symmetric with the way I express multiple outputs.
Why is currying recommended for OCaml function declarations over tuple arguments? Is it just the greater flexibility that comes with allowing currying/partial evaluation, or is there some other benefit that derives from implementation details of the OCaml compiler?