I seem to be missing something, thus thank you for taking your time
> Wouldn't that be like if in C, you had to write the arguments in reverse order of the format string, like this?
Exactly and that's not what we want
Let's go through this step by step:
sprintf "%s %d" returns a function, taking a string and returning a function taking an integer and returning a string, right?
sprintf "%s %d" "hello" returns a function taking an integer, returning a string, right?
sprintf "%s %d" "hello" 42 returns a string, right?
Thus my intuition of the return type of sprintf "%s %d" would be string -> (int -> string) not int -> (string -> string)