OCaml Printf.sprintf

Почему происходит такое поведение?

# 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 -> 'b -> 'c, unit, string) format =
           ('a -> 'b -> 'c, unit, string, string, string, string) format6

Я ожидаю, что сначала будет оцениваться конкатенация строк, поэтому все будет происходить как обычно. Связано ли это с хитростью системы типов, которую использует Printf?

11
задан Nick Heiner 2 May 2012 в 01:12
поделиться