moonpool/dev/ocaml/Parsetree/index.html
2023-08-28 17:11:38 +00:00

22 lines
No EOL
165 KiB
HTML
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

<!DOCTYPE html>
<html xmlns="http://www.w3.org/1999/xhtml"><head><title>Parsetree (ocaml.Parsetree)</title><link rel="stylesheet" href="../../_odoc-theme/odoc.css"/><meta charset="utf-8"/><meta name="generator" content="odoc 2.2.1"/><meta name="viewport" content="width=device-width,initial-scale=1.0"/><script src="../../highlight.pack.js"></script><script>hljs.initHighlightingOnLoad();</script></head><body class="odoc"><nav class="odoc-nav"><a href="../index.html">Up</a> <a href="../index.html">ocaml</a> &#x00BB; Parsetree</nav><header class="odoc-preamble"><h1>Module <code><span>Parsetree</span></code></h1><p>Abstract syntax tree produced by parsing</p><p><b>Warning:</b> this module is unstable and part of <span class="xref-unresolved">compiler-libs</span>.</p></header><nav class="odoc-toc"><ul><li><a href="#extension-points">Extension points</a></li><li><a href="#core-language">Core language</a><ul><li><a href="#type-expressions">Type expressions</a></li><li><a href="#patterns">Patterns</a></li><li><a href="#value-expressions">Value expressions</a></li><li><a href="#value-descriptions">Value descriptions</a></li><li><a href="#type-declarations">Type declarations</a></li></ul></li><li><a href="#class-language">Class language</a><ul><li><a href="#type-expressions-for-the-class-language">Type expressions for the class language</a></li><li><a href="#value-expressions-for-the-class-language">Value expressions for the class language</a></li></ul></li><li><a href="#module-language">Module language</a><ul><li><a href="#type-expressions-for-the-module-language">Type expressions for the module language</a></li><li><a href="#value-expressions-for-the-module-language">Value expressions for the module language</a></li></ul></li><li><a href="#toplevel">Toplevel</a><ul><li><a href="#toplevel-phrases">Toplevel phrases</a></li></ul></li></ul></nav><div class="odoc-content"><div class="odoc-spec"><div class="spec type anchored" id="type-constant"><a href="#type-constant" class="anchor"></a><code><span><span class="keyword">type</span> constant</span><span> = </span></code><ol><li id="type-constant.Pconst_integer" class="def variant constructor anchored"><a href="#type-constant.Pconst_integer" class="anchor"></a><code><span>| </span><span><span class="constructor">Pconst_integer</span> <span class="keyword">of</span> string * <span>char option</span></span></code><div class="def-doc"><span class="comment-delim">(*</span><p>Integer constants such as <code>3</code> <code>3l</code> <code>3L</code> <code>3n</code>.</p><p>Suffixes <code>[g-z][G-Z]</code> are accepted by the parser. Suffixes except <code>'l'</code>, <code>'L'</code> and <code>'n'</code> are rejected by the typechecker</p><span class="comment-delim">*)</span></div></li><li id="type-constant.Pconst_char" class="def variant constructor anchored"><a href="#type-constant.Pconst_char" class="anchor"></a><code><span>| </span><span><span class="constructor">Pconst_char</span> <span class="keyword">of</span> char</span></code><div class="def-doc"><span class="comment-delim">(*</span><p>Character such as <code>'c'</code>.</p><span class="comment-delim">*)</span></div></li><li id="type-constant.Pconst_string" class="def variant constructor anchored"><a href="#type-constant.Pconst_string" class="anchor"></a><code><span>| </span><span><span class="constructor">Pconst_string</span> <span class="keyword">of</span> string * <a href="../Location/index.html#type-t">Location.t</a> * <span>string option</span></span></code><div class="def-doc"><span class="comment-delim">(*</span><p>Constant string such as <code>&quot;constant&quot;</code> or <code>{delim|other constant|delim}</code>.</p><p>The location span the content of the string, without the delimiters.</p><span class="comment-delim">*)</span></div></li><li id="type-constant.Pconst_float" class="def variant constructor anchored"><a href="#type-constant.Pconst_float" class="anchor"></a><code><span>| </span><span><span class="constructor">Pconst_float</span> <span class="keyword">of</span> string * <span>char option</span></span></code><div class="def-doc"><span class="comment-delim">(*</span><p>Float constant such as <code>3.4</code>, <code>2e5</code> or <code>1.4e-4</code>.</p><p>Suffixes <code>g-z</code><code>G-Z</code> are accepted by the parser. Suffixes are rejected by the typechecker.</p><span class="comment-delim">*)</span></div></li></ol></div></div><div class="odoc-spec"><div class="spec type anchored" id="type-location_stack"><a href="#type-location_stack" class="anchor"></a><code><span><span class="keyword">type</span> location_stack</span><span> = <span><a href="../Location/index.html#type-t">Location.t</a> list</span></span></code></div></div><h2 id="extension-points"><a href="#extension-points" class="anchor"></a>Extension points</h2><div class="odoc-spec"><div class="spec type anchored" id="type-attribute"><a href="#type-attribute" class="anchor"></a><code><span><span class="keyword">type</span> attribute</span><span> = </span><span>{</span></code><ol><li id="type-attribute.attr_name" class="def record field anchored"><a href="#type-attribute.attr_name" class="anchor"></a><code><span>attr_name : <span>string <a href="../Asttypes/index.html#type-loc">Asttypes.loc</a></span>;</span></code></li><li id="type-attribute.attr_payload" class="def record field anchored"><a href="#type-attribute.attr_payload" class="anchor"></a><code><span>attr_payload : <a href="#type-payload">payload</a>;</span></code></li><li id="type-attribute.attr_loc" class="def record field anchored"><a href="#type-attribute.attr_loc" class="anchor"></a><code><span>attr_loc : <a href="../Location/index.html#type-t">Location.t</a>;</span></code></li></ol><code><span>}</span></code></div><div class="spec-doc"><p>Attributes such as <code>[\@id ARG]</code> and <code>[\@\@id ARG]</code>.</p><p>Metadata containers passed around within the AST. The compiler ignores unknown attributes.</p></div></div><div class="odoc-spec"><div class="spec type anchored" id="type-extension"><a href="#type-extension" class="anchor"></a><code><span><span class="keyword">and</span> extension</span><span> = <span>string <a href="../Asttypes/index.html#type-loc">Asttypes.loc</a></span> * <a href="#type-payload">payload</a></span></code></div><div class="spec-doc"><p>Extension points such as <code>[%id ARG] and [%%id ARG]</code>.</p><p>Sub-language placeholder -- rejected by the typechecker.</p></div></div><div class="odoc-spec"><div class="spec type anchored" id="type-attributes"><a href="#type-attributes" class="anchor"></a><code><span><span class="keyword">and</span> attributes</span><span> = <span><a href="#type-attribute">attribute</a> list</span></span></code></div></div><div class="odoc-spec"><div class="spec type anchored" id="type-payload"><a href="#type-payload" class="anchor"></a><code><span><span class="keyword">and</span> payload</span><span> = </span></code><ol><li id="type-payload.PStr" class="def variant constructor anchored"><a href="#type-payload.PStr" class="anchor"></a><code><span>| </span><span><span class="constructor">PStr</span> <span class="keyword">of</span> <a href="#type-structure">structure</a></span></code></li><li id="type-payload.PSig" class="def variant constructor anchored"><a href="#type-payload.PSig" class="anchor"></a><code><span>| </span><span><span class="constructor">PSig</span> <span class="keyword">of</span> <a href="#type-signature">signature</a></span></code><div class="def-doc"><span class="comment-delim">(*</span><p><code>: SIG</code> in an attribute or an extension point</p><span class="comment-delim">*)</span></div></li><li id="type-payload.PTyp" class="def variant constructor anchored"><a href="#type-payload.PTyp" class="anchor"></a><code><span>| </span><span><span class="constructor">PTyp</span> <span class="keyword">of</span> <a href="#type-core_type">core_type</a></span></code><div class="def-doc"><span class="comment-delim">(*</span><p><code>: T</code> in an attribute or an extension point</p><span class="comment-delim">*)</span></div></li><li id="type-payload.PPat" class="def variant constructor anchored"><a href="#type-payload.PPat" class="anchor"></a><code><span>| </span><span><span class="constructor">PPat</span> <span class="keyword">of</span> <a href="#type-pattern">pattern</a> * <span><a href="#type-expression">expression</a> option</span></span></code><div class="def-doc"><span class="comment-delim">(*</span><p><code>? P</code> or <code>? P when E</code>, in an attribute or an extension point</p><span class="comment-delim">*)</span></div></li></ol></div></div><h2 id="core-language"><a href="#core-language" class="anchor"></a>Core language</h2><h3 id="type-expressions"><a href="#type-expressions" class="anchor"></a>Type expressions</h3><div class="odoc-spec"><div class="spec type anchored" id="type-core_type"><a href="#type-core_type" class="anchor"></a><code><span><span class="keyword">and</span> core_type</span><span> = </span><span>{</span></code><ol><li id="type-core_type.ptyp_desc" class="def record field anchored"><a href="#type-core_type.ptyp_desc" class="anchor"></a><code><span>ptyp_desc : <a href="#type-core_type_desc">core_type_desc</a>;</span></code></li><li id="type-core_type.ptyp_loc" class="def record field anchored"><a href="#type-core_type.ptyp_loc" class="anchor"></a><code><span>ptyp_loc : <a href="../Location/index.html#type-t">Location.t</a>;</span></code></li><li id="type-core_type.ptyp_loc_stack" class="def record field anchored"><a href="#type-core_type.ptyp_loc_stack" class="anchor"></a><code><span>ptyp_loc_stack : <a href="#type-location_stack">location_stack</a>;</span></code></li><li id="type-core_type.ptyp_attributes" class="def record field anchored"><a href="#type-core_type.ptyp_attributes" class="anchor"></a><code><span>ptyp_attributes : <a href="#type-attributes">attributes</a>;</span></code><div class="def-doc"><span class="comment-delim">(*</span><p><code>... [\@id1] [\@id2]</code></p><span class="comment-delim">*)</span></div></li></ol><code><span>}</span></code></div></div><div class="odoc-spec"><div class="spec type anchored" id="type-core_type_desc"><a href="#type-core_type_desc" class="anchor"></a><code><span><span class="keyword">and</span> core_type_desc</span><span> = </span></code><ol><li id="type-core_type_desc.Ptyp_any" class="def variant constructor anchored"><a href="#type-core_type_desc.Ptyp_any" class="anchor"></a><code><span>| </span><span><span class="constructor">Ptyp_any</span></span></code><div class="def-doc"><span class="comment-delim">(*</span><p><code>_</code></p><span class="comment-delim">*)</span></div></li><li id="type-core_type_desc.Ptyp_var" class="def variant constructor anchored"><a href="#type-core_type_desc.Ptyp_var" class="anchor"></a><code><span>| </span><span><span class="constructor">Ptyp_var</span> <span class="keyword">of</span> string</span></code><div class="def-doc"><span class="comment-delim">(*</span><p>A type variable such as <code>'a</code></p><span class="comment-delim">*)</span></div></li><li id="type-core_type_desc.Ptyp_arrow" class="def variant constructor anchored"><a href="#type-core_type_desc.Ptyp_arrow" class="anchor"></a><code><span>| </span><span><span class="constructor">Ptyp_arrow</span> <span class="keyword">of</span> <a href="../Asttypes/index.html#type-arg_label">Asttypes.arg_label</a> * <a href="#type-core_type">core_type</a> * <a href="#type-core_type">core_type</a></span></code><div class="def-doc"><span class="comment-delim">(*</span><p><code>Ptyp_arrow(lbl, T1, T2)</code> represents:</p><ul><li><code>T1 -&gt; T2</code> when <code>lbl</code> is <a href="../Asttypes/index.html#type-arg_label.Nolabel"><code>Nolabel</code></a>,</li><li><code>~l:T1 -&gt; T2</code> when <code>lbl</code> is <a href="../Asttypes/index.html#type-arg_label.Labelled"><code>Labelled</code></a>,</li><li><code>?l:T1 -&gt; T2</code> when <code>lbl</code> is <a href="../Asttypes/index.html#type-arg_label.Optional"><code>Optional</code></a>.</li></ul><span class="comment-delim">*)</span></div></li><li id="type-core_type_desc.Ptyp_tuple" class="def variant constructor anchored"><a href="#type-core_type_desc.Ptyp_tuple" class="anchor"></a><code><span>| </span><span><span class="constructor">Ptyp_tuple</span> <span class="keyword">of</span> <span><a href="#type-core_type">core_type</a> list</span></span></code><div class="def-doc"><span class="comment-delim">(*</span><p><code>Ptyp_tuple([T1 ; ... ; Tn])</code> represents a product type <code>T1 * ... * Tn</code>.</p><p>Invariant: <code>n &gt;= 2</code>.</p><span class="comment-delim">*)</span></div></li><li id="type-core_type_desc.Ptyp_constr" class="def variant constructor anchored"><a href="#type-core_type_desc.Ptyp_constr" class="anchor"></a><code><span>| </span><span><span class="constructor">Ptyp_constr</span> <span class="keyword">of</span> <span><a href="../Longident/index.html#type-t">Longident.t</a> <a href="../Asttypes/index.html#type-loc">Asttypes.loc</a></span> * <span><a href="#type-core_type">core_type</a> list</span></span></code><div class="def-doc"><span class="comment-delim">(*</span><p><code>Ptyp_constr(lident, l)</code> represents:</p><ul><li><code>tconstr</code> when <code>l=[]</code>,</li><li><code>T tconstr</code> when <code>l=[T]</code>,</li><li><code>(T1, ..., Tn) tconstr</code> when <code>l=[T1 ; ... ; Tn]</code>.</li></ul><span class="comment-delim">*)</span></div></li><li id="type-core_type_desc.Ptyp_object" class="def variant constructor anchored"><a href="#type-core_type_desc.Ptyp_object" class="anchor"></a><code><span>| </span><span><span class="constructor">Ptyp_object</span> <span class="keyword">of</span> <span><a href="#type-object_field">object_field</a> list</span> * <a href="../Asttypes/index.html#type-closed_flag">Asttypes.closed_flag</a></span></code><div class="def-doc"><span class="comment-delim">(*</span><p><code>Ptyp_object([ l1:T1; ...; ln:Tn ], flag)</code> represents:</p><ul><li><code>&lt; l1:T1; ...; ln:Tn &gt;</code> when <code>flag</code> is <a href="../Asttypes/index.html#type-closed_flag.Closed"><code>Closed</code></a>,</li><li><code>&lt; l1:T1; ...; ln:Tn; .. &gt;</code> when <code>flag</code> is <a href="../Asttypes/index.html#type-closed_flag.Open"><code>Open</code></a>.</li></ul><span class="comment-delim">*)</span></div></li><li id="type-core_type_desc.Ptyp_class" class="def variant constructor anchored"><a href="#type-core_type_desc.Ptyp_class" class="anchor"></a><code><span>| </span><span><span class="constructor">Ptyp_class</span> <span class="keyword">of</span> <span><a href="../Longident/index.html#type-t">Longident.t</a> <a href="../Asttypes/index.html#type-loc">Asttypes.loc</a></span> * <span><a href="#type-core_type">core_type</a> list</span></span></code><div class="def-doc"><span class="comment-delim">(*</span><p><code>Ptyp_class(tconstr, l)</code> represents:</p><ul><li><code>#tconstr</code> when <code>l=[]</code>,</li><li><code>T #tconstr</code> when <code>l=[T]</code>,</li><li><code>(T1, ..., Tn) #tconstr</code> when <code>l=[T1 ; ... ; Tn]</code>.</li></ul><span class="comment-delim">*)</span></div></li><li id="type-core_type_desc.Ptyp_alias" class="def variant constructor anchored"><a href="#type-core_type_desc.Ptyp_alias" class="anchor"></a><code><span>| </span><span><span class="constructor">Ptyp_alias</span> <span class="keyword">of</span> <a href="#type-core_type">core_type</a> * string</span></code><div class="def-doc"><span class="comment-delim">(*</span><p><code>T as 'a</code>.</p><span class="comment-delim">*)</span></div></li><li id="type-core_type_desc.Ptyp_variant" class="def variant constructor anchored"><a href="#type-core_type_desc.Ptyp_variant" class="anchor"></a><code><span>| </span><span><span class="constructor">Ptyp_variant</span> <span class="keyword">of</span> <span><a href="#type-row_field">row_field</a> list</span>
* <a href="../Asttypes/index.html#type-closed_flag">Asttypes.closed_flag</a>
* <span><span><a href="../Asttypes/index.html#type-label">Asttypes.label</a> list</span> option</span></span></code><div class="def-doc"><span class="comment-delim">(*</span><p><code>Ptyp_variant([`A;`B], flag, labels)</code> represents:</p><ul><li><code>[ `A|`B ]</code> when <code>flag</code> is <a href="../Asttypes/index.html#type-closed_flag.Closed"><code>Closed</code></a>, and <code>labels</code> is <code>None</code>,</li><li><code>[&gt; `A|`B ]</code> when <code>flag</code> is <a href="../Asttypes/index.html#type-closed_flag.Open"><code>Open</code></a>, and <code>labels</code> is <code>None</code>,</li><li><code>[&lt; `A|`B ]</code> when <code>flag</code> is <a href="../Asttypes/index.html#type-closed_flag.Closed"><code>Closed</code></a>, and <code>labels</code> is <code>Some []</code>,</li><li><code>[&lt; `A|`B &gt; `X `Y ]</code> when <code>flag</code> is <a href="../Asttypes/index.html#type-closed_flag.Closed"><code>Closed</code></a>, and <code>labels</code> is <code>Some [&quot;X&quot;;&quot;Y&quot;]</code>.</li></ul><span class="comment-delim">*)</span></div></li><li id="type-core_type_desc.Ptyp_poly" class="def variant constructor anchored"><a href="#type-core_type_desc.Ptyp_poly" class="anchor"></a><code><span>| </span><span><span class="constructor">Ptyp_poly</span> <span class="keyword">of</span> <span><span>string <a href="../Asttypes/index.html#type-loc">Asttypes.loc</a></span> list</span> * <a href="#type-core_type">core_type</a></span></code><div class="def-doc"><span class="comment-delim">(*</span><p><code>'a1 ... 'an. T</code></p><p>Can only appear in the following context:</p><ul><li><p>As the <a href="#type-core_type"><code>core_type</code></a> of a <a href="#type-pattern_desc.Ppat_constraint"><code>Ppat_constraint</code></a> node corresponding to a constraint on a let-binding:</p><pre class="language-ocaml"><code>let x : 'a1 ... 'an. T = e ...</code></pre></li></ul><ul><li>Under <a href="#type-class_field_kind.Cfk_virtual"><code>Cfk_virtual</code></a> for methods (not values).</li></ul><ul><li>As the <a href="#type-core_type"><code>core_type</code></a> of a <a href="#type-class_type_field_desc.Pctf_method"><code>Pctf_method</code></a> node.</li></ul><ul><li>As the <a href="#type-core_type"><code>core_type</code></a> of a <a href="#type-expression_desc.Pexp_poly"><code>Pexp_poly</code></a> node.</li></ul><ul><li>As the <a href="#type-label_declaration.pld_type"><code>pld_type</code></a> field of a <a href="#type-label_declaration"><code>label_declaration</code></a>.</li></ul><ul><li>As a <a href="#type-core_type"><code>core_type</code></a> of a <a href="#type-core_type_desc.Ptyp_object"><code>Ptyp_object</code></a> node.</li></ul><ul><li>As the <a href="#type-value_description.pval_type"><code>pval_type</code></a> field of a <a href="#type-value_description"><code>value_description</code></a>.</li></ul><span class="comment-delim">*)</span></div></li><li id="type-core_type_desc.Ptyp_package" class="def variant constructor anchored"><a href="#type-core_type_desc.Ptyp_package" class="anchor"></a><code><span>| </span><span><span class="constructor">Ptyp_package</span> <span class="keyword">of</span> <a href="#type-package_type">package_type</a></span></code><div class="def-doc"><span class="comment-delim">(*</span><p><code>(module S)</code>.</p><span class="comment-delim">*)</span></div></li><li id="type-core_type_desc.Ptyp_extension" class="def variant constructor anchored"><a href="#type-core_type_desc.Ptyp_extension" class="anchor"></a><code><span>| </span><span><span class="constructor">Ptyp_extension</span> <span class="keyword">of</span> <a href="#type-extension">extension</a></span></code><div class="def-doc"><span class="comment-delim">(*</span><p><code>[%id]</code>.</p><span class="comment-delim">*)</span></div></li></ol></div></div><div class="odoc-spec"><div class="spec type anchored" id="type-package_type"><a href="#type-package_type" class="anchor"></a><code><span><span class="keyword">and</span> package_type</span><span> =
<span><a href="../Longident/index.html#type-t">Longident.t</a> <a href="../Asttypes/index.html#type-loc">Asttypes.loc</a></span> * <span><span>(<span><a href="../Longident/index.html#type-t">Longident.t</a> <a href="../Asttypes/index.html#type-loc">Asttypes.loc</a></span> * <a href="#type-core_type">core_type</a>)</span> list</span></span></code></div><div class="spec-doc"><p>As <a href="#type-package_type"><code>package_type</code></a> typed values:</p><ul><li><code>(S, [])</code> represents <code>(module S)</code>,</li><li><code>(S, [(t1, T1) ; ... ; (tn, Tn)])</code> represents <code>(module S with type t1 = T1 and ... and tn = Tn)</code>.</li></ul></div></div><div class="odoc-spec"><div class="spec type anchored" id="type-row_field"><a href="#type-row_field" class="anchor"></a><code><span><span class="keyword">and</span> row_field</span><span> = </span><span>{</span></code><ol><li id="type-row_field.prf_desc" class="def record field anchored"><a href="#type-row_field.prf_desc" class="anchor"></a><code><span>prf_desc : <a href="#type-row_field_desc">row_field_desc</a>;</span></code></li><li id="type-row_field.prf_loc" class="def record field anchored"><a href="#type-row_field.prf_loc" class="anchor"></a><code><span>prf_loc : <a href="../Location/index.html#type-t">Location.t</a>;</span></code></li><li id="type-row_field.prf_attributes" class="def record field anchored"><a href="#type-row_field.prf_attributes" class="anchor"></a><code><span>prf_attributes : <a href="#type-attributes">attributes</a>;</span></code></li></ol><code><span>}</span></code></div></div><div class="odoc-spec"><div class="spec type anchored" id="type-row_field_desc"><a href="#type-row_field_desc" class="anchor"></a><code><span><span class="keyword">and</span> row_field_desc</span><span> = </span></code><ol><li id="type-row_field_desc.Rtag" class="def variant constructor anchored"><a href="#type-row_field_desc.Rtag" class="anchor"></a><code><span>| </span><span><span class="constructor">Rtag</span> <span class="keyword">of</span> <span><a href="../Asttypes/index.html#type-label">Asttypes.label</a> <a href="../Asttypes/index.html#type-loc">Asttypes.loc</a></span> * bool * <span><a href="#type-core_type">core_type</a> list</span></span></code><div class="def-doc"><span class="comment-delim">(*</span><p><code>Rtag(`A, b, l)</code> represents:</p><ul><li><code>`A</code> when <code>b</code> is <code>true</code> and <code>l</code> is <code>[]</code>,</li><li><code>`A of T</code> when <code>b</code> is <code>false</code> and <code>l</code> is <code>[T]</code>,</li><li><code>`A of T1 &amp; .. &amp; Tn</code> when <code>b</code> is <code>false</code> and <code>l</code> is <code>[T1;...Tn]</code>,</li><li><code>`A of &amp; T1 &amp; .. &amp; Tn</code> when <code>b</code> is <code>true</code> and <code>l</code> is <code>[T1;...Tn]</code>.</li></ul><ul><li>The <code>bool</code> field is true if the tag contains a constant (empty) constructor.</li><li><code>&amp;</code> occurs when several types are used for the same constructor (see 4.2 in the manual)</li></ul><span class="comment-delim">*)</span></div></li><li id="type-row_field_desc.Rinherit" class="def variant constructor anchored"><a href="#type-row_field_desc.Rinherit" class="anchor"></a><code><span>| </span><span><span class="constructor">Rinherit</span> <span class="keyword">of</span> <a href="#type-core_type">core_type</a></span></code><div class="def-doc"><span class="comment-delim">(*</span><p><code>[ | t ]</code></p><span class="comment-delim">*)</span></div></li></ol></div></div><div class="odoc-spec"><div class="spec type anchored" id="type-object_field"><a href="#type-object_field" class="anchor"></a><code><span><span class="keyword">and</span> object_field</span><span> = </span><span>{</span></code><ol><li id="type-object_field.pof_desc" class="def record field anchored"><a href="#type-object_field.pof_desc" class="anchor"></a><code><span>pof_desc : <a href="#type-object_field_desc">object_field_desc</a>;</span></code></li><li id="type-object_field.pof_loc" class="def record field anchored"><a href="#type-object_field.pof_loc" class="anchor"></a><code><span>pof_loc : <a href="../Location/index.html#type-t">Location.t</a>;</span></code></li><li id="type-object_field.pof_attributes" class="def record field anchored"><a href="#type-object_field.pof_attributes" class="anchor"></a><code><span>pof_attributes : <a href="#type-attributes">attributes</a>;</span></code></li></ol><code><span>}</span></code></div></div><div class="odoc-spec"><div class="spec type anchored" id="type-object_field_desc"><a href="#type-object_field_desc" class="anchor"></a><code><span><span class="keyword">and</span> object_field_desc</span><span> = </span></code><ol><li id="type-object_field_desc.Otag" class="def variant constructor anchored"><a href="#type-object_field_desc.Otag" class="anchor"></a><code><span>| </span><span><span class="constructor">Otag</span> <span class="keyword">of</span> <span><a href="../Asttypes/index.html#type-label">Asttypes.label</a> <a href="../Asttypes/index.html#type-loc">Asttypes.loc</a></span> * <a href="#type-core_type">core_type</a></span></code></li><li id="type-object_field_desc.Oinherit" class="def variant constructor anchored"><a href="#type-object_field_desc.Oinherit" class="anchor"></a><code><span>| </span><span><span class="constructor">Oinherit</span> <span class="keyword">of</span> <a href="#type-core_type">core_type</a></span></code></li></ol></div></div><h3 id="patterns"><a href="#patterns" class="anchor"></a>Patterns</h3><div class="odoc-spec"><div class="spec type anchored" id="type-pattern"><a href="#type-pattern" class="anchor"></a><code><span><span class="keyword">and</span> pattern</span><span> = </span><span>{</span></code><ol><li id="type-pattern.ppat_desc" class="def record field anchored"><a href="#type-pattern.ppat_desc" class="anchor"></a><code><span>ppat_desc : <a href="#type-pattern_desc">pattern_desc</a>;</span></code></li><li id="type-pattern.ppat_loc" class="def record field anchored"><a href="#type-pattern.ppat_loc" class="anchor"></a><code><span>ppat_loc : <a href="../Location/index.html#type-t">Location.t</a>;</span></code></li><li id="type-pattern.ppat_loc_stack" class="def record field anchored"><a href="#type-pattern.ppat_loc_stack" class="anchor"></a><code><span>ppat_loc_stack : <a href="#type-location_stack">location_stack</a>;</span></code></li><li id="type-pattern.ppat_attributes" class="def record field anchored"><a href="#type-pattern.ppat_attributes" class="anchor"></a><code><span>ppat_attributes : <a href="#type-attributes">attributes</a>;</span></code><div class="def-doc"><span class="comment-delim">(*</span><p><code>... [\@id1] [\@id2]</code></p><span class="comment-delim">*)</span></div></li></ol><code><span>}</span></code></div></div><div class="odoc-spec"><div class="spec type anchored" id="type-pattern_desc"><a href="#type-pattern_desc" class="anchor"></a><code><span><span class="keyword">and</span> pattern_desc</span><span> = </span></code><ol><li id="type-pattern_desc.Ppat_any" class="def variant constructor anchored"><a href="#type-pattern_desc.Ppat_any" class="anchor"></a><code><span>| </span><span><span class="constructor">Ppat_any</span></span></code><div class="def-doc"><span class="comment-delim">(*</span><p>The pattern <code>_</code>.</p><span class="comment-delim">*)</span></div></li><li id="type-pattern_desc.Ppat_var" class="def variant constructor anchored"><a href="#type-pattern_desc.Ppat_var" class="anchor"></a><code><span>| </span><span><span class="constructor">Ppat_var</span> <span class="keyword">of</span> <span>string <a href="../Asttypes/index.html#type-loc">Asttypes.loc</a></span></span></code><div class="def-doc"><span class="comment-delim">(*</span><p>A variable pattern such as <code>x</code></p><span class="comment-delim">*)</span></div></li><li id="type-pattern_desc.Ppat_alias" class="def variant constructor anchored"><a href="#type-pattern_desc.Ppat_alias" class="anchor"></a><code><span>| </span><span><span class="constructor">Ppat_alias</span> <span class="keyword">of</span> <a href="#type-pattern">pattern</a> * <span>string <a href="../Asttypes/index.html#type-loc">Asttypes.loc</a></span></span></code><div class="def-doc"><span class="comment-delim">(*</span><p>An alias pattern such as <code>P as 'a</code></p><span class="comment-delim">*)</span></div></li><li id="type-pattern_desc.Ppat_constant" class="def variant constructor anchored"><a href="#type-pattern_desc.Ppat_constant" class="anchor"></a><code><span>| </span><span><span class="constructor">Ppat_constant</span> <span class="keyword">of</span> <a href="#type-constant">constant</a></span></code><div class="def-doc"><span class="comment-delim">(*</span><p>Patterns such as <code>1</code>, <code>'a'</code>, <code>&quot;true&quot;</code>, <code>1.0</code>, <code>1l</code>, <code>1L</code>, <code>1n</code></p><span class="comment-delim">*)</span></div></li><li id="type-pattern_desc.Ppat_interval" class="def variant constructor anchored"><a href="#type-pattern_desc.Ppat_interval" class="anchor"></a><code><span>| </span><span><span class="constructor">Ppat_interval</span> <span class="keyword">of</span> <a href="#type-constant">constant</a> * <a href="#type-constant">constant</a></span></code><div class="def-doc"><span class="comment-delim">(*</span><p>Patterns such as <code>'a'..'z'</code>.</p><p>Other forms of interval are recognized by the parser but rejected by the type-checker.</p><span class="comment-delim">*)</span></div></li><li id="type-pattern_desc.Ppat_tuple" class="def variant constructor anchored"><a href="#type-pattern_desc.Ppat_tuple" class="anchor"></a><code><span>| </span><span><span class="constructor">Ppat_tuple</span> <span class="keyword">of</span> <span><a href="#type-pattern">pattern</a> list</span></span></code><div class="def-doc"><span class="comment-delim">(*</span><p>Patterns <code>(P1, ..., Pn)</code>.</p><p>Invariant: <code>n &gt;= 2</code></p><span class="comment-delim">*)</span></div></li><li id="type-pattern_desc.Ppat_construct" class="def variant constructor anchored"><a href="#type-pattern_desc.Ppat_construct" class="anchor"></a><code><span>| </span><span><span class="constructor">Ppat_construct</span> <span class="keyword">of</span> <span><a href="../Longident/index.html#type-t">Longident.t</a> <a href="../Asttypes/index.html#type-loc">Asttypes.loc</a></span>
* <span><span>(<span><span>string <a href="../Asttypes/index.html#type-loc">Asttypes.loc</a></span> list</span> * <a href="#type-pattern">pattern</a>)</span> option</span></span></code><div class="def-doc"><span class="comment-delim">(*</span><p><code>Ppat_construct(C, args)</code> represents:</p><ul><li><code>C</code> when <code>args</code> is <code>None</code>,</li><li><code>C P</code> when <code>args</code> is <code>Some ([], P)</code></li><li><code>C (P1, ..., Pn)</code> when <code>args</code> is <code>Some ([], Ppat_tuple [P1; ...; Pn])</code></li><li><code>C (type a b) P</code> when <code>args</code> is <code>Some ([a; b], P)</code></li></ul><span class="comment-delim">*)</span></div></li><li id="type-pattern_desc.Ppat_variant" class="def variant constructor anchored"><a href="#type-pattern_desc.Ppat_variant" class="anchor"></a><code><span>| </span><span><span class="constructor">Ppat_variant</span> <span class="keyword">of</span> <a href="../Asttypes/index.html#type-label">Asttypes.label</a> * <span><a href="#type-pattern">pattern</a> option</span></span></code><div class="def-doc"><span class="comment-delim">(*</span><p><code>Ppat_variant(`A, pat)</code> represents:</p><ul><li><code>`A</code> when <code>pat</code> is <code>None</code>,</li><li><code>`A P</code> when <code>pat</code> is <code>Some P</code></li></ul><span class="comment-delim">*)</span></div></li><li id="type-pattern_desc.Ppat_record" class="def variant constructor anchored"><a href="#type-pattern_desc.Ppat_record" class="anchor"></a><code><span>| </span><span><span class="constructor">Ppat_record</span> <span class="keyword">of</span> <span><span>(<span><a href="../Longident/index.html#type-t">Longident.t</a> <a href="../Asttypes/index.html#type-loc">Asttypes.loc</a></span> * <a href="#type-pattern">pattern</a>)</span> list</span> * <a href="../Asttypes/index.html#type-closed_flag">Asttypes.closed_flag</a></span></code><div class="def-doc"><span class="comment-delim">(*</span><p><code>Ppat_record([(l1, P1) ; ... ; (ln, Pn)], flag)</code> represents:</p><ul><li><code>{ l1=P1; ...; ln=Pn }</code> when <code>flag</code> is <a href="../Asttypes/index.html#type-closed_flag.Closed"><code>Closed</code></a></li><li><code>{ l1=P1; ...; ln=Pn; _}</code> when <code>flag</code> is <a href="../Asttypes/index.html#type-closed_flag.Open"><code>Open</code></a></li></ul><p>Invariant: <code>n &gt; 0</code></p><span class="comment-delim">*)</span></div></li><li id="type-pattern_desc.Ppat_array" class="def variant constructor anchored"><a href="#type-pattern_desc.Ppat_array" class="anchor"></a><code><span>| </span><span><span class="constructor">Ppat_array</span> <span class="keyword">of</span> <span><a href="#type-pattern">pattern</a> list</span></span></code><div class="def-doc"><span class="comment-delim">(*</span><p>Pattern <code>[| P1; ...; Pn |]</code></p><span class="comment-delim">*)</span></div></li><li id="type-pattern_desc.Ppat_or" class="def variant constructor anchored"><a href="#type-pattern_desc.Ppat_or" class="anchor"></a><code><span>| </span><span><span class="constructor">Ppat_or</span> <span class="keyword">of</span> <a href="#type-pattern">pattern</a> * <a href="#type-pattern">pattern</a></span></code><div class="def-doc"><span class="comment-delim">(*</span><p>Pattern <code>P1 | P2</code></p><span class="comment-delim">*)</span></div></li><li id="type-pattern_desc.Ppat_constraint" class="def variant constructor anchored"><a href="#type-pattern_desc.Ppat_constraint" class="anchor"></a><code><span>| </span><span><span class="constructor">Ppat_constraint</span> <span class="keyword">of</span> <a href="#type-pattern">pattern</a> * <a href="#type-core_type">core_type</a></span></code><div class="def-doc"><span class="comment-delim">(*</span><p>Pattern <code>(P : T)</code></p><span class="comment-delim">*)</span></div></li><li id="type-pattern_desc.Ppat_type" class="def variant constructor anchored"><a href="#type-pattern_desc.Ppat_type" class="anchor"></a><code><span>| </span><span><span class="constructor">Ppat_type</span> <span class="keyword">of</span> <span><a href="../Longident/index.html#type-t">Longident.t</a> <a href="../Asttypes/index.html#type-loc">Asttypes.loc</a></span></span></code><div class="def-doc"><span class="comment-delim">(*</span><p>Pattern <code>#tconst</code></p><span class="comment-delim">*)</span></div></li><li id="type-pattern_desc.Ppat_lazy" class="def variant constructor anchored"><a href="#type-pattern_desc.Ppat_lazy" class="anchor"></a><code><span>| </span><span><span class="constructor">Ppat_lazy</span> <span class="keyword">of</span> <a href="#type-pattern">pattern</a></span></code><div class="def-doc"><span class="comment-delim">(*</span><p>Pattern <code>lazy P</code></p><span class="comment-delim">*)</span></div></li><li id="type-pattern_desc.Ppat_unpack" class="def variant constructor anchored"><a href="#type-pattern_desc.Ppat_unpack" class="anchor"></a><code><span>| </span><span><span class="constructor">Ppat_unpack</span> <span class="keyword">of</span> <span><span>string option</span> <a href="../Asttypes/index.html#type-loc">Asttypes.loc</a></span></span></code><div class="def-doc"><span class="comment-delim">(*</span><p><code>Ppat_unpack(s)</code> represents:</p><ul><li><code>(module P)</code> when <code>s</code> is <code>Some &quot;P&quot;</code></li><li><code>(module _)</code> when <code>s</code> is <code>None</code></li></ul><p>Note: <code>(module P : S)</code> is represented as <code>Ppat_constraint(Ppat_unpack(Some &quot;P&quot;), Ptyp_package S)</code></p><span class="comment-delim">*)</span></div></li><li id="type-pattern_desc.Ppat_exception" class="def variant constructor anchored"><a href="#type-pattern_desc.Ppat_exception" class="anchor"></a><code><span>| </span><span><span class="constructor">Ppat_exception</span> <span class="keyword">of</span> <a href="#type-pattern">pattern</a></span></code><div class="def-doc"><span class="comment-delim">(*</span><p>Pattern <code>exception P</code></p><span class="comment-delim">*)</span></div></li><li id="type-pattern_desc.Ppat_extension" class="def variant constructor anchored"><a href="#type-pattern_desc.Ppat_extension" class="anchor"></a><code><span>| </span><span><span class="constructor">Ppat_extension</span> <span class="keyword">of</span> <a href="#type-extension">extension</a></span></code><div class="def-doc"><span class="comment-delim">(*</span><p>Pattern <code>[%id]</code></p><span class="comment-delim">*)</span></div></li><li id="type-pattern_desc.Ppat_open" class="def variant constructor anchored"><a href="#type-pattern_desc.Ppat_open" class="anchor"></a><code><span>| </span><span><span class="constructor">Ppat_open</span> <span class="keyword">of</span> <span><a href="../Longident/index.html#type-t">Longident.t</a> <a href="../Asttypes/index.html#type-loc">Asttypes.loc</a></span> * <a href="#type-pattern">pattern</a></span></code><div class="def-doc"><span class="comment-delim">(*</span><p>Pattern <code>M.(P)</code></p><span class="comment-delim">*)</span></div></li></ol></div></div><h3 id="value-expressions"><a href="#value-expressions" class="anchor"></a>Value expressions</h3><div class="odoc-spec"><div class="spec type anchored" id="type-expression"><a href="#type-expression" class="anchor"></a><code><span><span class="keyword">and</span> expression</span><span> = </span><span>{</span></code><ol><li id="type-expression.pexp_desc" class="def record field anchored"><a href="#type-expression.pexp_desc" class="anchor"></a><code><span>pexp_desc : <a href="#type-expression_desc">expression_desc</a>;</span></code></li><li id="type-expression.pexp_loc" class="def record field anchored"><a href="#type-expression.pexp_loc" class="anchor"></a><code><span>pexp_loc : <a href="../Location/index.html#type-t">Location.t</a>;</span></code></li><li id="type-expression.pexp_loc_stack" class="def record field anchored"><a href="#type-expression.pexp_loc_stack" class="anchor"></a><code><span>pexp_loc_stack : <a href="#type-location_stack">location_stack</a>;</span></code></li><li id="type-expression.pexp_attributes" class="def record field anchored"><a href="#type-expression.pexp_attributes" class="anchor"></a><code><span>pexp_attributes : <a href="#type-attributes">attributes</a>;</span></code><div class="def-doc"><span class="comment-delim">(*</span><p><code>... [\@id1] [\@id2]</code></p><span class="comment-delim">*)</span></div></li></ol><code><span>}</span></code></div></div><div class="odoc-spec"><div class="spec type anchored" id="type-expression_desc"><a href="#type-expression_desc" class="anchor"></a><code><span><span class="keyword">and</span> expression_desc</span><span> = </span></code><ol><li id="type-expression_desc.Pexp_ident" class="def variant constructor anchored"><a href="#type-expression_desc.Pexp_ident" class="anchor"></a><code><span>| </span><span><span class="constructor">Pexp_ident</span> <span class="keyword">of</span> <span><a href="../Longident/index.html#type-t">Longident.t</a> <a href="../Asttypes/index.html#type-loc">Asttypes.loc</a></span></span></code><div class="def-doc"><span class="comment-delim">(*</span><p>Identifiers such as <code>x</code> and <code>M.x</code></p><span class="comment-delim">*)</span></div></li><li id="type-expression_desc.Pexp_constant" class="def variant constructor anchored"><a href="#type-expression_desc.Pexp_constant" class="anchor"></a><code><span>| </span><span><span class="constructor">Pexp_constant</span> <span class="keyword">of</span> <a href="#type-constant">constant</a></span></code><div class="def-doc"><span class="comment-delim">(*</span><p>Expressions constant such as <code>1</code>, <code>'a'</code>, <code>&quot;true&quot;</code>, <code>1.0</code>, <code>1l</code>, <code>1L</code>, <code>1n</code></p><span class="comment-delim">*)</span></div></li><li id="type-expression_desc.Pexp_let" class="def variant constructor anchored"><a href="#type-expression_desc.Pexp_let" class="anchor"></a><code><span>| </span><span><span class="constructor">Pexp_let</span> <span class="keyword">of</span> <a href="../Asttypes/index.html#type-rec_flag">Asttypes.rec_flag</a> * <span><a href="#type-value_binding">value_binding</a> list</span> * <a href="#type-expression">expression</a></span></code><div class="def-doc"><span class="comment-delim">(*</span><p><code>Pexp_let(flag, [(P1,E1) ; ... ; (Pn,En)], E)</code> represents:</p><ul><li><code>let P1 = E1 and ... and Pn = EN in E</code> when <code>flag</code> is <a href="../Asttypes/index.html#type-rec_flag.Nonrecursive"><code>Nonrecursive</code></a>,</li><li><code>let rec P1 = E1 and ... and Pn = EN in E</code> when <code>flag</code> is <a href="../Asttypes/index.html#type-rec_flag.Recursive"><code>Recursive</code></a>.</li></ul><span class="comment-delim">*)</span></div></li><li id="type-expression_desc.Pexp_function" class="def variant constructor anchored"><a href="#type-expression_desc.Pexp_function" class="anchor"></a><code><span>| </span><span><span class="constructor">Pexp_function</span> <span class="keyword">of</span> <span><a href="#type-case">case</a> list</span></span></code><div class="def-doc"><span class="comment-delim">(*</span><p><code>function P1 -&gt; E1 | ... | Pn -&gt; En</code></p><span class="comment-delim">*)</span></div></li><li id="type-expression_desc.Pexp_fun" class="def variant constructor anchored"><a href="#type-expression_desc.Pexp_fun" class="anchor"></a><code><span>| </span><span><span class="constructor">Pexp_fun</span> <span class="keyword">of</span> <a href="../Asttypes/index.html#type-arg_label">Asttypes.arg_label</a> * <span><a href="#type-expression">expression</a> option</span> * <a href="#type-pattern">pattern</a> * <a href="#type-expression">expression</a></span></code><div class="def-doc"><span class="comment-delim">(*</span><p><code>Pexp_fun(lbl, exp0, P, E1)</code> represents:</p><ul><li><code>fun P -&gt; E1</code> when <code>lbl</code> is <a href="../Asttypes/index.html#type-arg_label.Nolabel"><code>Nolabel</code></a> and <code>exp0</code> is <code>None</code></li><li><code>fun ~l:P -&gt; E1</code> when <code>lbl</code> is <a href="../Asttypes/index.html#type-arg_label.Labelled"><code>Labelled l</code></a> and <code>exp0</code> is <code>None</code></li><li><code>fun ?l:P -&gt; E1</code> when <code>lbl</code> is <a href="../Asttypes/index.html#type-arg_label.Optional"><code>Optional l</code></a> and <code>exp0</code> is <code>None</code></li><li><code>fun ?l:(P = E0) -&gt; E1</code> when <code>lbl</code> is <a href="../Asttypes/index.html#type-arg_label.Optional"><code>Optional l</code></a> and <code>exp0</code> is <code>Some E0</code></li></ul><p>Notes:</p><ul><li>If <code>E0</code> is provided, only <a href="../Asttypes/index.html#type-arg_label.Optional"><code>Optional</code></a> is allowed.</li><li><code>fun P1 P2 .. Pn -&gt; E1</code> is represented as nested <a href="#type-expression_desc.Pexp_fun"><code>Pexp_fun</code></a>.</li><li><code>let f P = E</code> is represented using <a href="#type-expression_desc.Pexp_fun"><code>Pexp_fun</code></a>.</li></ul><span class="comment-delim">*)</span></div></li><li id="type-expression_desc.Pexp_apply" class="def variant constructor anchored"><a href="#type-expression_desc.Pexp_apply" class="anchor"></a><code><span>| </span><span><span class="constructor">Pexp_apply</span> <span class="keyword">of</span> <a href="#type-expression">expression</a> * <span><span>(<a href="../Asttypes/index.html#type-arg_label">Asttypes.arg_label</a> * <a href="#type-expression">expression</a>)</span> list</span></span></code><div class="def-doc"><span class="comment-delim">(*</span><p><code>Pexp_apply(E0, [(l1, E1) ; ... ; (ln, En)])</code> represents <code>E0 ~l1:E1 ... ~ln:En</code></p><p><code>li</code> can be <a href="../Asttypes/index.html#type-arg_label.Nolabel"><code>Nolabel</code></a> (non labeled argument), <a href="../Asttypes/index.html#type-arg_label.Labelled"><code>Labelled</code></a> (labelled arguments) or <a href="../Asttypes/index.html#type-arg_label.Optional"><code>Optional</code></a> (optional argument).</p><p>Invariant: <code>n &gt; 0</code></p><span class="comment-delim">*)</span></div></li><li id="type-expression_desc.Pexp_match" class="def variant constructor anchored"><a href="#type-expression_desc.Pexp_match" class="anchor"></a><code><span>| </span><span><span class="constructor">Pexp_match</span> <span class="keyword">of</span> <a href="#type-expression">expression</a> * <span><a href="#type-case">case</a> list</span></span></code><div class="def-doc"><span class="comment-delim">(*</span><p><code>match E0 with P1 -&gt; E1 | ... | Pn -&gt; En</code></p><span class="comment-delim">*)</span></div></li><li id="type-expression_desc.Pexp_try" class="def variant constructor anchored"><a href="#type-expression_desc.Pexp_try" class="anchor"></a><code><span>| </span><span><span class="constructor">Pexp_try</span> <span class="keyword">of</span> <a href="#type-expression">expression</a> * <span><a href="#type-case">case</a> list</span></span></code><div class="def-doc"><span class="comment-delim">(*</span><p><code>try E0 with P1 -&gt; E1 | ... | Pn -&gt; En</code></p><span class="comment-delim">*)</span></div></li><li id="type-expression_desc.Pexp_tuple" class="def variant constructor anchored"><a href="#type-expression_desc.Pexp_tuple" class="anchor"></a><code><span>| </span><span><span class="constructor">Pexp_tuple</span> <span class="keyword">of</span> <span><a href="#type-expression">expression</a> list</span></span></code><div class="def-doc"><span class="comment-delim">(*</span><p>Expressions <code>(E1, ..., En)</code></p><p>Invariant: <code>n &gt;= 2</code></p><span class="comment-delim">*)</span></div></li><li id="type-expression_desc.Pexp_construct" class="def variant constructor anchored"><a href="#type-expression_desc.Pexp_construct" class="anchor"></a><code><span>| </span><span><span class="constructor">Pexp_construct</span> <span class="keyword">of</span> <span><a href="../Longident/index.html#type-t">Longident.t</a> <a href="../Asttypes/index.html#type-loc">Asttypes.loc</a></span> * <span><a href="#type-expression">expression</a> option</span></span></code><div class="def-doc"><span class="comment-delim">(*</span><p><code>Pexp_construct(C, exp)</code> represents:</p><ul><li><code>C</code> when <code>exp</code> is <code>None</code>,</li><li><code>C E</code> when <code>exp</code> is <code>Some E</code>,</li><li><code>C (E1, ..., En)</code> when <code>exp</code> is <code>Some (Pexp_tuple[E1;...;En])</code></li></ul><span class="comment-delim">*)</span></div></li><li id="type-expression_desc.Pexp_variant" class="def variant constructor anchored"><a href="#type-expression_desc.Pexp_variant" class="anchor"></a><code><span>| </span><span><span class="constructor">Pexp_variant</span> <span class="keyword">of</span> <a href="../Asttypes/index.html#type-label">Asttypes.label</a> * <span><a href="#type-expression">expression</a> option</span></span></code><div class="def-doc"><span class="comment-delim">(*</span><p><code>Pexp_variant(`A, exp)</code> represents</p><ul><li><code>`A</code> when <code>exp</code> is <code>None</code></li><li><code>`A E</code> when <code>exp</code> is <code>Some E</code></li></ul><span class="comment-delim">*)</span></div></li><li id="type-expression_desc.Pexp_record" class="def variant constructor anchored"><a href="#type-expression_desc.Pexp_record" class="anchor"></a><code><span>| </span><span><span class="constructor">Pexp_record</span> <span class="keyword">of</span> <span><span>(<span><a href="../Longident/index.html#type-t">Longident.t</a> <a href="../Asttypes/index.html#type-loc">Asttypes.loc</a></span> * <a href="#type-expression">expression</a>)</span> list</span> * <span><a href="#type-expression">expression</a> option</span></span></code><div class="def-doc"><span class="comment-delim">(*</span><p><code>Pexp_record([(l1,P1) ; ... ; (ln,Pn)], exp0)</code> represents</p><ul><li><code>{ l1=P1; ...; ln=Pn }</code> when <code>exp0</code> is <code>None</code></li><li><code>{ E0 with l1=P1; ...; ln=Pn }</code> when <code>exp0</code> is <code>Some E0</code></li></ul><p>Invariant: <code>n &gt; 0</code></p><span class="comment-delim">*)</span></div></li><li id="type-expression_desc.Pexp_field" class="def variant constructor anchored"><a href="#type-expression_desc.Pexp_field" class="anchor"></a><code><span>| </span><span><span class="constructor">Pexp_field</span> <span class="keyword">of</span> <a href="#type-expression">expression</a> * <span><a href="../Longident/index.html#type-t">Longident.t</a> <a href="../Asttypes/index.html#type-loc">Asttypes.loc</a></span></span></code><div class="def-doc"><span class="comment-delim">(*</span><p><code>E.l</code></p><span class="comment-delim">*)</span></div></li><li id="type-expression_desc.Pexp_setfield" class="def variant constructor anchored"><a href="#type-expression_desc.Pexp_setfield" class="anchor"></a><code><span>| </span><span><span class="constructor">Pexp_setfield</span> <span class="keyword">of</span> <a href="#type-expression">expression</a> * <span><a href="../Longident/index.html#type-t">Longident.t</a> <a href="../Asttypes/index.html#type-loc">Asttypes.loc</a></span> * <a href="#type-expression">expression</a></span></code><div class="def-doc"><span class="comment-delim">(*</span><p><code>E1.l &lt;- E2</code></p><span class="comment-delim">*)</span></div></li><li id="type-expression_desc.Pexp_array" class="def variant constructor anchored"><a href="#type-expression_desc.Pexp_array" class="anchor"></a><code><span>| </span><span><span class="constructor">Pexp_array</span> <span class="keyword">of</span> <span><a href="#type-expression">expression</a> list</span></span></code><div class="def-doc"><span class="comment-delim">(*</span><p><code>[| E1; ...; En |]</code></p><span class="comment-delim">*)</span></div></li><li id="type-expression_desc.Pexp_ifthenelse" class="def variant constructor anchored"><a href="#type-expression_desc.Pexp_ifthenelse" class="anchor"></a><code><span>| </span><span><span class="constructor">Pexp_ifthenelse</span> <span class="keyword">of</span> <a href="#type-expression">expression</a> * <a href="#type-expression">expression</a> * <span><a href="#type-expression">expression</a> option</span></span></code><div class="def-doc"><span class="comment-delim">(*</span><p><code>if E1 then E2 else E3</code></p><span class="comment-delim">*)</span></div></li><li id="type-expression_desc.Pexp_sequence" class="def variant constructor anchored"><a href="#type-expression_desc.Pexp_sequence" class="anchor"></a><code><span>| </span><span><span class="constructor">Pexp_sequence</span> <span class="keyword">of</span> <a href="#type-expression">expression</a> * <a href="#type-expression">expression</a></span></code><div class="def-doc"><span class="comment-delim">(*</span><p><code>E1; E2</code></p><span class="comment-delim">*)</span></div></li><li id="type-expression_desc.Pexp_while" class="def variant constructor anchored"><a href="#type-expression_desc.Pexp_while" class="anchor"></a><code><span>| </span><span><span class="constructor">Pexp_while</span> <span class="keyword">of</span> <a href="#type-expression">expression</a> * <a href="#type-expression">expression</a></span></code><div class="def-doc"><span class="comment-delim">(*</span><p><code>while E1 do E2 done</code></p><span class="comment-delim">*)</span></div></li><li id="type-expression_desc.Pexp_for" class="def variant constructor anchored"><a href="#type-expression_desc.Pexp_for" class="anchor"></a><code><span>| </span><span><span class="constructor">Pexp_for</span> <span class="keyword">of</span> <a href="#type-pattern">pattern</a>
* <a href="#type-expression">expression</a>
* <a href="#type-expression">expression</a>
* <a href="../Asttypes/index.html#type-direction_flag">Asttypes.direction_flag</a>
* <a href="#type-expression">expression</a></span></code><div class="def-doc"><span class="comment-delim">(*</span><p><code>Pexp_for(i, E1, E2, direction, E3)</code> represents:</p><ul><li><code>for i = E1 to E2 do E3 done</code> when <code>direction</code> is <a href="../Asttypes/index.html#type-direction_flag.Upto"><code>Upto</code></a></li><li><code>for i = E1 downto E2 do E3 done</code> when <code>direction</code> is <a href="../Asttypes/index.html#type-direction_flag.Downto"><code>Downto</code></a></li></ul><span class="comment-delim">*)</span></div></li><li id="type-expression_desc.Pexp_constraint" class="def variant constructor anchored"><a href="#type-expression_desc.Pexp_constraint" class="anchor"></a><code><span>| </span><span><span class="constructor">Pexp_constraint</span> <span class="keyword">of</span> <a href="#type-expression">expression</a> * <a href="#type-core_type">core_type</a></span></code><div class="def-doc"><span class="comment-delim">(*</span><p><code>(E : T)</code></p><span class="comment-delim">*)</span></div></li><li id="type-expression_desc.Pexp_coerce" class="def variant constructor anchored"><a href="#type-expression_desc.Pexp_coerce" class="anchor"></a><code><span>| </span><span><span class="constructor">Pexp_coerce</span> <span class="keyword">of</span> <a href="#type-expression">expression</a> * <span><a href="#type-core_type">core_type</a> option</span> * <a href="#type-core_type">core_type</a></span></code><div class="def-doc"><span class="comment-delim">(*</span><p><code>Pexp_coerce(E, from, T)</code> represents</p><ul><li><code>(E :&gt; T)</code> when <code>from</code> is <code>None</code>,</li><li><code>(E : T0 :&gt; T)</code> when <code>from</code> is <code>Some T0</code>.</li></ul><span class="comment-delim">*)</span></div></li><li id="type-expression_desc.Pexp_send" class="def variant constructor anchored"><a href="#type-expression_desc.Pexp_send" class="anchor"></a><code><span>| </span><span><span class="constructor">Pexp_send</span> <span class="keyword">of</span> <a href="#type-expression">expression</a> * <span><a href="../Asttypes/index.html#type-label">Asttypes.label</a> <a href="../Asttypes/index.html#type-loc">Asttypes.loc</a></span></span></code><div class="def-doc"><span class="comment-delim">(*</span><p><code>E # m</code></p><span class="comment-delim">*)</span></div></li><li id="type-expression_desc.Pexp_new" class="def variant constructor anchored"><a href="#type-expression_desc.Pexp_new" class="anchor"></a><code><span>| </span><span><span class="constructor">Pexp_new</span> <span class="keyword">of</span> <span><a href="../Longident/index.html#type-t">Longident.t</a> <a href="../Asttypes/index.html#type-loc">Asttypes.loc</a></span></span></code><div class="def-doc"><span class="comment-delim">(*</span><p><code>new M.c</code></p><span class="comment-delim">*)</span></div></li><li id="type-expression_desc.Pexp_setinstvar" class="def variant constructor anchored"><a href="#type-expression_desc.Pexp_setinstvar" class="anchor"></a><code><span>| </span><span><span class="constructor">Pexp_setinstvar</span> <span class="keyword">of</span> <span><a href="../Asttypes/index.html#type-label">Asttypes.label</a> <a href="../Asttypes/index.html#type-loc">Asttypes.loc</a></span> * <a href="#type-expression">expression</a></span></code><div class="def-doc"><span class="comment-delim">(*</span><p><code>x &lt;- 2</code></p><span class="comment-delim">*)</span></div></li><li id="type-expression_desc.Pexp_override" class="def variant constructor anchored"><a href="#type-expression_desc.Pexp_override" class="anchor"></a><code><span>| </span><span><span class="constructor">Pexp_override</span> <span class="keyword">of</span> <span><span>(<span><a href="../Asttypes/index.html#type-label">Asttypes.label</a> <a href="../Asttypes/index.html#type-loc">Asttypes.loc</a></span> * <a href="#type-expression">expression</a>)</span> list</span></span></code><div class="def-doc"><span class="comment-delim">(*</span><p><code>{&lt; x1 = E1; ...; xn = En &gt;}</code></p><span class="comment-delim">*)</span></div></li><li id="type-expression_desc.Pexp_letmodule" class="def variant constructor anchored"><a href="#type-expression_desc.Pexp_letmodule" class="anchor"></a><code><span>| </span><span><span class="constructor">Pexp_letmodule</span> <span class="keyword">of</span> <span><span>string option</span> <a href="../Asttypes/index.html#type-loc">Asttypes.loc</a></span> * <a href="#type-module_expr">module_expr</a> * <a href="#type-expression">expression</a></span></code><div class="def-doc"><span class="comment-delim">(*</span><p><code>let module M = ME in E</code></p><span class="comment-delim">*)</span></div></li><li id="type-expression_desc.Pexp_letexception" class="def variant constructor anchored"><a href="#type-expression_desc.Pexp_letexception" class="anchor"></a><code><span>| </span><span><span class="constructor">Pexp_letexception</span> <span class="keyword">of</span> <a href="#type-extension_constructor">extension_constructor</a> * <a href="#type-expression">expression</a></span></code><div class="def-doc"><span class="comment-delim">(*</span><p><code>let exception C in E</code></p><span class="comment-delim">*)</span></div></li><li id="type-expression_desc.Pexp_assert" class="def variant constructor anchored"><a href="#type-expression_desc.Pexp_assert" class="anchor"></a><code><span>| </span><span><span class="constructor">Pexp_assert</span> <span class="keyword">of</span> <a href="#type-expression">expression</a></span></code><div class="def-doc"><span class="comment-delim">(*</span><p><code>assert E</code>.</p><p>Note: <code>assert false</code> is treated in a special way by the type-checker.</p><span class="comment-delim">*)</span></div></li><li id="type-expression_desc.Pexp_lazy" class="def variant constructor anchored"><a href="#type-expression_desc.Pexp_lazy" class="anchor"></a><code><span>| </span><span><span class="constructor">Pexp_lazy</span> <span class="keyword">of</span> <a href="#type-expression">expression</a></span></code><div class="def-doc"><span class="comment-delim">(*</span><p><code>lazy E</code></p><span class="comment-delim">*)</span></div></li><li id="type-expression_desc.Pexp_poly" class="def variant constructor anchored"><a href="#type-expression_desc.Pexp_poly" class="anchor"></a><code><span>| </span><span><span class="constructor">Pexp_poly</span> <span class="keyword">of</span> <a href="#type-expression">expression</a> * <span><a href="#type-core_type">core_type</a> option</span></span></code><div class="def-doc"><span class="comment-delim">(*</span><p>Used for method bodies.</p><p>Can only be used as the expression under <a href="#type-class_field_kind.Cfk_concrete"><code>Cfk_concrete</code></a> for methods (not values).</p><span class="comment-delim">*)</span></div></li><li id="type-expression_desc.Pexp_object" class="def variant constructor anchored"><a href="#type-expression_desc.Pexp_object" class="anchor"></a><code><span>| </span><span><span class="constructor">Pexp_object</span> <span class="keyword">of</span> <a href="#type-class_structure">class_structure</a></span></code><div class="def-doc"><span class="comment-delim">(*</span><p><code>object ... end</code></p><span class="comment-delim">*)</span></div></li><li id="type-expression_desc.Pexp_newtype" class="def variant constructor anchored"><a href="#type-expression_desc.Pexp_newtype" class="anchor"></a><code><span>| </span><span><span class="constructor">Pexp_newtype</span> <span class="keyword">of</span> <span>string <a href="../Asttypes/index.html#type-loc">Asttypes.loc</a></span> * <a href="#type-expression">expression</a></span></code><div class="def-doc"><span class="comment-delim">(*</span><p><code>fun (type t) -&gt; E</code></p><span class="comment-delim">*)</span></div></li><li id="type-expression_desc.Pexp_pack" class="def variant constructor anchored"><a href="#type-expression_desc.Pexp_pack" class="anchor"></a><code><span>| </span><span><span class="constructor">Pexp_pack</span> <span class="keyword">of</span> <a href="#type-module_expr">module_expr</a></span></code><div class="def-doc"><span class="comment-delim">(*</span><p><code>(module ME)</code>.</p><p><code>(module ME : S)</code> is represented as <code>Pexp_constraint(Pexp_pack ME, Ptyp_package S)</code></p><span class="comment-delim">*)</span></div></li><li id="type-expression_desc.Pexp_open" class="def variant constructor anchored"><a href="#type-expression_desc.Pexp_open" class="anchor"></a><code><span>| </span><span><span class="constructor">Pexp_open</span> <span class="keyword">of</span> <a href="#type-open_declaration">open_declaration</a> * <a href="#type-expression">expression</a></span></code><div class="def-doc"><span class="comment-delim">(*</span><ul><li><code>M.(E)</code></li><li><code>let open M in E</code></li><li><code>let open! M in E</code></li></ul><span class="comment-delim">*)</span></div></li><li id="type-expression_desc.Pexp_letop" class="def variant constructor anchored"><a href="#type-expression_desc.Pexp_letop" class="anchor"></a><code><span>| </span><span><span class="constructor">Pexp_letop</span> <span class="keyword">of</span> <a href="#type-letop">letop</a></span></code><div class="def-doc"><span class="comment-delim">(*</span><ul><li><code>let* P = E0 in E1</code></li><li><code>let* P0 = E00 and* P1 = E01 in E1</code></li></ul><span class="comment-delim">*)</span></div></li><li id="type-expression_desc.Pexp_extension" class="def variant constructor anchored"><a href="#type-expression_desc.Pexp_extension" class="anchor"></a><code><span>| </span><span><span class="constructor">Pexp_extension</span> <span class="keyword">of</span> <a href="#type-extension">extension</a></span></code><div class="def-doc"><span class="comment-delim">(*</span><p><code>[%id]</code></p><span class="comment-delim">*)</span></div></li><li id="type-expression_desc.Pexp_unreachable" class="def variant constructor anchored"><a href="#type-expression_desc.Pexp_unreachable" class="anchor"></a><code><span>| </span><span><span class="constructor">Pexp_unreachable</span></span></code><div class="def-doc"><span class="comment-delim">(*</span><p><code>.</code></p><span class="comment-delim">*)</span></div></li></ol></div></div><div class="odoc-spec"><div class="spec type anchored" id="type-case"><a href="#type-case" class="anchor"></a><code><span><span class="keyword">and</span> case</span><span> = </span><span>{</span></code><ol><li id="type-case.pc_lhs" class="def record field anchored"><a href="#type-case.pc_lhs" class="anchor"></a><code><span>pc_lhs : <a href="#type-pattern">pattern</a>;</span></code></li><li id="type-case.pc_guard" class="def record field anchored"><a href="#type-case.pc_guard" class="anchor"></a><code><span>pc_guard : <span><a href="#type-expression">expression</a> option</span>;</span></code></li><li id="type-case.pc_rhs" class="def record field anchored"><a href="#type-case.pc_rhs" class="anchor"></a><code><span>pc_rhs : <a href="#type-expression">expression</a>;</span></code></li></ol><code><span>}</span></code></div><div class="spec-doc"><p>Values of type <a href="#type-case"><code>case</code></a> represents <code>(P -&gt; E)</code> or <code>(P when E0 -&gt; E)</code></p></div></div><div class="odoc-spec"><div class="spec type anchored" id="type-letop"><a href="#type-letop" class="anchor"></a><code><span><span class="keyword">and</span> letop</span><span> = </span><span>{</span></code><ol><li id="type-letop.let_" class="def record field anchored"><a href="#type-letop.let_" class="anchor"></a><code><span>let_ : <a href="#type-binding_op">binding_op</a>;</span></code></li><li id="type-letop.ands" class="def record field anchored"><a href="#type-letop.ands" class="anchor"></a><code><span>ands : <span><a href="#type-binding_op">binding_op</a> list</span>;</span></code></li><li id="type-letop.body" class="def record field anchored"><a href="#type-letop.body" class="anchor"></a><code><span>body : <a href="#type-expression">expression</a>;</span></code></li></ol><code><span>}</span></code></div></div><div class="odoc-spec"><div class="spec type anchored" id="type-binding_op"><a href="#type-binding_op" class="anchor"></a><code><span><span class="keyword">and</span> binding_op</span><span> = </span><span>{</span></code><ol><li id="type-binding_op.pbop_op" class="def record field anchored"><a href="#type-binding_op.pbop_op" class="anchor"></a><code><span>pbop_op : <span>string <a href="../Asttypes/index.html#type-loc">Asttypes.loc</a></span>;</span></code></li><li id="type-binding_op.pbop_pat" class="def record field anchored"><a href="#type-binding_op.pbop_pat" class="anchor"></a><code><span>pbop_pat : <a href="#type-pattern">pattern</a>;</span></code></li><li id="type-binding_op.pbop_exp" class="def record field anchored"><a href="#type-binding_op.pbop_exp" class="anchor"></a><code><span>pbop_exp : <a href="#type-expression">expression</a>;</span></code></li><li id="type-binding_op.pbop_loc" class="def record field anchored"><a href="#type-binding_op.pbop_loc" class="anchor"></a><code><span>pbop_loc : <a href="../Location/index.html#type-t">Location.t</a>;</span></code></li></ol><code><span>}</span></code></div></div><h3 id="value-descriptions"><a href="#value-descriptions" class="anchor"></a>Value descriptions</h3><div class="odoc-spec"><div class="spec type anchored" id="type-value_description"><a href="#type-value_description" class="anchor"></a><code><span><span class="keyword">and</span> value_description</span><span> = </span><span>{</span></code><ol><li id="type-value_description.pval_name" class="def record field anchored"><a href="#type-value_description.pval_name" class="anchor"></a><code><span>pval_name : <span>string <a href="../Asttypes/index.html#type-loc">Asttypes.loc</a></span>;</span></code></li><li id="type-value_description.pval_type" class="def record field anchored"><a href="#type-value_description.pval_type" class="anchor"></a><code><span>pval_type : <a href="#type-core_type">core_type</a>;</span></code></li><li id="type-value_description.pval_prim" class="def record field anchored"><a href="#type-value_description.pval_prim" class="anchor"></a><code><span>pval_prim : <span>string list</span>;</span></code></li><li id="type-value_description.pval_attributes" class="def record field anchored"><a href="#type-value_description.pval_attributes" class="anchor"></a><code><span>pval_attributes : <a href="#type-attributes">attributes</a>;</span></code><div class="def-doc"><span class="comment-delim">(*</span><p><code>... [\@\@id1] [\@\@id2]</code></p><span class="comment-delim">*)</span></div></li><li id="type-value_description.pval_loc" class="def record field anchored"><a href="#type-value_description.pval_loc" class="anchor"></a><code><span>pval_loc : <a href="../Location/index.html#type-t">Location.t</a>;</span></code></li></ol><code><span>}</span></code></div><div class="spec-doc"><p>Values of type <a href="#type-value_description"><code>value_description</code></a> represents:</p><ul><li><code>val x: T</code>, when <a href="#type-value_description.pval_prim"><code>pval_prim</code></a> is <code>[]</code></li><li><code>external x: T = &quot;s1&quot; ... &quot;sn&quot;</code> when <a href="#type-value_description.pval_prim"><code>pval_prim</code></a> is <code>[&quot;s1&quot;;...&quot;sn&quot;]</code></li></ul></div></div><h3 id="type-declarations"><a href="#type-declarations" class="anchor"></a>Type declarations</h3><div class="odoc-spec"><div class="spec type anchored" id="type-type_declaration"><a href="#type-type_declaration" class="anchor"></a><code><span><span class="keyword">and</span> type_declaration</span><span> = </span><span>{</span></code><ol><li id="type-type_declaration.ptype_name" class="def record field anchored"><a href="#type-type_declaration.ptype_name" class="anchor"></a><code><span>ptype_name : <span>string <a href="../Asttypes/index.html#type-loc">Asttypes.loc</a></span>;</span></code></li><li id="type-type_declaration.ptype_params" class="def record field anchored"><a href="#type-type_declaration.ptype_params" class="anchor"></a><code><span>ptype_params : <span><span>(<a href="#type-core_type">core_type</a> * <span>(<a href="../Asttypes/index.html#type-variance">Asttypes.variance</a> * <a href="../Asttypes/index.html#type-injectivity">Asttypes.injectivity</a>)</span>)</span> list</span>;</span></code><div class="def-doc"><span class="comment-delim">(*</span><p><code>('a1,...'an) t</code></p><span class="comment-delim">*)</span></div></li><li id="type-type_declaration.ptype_cstrs" class="def record field anchored"><a href="#type-type_declaration.ptype_cstrs" class="anchor"></a><code><span>ptype_cstrs : <span><span>(<a href="#type-core_type">core_type</a> * <a href="#type-core_type">core_type</a> * <a href="../Location/index.html#type-t">Location.t</a>)</span> list</span>;</span></code><div class="def-doc"><span class="comment-delim">(*</span><p><code>... constraint T1=T1' ... constraint Tn=Tn'</code></p><span class="comment-delim">*)</span></div></li><li id="type-type_declaration.ptype_kind" class="def record field anchored"><a href="#type-type_declaration.ptype_kind" class="anchor"></a><code><span>ptype_kind : <a href="#type-type_kind">type_kind</a>;</span></code></li><li id="type-type_declaration.ptype_private" class="def record field anchored"><a href="#type-type_declaration.ptype_private" class="anchor"></a><code><span>ptype_private : <a href="../Asttypes/index.html#type-private_flag">Asttypes.private_flag</a>;</span></code><div class="def-doc"><span class="comment-delim">(*</span><p>for <code>= private ...</code></p><span class="comment-delim">*)</span></div></li><li id="type-type_declaration.ptype_manifest" class="def record field anchored"><a href="#type-type_declaration.ptype_manifest" class="anchor"></a><code><span>ptype_manifest : <span><a href="#type-core_type">core_type</a> option</span>;</span></code><div class="def-doc"><span class="comment-delim">(*</span><p>represents <code>= T</code></p><span class="comment-delim">*)</span></div></li><li id="type-type_declaration.ptype_attributes" class="def record field anchored"><a href="#type-type_declaration.ptype_attributes" class="anchor"></a><code><span>ptype_attributes : <a href="#type-attributes">attributes</a>;</span></code><div class="def-doc"><span class="comment-delim">(*</span><p><code>... [\@\@id1] [\@\@id2]</code></p><span class="comment-delim">*)</span></div></li><li id="type-type_declaration.ptype_loc" class="def record field anchored"><a href="#type-type_declaration.ptype_loc" class="anchor"></a><code><span>ptype_loc : <a href="../Location/index.html#type-t">Location.t</a>;</span></code></li></ol><code><span>}</span></code></div><div class="spec-doc"><p>Here are type declarations and their representation, for various <a href="#type-type_declaration.ptype_kind"><code>ptype_kind</code></a> and <a href="#type-type_declaration.ptype_manifest"><code>ptype_manifest</code></a> values:</p><ul><li><code>type t</code> when <code>type_kind</code> is <a href="#type-type_kind.Ptype_abstract"><code>Ptype_abstract</code></a>, and <code>manifest</code> is <code>None</code>,</li><li><code>type t = T0</code> when <code>type_kind</code> is <a href="#type-type_kind.Ptype_abstract"><code>Ptype_abstract</code></a>, and <code>manifest</code> is <code>Some T0</code>,</li><li><code>type t = C of T | ...</code> when <code>type_kind</code> is <a href="#type-type_kind.Ptype_variant"><code>Ptype_variant</code></a>, and <code>manifest</code> is <code>None</code>,</li><li><code>type t = T0 = C of T | ...</code> when <code>type_kind</code> is <a href="#type-type_kind.Ptype_variant"><code>Ptype_variant</code></a>, and <code>manifest</code> is <code>Some T0</code>,</li><li><code>type t = {l: T; ...}</code> when <code>type_kind</code> is <a href="#type-type_kind.Ptype_record"><code>Ptype_record</code></a>, and <code>manifest</code> is <code>None</code>,</li><li><code>type t = T0 = {l : T; ...}</code> when <code>type_kind</code> is <a href="#type-type_kind.Ptype_record"><code>Ptype_record</code></a>, and <code>manifest</code> is <code>Some T0</code>,</li><li><code>type t = ..</code> when <code>type_kind</code> is <a href="#type-type_kind.Ptype_open"><code>Ptype_open</code></a>, and <code>manifest</code> is <code>None</code>.</li></ul></div></div><div class="odoc-spec"><div class="spec type anchored" id="type-type_kind"><a href="#type-type_kind" class="anchor"></a><code><span><span class="keyword">and</span> type_kind</span><span> = </span></code><ol><li id="type-type_kind.Ptype_abstract" class="def variant constructor anchored"><a href="#type-type_kind.Ptype_abstract" class="anchor"></a><code><span>| </span><span><span class="constructor">Ptype_abstract</span></span></code></li><li id="type-type_kind.Ptype_variant" class="def variant constructor anchored"><a href="#type-type_kind.Ptype_variant" class="anchor"></a><code><span>| </span><span><span class="constructor">Ptype_variant</span> <span class="keyword">of</span> <span><a href="#type-constructor_declaration">constructor_declaration</a> list</span></span></code></li><li id="type-type_kind.Ptype_record" class="def variant constructor anchored"><a href="#type-type_kind.Ptype_record" class="anchor"></a><code><span>| </span><span><span class="constructor">Ptype_record</span> <span class="keyword">of</span> <span><a href="#type-label_declaration">label_declaration</a> list</span></span></code><div class="def-doc"><span class="comment-delim">(*</span><p>Invariant: non-empty list</p><span class="comment-delim">*)</span></div></li><li id="type-type_kind.Ptype_open" class="def variant constructor anchored"><a href="#type-type_kind.Ptype_open" class="anchor"></a><code><span>| </span><span><span class="constructor">Ptype_open</span></span></code></li></ol></div></div><div class="odoc-spec"><div class="spec type anchored" id="type-label_declaration"><a href="#type-label_declaration" class="anchor"></a><code><span><span class="keyword">and</span> label_declaration</span><span> = </span><span>{</span></code><ol><li id="type-label_declaration.pld_name" class="def record field anchored"><a href="#type-label_declaration.pld_name" class="anchor"></a><code><span>pld_name : <span>string <a href="../Asttypes/index.html#type-loc">Asttypes.loc</a></span>;</span></code></li><li id="type-label_declaration.pld_mutable" class="def record field anchored"><a href="#type-label_declaration.pld_mutable" class="anchor"></a><code><span>pld_mutable : <a href="../Asttypes/index.html#type-mutable_flag">Asttypes.mutable_flag</a>;</span></code></li><li id="type-label_declaration.pld_type" class="def record field anchored"><a href="#type-label_declaration.pld_type" class="anchor"></a><code><span>pld_type : <a href="#type-core_type">core_type</a>;</span></code></li><li id="type-label_declaration.pld_loc" class="def record field anchored"><a href="#type-label_declaration.pld_loc" class="anchor"></a><code><span>pld_loc : <a href="../Location/index.html#type-t">Location.t</a>;</span></code></li><li id="type-label_declaration.pld_attributes" class="def record field anchored"><a href="#type-label_declaration.pld_attributes" class="anchor"></a><code><span>pld_attributes : <a href="#type-attributes">attributes</a>;</span></code><div class="def-doc"><span class="comment-delim">(*</span><p><code>l : T [\@id1] [\@id2]</code></p><span class="comment-delim">*)</span></div></li></ol><code><span>}</span></code></div><div class="spec-doc"><ul><li><code>{ ...; l: T; ... }</code> when <a href="#type-label_declaration.pld_mutable"><code>pld_mutable</code></a> is <a href="../Asttypes/index.html#type-mutable_flag.Immutable"><code>Immutable</code></a>,</li><li><code>{ ...; mutable l: T; ... }</code> when <a href="#type-label_declaration.pld_mutable"><code>pld_mutable</code></a> is <a href="../Asttypes/index.html#type-mutable_flag.Mutable"><code>Mutable</code></a>.</li></ul><p>Note: <code>T</code> can be a <a href="#type-core_type_desc.Ptyp_poly"><code>Ptyp_poly</code></a>.</p></div></div><div class="odoc-spec"><div class="spec type anchored" id="type-constructor_declaration"><a href="#type-constructor_declaration" class="anchor"></a><code><span><span class="keyword">and</span> constructor_declaration</span><span> = </span><span>{</span></code><ol><li id="type-constructor_declaration.pcd_name" class="def record field anchored"><a href="#type-constructor_declaration.pcd_name" class="anchor"></a><code><span>pcd_name : <span>string <a href="../Asttypes/index.html#type-loc">Asttypes.loc</a></span>;</span></code></li><li id="type-constructor_declaration.pcd_vars" class="def record field anchored"><a href="#type-constructor_declaration.pcd_vars" class="anchor"></a><code><span>pcd_vars : <span><span>string <a href="../Asttypes/index.html#type-loc">Asttypes.loc</a></span> list</span>;</span></code></li><li id="type-constructor_declaration.pcd_args" class="def record field anchored"><a href="#type-constructor_declaration.pcd_args" class="anchor"></a><code><span>pcd_args : <a href="#type-constructor_arguments">constructor_arguments</a>;</span></code></li><li id="type-constructor_declaration.pcd_res" class="def record field anchored"><a href="#type-constructor_declaration.pcd_res" class="anchor"></a><code><span>pcd_res : <span><a href="#type-core_type">core_type</a> option</span>;</span></code></li><li id="type-constructor_declaration.pcd_loc" class="def record field anchored"><a href="#type-constructor_declaration.pcd_loc" class="anchor"></a><code><span>pcd_loc : <a href="../Location/index.html#type-t">Location.t</a>;</span></code></li><li id="type-constructor_declaration.pcd_attributes" class="def record field anchored"><a href="#type-constructor_declaration.pcd_attributes" class="anchor"></a><code><span>pcd_attributes : <a href="#type-attributes">attributes</a>;</span></code><div class="def-doc"><span class="comment-delim">(*</span><p><code>C of ... [\@id1] [\@id2]</code></p><span class="comment-delim">*)</span></div></li></ol><code><span>}</span></code></div></div><div class="odoc-spec"><div class="spec type anchored" id="type-constructor_arguments"><a href="#type-constructor_arguments" class="anchor"></a><code><span><span class="keyword">and</span> constructor_arguments</span><span> = </span></code><ol><li id="type-constructor_arguments.Pcstr_tuple" class="def variant constructor anchored"><a href="#type-constructor_arguments.Pcstr_tuple" class="anchor"></a><code><span>| </span><span><span class="constructor">Pcstr_tuple</span> <span class="keyword">of</span> <span><a href="#type-core_type">core_type</a> list</span></span></code></li><li id="type-constructor_arguments.Pcstr_record" class="def variant constructor anchored"><a href="#type-constructor_arguments.Pcstr_record" class="anchor"></a><code><span>| </span><span><span class="constructor">Pcstr_record</span> <span class="keyword">of</span> <span><a href="#type-label_declaration">label_declaration</a> list</span></span></code><div class="def-doc"><span class="comment-delim">(*</span><p>Values of type <a href="#type-constructor_declaration"><code>constructor_declaration</code></a> represents the constructor arguments of:</p><ul><li><code>C of T1 * ... * Tn</code> when <code>res = None</code>, and <code>args = Pcstr_tuple [T1; ... ; Tn]</code>,</li><li><code>C: T0</code> when <code>res = Some T0</code>, and <code>args = Pcstr_tuple []</code>,</li><li><code>C: T1 * ... * Tn -&gt; T0</code> when <code>res = Some T0</code>, and <code>args = Pcstr_tuple [T1; ... ; Tn]</code>,</li><li><code>C of {...}</code> when <code>res = None</code>, and <code>args = Pcstr_record [...]</code>,</li><li><code>C: {...} -&gt; T0</code> when <code>res = Some T0</code>, and <code>args = Pcstr_record [...]</code>.</li></ul><span class="comment-delim">*)</span></div></li></ol></div></div><div class="odoc-spec"><div class="spec type anchored" id="type-type_extension"><a href="#type-type_extension" class="anchor"></a><code><span><span class="keyword">and</span> type_extension</span><span> = </span><span>{</span></code><ol><li id="type-type_extension.ptyext_path" class="def record field anchored"><a href="#type-type_extension.ptyext_path" class="anchor"></a><code><span>ptyext_path : <span><a href="../Longident/index.html#type-t">Longident.t</a> <a href="../Asttypes/index.html#type-loc">Asttypes.loc</a></span>;</span></code></li><li id="type-type_extension.ptyext_params" class="def record field anchored"><a href="#type-type_extension.ptyext_params" class="anchor"></a><code><span>ptyext_params : <span><span>(<a href="#type-core_type">core_type</a> * <span>(<a href="../Asttypes/index.html#type-variance">Asttypes.variance</a> * <a href="../Asttypes/index.html#type-injectivity">Asttypes.injectivity</a>)</span>)</span> list</span>;</span></code></li><li id="type-type_extension.ptyext_constructors" class="def record field anchored"><a href="#type-type_extension.ptyext_constructors" class="anchor"></a><code><span>ptyext_constructors : <span><a href="#type-extension_constructor">extension_constructor</a> list</span>;</span></code></li><li id="type-type_extension.ptyext_private" class="def record field anchored"><a href="#type-type_extension.ptyext_private" class="anchor"></a><code><span>ptyext_private : <a href="../Asttypes/index.html#type-private_flag">Asttypes.private_flag</a>;</span></code></li><li id="type-type_extension.ptyext_loc" class="def record field anchored"><a href="#type-type_extension.ptyext_loc" class="anchor"></a><code><span>ptyext_loc : <a href="../Location/index.html#type-t">Location.t</a>;</span></code></li><li id="type-type_extension.ptyext_attributes" class="def record field anchored"><a href="#type-type_extension.ptyext_attributes" class="anchor"></a><code><span>ptyext_attributes : <a href="#type-attributes">attributes</a>;</span></code><div class="def-doc"><span class="comment-delim">(*</span><p>... <code>\@\@id1</code> <code>\@\@id2</code></p><span class="comment-delim">*)</span></div></li></ol><code><span>}</span></code></div><div class="spec-doc"><p>Definition of new extensions constructors for the extensive sum type <code>t</code> (<code>type t += ...</code>).</p></div></div><div class="odoc-spec"><div class="spec type anchored" id="type-extension_constructor"><a href="#type-extension_constructor" class="anchor"></a><code><span><span class="keyword">and</span> extension_constructor</span><span> = </span><span>{</span></code><ol><li id="type-extension_constructor.pext_name" class="def record field anchored"><a href="#type-extension_constructor.pext_name" class="anchor"></a><code><span>pext_name : <span>string <a href="../Asttypes/index.html#type-loc">Asttypes.loc</a></span>;</span></code></li><li id="type-extension_constructor.pext_kind" class="def record field anchored"><a href="#type-extension_constructor.pext_kind" class="anchor"></a><code><span>pext_kind : <a href="#type-extension_constructor_kind">extension_constructor_kind</a>;</span></code></li><li id="type-extension_constructor.pext_loc" class="def record field anchored"><a href="#type-extension_constructor.pext_loc" class="anchor"></a><code><span>pext_loc : <a href="../Location/index.html#type-t">Location.t</a>;</span></code></li><li id="type-extension_constructor.pext_attributes" class="def record field anchored"><a href="#type-extension_constructor.pext_attributes" class="anchor"></a><code><span>pext_attributes : <a href="#type-attributes">attributes</a>;</span></code><div class="def-doc"><span class="comment-delim">(*</span><p><code>C of ... [\@id1] [\@id2]</code></p><span class="comment-delim">*)</span></div></li></ol><code><span>}</span></code></div></div><div class="odoc-spec"><div class="spec type anchored" id="type-type_exception"><a href="#type-type_exception" class="anchor"></a><code><span><span class="keyword">and</span> type_exception</span><span> = </span><span>{</span></code><ol><li id="type-type_exception.ptyexn_constructor" class="def record field anchored"><a href="#type-type_exception.ptyexn_constructor" class="anchor"></a><code><span>ptyexn_constructor : <a href="#type-extension_constructor">extension_constructor</a>;</span></code></li><li id="type-type_exception.ptyexn_loc" class="def record field anchored"><a href="#type-type_exception.ptyexn_loc" class="anchor"></a><code><span>ptyexn_loc : <a href="../Location/index.html#type-t">Location.t</a>;</span></code></li><li id="type-type_exception.ptyexn_attributes" class="def record field anchored"><a href="#type-type_exception.ptyexn_attributes" class="anchor"></a><code><span>ptyexn_attributes : <a href="#type-attributes">attributes</a>;</span></code><div class="def-doc"><span class="comment-delim">(*</span><p><code>... [\@\@id1] [\@\@id2]</code></p><span class="comment-delim">*)</span></div></li></ol><code><span>}</span></code></div><div class="spec-doc"><p>Definition of a new exception (<code>exception E</code>).</p></div></div><div class="odoc-spec"><div class="spec type anchored" id="type-extension_constructor_kind"><a href="#type-extension_constructor_kind" class="anchor"></a><code><span><span class="keyword">and</span> extension_constructor_kind</span><span> = </span></code><ol><li id="type-extension_constructor_kind.Pext_decl" class="def variant constructor anchored"><a href="#type-extension_constructor_kind.Pext_decl" class="anchor"></a><code><span>| </span><span><span class="constructor">Pext_decl</span> <span class="keyword">of</span> <span><span>string <a href="../Asttypes/index.html#type-loc">Asttypes.loc</a></span> list</span>
* <a href="#type-constructor_arguments">constructor_arguments</a>
* <span><a href="#type-core_type">core_type</a> option</span></span></code><div class="def-doc"><span class="comment-delim">(*</span><p><code>Pext_decl(existentials, c_args, t_opt)</code> describes a new extension constructor. It can be:</p><ul><li><p><code>C of T1 * ... * Tn</code> when:</p><ul><li><code>existentials</code> is <code>[]</code>,</li><li><code>c_args</code> is <code>[T1; ...; Tn]</code>,</li><li><code>t_opt</code> is <code>None</code></li></ul></li><li><p><code>C: T0</code> when</p><ul><li><code>existentials</code> is <code>[]</code>,</li><li><code>c_args</code> is <code>[]</code>,</li><li><code>t_opt</code> is <code>Some T0</code>.</li></ul></li><li><p><code>C: T1 * ... * Tn -&gt; T0</code> when</p><ul><li><code>existentials</code> is <code>[]</code>,</li><li><code>c_args</code> is <code>[T1; ...; Tn]</code>,</li><li><code>t_opt</code> is <code>Some T0</code>.</li></ul></li><li><p><code>C: 'a... . T1 * ... * Tn -&gt; T0</code> when</p><ul><li><code>existentials</code> is <code>['a;...]</code>,</li><li><code>c_args</code> is <code>[T1; ... ; Tn]</code>,</li><li><code>t_opt</code> is <code>Some T0</code>.</li></ul></li></ul><span class="comment-delim">*)</span></div></li><li id="type-extension_constructor_kind.Pext_rebind" class="def variant constructor anchored"><a href="#type-extension_constructor_kind.Pext_rebind" class="anchor"></a><code><span>| </span><span><span class="constructor">Pext_rebind</span> <span class="keyword">of</span> <span><a href="../Longident/index.html#type-t">Longident.t</a> <a href="../Asttypes/index.html#type-loc">Asttypes.loc</a></span></span></code><div class="def-doc"><span class="comment-delim">(*</span><p><code>Pext_rebind(D)</code> re-export the constructor <code>D</code> with the new name <code>C</code></p><span class="comment-delim">*)</span></div></li></ol></div></div><h2 id="class-language"><a href="#class-language" class="anchor"></a>Class language</h2><h3 id="type-expressions-for-the-class-language"><a href="#type-expressions-for-the-class-language" class="anchor"></a>Type expressions for the class language</h3><div class="odoc-spec"><div class="spec type anchored" id="type-class_type"><a href="#type-class_type" class="anchor"></a><code><span><span class="keyword">and</span> class_type</span><span> = </span><span>{</span></code><ol><li id="type-class_type.pcty_desc" class="def record field anchored"><a href="#type-class_type.pcty_desc" class="anchor"></a><code><span>pcty_desc : <a href="#type-class_type_desc">class_type_desc</a>;</span></code></li><li id="type-class_type.pcty_loc" class="def record field anchored"><a href="#type-class_type.pcty_loc" class="anchor"></a><code><span>pcty_loc : <a href="../Location/index.html#type-t">Location.t</a>;</span></code></li><li id="type-class_type.pcty_attributes" class="def record field anchored"><a href="#type-class_type.pcty_attributes" class="anchor"></a><code><span>pcty_attributes : <a href="#type-attributes">attributes</a>;</span></code><div class="def-doc"><span class="comment-delim">(*</span><p><code>... [\@id1] [\@id2]</code></p><span class="comment-delim">*)</span></div></li></ol><code><span>}</span></code></div></div><div class="odoc-spec"><div class="spec type anchored" id="type-class_type_desc"><a href="#type-class_type_desc" class="anchor"></a><code><span><span class="keyword">and</span> class_type_desc</span><span> = </span></code><ol><li id="type-class_type_desc.Pcty_constr" class="def variant constructor anchored"><a href="#type-class_type_desc.Pcty_constr" class="anchor"></a><code><span>| </span><span><span class="constructor">Pcty_constr</span> <span class="keyword">of</span> <span><a href="../Longident/index.html#type-t">Longident.t</a> <a href="../Asttypes/index.html#type-loc">Asttypes.loc</a></span> * <span><a href="#type-core_type">core_type</a> list</span></span></code><div class="def-doc"><span class="comment-delim">(*</span><ul><li><code>c</code></li><li><code>['a1, ..., 'an] c</code></li></ul><span class="comment-delim">*)</span></div></li><li id="type-class_type_desc.Pcty_signature" class="def variant constructor anchored"><a href="#type-class_type_desc.Pcty_signature" class="anchor"></a><code><span>| </span><span><span class="constructor">Pcty_signature</span> <span class="keyword">of</span> <a href="#type-class_signature">class_signature</a></span></code><div class="def-doc"><span class="comment-delim">(*</span><p><code>object ... end</code></p><span class="comment-delim">*)</span></div></li><li id="type-class_type_desc.Pcty_arrow" class="def variant constructor anchored"><a href="#type-class_type_desc.Pcty_arrow" class="anchor"></a><code><span>| </span><span><span class="constructor">Pcty_arrow</span> <span class="keyword">of</span> <a href="../Asttypes/index.html#type-arg_label">Asttypes.arg_label</a> * <a href="#type-core_type">core_type</a> * <a href="#type-class_type">class_type</a></span></code><div class="def-doc"><span class="comment-delim">(*</span><p><code>Pcty_arrow(lbl, T, CT)</code> represents:</p><ul><li><code>T -&gt; CT</code> when <code>lbl</code> is <a href="../Asttypes/index.html#type-arg_label.Nolabel"><code>Nolabel</code></a>,</li><li><code>~l:T -&gt; CT</code> when <code>lbl</code> is <a href="../Asttypes/index.html#type-arg_label.Labelled"><code>Labelled l</code></a>,</li><li><code>?l:T -&gt; CT</code> when <code>lbl</code> is <a href="../Asttypes/index.html#type-arg_label.Optional"><code>Optional l</code></a>.</li></ul><span class="comment-delim">*)</span></div></li><li id="type-class_type_desc.Pcty_extension" class="def variant constructor anchored"><a href="#type-class_type_desc.Pcty_extension" class="anchor"></a><code><span>| </span><span><span class="constructor">Pcty_extension</span> <span class="keyword">of</span> <a href="#type-extension">extension</a></span></code><div class="def-doc"><span class="comment-delim">(*</span><p><code>%id</code></p><span class="comment-delim">*)</span></div></li><li id="type-class_type_desc.Pcty_open" class="def variant constructor anchored"><a href="#type-class_type_desc.Pcty_open" class="anchor"></a><code><span>| </span><span><span class="constructor">Pcty_open</span> <span class="keyword">of</span> <a href="#type-open_description">open_description</a> * <a href="#type-class_type">class_type</a></span></code><div class="def-doc"><span class="comment-delim">(*</span><p><code>let open M in CT</code></p><span class="comment-delim">*)</span></div></li></ol></div></div><div class="odoc-spec"><div class="spec type anchored" id="type-class_signature"><a href="#type-class_signature" class="anchor"></a><code><span><span class="keyword">and</span> class_signature</span><span> = </span><span>{</span></code><ol><li id="type-class_signature.pcsig_self" class="def record field anchored"><a href="#type-class_signature.pcsig_self" class="anchor"></a><code><span>pcsig_self : <a href="#type-core_type">core_type</a>;</span></code></li><li id="type-class_signature.pcsig_fields" class="def record field anchored"><a href="#type-class_signature.pcsig_fields" class="anchor"></a><code><span>pcsig_fields : <span><a href="#type-class_type_field">class_type_field</a> list</span>;</span></code></li></ol><code><span>}</span></code></div><div class="spec-doc"><p>Values of type <code>class_signature</code> represents:</p><ul><li><code>object('selfpat) ... end</code></li><li><code>object ... end</code> when <a href="#type-class_signature.pcsig_self"><code>pcsig_self</code></a> is <a href="#type-core_type_desc.Ptyp_any"><code>Ptyp_any</code></a></li></ul></div></div><div class="odoc-spec"><div class="spec type anchored" id="type-class_type_field"><a href="#type-class_type_field" class="anchor"></a><code><span><span class="keyword">and</span> class_type_field</span><span> = </span><span>{</span></code><ol><li id="type-class_type_field.pctf_desc" class="def record field anchored"><a href="#type-class_type_field.pctf_desc" class="anchor"></a><code><span>pctf_desc : <a href="#type-class_type_field_desc">class_type_field_desc</a>;</span></code></li><li id="type-class_type_field.pctf_loc" class="def record field anchored"><a href="#type-class_type_field.pctf_loc" class="anchor"></a><code><span>pctf_loc : <a href="../Location/index.html#type-t">Location.t</a>;</span></code></li><li id="type-class_type_field.pctf_attributes" class="def record field anchored"><a href="#type-class_type_field.pctf_attributes" class="anchor"></a><code><span>pctf_attributes : <a href="#type-attributes">attributes</a>;</span></code><div class="def-doc"><span class="comment-delim">(*</span><p><code>... [\@\@id1] [\@\@id2]</code></p><span class="comment-delim">*)</span></div></li></ol><code><span>}</span></code></div></div><div class="odoc-spec"><div class="spec type anchored" id="type-class_type_field_desc"><a href="#type-class_type_field_desc" class="anchor"></a><code><span><span class="keyword">and</span> class_type_field_desc</span><span> = </span></code><ol><li id="type-class_type_field_desc.Pctf_inherit" class="def variant constructor anchored"><a href="#type-class_type_field_desc.Pctf_inherit" class="anchor"></a><code><span>| </span><span><span class="constructor">Pctf_inherit</span> <span class="keyword">of</span> <a href="#type-class_type">class_type</a></span></code><div class="def-doc"><span class="comment-delim">(*</span><p><code>inherit CT</code></p><span class="comment-delim">*)</span></div></li><li id="type-class_type_field_desc.Pctf_val" class="def variant constructor anchored"><a href="#type-class_type_field_desc.Pctf_val" class="anchor"></a><code><span>| </span><span><span class="constructor">Pctf_val</span> <span class="keyword">of</span> <span><a href="../Asttypes/index.html#type-label">Asttypes.label</a> <a href="../Asttypes/index.html#type-loc">Asttypes.loc</a></span>
* <a href="../Asttypes/index.html#type-mutable_flag">Asttypes.mutable_flag</a>
* <a href="../Asttypes/index.html#type-virtual_flag">Asttypes.virtual_flag</a>
* <a href="#type-core_type">core_type</a></span></code><div class="def-doc"><span class="comment-delim">(*</span><p><code>val x: T</code></p><span class="comment-delim">*)</span></div></li><li id="type-class_type_field_desc.Pctf_method" class="def variant constructor anchored"><a href="#type-class_type_field_desc.Pctf_method" class="anchor"></a><code><span>| </span><span><span class="constructor">Pctf_method</span> <span class="keyword">of</span> <span><a href="../Asttypes/index.html#type-label">Asttypes.label</a> <a href="../Asttypes/index.html#type-loc">Asttypes.loc</a></span>
* <a href="../Asttypes/index.html#type-private_flag">Asttypes.private_flag</a>
* <a href="../Asttypes/index.html#type-virtual_flag">Asttypes.virtual_flag</a>
* <a href="#type-core_type">core_type</a></span></code><div class="def-doc"><span class="comment-delim">(*</span><p><code>method x: T</code></p><p>Note: <code>T</code> can be a <a href="#type-core_type_desc.Ptyp_poly"><code>Ptyp_poly</code></a>.</p><span class="comment-delim">*)</span></div></li><li id="type-class_type_field_desc.Pctf_constraint" class="def variant constructor anchored"><a href="#type-class_type_field_desc.Pctf_constraint" class="anchor"></a><code><span>| </span><span><span class="constructor">Pctf_constraint</span> <span class="keyword">of</span> <a href="#type-core_type">core_type</a> * <a href="#type-core_type">core_type</a></span></code><div class="def-doc"><span class="comment-delim">(*</span><p><code>constraint T1 = T2</code></p><span class="comment-delim">*)</span></div></li><li id="type-class_type_field_desc.Pctf_attribute" class="def variant constructor anchored"><a href="#type-class_type_field_desc.Pctf_attribute" class="anchor"></a><code><span>| </span><span><span class="constructor">Pctf_attribute</span> <span class="keyword">of</span> <a href="#type-attribute">attribute</a></span></code><div class="def-doc"><span class="comment-delim">(*</span><p><code>[\@\@\@id]</code></p><span class="comment-delim">*)</span></div></li><li id="type-class_type_field_desc.Pctf_extension" class="def variant constructor anchored"><a href="#type-class_type_field_desc.Pctf_extension" class="anchor"></a><code><span>| </span><span><span class="constructor">Pctf_extension</span> <span class="keyword">of</span> <a href="#type-extension">extension</a></span></code><div class="def-doc"><span class="comment-delim">(*</span><p><code>[%%id]</code></p><span class="comment-delim">*)</span></div></li></ol></div></div><div class="odoc-spec"><div class="spec type anchored" id="type-class_infos"><a href="#type-class_infos" class="anchor"></a><code><span><span class="keyword">and</span> <span>'a class_infos</span></span><span> = </span><span>{</span></code><ol><li id="type-class_infos.pci_virt" class="def record field anchored"><a href="#type-class_infos.pci_virt" class="anchor"></a><code><span>pci_virt : <a href="../Asttypes/index.html#type-virtual_flag">Asttypes.virtual_flag</a>;</span></code></li><li id="type-class_infos.pci_params" class="def record field anchored"><a href="#type-class_infos.pci_params" class="anchor"></a><code><span>pci_params : <span><span>(<a href="#type-core_type">core_type</a> * <span>(<a href="../Asttypes/index.html#type-variance">Asttypes.variance</a> * <a href="../Asttypes/index.html#type-injectivity">Asttypes.injectivity</a>)</span>)</span> list</span>;</span></code></li><li id="type-class_infos.pci_name" class="def record field anchored"><a href="#type-class_infos.pci_name" class="anchor"></a><code><span>pci_name : <span>string <a href="../Asttypes/index.html#type-loc">Asttypes.loc</a></span>;</span></code></li><li id="type-class_infos.pci_expr" class="def record field anchored"><a href="#type-class_infos.pci_expr" class="anchor"></a><code><span>pci_expr : <span class="type-var">'a</span>;</span></code></li><li id="type-class_infos.pci_loc" class="def record field anchored"><a href="#type-class_infos.pci_loc" class="anchor"></a><code><span>pci_loc : <a href="../Location/index.html#type-t">Location.t</a>;</span></code></li><li id="type-class_infos.pci_attributes" class="def record field anchored"><a href="#type-class_infos.pci_attributes" class="anchor"></a><code><span>pci_attributes : <a href="#type-attributes">attributes</a>;</span></code><div class="def-doc"><span class="comment-delim">(*</span><p><code>... [\@\@id1] [\@\@id2]</code></p><span class="comment-delim">*)</span></div></li></ol><code><span>}</span></code></div><div class="spec-doc"><p>Values of type <code>class_expr class_infos</code> represents:</p><ul><li><code>class c = ...</code></li><li><code>class ['a1,...,'an] c = ...</code></li><li><code>class virtual c = ...</code></li></ul><p>They are also used for &quot;class type&quot; declaration.</p></div></div><div class="odoc-spec"><div class="spec type anchored" id="type-class_description"><a href="#type-class_description" class="anchor"></a><code><span><span class="keyword">and</span> class_description</span><span> = <span><a href="#type-class_type">class_type</a> <a href="#type-class_infos">class_infos</a></span></span></code></div></div><div class="odoc-spec"><div class="spec type anchored" id="type-class_type_declaration"><a href="#type-class_type_declaration" class="anchor"></a><code><span><span class="keyword">and</span> class_type_declaration</span><span> = <span><a href="#type-class_type">class_type</a> <a href="#type-class_infos">class_infos</a></span></span></code></div></div><h3 id="value-expressions-for-the-class-language"><a href="#value-expressions-for-the-class-language" class="anchor"></a>Value expressions for the class language</h3><div class="odoc-spec"><div class="spec type anchored" id="type-class_expr"><a href="#type-class_expr" class="anchor"></a><code><span><span class="keyword">and</span> class_expr</span><span> = </span><span>{</span></code><ol><li id="type-class_expr.pcl_desc" class="def record field anchored"><a href="#type-class_expr.pcl_desc" class="anchor"></a><code><span>pcl_desc : <a href="#type-class_expr_desc">class_expr_desc</a>;</span></code></li><li id="type-class_expr.pcl_loc" class="def record field anchored"><a href="#type-class_expr.pcl_loc" class="anchor"></a><code><span>pcl_loc : <a href="../Location/index.html#type-t">Location.t</a>;</span></code></li><li id="type-class_expr.pcl_attributes" class="def record field anchored"><a href="#type-class_expr.pcl_attributes" class="anchor"></a><code><span>pcl_attributes : <a href="#type-attributes">attributes</a>;</span></code><div class="def-doc"><span class="comment-delim">(*</span><p><code>... [\@id1] [\@id2]</code></p><span class="comment-delim">*)</span></div></li></ol><code><span>}</span></code></div></div><div class="odoc-spec"><div class="spec type anchored" id="type-class_expr_desc"><a href="#type-class_expr_desc" class="anchor"></a><code><span><span class="keyword">and</span> class_expr_desc</span><span> = </span></code><ol><li id="type-class_expr_desc.Pcl_constr" class="def variant constructor anchored"><a href="#type-class_expr_desc.Pcl_constr" class="anchor"></a><code><span>| </span><span><span class="constructor">Pcl_constr</span> <span class="keyword">of</span> <span><a href="../Longident/index.html#type-t">Longident.t</a> <a href="../Asttypes/index.html#type-loc">Asttypes.loc</a></span> * <span><a href="#type-core_type">core_type</a> list</span></span></code><div class="def-doc"><span class="comment-delim">(*</span><p><code>c</code> and <code>['a1, ..., 'an] c</code></p><span class="comment-delim">*)</span></div></li><li id="type-class_expr_desc.Pcl_structure" class="def variant constructor anchored"><a href="#type-class_expr_desc.Pcl_structure" class="anchor"></a><code><span>| </span><span><span class="constructor">Pcl_structure</span> <span class="keyword">of</span> <a href="#type-class_structure">class_structure</a></span></code><div class="def-doc"><span class="comment-delim">(*</span><p><code>object ... end</code></p><span class="comment-delim">*)</span></div></li><li id="type-class_expr_desc.Pcl_fun" class="def variant constructor anchored"><a href="#type-class_expr_desc.Pcl_fun" class="anchor"></a><code><span>| </span><span><span class="constructor">Pcl_fun</span> <span class="keyword">of</span> <a href="../Asttypes/index.html#type-arg_label">Asttypes.arg_label</a> * <span><a href="#type-expression">expression</a> option</span> * <a href="#type-pattern">pattern</a> * <a href="#type-class_expr">class_expr</a></span></code><div class="def-doc"><span class="comment-delim">(*</span><p><code>Pcl_fun(lbl, exp0, P, CE)</code> represents:</p><ul><li><code>fun P -&gt; CE</code> when <code>lbl</code> is <a href="../Asttypes/index.html#type-arg_label.Nolabel"><code>Nolabel</code></a> and <code>exp0</code> is <code>None</code>,</li><li><code>fun ~l:P -&gt; CE</code> when <code>lbl</code> is <a href="../Asttypes/index.html#type-arg_label.Labelled"><code>Labelled l</code></a> and <code>exp0</code> is <code>None</code>,</li><li><code>fun ?l:P -&gt; CE</code> when <code>lbl</code> is <a href="../Asttypes/index.html#type-arg_label.Optional"><code>Optional l</code></a> and <code>exp0</code> is <code>None</code>,</li><li><code>fun ?l:(P = E0) -&gt; CE</code> when <code>lbl</code> is <a href="../Asttypes/index.html#type-arg_label.Optional"><code>Optional l</code></a> and <code>exp0</code> is <code>Some E0</code>.</li></ul><span class="comment-delim">*)</span></div></li><li id="type-class_expr_desc.Pcl_apply" class="def variant constructor anchored"><a href="#type-class_expr_desc.Pcl_apply" class="anchor"></a><code><span>| </span><span><span class="constructor">Pcl_apply</span> <span class="keyword">of</span> <a href="#type-class_expr">class_expr</a> * <span><span>(<a href="../Asttypes/index.html#type-arg_label">Asttypes.arg_label</a> * <a href="#type-expression">expression</a>)</span> list</span></span></code><div class="def-doc"><span class="comment-delim">(*</span><p><code>Pcl_apply(CE, [(l1,E1) ; ... ; (ln,En)])</code> represents <code>CE ~l1:E1 ... ~ln:En</code>. <code>li</code> can be empty (non labeled argument) or start with <code>?</code> (optional argument).</p><p>Invariant: <code>n &gt; 0</code></p><span class="comment-delim">*)</span></div></li><li id="type-class_expr_desc.Pcl_let" class="def variant constructor anchored"><a href="#type-class_expr_desc.Pcl_let" class="anchor"></a><code><span>| </span><span><span class="constructor">Pcl_let</span> <span class="keyword">of</span> <a href="../Asttypes/index.html#type-rec_flag">Asttypes.rec_flag</a> * <span><a href="#type-value_binding">value_binding</a> list</span> * <a href="#type-class_expr">class_expr</a></span></code><div class="def-doc"><span class="comment-delim">(*</span><p><code>Pcl_let(rec, [(P1, E1); ... ; (Pn, En)], CE)</code> represents:</p><ul><li><code>let P1 = E1 and ... and Pn = EN in CE</code> when <code>rec</code> is <a href="../Asttypes/index.html#type-rec_flag.Nonrecursive"><code>Nonrecursive</code></a>,</li><li><code>let rec P1 = E1 and ... and Pn = EN in CE</code> when <code>rec</code> is <a href="../Asttypes/index.html#type-rec_flag.Recursive"><code>Recursive</code></a>.</li></ul><span class="comment-delim">*)</span></div></li><li id="type-class_expr_desc.Pcl_constraint" class="def variant constructor anchored"><a href="#type-class_expr_desc.Pcl_constraint" class="anchor"></a><code><span>| </span><span><span class="constructor">Pcl_constraint</span> <span class="keyword">of</span> <a href="#type-class_expr">class_expr</a> * <a href="#type-class_type">class_type</a></span></code><div class="def-doc"><span class="comment-delim">(*</span><p><code>(CE : CT)</code></p><span class="comment-delim">*)</span></div></li><li id="type-class_expr_desc.Pcl_extension" class="def variant constructor anchored"><a href="#type-class_expr_desc.Pcl_extension" class="anchor"></a><code><span>| </span><span><span class="constructor">Pcl_extension</span> <span class="keyword">of</span> <a href="#type-extension">extension</a></span></code><div class="def-doc"><span class="comment-delim">(*</span><p><code>[%id]</code></p><span class="comment-delim">*)</span></div></li><li id="type-class_expr_desc.Pcl_open" class="def variant constructor anchored"><a href="#type-class_expr_desc.Pcl_open" class="anchor"></a><code><span>| </span><span><span class="constructor">Pcl_open</span> <span class="keyword">of</span> <a href="#type-open_description">open_description</a> * <a href="#type-class_expr">class_expr</a></span></code><div class="def-doc"><span class="comment-delim">(*</span><p><code>let open M in CE</code></p><span class="comment-delim">*)</span></div></li></ol></div></div><div class="odoc-spec"><div class="spec type anchored" id="type-class_structure"><a href="#type-class_structure" class="anchor"></a><code><span><span class="keyword">and</span> class_structure</span><span> = </span><span>{</span></code><ol><li id="type-class_structure.pcstr_self" class="def record field anchored"><a href="#type-class_structure.pcstr_self" class="anchor"></a><code><span>pcstr_self : <a href="#type-pattern">pattern</a>;</span></code></li><li id="type-class_structure.pcstr_fields" class="def record field anchored"><a href="#type-class_structure.pcstr_fields" class="anchor"></a><code><span>pcstr_fields : <span><a href="#type-class_field">class_field</a> list</span>;</span></code></li></ol><code><span>}</span></code></div><div class="spec-doc"><p>Values of type <a href="#type-class_structure"><code>class_structure</code></a> represents:</p><ul><li><code>object(selfpat) ... end</code></li><li><code>object ... end</code> when <a href="#type-class_structure.pcstr_self"><code>pcstr_self</code></a> is <a href="#type-pattern_desc.Ppat_any"><code>Ppat_any</code></a></li></ul></div></div><div class="odoc-spec"><div class="spec type anchored" id="type-class_field"><a href="#type-class_field" class="anchor"></a><code><span><span class="keyword">and</span> class_field</span><span> = </span><span>{</span></code><ol><li id="type-class_field.pcf_desc" class="def record field anchored"><a href="#type-class_field.pcf_desc" class="anchor"></a><code><span>pcf_desc : <a href="#type-class_field_desc">class_field_desc</a>;</span></code></li><li id="type-class_field.pcf_loc" class="def record field anchored"><a href="#type-class_field.pcf_loc" class="anchor"></a><code><span>pcf_loc : <a href="../Location/index.html#type-t">Location.t</a>;</span></code></li><li id="type-class_field.pcf_attributes" class="def record field anchored"><a href="#type-class_field.pcf_attributes" class="anchor"></a><code><span>pcf_attributes : <a href="#type-attributes">attributes</a>;</span></code><div class="def-doc"><span class="comment-delim">(*</span><p><code>... [\@\@id1] [\@\@id2]</code></p><span class="comment-delim">*)</span></div></li></ol><code><span>}</span></code></div></div><div class="odoc-spec"><div class="spec type anchored" id="type-class_field_desc"><a href="#type-class_field_desc" class="anchor"></a><code><span><span class="keyword">and</span> class_field_desc</span><span> = </span></code><ol><li id="type-class_field_desc.Pcf_inherit" class="def variant constructor anchored"><a href="#type-class_field_desc.Pcf_inherit" class="anchor"></a><code><span>| </span><span><span class="constructor">Pcf_inherit</span> <span class="keyword">of</span> <a href="../Asttypes/index.html#type-override_flag">Asttypes.override_flag</a> * <a href="#type-class_expr">class_expr</a> * <span><span>string <a href="../Asttypes/index.html#type-loc">Asttypes.loc</a></span> option</span></span></code><div class="def-doc"><span class="comment-delim">(*</span><p><code>Pcf_inherit(flag, CE, s)</code> represents:</p><ul><li><code>inherit CE</code> when <code>flag</code> is <a href="../Asttypes/index.html#type-override_flag.Fresh"><code>Fresh</code></a> and <code>s</code> is <code>None</code>,</li><li><code>inherit CE as x</code> when <code>flag</code> is <a href="../Asttypes/index.html#type-override_flag.Fresh"><code>Fresh</code></a> and <code>s</code> is <code>Some x</code>,</li><li><code>inherit! CE</code> when <code>flag</code> is <a href="../Asttypes/index.html#type-override_flag.Override"><code>Override</code></a> and <code>s</code> is <code>None</code>,</li><li><code>inherit! CE as x</code> when <code>flag</code> is <a href="../Asttypes/index.html#type-override_flag.Override"><code>Override</code></a> and <code>s</code> is <code>Some x</code></li></ul><span class="comment-delim">*)</span></div></li><li id="type-class_field_desc.Pcf_val" class="def variant constructor anchored"><a href="#type-class_field_desc.Pcf_val" class="anchor"></a><code><span>| </span><span><span class="constructor">Pcf_val</span> <span class="keyword">of</span> <span><a href="../Asttypes/index.html#type-label">Asttypes.label</a> <a href="../Asttypes/index.html#type-loc">Asttypes.loc</a></span>
* <a href="../Asttypes/index.html#type-mutable_flag">Asttypes.mutable_flag</a>
* <a href="#type-class_field_kind">class_field_kind</a></span></code><div class="def-doc"><span class="comment-delim">(*</span><p><code>Pcf_val(x,flag, kind)</code> represents:</p><ul><li><code>val x = E</code> when <code>flag</code> is <a href="../Asttypes/index.html#type-mutable_flag.Immutable"><code>Immutable</code></a> and <code>kind</code> is <a href="#type-class_field_kind.Cfk_concrete"><code>Cfk_concrete(Fresh, E)</code></a></li><li><code>val virtual x: T</code> when <code>flag</code> is <a href="../Asttypes/index.html#type-mutable_flag.Immutable"><code>Immutable</code></a> and <code>kind</code> is <a href="#type-class_field_kind.Cfk_virtual"><code>Cfk_virtual(T)</code></a></li><li><code>val mutable x = E</code> when <code>flag</code> is <a href="../Asttypes/index.html#type-mutable_flag.Mutable"><code>Mutable</code></a> and <code>kind</code> is <a href="#type-class_field_kind.Cfk_concrete"><code>Cfk_concrete(Fresh, E)</code></a></li><li><code>val mutable virtual x: T</code> when <code>flag</code> is <a href="../Asttypes/index.html#type-mutable_flag.Mutable"><code>Mutable</code></a> and <code>kind</code> is <a href="#type-class_field_kind.Cfk_virtual"><code>Cfk_virtual(T)</code></a></li></ul><span class="comment-delim">*)</span></div></li><li id="type-class_field_desc.Pcf_method" class="def variant constructor anchored"><a href="#type-class_field_desc.Pcf_method" class="anchor"></a><code><span>| </span><span><span class="constructor">Pcf_method</span> <span class="keyword">of</span> <span><a href="../Asttypes/index.html#type-label">Asttypes.label</a> <a href="../Asttypes/index.html#type-loc">Asttypes.loc</a></span>
* <a href="../Asttypes/index.html#type-private_flag">Asttypes.private_flag</a>
* <a href="#type-class_field_kind">class_field_kind</a></span></code><div class="def-doc"><span class="comment-delim">(*</span><ul><li><code>method x = E</code> (<code>E</code> can be a <a href="#type-expression_desc.Pexp_poly"><code>Pexp_poly</code></a>)</li><li><code>method virtual x: T</code> (<code>T</code> can be a <a href="#type-core_type_desc.Ptyp_poly"><code>Ptyp_poly</code></a>)</li></ul><span class="comment-delim">*)</span></div></li><li id="type-class_field_desc.Pcf_constraint" class="def variant constructor anchored"><a href="#type-class_field_desc.Pcf_constraint" class="anchor"></a><code><span>| </span><span><span class="constructor">Pcf_constraint</span> <span class="keyword">of</span> <a href="#type-core_type">core_type</a> * <a href="#type-core_type">core_type</a></span></code><div class="def-doc"><span class="comment-delim">(*</span><p><code>constraint T1 = T2</code></p><span class="comment-delim">*)</span></div></li><li id="type-class_field_desc.Pcf_initializer" class="def variant constructor anchored"><a href="#type-class_field_desc.Pcf_initializer" class="anchor"></a><code><span>| </span><span><span class="constructor">Pcf_initializer</span> <span class="keyword">of</span> <a href="#type-expression">expression</a></span></code><div class="def-doc"><span class="comment-delim">(*</span><p><code>initializer E</code></p><span class="comment-delim">*)</span></div></li><li id="type-class_field_desc.Pcf_attribute" class="def variant constructor anchored"><a href="#type-class_field_desc.Pcf_attribute" class="anchor"></a><code><span>| </span><span><span class="constructor">Pcf_attribute</span> <span class="keyword">of</span> <a href="#type-attribute">attribute</a></span></code><div class="def-doc"><span class="comment-delim">(*</span><p><code>[\@\@\@id]</code></p><span class="comment-delim">*)</span></div></li><li id="type-class_field_desc.Pcf_extension" class="def variant constructor anchored"><a href="#type-class_field_desc.Pcf_extension" class="anchor"></a><code><span>| </span><span><span class="constructor">Pcf_extension</span> <span class="keyword">of</span> <a href="#type-extension">extension</a></span></code><div class="def-doc"><span class="comment-delim">(*</span><p><code>[%%id]</code></p><span class="comment-delim">*)</span></div></li></ol></div></div><div class="odoc-spec"><div class="spec type anchored" id="type-class_field_kind"><a href="#type-class_field_kind" class="anchor"></a><code><span><span class="keyword">and</span> class_field_kind</span><span> = </span></code><ol><li id="type-class_field_kind.Cfk_virtual" class="def variant constructor anchored"><a href="#type-class_field_kind.Cfk_virtual" class="anchor"></a><code><span>| </span><span><span class="constructor">Cfk_virtual</span> <span class="keyword">of</span> <a href="#type-core_type">core_type</a></span></code></li><li id="type-class_field_kind.Cfk_concrete" class="def variant constructor anchored"><a href="#type-class_field_kind.Cfk_concrete" class="anchor"></a><code><span>| </span><span><span class="constructor">Cfk_concrete</span> <span class="keyword">of</span> <a href="../Asttypes/index.html#type-override_flag">Asttypes.override_flag</a> * <a href="#type-expression">expression</a></span></code></li></ol></div></div><div class="odoc-spec"><div class="spec type anchored" id="type-class_declaration"><a href="#type-class_declaration" class="anchor"></a><code><span><span class="keyword">and</span> class_declaration</span><span> = <span><a href="#type-class_expr">class_expr</a> <a href="#type-class_infos">class_infos</a></span></span></code></div></div><h2 id="module-language"><a href="#module-language" class="anchor"></a>Module language</h2><h3 id="type-expressions-for-the-module-language"><a href="#type-expressions-for-the-module-language" class="anchor"></a>Type expressions for the module language</h3><div class="odoc-spec"><div class="spec type anchored" id="type-module_type"><a href="#type-module_type" class="anchor"></a><code><span><span class="keyword">and</span> module_type</span><span> = </span><span>{</span></code><ol><li id="type-module_type.pmty_desc" class="def record field anchored"><a href="#type-module_type.pmty_desc" class="anchor"></a><code><span>pmty_desc : <a href="#type-module_type_desc">module_type_desc</a>;</span></code></li><li id="type-module_type.pmty_loc" class="def record field anchored"><a href="#type-module_type.pmty_loc" class="anchor"></a><code><span>pmty_loc : <a href="../Location/index.html#type-t">Location.t</a>;</span></code></li><li id="type-module_type.pmty_attributes" class="def record field anchored"><a href="#type-module_type.pmty_attributes" class="anchor"></a><code><span>pmty_attributes : <a href="#type-attributes">attributes</a>;</span></code><div class="def-doc"><span class="comment-delim">(*</span><p><code>... [\@id1] [\@id2]</code></p><span class="comment-delim">*)</span></div></li></ol><code><span>}</span></code></div></div><div class="odoc-spec"><div class="spec type anchored" id="type-module_type_desc"><a href="#type-module_type_desc" class="anchor"></a><code><span><span class="keyword">and</span> module_type_desc</span><span> = </span></code><ol><li id="type-module_type_desc.Pmty_ident" class="def variant constructor anchored"><a href="#type-module_type_desc.Pmty_ident" class="anchor"></a><code><span>| </span><span><span class="constructor">Pmty_ident</span> <span class="keyword">of</span> <span><a href="../Longident/index.html#type-t">Longident.t</a> <a href="../Asttypes/index.html#type-loc">Asttypes.loc</a></span></span></code><div class="def-doc"><span class="comment-delim">(*</span><p><code>Pmty_ident(S)</code> represents <code>S</code></p><span class="comment-delim">*)</span></div></li><li id="type-module_type_desc.Pmty_signature" class="def variant constructor anchored"><a href="#type-module_type_desc.Pmty_signature" class="anchor"></a><code><span>| </span><span><span class="constructor">Pmty_signature</span> <span class="keyword">of</span> <a href="#type-signature">signature</a></span></code><div class="def-doc"><span class="comment-delim">(*</span><p><code>sig ... end</code></p><span class="comment-delim">*)</span></div></li><li id="type-module_type_desc.Pmty_functor" class="def variant constructor anchored"><a href="#type-module_type_desc.Pmty_functor" class="anchor"></a><code><span>| </span><span><span class="constructor">Pmty_functor</span> <span class="keyword">of</span> <a href="#type-functor_parameter">functor_parameter</a> * <a href="#type-module_type">module_type</a></span></code><div class="def-doc"><span class="comment-delim">(*</span><p><code>functor(X : MT1) -&gt; MT2</code></p><span class="comment-delim">*)</span></div></li><li id="type-module_type_desc.Pmty_with" class="def variant constructor anchored"><a href="#type-module_type_desc.Pmty_with" class="anchor"></a><code><span>| </span><span><span class="constructor">Pmty_with</span> <span class="keyword">of</span> <a href="#type-module_type">module_type</a> * <span><a href="#type-with_constraint">with_constraint</a> list</span></span></code><div class="def-doc"><span class="comment-delim">(*</span><p><code>MT with ...</code></p><span class="comment-delim">*)</span></div></li><li id="type-module_type_desc.Pmty_typeof" class="def variant constructor anchored"><a href="#type-module_type_desc.Pmty_typeof" class="anchor"></a><code><span>| </span><span><span class="constructor">Pmty_typeof</span> <span class="keyword">of</span> <a href="#type-module_expr">module_expr</a></span></code><div class="def-doc"><span class="comment-delim">(*</span><p><code>module type of ME</code></p><span class="comment-delim">*)</span></div></li><li id="type-module_type_desc.Pmty_extension" class="def variant constructor anchored"><a href="#type-module_type_desc.Pmty_extension" class="anchor"></a><code><span>| </span><span><span class="constructor">Pmty_extension</span> <span class="keyword">of</span> <a href="#type-extension">extension</a></span></code><div class="def-doc"><span class="comment-delim">(*</span><p><code>[%id]</code></p><span class="comment-delim">*)</span></div></li><li id="type-module_type_desc.Pmty_alias" class="def variant constructor anchored"><a href="#type-module_type_desc.Pmty_alias" class="anchor"></a><code><span>| </span><span><span class="constructor">Pmty_alias</span> <span class="keyword">of</span> <span><a href="../Longident/index.html#type-t">Longident.t</a> <a href="../Asttypes/index.html#type-loc">Asttypes.loc</a></span></span></code><div class="def-doc"><span class="comment-delim">(*</span><p><code>(module M)</code></p><span class="comment-delim">*)</span></div></li></ol></div></div><div class="odoc-spec"><div class="spec type anchored" id="type-functor_parameter"><a href="#type-functor_parameter" class="anchor"></a><code><span><span class="keyword">and</span> functor_parameter</span><span> = </span></code><ol><li id="type-functor_parameter.Unit" class="def variant constructor anchored"><a href="#type-functor_parameter.Unit" class="anchor"></a><code><span>| </span><span><span class="constructor">Unit</span></span></code><div class="def-doc"><span class="comment-delim">(*</span><p><code>()</code></p><span class="comment-delim">*)</span></div></li><li id="type-functor_parameter.Named" class="def variant constructor anchored"><a href="#type-functor_parameter.Named" class="anchor"></a><code><span>| </span><span><span class="constructor">Named</span> <span class="keyword">of</span> <span><span>string option</span> <a href="../Asttypes/index.html#type-loc">Asttypes.loc</a></span> * <a href="#type-module_type">module_type</a></span></code><div class="def-doc"><span class="comment-delim">(*</span><p><code>Named(name, MT)</code> represents:</p><ul><li><code>(X : MT)</code> when <code>name</code> is <code>Some X</code>,</li><li><code>(_ : MT)</code> when <code>name</code> is <code>None</code></li></ul><span class="comment-delim">*)</span></div></li></ol></div></div><div class="odoc-spec"><div class="spec type anchored" id="type-signature"><a href="#type-signature" class="anchor"></a><code><span><span class="keyword">and</span> signature</span><span> = <span><a href="#type-signature_item">signature_item</a> list</span></span></code></div></div><div class="odoc-spec"><div class="spec type anchored" id="type-signature_item"><a href="#type-signature_item" class="anchor"></a><code><span><span class="keyword">and</span> signature_item</span><span> = </span><span>{</span></code><ol><li id="type-signature_item.psig_desc" class="def record field anchored"><a href="#type-signature_item.psig_desc" class="anchor"></a><code><span>psig_desc : <a href="#type-signature_item_desc">signature_item_desc</a>;</span></code></li><li id="type-signature_item.psig_loc" class="def record field anchored"><a href="#type-signature_item.psig_loc" class="anchor"></a><code><span>psig_loc : <a href="../Location/index.html#type-t">Location.t</a>;</span></code></li></ol><code><span>}</span></code></div></div><div class="odoc-spec"><div class="spec type anchored" id="type-signature_item_desc"><a href="#type-signature_item_desc" class="anchor"></a><code><span><span class="keyword">and</span> signature_item_desc</span><span> = </span></code><ol><li id="type-signature_item_desc.Psig_value" class="def variant constructor anchored"><a href="#type-signature_item_desc.Psig_value" class="anchor"></a><code><span>| </span><span><span class="constructor">Psig_value</span> <span class="keyword">of</span> <a href="#type-value_description">value_description</a></span></code><div class="def-doc"><span class="comment-delim">(*</span><ul><li><code>val x: T</code></li><li><code>external x: T = &quot;s1&quot; ... &quot;sn&quot;</code></li></ul><span class="comment-delim">*)</span></div></li><li id="type-signature_item_desc.Psig_type" class="def variant constructor anchored"><a href="#type-signature_item_desc.Psig_type" class="anchor"></a><code><span>| </span><span><span class="constructor">Psig_type</span> <span class="keyword">of</span> <a href="../Asttypes/index.html#type-rec_flag">Asttypes.rec_flag</a> * <span><a href="#type-type_declaration">type_declaration</a> list</span></span></code><div class="def-doc"><span class="comment-delim">(*</span><p><code>type t1 = ... and ... and tn = ...</code></p><span class="comment-delim">*)</span></div></li><li id="type-signature_item_desc.Psig_typesubst" class="def variant constructor anchored"><a href="#type-signature_item_desc.Psig_typesubst" class="anchor"></a><code><span>| </span><span><span class="constructor">Psig_typesubst</span> <span class="keyword">of</span> <span><a href="#type-type_declaration">type_declaration</a> list</span></span></code><div class="def-doc"><span class="comment-delim">(*</span><p><code>type t1 := ... and ... and tn := ...</code></p><span class="comment-delim">*)</span></div></li><li id="type-signature_item_desc.Psig_typext" class="def variant constructor anchored"><a href="#type-signature_item_desc.Psig_typext" class="anchor"></a><code><span>| </span><span><span class="constructor">Psig_typext</span> <span class="keyword">of</span> <a href="#type-type_extension">type_extension</a></span></code><div class="def-doc"><span class="comment-delim">(*</span><p><code>type t1 += ...</code></p><span class="comment-delim">*)</span></div></li><li id="type-signature_item_desc.Psig_exception" class="def variant constructor anchored"><a href="#type-signature_item_desc.Psig_exception" class="anchor"></a><code><span>| </span><span><span class="constructor">Psig_exception</span> <span class="keyword">of</span> <a href="#type-type_exception">type_exception</a></span></code><div class="def-doc"><span class="comment-delim">(*</span><p><code>exception C of T</code></p><span class="comment-delim">*)</span></div></li><li id="type-signature_item_desc.Psig_module" class="def variant constructor anchored"><a href="#type-signature_item_desc.Psig_module" class="anchor"></a><code><span>| </span><span><span class="constructor">Psig_module</span> <span class="keyword">of</span> <a href="#type-module_declaration">module_declaration</a></span></code><div class="def-doc"><span class="comment-delim">(*</span><p><code>module X = M</code> and <code>module X : MT</code></p><span class="comment-delim">*)</span></div></li><li id="type-signature_item_desc.Psig_modsubst" class="def variant constructor anchored"><a href="#type-signature_item_desc.Psig_modsubst" class="anchor"></a><code><span>| </span><span><span class="constructor">Psig_modsubst</span> <span class="keyword">of</span> <a href="#type-module_substitution">module_substitution</a></span></code><div class="def-doc"><span class="comment-delim">(*</span><p><code>module X := M</code></p><span class="comment-delim">*)</span></div></li><li id="type-signature_item_desc.Psig_recmodule" class="def variant constructor anchored"><a href="#type-signature_item_desc.Psig_recmodule" class="anchor"></a><code><span>| </span><span><span class="constructor">Psig_recmodule</span> <span class="keyword">of</span> <span><a href="#type-module_declaration">module_declaration</a> list</span></span></code><div class="def-doc"><span class="comment-delim">(*</span><p><code>module rec X1 : MT1 and ... and Xn : MTn</code></p><span class="comment-delim">*)</span></div></li><li id="type-signature_item_desc.Psig_modtype" class="def variant constructor anchored"><a href="#type-signature_item_desc.Psig_modtype" class="anchor"></a><code><span>| </span><span><span class="constructor">Psig_modtype</span> <span class="keyword">of</span> <a href="#type-module_type_declaration">module_type_declaration</a></span></code><div class="def-doc"><span class="comment-delim">(*</span><p><code>module type S = MT</code> and <code>module type S</code></p><span class="comment-delim">*)</span></div></li><li id="type-signature_item_desc.Psig_modtypesubst" class="def variant constructor anchored"><a href="#type-signature_item_desc.Psig_modtypesubst" class="anchor"></a><code><span>| </span><span><span class="constructor">Psig_modtypesubst</span> <span class="keyword">of</span> <a href="#type-module_type_declaration">module_type_declaration</a></span></code><div class="def-doc"><span class="comment-delim">(*</span><p><code>module type S := ...</code></p><span class="comment-delim">*)</span></div></li><li id="type-signature_item_desc.Psig_open" class="def variant constructor anchored"><a href="#type-signature_item_desc.Psig_open" class="anchor"></a><code><span>| </span><span><span class="constructor">Psig_open</span> <span class="keyword">of</span> <a href="#type-open_description">open_description</a></span></code><div class="def-doc"><span class="comment-delim">(*</span><p><code>open X</code></p><span class="comment-delim">*)</span></div></li><li id="type-signature_item_desc.Psig_include" class="def variant constructor anchored"><a href="#type-signature_item_desc.Psig_include" class="anchor"></a><code><span>| </span><span><span class="constructor">Psig_include</span> <span class="keyword">of</span> <a href="#type-include_description">include_description</a></span></code><div class="def-doc"><span class="comment-delim">(*</span><p><code>include MT</code></p><span class="comment-delim">*)</span></div></li><li id="type-signature_item_desc.Psig_class" class="def variant constructor anchored"><a href="#type-signature_item_desc.Psig_class" class="anchor"></a><code><span>| </span><span><span class="constructor">Psig_class</span> <span class="keyword">of</span> <span><a href="#type-class_description">class_description</a> list</span></span></code><div class="def-doc"><span class="comment-delim">(*</span><p><code>class c1 : ... and ... and cn : ...</code></p><span class="comment-delim">*)</span></div></li><li id="type-signature_item_desc.Psig_class_type" class="def variant constructor anchored"><a href="#type-signature_item_desc.Psig_class_type" class="anchor"></a><code><span>| </span><span><span class="constructor">Psig_class_type</span> <span class="keyword">of</span> <span><a href="#type-class_type_declaration">class_type_declaration</a> list</span></span></code><div class="def-doc"><span class="comment-delim">(*</span><p><code>class type ct1 = ... and ... and ctn = ...</code></p><span class="comment-delim">*)</span></div></li><li id="type-signature_item_desc.Psig_attribute" class="def variant constructor anchored"><a href="#type-signature_item_desc.Psig_attribute" class="anchor"></a><code><span>| </span><span><span class="constructor">Psig_attribute</span> <span class="keyword">of</span> <a href="#type-attribute">attribute</a></span></code><div class="def-doc"><span class="comment-delim">(*</span><p><code>[\@\@\@id]</code></p><span class="comment-delim">*)</span></div></li><li id="type-signature_item_desc.Psig_extension" class="def variant constructor anchored"><a href="#type-signature_item_desc.Psig_extension" class="anchor"></a><code><span>| </span><span><span class="constructor">Psig_extension</span> <span class="keyword">of</span> <a href="#type-extension">extension</a> * <a href="#type-attributes">attributes</a></span></code><div class="def-doc"><span class="comment-delim">(*</span><p><code>[%%id]</code></p><span class="comment-delim">*)</span></div></li></ol></div></div><div class="odoc-spec"><div class="spec type anchored" id="type-module_declaration"><a href="#type-module_declaration" class="anchor"></a><code><span><span class="keyword">and</span> module_declaration</span><span> = </span><span>{</span></code><ol><li id="type-module_declaration.pmd_name" class="def record field anchored"><a href="#type-module_declaration.pmd_name" class="anchor"></a><code><span>pmd_name : <span><span>string option</span> <a href="../Asttypes/index.html#type-loc">Asttypes.loc</a></span>;</span></code></li><li id="type-module_declaration.pmd_type" class="def record field anchored"><a href="#type-module_declaration.pmd_type" class="anchor"></a><code><span>pmd_type : <a href="#type-module_type">module_type</a>;</span></code></li><li id="type-module_declaration.pmd_attributes" class="def record field anchored"><a href="#type-module_declaration.pmd_attributes" class="anchor"></a><code><span>pmd_attributes : <a href="#type-attributes">attributes</a>;</span></code><div class="def-doc"><span class="comment-delim">(*</span><p><code>... [\@\@id1] [\@\@id2]</code></p><span class="comment-delim">*)</span></div></li><li id="type-module_declaration.pmd_loc" class="def record field anchored"><a href="#type-module_declaration.pmd_loc" class="anchor"></a><code><span>pmd_loc : <a href="../Location/index.html#type-t">Location.t</a>;</span></code></li></ol><code><span>}</span></code></div><div class="spec-doc"><p>Values of type <code>module_declaration</code> represents <code>S : MT</code></p></div></div><div class="odoc-spec"><div class="spec type anchored" id="type-module_substitution"><a href="#type-module_substitution" class="anchor"></a><code><span><span class="keyword">and</span> module_substitution</span><span> = </span><span>{</span></code><ol><li id="type-module_substitution.pms_name" class="def record field anchored"><a href="#type-module_substitution.pms_name" class="anchor"></a><code><span>pms_name : <span>string <a href="../Asttypes/index.html#type-loc">Asttypes.loc</a></span>;</span></code></li><li id="type-module_substitution.pms_manifest" class="def record field anchored"><a href="#type-module_substitution.pms_manifest" class="anchor"></a><code><span>pms_manifest : <span><a href="../Longident/index.html#type-t">Longident.t</a> <a href="../Asttypes/index.html#type-loc">Asttypes.loc</a></span>;</span></code></li><li id="type-module_substitution.pms_attributes" class="def record field anchored"><a href="#type-module_substitution.pms_attributes" class="anchor"></a><code><span>pms_attributes : <a href="#type-attributes">attributes</a>;</span></code><div class="def-doc"><span class="comment-delim">(*</span><p><code>... [\@\@id1] [\@\@id2]</code></p><span class="comment-delim">*)</span></div></li><li id="type-module_substitution.pms_loc" class="def record field anchored"><a href="#type-module_substitution.pms_loc" class="anchor"></a><code><span>pms_loc : <a href="../Location/index.html#type-t">Location.t</a>;</span></code></li></ol><code><span>}</span></code></div><div class="spec-doc"><p>Values of type <code>module_substitution</code> represents <code>S := M</code></p></div></div><div class="odoc-spec"><div class="spec type anchored" id="type-module_type_declaration"><a href="#type-module_type_declaration" class="anchor"></a><code><span><span class="keyword">and</span> module_type_declaration</span><span> = </span><span>{</span></code><ol><li id="type-module_type_declaration.pmtd_name" class="def record field anchored"><a href="#type-module_type_declaration.pmtd_name" class="anchor"></a><code><span>pmtd_name : <span>string <a href="../Asttypes/index.html#type-loc">Asttypes.loc</a></span>;</span></code></li><li id="type-module_type_declaration.pmtd_type" class="def record field anchored"><a href="#type-module_type_declaration.pmtd_type" class="anchor"></a><code><span>pmtd_type : <span><a href="#type-module_type">module_type</a> option</span>;</span></code></li><li id="type-module_type_declaration.pmtd_attributes" class="def record field anchored"><a href="#type-module_type_declaration.pmtd_attributes" class="anchor"></a><code><span>pmtd_attributes : <a href="#type-attributes">attributes</a>;</span></code><div class="def-doc"><span class="comment-delim">(*</span><p><code>... [\@\@id1] [\@\@id2]</code></p><span class="comment-delim">*)</span></div></li><li id="type-module_type_declaration.pmtd_loc" class="def record field anchored"><a href="#type-module_type_declaration.pmtd_loc" class="anchor"></a><code><span>pmtd_loc : <a href="../Location/index.html#type-t">Location.t</a>;</span></code></li></ol><code><span>}</span></code></div><div class="spec-doc"><p>Values of type <code>module_type_declaration</code> represents:</p><ul><li><code>S = MT</code>,</li><li><code>S</code> for abstract module type declaration, when <a href="#type-module_type_declaration.pmtd_type"><code>pmtd_type</code></a> is <code>None</code>.</li></ul></div></div><div class="odoc-spec"><div class="spec type anchored" id="type-open_infos"><a href="#type-open_infos" class="anchor"></a><code><span><span class="keyword">and</span> <span>'a open_infos</span></span><span> = </span><span>{</span></code><ol><li id="type-open_infos.popen_expr" class="def record field anchored"><a href="#type-open_infos.popen_expr" class="anchor"></a><code><span>popen_expr : <span class="type-var">'a</span>;</span></code></li><li id="type-open_infos.popen_override" class="def record field anchored"><a href="#type-open_infos.popen_override" class="anchor"></a><code><span>popen_override : <a href="../Asttypes/index.html#type-override_flag">Asttypes.override_flag</a>;</span></code></li><li id="type-open_infos.popen_loc" class="def record field anchored"><a href="#type-open_infos.popen_loc" class="anchor"></a><code><span>popen_loc : <a href="../Location/index.html#type-t">Location.t</a>;</span></code></li><li id="type-open_infos.popen_attributes" class="def record field anchored"><a href="#type-open_infos.popen_attributes" class="anchor"></a><code><span>popen_attributes : <a href="#type-attributes">attributes</a>;</span></code></li></ol><code><span>}</span></code></div><div class="spec-doc"><p>Values of type <code>'a open_infos</code> represents:</p><ul><li><code>open! X</code> when <a href="#type-open_infos.popen_override"><code>popen_override</code></a> is <a href="../Asttypes/index.html#type-override_flag.Override"><code>Override</code></a> (silences the &quot;used identifier shadowing&quot; warning)</li><li><code>open X</code> when <a href="#type-open_infos.popen_override"><code>popen_override</code></a> is <a href="../Asttypes/index.html#type-override_flag.Fresh"><code>Fresh</code></a></li></ul></div></div><div class="odoc-spec"><div class="spec type anchored" id="type-open_description"><a href="#type-open_description" class="anchor"></a><code><span><span class="keyword">and</span> open_description</span><span> = <span><span><a href="../Longident/index.html#type-t">Longident.t</a> <a href="../Asttypes/index.html#type-loc">Asttypes.loc</a></span> <a href="#type-open_infos">open_infos</a></span></span></code></div><div class="spec-doc"><p>Values of type <code>open_description</code> represents:</p><ul><li><code>open M.N</code></li><li><code>open M(N).O</code></li></ul></div></div><div class="odoc-spec"><div class="spec type anchored" id="type-open_declaration"><a href="#type-open_declaration" class="anchor"></a><code><span><span class="keyword">and</span> open_declaration</span><span> = <span><a href="#type-module_expr">module_expr</a> <a href="#type-open_infos">open_infos</a></span></span></code></div><div class="spec-doc"><p>Values of type <code>open_declaration</code> represents:</p><ul><li><code>open M.N</code></li><li><code>open M(N).O</code></li><li><code>open struct ... end</code></li></ul></div></div><div class="odoc-spec"><div class="spec type anchored" id="type-include_infos"><a href="#type-include_infos" class="anchor"></a><code><span><span class="keyword">and</span> <span>'a include_infos</span></span><span> = </span><span>{</span></code><ol><li id="type-include_infos.pincl_mod" class="def record field anchored"><a href="#type-include_infos.pincl_mod" class="anchor"></a><code><span>pincl_mod : <span class="type-var">'a</span>;</span></code></li><li id="type-include_infos.pincl_loc" class="def record field anchored"><a href="#type-include_infos.pincl_loc" class="anchor"></a><code><span>pincl_loc : <a href="../Location/index.html#type-t">Location.t</a>;</span></code></li><li id="type-include_infos.pincl_attributes" class="def record field anchored"><a href="#type-include_infos.pincl_attributes" class="anchor"></a><code><span>pincl_attributes : <a href="#type-attributes">attributes</a>;</span></code></li></ol><code><span>}</span></code></div></div><div class="odoc-spec"><div class="spec type anchored" id="type-include_description"><a href="#type-include_description" class="anchor"></a><code><span><span class="keyword">and</span> include_description</span><span> = <span><a href="#type-module_type">module_type</a> <a href="#type-include_infos">include_infos</a></span></span></code></div><div class="spec-doc"><p>Values of type <code>include_description</code> represents <code>include MT</code></p></div></div><div class="odoc-spec"><div class="spec type anchored" id="type-include_declaration"><a href="#type-include_declaration" class="anchor"></a><code><span><span class="keyword">and</span> include_declaration</span><span> = <span><a href="#type-module_expr">module_expr</a> <a href="#type-include_infos">include_infos</a></span></span></code></div><div class="spec-doc"><p>Values of type <code>include_declaration</code> represents <code>include ME</code></p></div></div><div class="odoc-spec"><div class="spec type anchored" id="type-with_constraint"><a href="#type-with_constraint" class="anchor"></a><code><span><span class="keyword">and</span> with_constraint</span><span> = </span></code><ol><li id="type-with_constraint.Pwith_type" class="def variant constructor anchored"><a href="#type-with_constraint.Pwith_type" class="anchor"></a><code><span>| </span><span><span class="constructor">Pwith_type</span> <span class="keyword">of</span> <span><a href="../Longident/index.html#type-t">Longident.t</a> <a href="../Asttypes/index.html#type-loc">Asttypes.loc</a></span> * <a href="#type-type_declaration">type_declaration</a></span></code><div class="def-doc"><span class="comment-delim">(*</span><p><code>with type X.t = ...</code></p><p>Note: the last component of the longident must match the name of the type_declaration.</p><span class="comment-delim">*)</span></div></li><li id="type-with_constraint.Pwith_module" class="def variant constructor anchored"><a href="#type-with_constraint.Pwith_module" class="anchor"></a><code><span>| </span><span><span class="constructor">Pwith_module</span> <span class="keyword">of</span> <span><a href="../Longident/index.html#type-t">Longident.t</a> <a href="../Asttypes/index.html#type-loc">Asttypes.loc</a></span> * <span><a href="../Longident/index.html#type-t">Longident.t</a> <a href="../Asttypes/index.html#type-loc">Asttypes.loc</a></span></span></code><div class="def-doc"><span class="comment-delim">(*</span><p><code>with module X.Y = Z</code></p><span class="comment-delim">*)</span></div></li><li id="type-with_constraint.Pwith_modtype" class="def variant constructor anchored"><a href="#type-with_constraint.Pwith_modtype" class="anchor"></a><code><span>| </span><span><span class="constructor">Pwith_modtype</span> <span class="keyword">of</span> <span><a href="../Longident/index.html#type-t">Longident.t</a> <a href="../Asttypes/index.html#type-loc">Asttypes.loc</a></span> * <a href="#type-module_type">module_type</a></span></code><div class="def-doc"><span class="comment-delim">(*</span><p><code>with module type X.Y = Z</code></p><span class="comment-delim">*)</span></div></li><li id="type-with_constraint.Pwith_modtypesubst" class="def variant constructor anchored"><a href="#type-with_constraint.Pwith_modtypesubst" class="anchor"></a><code><span>| </span><span><span class="constructor">Pwith_modtypesubst</span> <span class="keyword">of</span> <span><a href="../Longident/index.html#type-t">Longident.t</a> <a href="../Asttypes/index.html#type-loc">Asttypes.loc</a></span> * <a href="#type-module_type">module_type</a></span></code><div class="def-doc"><span class="comment-delim">(*</span><p><code>with module type X.Y := sig end</code></p><span class="comment-delim">*)</span></div></li><li id="type-with_constraint.Pwith_typesubst" class="def variant constructor anchored"><a href="#type-with_constraint.Pwith_typesubst" class="anchor"></a><code><span>| </span><span><span class="constructor">Pwith_typesubst</span> <span class="keyword">of</span> <span><a href="../Longident/index.html#type-t">Longident.t</a> <a href="../Asttypes/index.html#type-loc">Asttypes.loc</a></span> * <a href="#type-type_declaration">type_declaration</a></span></code><div class="def-doc"><span class="comment-delim">(*</span><p><code>with type X.t := ..., same format as [Pwith_type]</code></p><span class="comment-delim">*)</span></div></li><li id="type-with_constraint.Pwith_modsubst" class="def variant constructor anchored"><a href="#type-with_constraint.Pwith_modsubst" class="anchor"></a><code><span>| </span><span><span class="constructor">Pwith_modsubst</span> <span class="keyword">of</span> <span><a href="../Longident/index.html#type-t">Longident.t</a> <a href="../Asttypes/index.html#type-loc">Asttypes.loc</a></span> * <span><a href="../Longident/index.html#type-t">Longident.t</a> <a href="../Asttypes/index.html#type-loc">Asttypes.loc</a></span></span></code><div class="def-doc"><span class="comment-delim">(*</span><p><code>with module X.Y := Z</code></p><span class="comment-delim">*)</span></div></li></ol></div></div><h3 id="value-expressions-for-the-module-language"><a href="#value-expressions-for-the-module-language" class="anchor"></a>Value expressions for the module language</h3><div class="odoc-spec"><div class="spec type anchored" id="type-module_expr"><a href="#type-module_expr" class="anchor"></a><code><span><span class="keyword">and</span> module_expr</span><span> = </span><span>{</span></code><ol><li id="type-module_expr.pmod_desc" class="def record field anchored"><a href="#type-module_expr.pmod_desc" class="anchor"></a><code><span>pmod_desc : <a href="#type-module_expr_desc">module_expr_desc</a>;</span></code></li><li id="type-module_expr.pmod_loc" class="def record field anchored"><a href="#type-module_expr.pmod_loc" class="anchor"></a><code><span>pmod_loc : <a href="../Location/index.html#type-t">Location.t</a>;</span></code></li><li id="type-module_expr.pmod_attributes" class="def record field anchored"><a href="#type-module_expr.pmod_attributes" class="anchor"></a><code><span>pmod_attributes : <a href="#type-attributes">attributes</a>;</span></code><div class="def-doc"><span class="comment-delim">(*</span><p><code>... [\@id1] [\@id2]</code></p><span class="comment-delim">*)</span></div></li></ol><code><span>}</span></code></div></div><div class="odoc-spec"><div class="spec type anchored" id="type-module_expr_desc"><a href="#type-module_expr_desc" class="anchor"></a><code><span><span class="keyword">and</span> module_expr_desc</span><span> = </span></code><ol><li id="type-module_expr_desc.Pmod_ident" class="def variant constructor anchored"><a href="#type-module_expr_desc.Pmod_ident" class="anchor"></a><code><span>| </span><span><span class="constructor">Pmod_ident</span> <span class="keyword">of</span> <span><a href="../Longident/index.html#type-t">Longident.t</a> <a href="../Asttypes/index.html#type-loc">Asttypes.loc</a></span></span></code><div class="def-doc"><span class="comment-delim">(*</span><p><code>X</code></p><span class="comment-delim">*)</span></div></li><li id="type-module_expr_desc.Pmod_structure" class="def variant constructor anchored"><a href="#type-module_expr_desc.Pmod_structure" class="anchor"></a><code><span>| </span><span><span class="constructor">Pmod_structure</span> <span class="keyword">of</span> <a href="#type-structure">structure</a></span></code><div class="def-doc"><span class="comment-delim">(*</span><p><code>struct ... end</code></p><span class="comment-delim">*)</span></div></li><li id="type-module_expr_desc.Pmod_functor" class="def variant constructor anchored"><a href="#type-module_expr_desc.Pmod_functor" class="anchor"></a><code><span>| </span><span><span class="constructor">Pmod_functor</span> <span class="keyword">of</span> <a href="#type-functor_parameter">functor_parameter</a> * <a href="#type-module_expr">module_expr</a></span></code><div class="def-doc"><span class="comment-delim">(*</span><p><code>functor(X : MT1) -&gt; ME</code></p><span class="comment-delim">*)</span></div></li><li id="type-module_expr_desc.Pmod_apply" class="def variant constructor anchored"><a href="#type-module_expr_desc.Pmod_apply" class="anchor"></a><code><span>| </span><span><span class="constructor">Pmod_apply</span> <span class="keyword">of</span> <a href="#type-module_expr">module_expr</a> * <a href="#type-module_expr">module_expr</a></span></code><div class="def-doc"><span class="comment-delim">(*</span><p><code>ME1(ME2)</code></p><span class="comment-delim">*)</span></div></li><li id="type-module_expr_desc.Pmod_constraint" class="def variant constructor anchored"><a href="#type-module_expr_desc.Pmod_constraint" class="anchor"></a><code><span>| </span><span><span class="constructor">Pmod_constraint</span> <span class="keyword">of</span> <a href="#type-module_expr">module_expr</a> * <a href="#type-module_type">module_type</a></span></code><div class="def-doc"><span class="comment-delim">(*</span><p><code>(ME : MT)</code></p><span class="comment-delim">*)</span></div></li><li id="type-module_expr_desc.Pmod_unpack" class="def variant constructor anchored"><a href="#type-module_expr_desc.Pmod_unpack" class="anchor"></a><code><span>| </span><span><span class="constructor">Pmod_unpack</span> <span class="keyword">of</span> <a href="#type-expression">expression</a></span></code><div class="def-doc"><span class="comment-delim">(*</span><p><code>(val E)</code></p><span class="comment-delim">*)</span></div></li><li id="type-module_expr_desc.Pmod_extension" class="def variant constructor anchored"><a href="#type-module_expr_desc.Pmod_extension" class="anchor"></a><code><span>| </span><span><span class="constructor">Pmod_extension</span> <span class="keyword">of</span> <a href="#type-extension">extension</a></span></code><div class="def-doc"><span class="comment-delim">(*</span><p><code>[%id]</code></p><span class="comment-delim">*)</span></div></li></ol></div></div><div class="odoc-spec"><div class="spec type anchored" id="type-structure"><a href="#type-structure" class="anchor"></a><code><span><span class="keyword">and</span> structure</span><span> = <span><a href="#type-structure_item">structure_item</a> list</span></span></code></div></div><div class="odoc-spec"><div class="spec type anchored" id="type-structure_item"><a href="#type-structure_item" class="anchor"></a><code><span><span class="keyword">and</span> structure_item</span><span> = </span><span>{</span></code><ol><li id="type-structure_item.pstr_desc" class="def record field anchored"><a href="#type-structure_item.pstr_desc" class="anchor"></a><code><span>pstr_desc : <a href="#type-structure_item_desc">structure_item_desc</a>;</span></code></li><li id="type-structure_item.pstr_loc" class="def record field anchored"><a href="#type-structure_item.pstr_loc" class="anchor"></a><code><span>pstr_loc : <a href="../Location/index.html#type-t">Location.t</a>;</span></code></li></ol><code><span>}</span></code></div></div><div class="odoc-spec"><div class="spec type anchored" id="type-structure_item_desc"><a href="#type-structure_item_desc" class="anchor"></a><code><span><span class="keyword">and</span> structure_item_desc</span><span> = </span></code><ol><li id="type-structure_item_desc.Pstr_eval" class="def variant constructor anchored"><a href="#type-structure_item_desc.Pstr_eval" class="anchor"></a><code><span>| </span><span><span class="constructor">Pstr_eval</span> <span class="keyword">of</span> <a href="#type-expression">expression</a> * <a href="#type-attributes">attributes</a></span></code><div class="def-doc"><span class="comment-delim">(*</span><p><code>E</code></p><span class="comment-delim">*)</span></div></li><li id="type-structure_item_desc.Pstr_value" class="def variant constructor anchored"><a href="#type-structure_item_desc.Pstr_value" class="anchor"></a><code><span>| </span><span><span class="constructor">Pstr_value</span> <span class="keyword">of</span> <a href="../Asttypes/index.html#type-rec_flag">Asttypes.rec_flag</a> * <span><a href="#type-value_binding">value_binding</a> list</span></span></code><div class="def-doc"><span class="comment-delim">(*</span><p><code>Pstr_value(rec, [(P1, E1 ; ... ; (Pn, En))])</code> represents:</p><ul><li><code>let P1 = E1 and ... and Pn = EN</code> when <code>rec</code> is <a href="../Asttypes/index.html#type-rec_flag.Nonrecursive"><code>Nonrecursive</code></a>,</li><li><code>let rec P1 = E1 and ... and Pn = EN </code> when <code>rec</code> is <a href="../Asttypes/index.html#type-rec_flag.Recursive"><code>Recursive</code></a>.</li></ul><span class="comment-delim">*)</span></div></li><li id="type-structure_item_desc.Pstr_primitive" class="def variant constructor anchored"><a href="#type-structure_item_desc.Pstr_primitive" class="anchor"></a><code><span>| </span><span><span class="constructor">Pstr_primitive</span> <span class="keyword">of</span> <a href="#type-value_description">value_description</a></span></code><div class="def-doc"><span class="comment-delim">(*</span><ul><li><code>val x: T</code></li><li><code>external x: T = &quot;s1&quot; ... &quot;sn&quot; </code></li></ul><span class="comment-delim">*)</span></div></li><li id="type-structure_item_desc.Pstr_type" class="def variant constructor anchored"><a href="#type-structure_item_desc.Pstr_type" class="anchor"></a><code><span>| </span><span><span class="constructor">Pstr_type</span> <span class="keyword">of</span> <a href="../Asttypes/index.html#type-rec_flag">Asttypes.rec_flag</a> * <span><a href="#type-type_declaration">type_declaration</a> list</span></span></code><div class="def-doc"><span class="comment-delim">(*</span><p><code>type t1 = ... and ... and tn = ...</code></p><span class="comment-delim">*)</span></div></li><li id="type-structure_item_desc.Pstr_typext" class="def variant constructor anchored"><a href="#type-structure_item_desc.Pstr_typext" class="anchor"></a><code><span>| </span><span><span class="constructor">Pstr_typext</span> <span class="keyword">of</span> <a href="#type-type_extension">type_extension</a></span></code><div class="def-doc"><span class="comment-delim">(*</span><p><code>type t1 += ...</code></p><span class="comment-delim">*)</span></div></li><li id="type-structure_item_desc.Pstr_exception" class="def variant constructor anchored"><a href="#type-structure_item_desc.Pstr_exception" class="anchor"></a><code><span>| </span><span><span class="constructor">Pstr_exception</span> <span class="keyword">of</span> <a href="#type-type_exception">type_exception</a></span></code><div class="def-doc"><span class="comment-delim">(*</span><ul><li><code>exception C of T</code></li><li><code>exception C = M.X</code></li></ul><span class="comment-delim">*)</span></div></li><li id="type-structure_item_desc.Pstr_module" class="def variant constructor anchored"><a href="#type-structure_item_desc.Pstr_module" class="anchor"></a><code><span>| </span><span><span class="constructor">Pstr_module</span> <span class="keyword">of</span> <a href="#type-module_binding">module_binding</a></span></code><div class="def-doc"><span class="comment-delim">(*</span><p><code>module X = ME</code></p><span class="comment-delim">*)</span></div></li><li id="type-structure_item_desc.Pstr_recmodule" class="def variant constructor anchored"><a href="#type-structure_item_desc.Pstr_recmodule" class="anchor"></a><code><span>| </span><span><span class="constructor">Pstr_recmodule</span> <span class="keyword">of</span> <span><a href="#type-module_binding">module_binding</a> list</span></span></code><div class="def-doc"><span class="comment-delim">(*</span><p><code>module rec X1 = ME1 and ... and Xn = MEn</code></p><span class="comment-delim">*)</span></div></li><li id="type-structure_item_desc.Pstr_modtype" class="def variant constructor anchored"><a href="#type-structure_item_desc.Pstr_modtype" class="anchor"></a><code><span>| </span><span><span class="constructor">Pstr_modtype</span> <span class="keyword">of</span> <a href="#type-module_type_declaration">module_type_declaration</a></span></code><div class="def-doc"><span class="comment-delim">(*</span><p><code>module type S = MT</code></p><span class="comment-delim">*)</span></div></li><li id="type-structure_item_desc.Pstr_open" class="def variant constructor anchored"><a href="#type-structure_item_desc.Pstr_open" class="anchor"></a><code><span>| </span><span><span class="constructor">Pstr_open</span> <span class="keyword">of</span> <a href="#type-open_declaration">open_declaration</a></span></code><div class="def-doc"><span class="comment-delim">(*</span><p><code>open X</code></p><span class="comment-delim">*)</span></div></li><li id="type-structure_item_desc.Pstr_class" class="def variant constructor anchored"><a href="#type-structure_item_desc.Pstr_class" class="anchor"></a><code><span>| </span><span><span class="constructor">Pstr_class</span> <span class="keyword">of</span> <span><a href="#type-class_declaration">class_declaration</a> list</span></span></code><div class="def-doc"><span class="comment-delim">(*</span><p><code>class c1 = ... and ... and cn = ...</code></p><span class="comment-delim">*)</span></div></li><li id="type-structure_item_desc.Pstr_class_type" class="def variant constructor anchored"><a href="#type-structure_item_desc.Pstr_class_type" class="anchor"></a><code><span>| </span><span><span class="constructor">Pstr_class_type</span> <span class="keyword">of</span> <span><a href="#type-class_type_declaration">class_type_declaration</a> list</span></span></code><div class="def-doc"><span class="comment-delim">(*</span><p><code>class type ct1 = ... and ... and ctn = ...</code></p><span class="comment-delim">*)</span></div></li><li id="type-structure_item_desc.Pstr_include" class="def variant constructor anchored"><a href="#type-structure_item_desc.Pstr_include" class="anchor"></a><code><span>| </span><span><span class="constructor">Pstr_include</span> <span class="keyword">of</span> <a href="#type-include_declaration">include_declaration</a></span></code><div class="def-doc"><span class="comment-delim">(*</span><p><code>include ME</code></p><span class="comment-delim">*)</span></div></li><li id="type-structure_item_desc.Pstr_attribute" class="def variant constructor anchored"><a href="#type-structure_item_desc.Pstr_attribute" class="anchor"></a><code><span>| </span><span><span class="constructor">Pstr_attribute</span> <span class="keyword">of</span> <a href="#type-attribute">attribute</a></span></code><div class="def-doc"><span class="comment-delim">(*</span><p><code>[\@\@\@id]</code></p><span class="comment-delim">*)</span></div></li><li id="type-structure_item_desc.Pstr_extension" class="def variant constructor anchored"><a href="#type-structure_item_desc.Pstr_extension" class="anchor"></a><code><span>| </span><span><span class="constructor">Pstr_extension</span> <span class="keyword">of</span> <a href="#type-extension">extension</a> * <a href="#type-attributes">attributes</a></span></code><div class="def-doc"><span class="comment-delim">(*</span><p><code>[%%id]</code></p><span class="comment-delim">*)</span></div></li></ol></div></div><div class="odoc-spec"><div class="spec type anchored" id="type-value_binding"><a href="#type-value_binding" class="anchor"></a><code><span><span class="keyword">and</span> value_binding</span><span> = </span><span>{</span></code><ol><li id="type-value_binding.pvb_pat" class="def record field anchored"><a href="#type-value_binding.pvb_pat" class="anchor"></a><code><span>pvb_pat : <a href="#type-pattern">pattern</a>;</span></code></li><li id="type-value_binding.pvb_expr" class="def record field anchored"><a href="#type-value_binding.pvb_expr" class="anchor"></a><code><span>pvb_expr : <a href="#type-expression">expression</a>;</span></code></li><li id="type-value_binding.pvb_attributes" class="def record field anchored"><a href="#type-value_binding.pvb_attributes" class="anchor"></a><code><span>pvb_attributes : <a href="#type-attributes">attributes</a>;</span></code></li><li id="type-value_binding.pvb_loc" class="def record field anchored"><a href="#type-value_binding.pvb_loc" class="anchor"></a><code><span>pvb_loc : <a href="../Location/index.html#type-t">Location.t</a>;</span></code></li></ol><code><span>}</span></code></div></div><div class="odoc-spec"><div class="spec type anchored" id="type-module_binding"><a href="#type-module_binding" class="anchor"></a><code><span><span class="keyword">and</span> module_binding</span><span> = </span><span>{</span></code><ol><li id="type-module_binding.pmb_name" class="def record field anchored"><a href="#type-module_binding.pmb_name" class="anchor"></a><code><span>pmb_name : <span><span>string option</span> <a href="../Asttypes/index.html#type-loc">Asttypes.loc</a></span>;</span></code></li><li id="type-module_binding.pmb_expr" class="def record field anchored"><a href="#type-module_binding.pmb_expr" class="anchor"></a><code><span>pmb_expr : <a href="#type-module_expr">module_expr</a>;</span></code></li><li id="type-module_binding.pmb_attributes" class="def record field anchored"><a href="#type-module_binding.pmb_attributes" class="anchor"></a><code><span>pmb_attributes : <a href="#type-attributes">attributes</a>;</span></code></li><li id="type-module_binding.pmb_loc" class="def record field anchored"><a href="#type-module_binding.pmb_loc" class="anchor"></a><code><span>pmb_loc : <a href="../Location/index.html#type-t">Location.t</a>;</span></code></li></ol><code><span>}</span></code></div><div class="spec-doc"><p>Values of type <code>module_binding</code> represents <code>module X = ME</code></p></div></div><h2 id="toplevel"><a href="#toplevel" class="anchor"></a>Toplevel</h2><h3 id="toplevel-phrases"><a href="#toplevel-phrases" class="anchor"></a>Toplevel phrases</h3><div class="odoc-spec"><div class="spec type anchored" id="type-toplevel_phrase"><a href="#type-toplevel_phrase" class="anchor"></a><code><span><span class="keyword">type</span> toplevel_phrase</span><span> = </span></code><ol><li id="type-toplevel_phrase.Ptop_def" class="def variant constructor anchored"><a href="#type-toplevel_phrase.Ptop_def" class="anchor"></a><code><span>| </span><span><span class="constructor">Ptop_def</span> <span class="keyword">of</span> <a href="#type-structure">structure</a></span></code></li><li id="type-toplevel_phrase.Ptop_dir" class="def variant constructor anchored"><a href="#type-toplevel_phrase.Ptop_dir" class="anchor"></a><code><span>| </span><span><span class="constructor">Ptop_dir</span> <span class="keyword">of</span> <a href="#type-toplevel_directive">toplevel_directive</a></span></code><div class="def-doc"><span class="comment-delim">(*</span><p><code>#use</code>, <code>#load</code> ...</p><span class="comment-delim">*)</span></div></li></ol></div></div><div class="odoc-spec"><div class="spec type anchored" id="type-toplevel_directive"><a href="#type-toplevel_directive" class="anchor"></a><code><span><span class="keyword">and</span> toplevel_directive</span><span> = </span><span>{</span></code><ol><li id="type-toplevel_directive.pdir_name" class="def record field anchored"><a href="#type-toplevel_directive.pdir_name" class="anchor"></a><code><span>pdir_name : <span>string <a href="../Asttypes/index.html#type-loc">Asttypes.loc</a></span>;</span></code></li><li id="type-toplevel_directive.pdir_arg" class="def record field anchored"><a href="#type-toplevel_directive.pdir_arg" class="anchor"></a><code><span>pdir_arg : <span><a href="#type-directive_argument">directive_argument</a> option</span>;</span></code></li><li id="type-toplevel_directive.pdir_loc" class="def record field anchored"><a href="#type-toplevel_directive.pdir_loc" class="anchor"></a><code><span>pdir_loc : <a href="../Location/index.html#type-t">Location.t</a>;</span></code></li></ol><code><span>}</span></code></div></div><div class="odoc-spec"><div class="spec type anchored" id="type-directive_argument"><a href="#type-directive_argument" class="anchor"></a><code><span><span class="keyword">and</span> directive_argument</span><span> = </span><span>{</span></code><ol><li id="type-directive_argument.pdira_desc" class="def record field anchored"><a href="#type-directive_argument.pdira_desc" class="anchor"></a><code><span>pdira_desc : <a href="#type-directive_argument_desc">directive_argument_desc</a>;</span></code></li><li id="type-directive_argument.pdira_loc" class="def record field anchored"><a href="#type-directive_argument.pdira_loc" class="anchor"></a><code><span>pdira_loc : <a href="../Location/index.html#type-t">Location.t</a>;</span></code></li></ol><code><span>}</span></code></div></div><div class="odoc-spec"><div class="spec type anchored" id="type-directive_argument_desc"><a href="#type-directive_argument_desc" class="anchor"></a><code><span><span class="keyword">and</span> directive_argument_desc</span><span> = </span></code><ol><li id="type-directive_argument_desc.Pdir_string" class="def variant constructor anchored"><a href="#type-directive_argument_desc.Pdir_string" class="anchor"></a><code><span>| </span><span><span class="constructor">Pdir_string</span> <span class="keyword">of</span> string</span></code></li><li id="type-directive_argument_desc.Pdir_int" class="def variant constructor anchored"><a href="#type-directive_argument_desc.Pdir_int" class="anchor"></a><code><span>| </span><span><span class="constructor">Pdir_int</span> <span class="keyword">of</span> string * <span>char option</span></span></code></li><li id="type-directive_argument_desc.Pdir_ident" class="def variant constructor anchored"><a href="#type-directive_argument_desc.Pdir_ident" class="anchor"></a><code><span>| </span><span><span class="constructor">Pdir_ident</span> <span class="keyword">of</span> <a href="../Longident/index.html#type-t">Longident.t</a></span></code></li><li id="type-directive_argument_desc.Pdir_bool" class="def variant constructor anchored"><a href="#type-directive_argument_desc.Pdir_bool" class="anchor"></a><code><span>| </span><span><span class="constructor">Pdir_bool</span> <span class="keyword">of</span> bool</span></code></li></ol></div></div></div></body></html>