What does the `and` keyword mean in OCaml?
<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>