バニラの OCaml では、他のすべての(or)
関数と同じように 2 項関数な(+)
ので、次のようなコードは問題なく動作します。
let any (truths:bool list) = List.fold_left (or) false truths
ただし、camlp4o がロードされている環境では、次のように解析できません。
Error: Parse error: ")" or "module" or [expr] expected after "(" (in [expr])
一方、(+)
その他の整数算術演算子は、どちらの環境でも引き続き期待どおりに機能します。
let sum (nums:int list) = List.fold_left (+) 0 nums
どうしてこれなの?これは camlp4o の制限ですか、それともバグですか? これは OCaml 3.12.1 で発生します (OS X 10.7.4 では、GODI ブートストラップ経由で新しくインストールされます)。