title: Why does OCaml have mandatory distinct float and int literal syntax?
body: <p>OCaml has distinct syntax for BOTH:</p>
  <ul>
  <li>float operations vs. int operations. Float operations end in dot: <code>+.</code>.</li>
  <li>float literals vs. int literals. Floats literals end in dot: <code>3.</code>.</li>
  </ul>
  <pre class="lang-ml prettyprint-override"><code># 3 + 3;;
  - : int = 6
  # 3. +. 3.;;
  - : float = 6.
  # 3. + 3;;
  Error: This expression has type float but an expression was expected of type
           int
  </code></pre>
  <p>I can see using one of these mechanisms to disambiguate, but why are two needed <em>always</em>?
  For example, I could see a case where <code>.</code> is <em>sometimes</em> needed at the end of a literal, but not why it is needed for <code>3 +. 3</code> where OCaml could figure out that we want float arithmetic because we're saying we want float arithmetic.</p>
  <p>I'm looking for specific technical justification based on interaction with other language features–not opinion or arguments from ergonomics.</p>