title: Why is there so many expression terminators in OCaml?
body: <p>I noticed that the OCaml syntax is unusually rich with different ways of expressing seemingly the same constructs. For example, there are multiple ways to terminate an expression in OCaml, e.g., <code>;;</code>, <code>;</code>, <code>in</code>, <code>,</code> and, sometimes, no terminator at all. There are also many different kinds of parentheses, that are apparently interchangeable, e.g., <code>()</code>, <code>{}</code>, and <code>[]</code>.</p>
  
  <p>Why are there so many syntactical constructs in OCaml and is there a good summary that highlights the differences between those constructs?</p>