title: What does the `and` keyword mean in OCaml?
body: <p>I'm mystified by the <code>and</code> keyword in OCaml. Looking through <a href="https://github.com/facebook/hhvm/blob/master/hphp/hack/src/typing/typing_env.ml#L61" rel="noreferrer">this code</a>, I see</p>
  
  <pre><code>type env = {
      (* fields for a local environment described here *)
  }
  
  and genv {
      (* fields for a global environment here *)
  }
  </code></pre>
  
  <p>then <a href="https://github.com/facebook/hhvm/blob/master/hphp/hack/src/typing/typing_env.ml#L336" rel="noreferrer">later</a>,</p>
  
  <pre><code>let rec debug stack env (r, ty) = (* a function definition *)
  
  and debugl stack env x = (* another function definition *)
  </code></pre>
  
  <p>What's going on here? Does the <code>and</code> keyword just copy the last <code>type</code>, <code>let</code>, or <code>let rec</code> statement? Is there such thing as an <code>and rec</code> statement? Why would I want to use <code>and</code> instead of just typing <code>let</code> or <code>type</code>, making my code less brittle to refactoring? Is there anything else I should know about?</p>