mirror of
https://github.com/c-cube/moonpool.git
synced 2025-12-17 08:06:43 -05:00
22 lines
No EOL
165 KiB
HTML
22 lines
No EOL
165 KiB
HTML
<!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> » 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>"constant"</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 -> 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 -> 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 -> 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 >= 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>< l1:T1; ...; ln:Tn ></code> when <code>flag</code> is <a href="../Asttypes/index.html#type-closed_flag.Closed"><code>Closed</code></a>,</li><li><code>< l1:T1; ...; ln:Tn; .. ></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>[> `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>[< `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>[< `A|`B > `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 ["X";"Y"]</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 & .. & Tn</code> when <code>b</code> is <code>false</code> and <code>l</code> is <code>[T1;...Tn]</code>,</li><li><code>`A of & T1 & .. & 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>&</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>"true"</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 >= 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 > 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 "P"</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 "P"), 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>"true"</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 -> E1 | ... | Pn -> 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 -> 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 -> 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 -> 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) -> 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 -> 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 > 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 -> E1 | ... | Pn -> 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 -> E1 | ... | Pn -> 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 >= 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 > 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 <- 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 :> T)</code> when <code>from</code> is <code>None</code>,</li><li><code>(E : T0 :> 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 <- 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>{< x1 = E1; ...; xn = En >}</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) -> 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 -> E)</code> or <code>(P when E0 -> 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 = "s1" ... "sn"</code> when <a href="#type-value_description.pval_prim"><code>pval_prim</code></a> is <code>["s1";..."sn"]</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 -> 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: {...} -> 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 -> 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 -> 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 -> 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 -> 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 -> 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 "class type" 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 -> 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 -> 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 -> 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) -> 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 > 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) -> 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 = "s1" ... "sn"</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 "used identifier shadowing" 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) -> 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 = "s1" ... "sn" </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> |