title: OCaml Printf.sprintf
body: <p>Why does this behavior occur?</p>
  
  <pre><code># Printf.sprintf ("Foo %d %s") 2 "bar";;
  - : string = "Foo 2 bar"
  
  # Printf.sprintf ("Foo %d" ^ " %s") 2 "bar";;
    Printf.sprintf ("Foo %d" ^ " %s") 2 "bar";;
  Error: This expression has type string but an expression was expected of type
           ('a -&gt; 'b -&gt; 'c, unit, string) format =
             ('a -&gt; 'b -&gt; 'c, unit, string, string, string, string) format6
  </code></pre>
  
  <p>I would expect that the string concatenation would be evaluated first, so everything will proceed as normal. Does this have to do with the type system trickery that Printf employs?</p>