title: syntax of polymorphic variable type in OCaml
body: <p>I'm looking into an OCaml file and I suspect it should be a polymorphic variable type (I don't know OCaml, so maybe very off):</p>
  
  <pre><code>type loc = Loc.t
     and meta_bool =
      [ BTrue
      | BFalse
      | BAnt of string ]
     and rec_flag =
      [ ReRecursive
      | ReNil
      | ReAnt of string ]
  </code></pre>
  
  <p>However, according to the syntax of OCaml</p>
  
  <pre><code>polymorphic-variant-type    
      ::=  [ [ | ] tag-spec  { | tag-spec } ]  
      ∣    [&gt; [ tag-spec ]  { | tag-spec } ]  
      ∣    [&lt; [ | ] tag-spec-full  { | tag-spec-full }  [ &gt; { `tag-name }+ ] ] 
  </code></pre>
  
  <p>Inside <code>[]</code> if we don't use a backtick, we cannot use an uppercase identifier.
  <code>tag-spec</code> cannot be anything that starts with uppercase.</p>
  
  <p>Am I looking at the correct grammar rule or there is something else going on in this file?</p>