List の ; と tuple の ,

List, Array, Record などの要素区切りの ; はとても奇妙に見えるかもしれない。 OCaml を使っている人でもあまり意識していないのだが、実は一貫性がある。

  • A ; B は B ; A と書いても型は変わらない
  • A , B は B , A と書くと型が変わる場合がある


例:

print_string "hello"; print_string "world"
{ a = 42; b = "hello" }
[ 1; 2; 3 ]
[| 1; 2; 3 |]


これらの要素を入れ替えても型は変わらない。もちろん意味は変わる場合がある。


例:

(1, "hello")
(int, float) Hashtbl.t


これらの要素を入れ替えると型が変わってしまう。