頭の悪いformat
OCamlの自慢らしいタイプセーフprintf。
型がついているということはcamlp4では無くてOCamlの構文の上に乗っているということですよね……。
# Printf.printf "%d";; - : int -> unit = <fun> # Printf.printf "%d %d";; - : int -> int -> unit = <fun> # Printf.printf "%s";; - : string -> unit = <fun> # Printf.printf;; - : ('a, out_channel, unit) format -> 'a = <fun> # Printf.printf 1;; Characters 14-15: Printf.printf 1;; ^ This expression has type int but is here used with type ('a, out_channel, unit) format = ('a, out_channel, unit, unit, unit, unit) format6 # ("%d" : ('a, out_channel, unit) format);; - : (int -> unit, out_channel, unit) format = <abstr>
結論。コンパイラマジックによって文字列定数は('a, out_channel, unit) format型として解釈されるようです。'aは文字列の中身によって変化するようです。
何の事は無くPascalのWriteLnやBASICのPRINT USINGと変わらないつまらない結論になりそうです……いや、きっと凄い仕組みが隠されているに違いない!そうだそうだそうに違いない!