OCamlのprintf
デバッグ用のエラー出力をしたいという衝動に駆られると、Printfモジュールを使うことになるわけだが、残念ながらPrintf.printfはflushしてくれない。出力文字列に\nがあってもだめなんで、いちいち flush stderr; しないといけない。コレハメンドイ。
そこでflushしてくれるprintfを書こうとすると困ったことになる。
p_err f s = Printf.eprintf f s; flush stderr
これではダメ。引数を一つしかとれない。実際にはsじゃなくて、s1 s2 s3 ...かもしれない。それはformatによってきまる。かといって、p_err1, p_err2, ...を用意するのもイマイチ。じゃぁ、printfの定義はどうなってんのよと思ったら、こんな具合だ。
let fprintf chan fmt = ...
関数返すのかよ・・・。全部の引数を適用してからflushしないといけませんが、引数の数を特定できない。これはちと厳しそうだな。