deploy: 3d371b10616937e5da8072fe19406200cb497c1f

This commit is contained in:
c-cube 2023-08-28 15:26:13 +00:00
parent 17f7125b27
commit 5e94bcf015
1122 changed files with 26417 additions and 0 deletions

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

View file

@ -0,0 +1,59 @@
@charset "UTF-8";
/* PT Sans */
@font-face
{ font-family: 'PT-Sans';
src: url('PTS55F.woff2') format('woff2');
font-weight: 400; font-style: normal; }
@font-face
{ font-family: 'PT-Sans';
src: url('PTS75F.woff2') format('woff2');
font-weight: 700; font-style: normal; }
@font-face
{ font-family: 'PT-Sans';
src: url('PTS56F.woff2') format('woff2');
font-weight: 400; font-style: italic; }
@font-face
{ font-family: 'PT-Sans';
src: url('PTS76F.woff2') format('woff2');
font-weight: 700; font-style: italic; }
/* PT Sans caption */
@font-face
{ font-family: 'PT-Sans-Caption';
src: url('PTC55F.woff2') format('woff2');
font-weight: 400; font-style: normal; }
@font-face
{ font-family: 'PT-Sans-Caption';
src: url('PTC75F.woff2') format('woff2');
font-weight: 700; font-style: normal; }
/* DejaVu 400 */
@font-face
{ font-family: 'DejaVu-SansMono';
src: url('DejaVuSansMono.woff2') format('woff2');
font-weight: 400; font-style: normal; }
@font-face
{ font-family: 'DejaVu-SansMono';
src: url('DejaVuSansMono-Oblique.woff2') format('woff2');
font-weight: 400; font-style: oblique; }
/* DejaVu 700 */
@font-face
{ font-family: 'DejaVu-SansMono';
src: url('DejaVuSansMono-Bold.woff2') format('woff2');
font-weight: 700; font-style: normal; }
@font-face
{ font-family: 'DejaVu-SansMono';
src: url('DejaVuSansMono-BoldOblique.woff2') format('woff2');
font-weight: 700; font-style: oblique; }

376
dev/_odoc-theme/manual.css Normal file
View file

@ -0,0 +1,376 @@
@charset "UTF-8";
@import url("fonts/fonts.css");
@import url("theme.css");
/* Copyright (c) 2019 The odig programmers. All rights reserved.
Distributed under the ISC license, see terms at the end of the file.
odig v0.0.9 */
:root { --font-headings: "PT-Sans-Caption";
--font-body: "PT-Sans";
--font-mono: "DejaVu-SansMono";
--size-font: 0.96875rem;
--size-font-micro: calc(0.675 * var(--size-font));
--size-font-tiny-ratio: 0.75;
--size-font-tiny: calc(var(--size-font-tiny-ratio) * var(--size-font));
--size-font-small: calc(0.875 * var(--size-font));
--size-font-large: calc(1.25 * var(--size-font));
--size-font-big: calc(1.5 * var(--size-font));
--size-font-huge: calc(1.75 * var(--size-font));
--size-font-mono-ratio: 0.87097;
--size-line-ratio: 1.5;
--size-line: calc(var(--size-line-ratio) * var(--size-font));
--size-half-line: calc(0.5 * var(--size-line)); }
/* Reset a few things. */
html,body,div,span,applet,object,iframe,h1,h2,h3,h4,h5,h6,p,blockquote,pre,
a,abbr,acronym,address,big,cite,code,del,dfn,em,img,ins,kbd,q,s,samp,select,
small,strike,strong,sub,sup,tt,var,b,u,i,center,dl,dt,dd,ol,ul,li,
fieldset,form,label,legend,table,caption,tbody,tfoot,thead,tr,th,td,
article,aside,canvas,details,embed,figure,figcaption,footer,header,hgroup,
menu,nav,output,ruby,section,summary,time,mark,audio,video,button,input
{ margin: 0; padding: 0; border: 0; /* outline: 0; */
font-size: inherit; font: inherit; font-weight: inherit;
line-height: inherit; vertical-align: baseline;
text-align: inherit; color: inherit; background: transparent; }
table { border-collapse: collapse; border-spacing: 0; }
*, *:before, *:After { box-sizing: border-box; }
/* Note the stylesheet has quite hackish CSS selectors as the markup's
classification is sometimes a bit lacking. */
/* Geometry.
See also media adjustements at the end of the stylesheet. */
body { background-color: var(--color-bg);
color: var(--color-fg);
font-size: var(--size-font);
font-family: var(--font-body), sans-serif;
font-weight: 400;
line-height: var(--size-line);
text-align: left;
position: relative;
max-width: 120ch;
margin: 0 auto;
padding: calc(1.5 * var(--size-line));
padding-top: calc(0.5 * var(--size-line)); }
body > * { max-width: 80ch; width: 75% }
body > ul:first-of-type:not(.itemize):not(.ftoc2) /* toc */
{ position: absolute;
top: 0px; right: 0px;
width: 20%;
margin-left: var(--size-line);
margin-top: calc(2 * var(--size-line));
margin-right: var(--size-line);
border-top: solid thin var(--color-rule); }
/* Rules
We remove the top one, keep the last one and add one over h1 and h2 */
body > hr:last-of-type {
margin-top: var(--size-line);
border-style: none;
width: 100%;
max-width: 100%;
text-align: right;
border-top: solid thin var(--color-rule); }
body > hr:first-of-type { display: none } /* order with last-of-type imporant */
h1, h2 { border-top: solid thin var(--color-rule) }
/* Hacks */
body > a > img /* Navigation arrows, a bit problematic for dark themes */
{ display: inline-block; margin:0;
background-color: var(--color-code-block-bg); /* bof */ }
body > p br, h1 br { display: none; } /* brs should die */
/* Basic markup */
h1, h2, h3, h4, h5, h6
{ font-family: var(--font-headings), sans-serif;
font-weight: 400;
text-transform: uppercase;
margin-top: var(--size-line); }
h1, h2 { line-height: calc(1.5 * var(--size-line));
padding-top: calc(0.75 * var(--size-line)); }
hr + h1, hr + h2 { margin-top: calc(0.25 * var(--size-line)) }
h1 { font-size: var(--size-font-huge); }
h2 { font-size: var(--size-font-big); }
h3 { font-size: var(--size-font-large); }
div, nav, p, ol, ul, dl, pre, table, blockquote
{ margin-top: var(--size-half-line); }
ul, ol { list-style-position: outside }
ul { list-style-type: square }
ul > li { margin-left: 2.25ch; }
ol > li { margin-left: 2ch; }
em { font-style: italic }
b, strong { font-weight: 700 }
small { font-size: var(--size-font-small); }
sup { vertical-align: super; }
sub { vertical-align: sub; }
sup, sub { font-size : calc(1em * var(--size-font-tiny-ratio));
line-height: 0; margin-left: 0.2ex; }
img { display: block;
margin-top: var(--size-half-line); margin-bottom: var(--size-half-line); }
blockquote { margin-left: var(--size-half-line); }
/* Links and anchors. Note anchors need to be refined a bit further down
in certain cases. */
a { text-decoration:none; color: var(--color-link); }
a:hover { box-shadow:0 1px 0 0 var(--color-link); }
a.anchor:before { content: "#" }
a.anchor:hover { box-shadow: none; text-decoration: underline; }
*:hover > a.anchor { visibility: visible }
a.anchor
{ visibility: hidden; position: absolute;
font-weight: normal;
font-style: normal;
margin-left: -2.5ch;
padding-right: 1ch; padding-left: 1ch; /* To remain selectable */
color: var(--color-link);
text-align: right;
}
*:target /* Linked highlight */
{ background-color: var(--color-bg-highlight);
box-shadow: 0 0 0 3px var(--color-bg-highlight) }
/* Code and code highlighting */
.c003, .c004, .c005, .c006, .c015,
code, pre
{ font-family: var(--font-mono), monospace;
font-weight: 400;
font-size: calc(1em * var(--size-font-mono-ratio));
color: var(--color-code-fg); }
.c004, .c002 { color: var(--color-code-type-id); }
.c005 { font-style: oblique }
.c006 { font-weight: 700 }
.c015 { text-align: left }
pre .c003, pre .c004, pre .c005, pre .c006,
pre code { font-size: inherit } /* don't apply transform twice... */
a code { color: inherit }
h1 code, h2 code, h3 code, h4 code, h5 code, h6 code { text-transform: none; }
pre { background: var(--color-code-block-bg);
padding-left: 0.8ch; padding-right: 0.8ch;
margin-left: -0.8ch; margin-right: -0.8ch;
padding-top: 1ch; padding-bottom: 1ch;
white-space: pre-wrap;
word-wrap: break-word; }
/* Table of contents, like in odoc.css except we don't have a class */
body > ul:first-of-type:not(.itemize):not(.ftoc2)
{ font-size: var(--size-font-small); }
body > ul:first-of-type:not(.itemize):not(.ftoc2) a
{ color : var(--color-fg); }
body > ul:first-of-type:not(.itemize):not(.ftoc2) a:hover
{ color : var(--color-link); }
body > ul:first-of-type:not(.itemize):not(.ftoc2)
{ font-family: var(--font-headings); text-transform: uppercase;
list-style-type: none; padding-top: var(--size-line) }
body > ul:first-of-type:not(.itemize):not(.ftoc2) li
{ margin-left: 0; padding-left: 3.25ch; text-indent: -3.25ch; }
body > ul:first-of-type:not(.itemize):not(.ftoc2) ul
{ font-family: var(--font-body);
text-transform: none;
margin-top:0; }
/* toplevel examples */
div.caml-example.toplevel div.caml-input::before { content: "#" }
div.caml-input, div.caml-output { margin-top: 0; }
.caml-input {}
.caml-output { color: var(--color-code-string) /* why not */ }
/* Other HeVeA classes */
.c000 { border-spacing: 2ch; border-collapse: separate; margin: 0 auto; }
.c001 { border-spacing: 1ch; border-collapse: separate }
.c008 { font-size: var(--size-font-small) }
.c009 { font-style:italic }
.c010 { font-style:italic; color:var(--color-link) }
.c011 { font-style:italic; font-weight:700 }
.c012 { font-style:italic }
.c013 { font-style:italic }
.c018 { text-align: right }
.c019 { text-align: left}
.dcenter { margin: 0 auto; }
.description { margin-left: var(--size-line) }
.dd-description br { display: none }
dd + dt { margin-top: var(--size-half-line) }
dt .c003 { font-style:normal; font-weight:700 } /* options */
.indexenv { list-style-type: none }
.indexenv li { margin-left: 0 }
/* Page specific */
/* Cover page */
div.maintitle > span > span
{ text-transform: uppercase;
font-family: var(--font-headings);
line-height: var(--size-line-ratio);
font-size: calc(2.25 * var(--size-font)) !important;
margin-left: -0.25ch; /* compensate nbsp */ }
div.maintitle > span > span > br { display: none }
div.maintitle > span > span > span
{ display: block;
text-transform: none;
font-style: italic;
font-family: var(--font-body);
font-size: var(--size-font-big) !important; }
div.maintitle > span > span > span > span /* ugh */
{ font-style: normal;
line-height: var(--size-line);
font-size: var(--size-font) !important; }
div.maintitle > span > span > span > span > span /* ugh bis */
{ font-size: var(--size-font-small) !important;
font-style: italic;
margin-left: -1.25ch; }
div.maintitle + blockquote hr { display : none }
div.maintitle + blockquote
{ margin: 0;
/* margin-top: calc(-1 * var(--size-line)); chrome but not FF, bah... */
font-size: var(--size-font-small);
border-bottom: solid thin var(--color-rule);
padding-bottom: var(--size-half-line); }
div.maintitle ~ blockquote:last-of-type { display: none } /* remove branding */
div.maintitle ~ ul:first-of-type:not(.itemize):not(.ftoc2) /* undo side toc */
{ position: static;
padding: 0;
margin: 0; margin-top: var(--size-line);
width: 100%; }
div.maintitle ~ br { display: none }
div.maintitle ~ ul:first-of-type:not(.itemize):not(.ftoc2) > li { margin: 0; }
div.maintitle ~ ul:first-of-type:not(.itemize):not(.ftoc2) a
{ color: var(--color-link) }
div.maintitle ~ table { margin-top: 0 }
div.maintitle ~ ul:first-of-type:not(.itemize):not(.ftoc2)
{ list-style-type: none;
font-family: inherit; text-transform: inherit;
font-size: inherit;
margin-top: var(--size-half-line);
border: none; }
div.maintitle ~ ul { list-style-type: none }
div.maintitle ~ ul li { margin-left: 0 }
/* Contents page */
h1#sec1 + ul:first-of-type /* undo side toc */
{ position: static;
list-style-type: none;
margin: 0; margin-top: var(--size-half-line);
width: 100%; border: none; padding: 0;
font-size: var(--size-font-big); }
h1#sec1 + ul:first-of-type li
{ margin-left: 0; padding-left: 0; text-indent: 0 }
h1#sec1 ~ ul ul
{ list-style-type: none; font-size: var(--size-font-large); font-style: italic;}
h1#sec1 ~ ul ul ul
{ font-size: var(--size-font); font-style: normal;
margin-top: var(--size-half-line); }
h1#sec1 ~ ul ul ul ul { margin-left: 2.5ch; margin-top: 0;}
h1#sec1 ~ ul > li { margin-top: var(--size-line); }
h1#sec1 ~ ul > li > ul > li { margin-top: var(--size-half-line); }
/* Media adjustments */
@media only screen and (min-width:160ch) /* and (min-height: 60rem) */
{
:root { --size-font: 1.125rem; } /* consider using vmin units */
}
@media only screen and (max-width:80ch)
{
body { padding: var(--size-line); }
body > * { width: 100%; }
body > ul:first-of-type:not(.itemize):not(.ftoc2)
{ position: static;
margin: 0; margin-top: var(--size-line);
width: 100%; }
pre { font-size: var(--size-font-tiny); }
}
@media print
{
* { -webkit-print-color-adjust: exact; }
.content nav:first-child { visibility: hidden }
body > * { width: 100%; }
body > ul:first-of-type:not(.itemize):not(.ftoc2)
{ position: static; width: 100%;
margin: 0; margin-top: var(--size-line); }
/* odig.light with slight adjustements */
:root
{ --color-bg: white;
--color-bg-highlight: #CAD7EF;
--color-fg: black;
--color-rule: #DADBDB;
--color-code-block-bg: #E8E8E8;
--color-code-fg: #16191D;
--color-code-comment: #747679;
--color-code-keyword: #874aa9;
--color-code-type-id: #a9874a;
--color-code-string: #4aa987;
--color-link: #557dcc;
--color-broken-link: #f71414; }
}
/*
Copyright (c) 2019 The odig programmers
Permission to use, copy, modify, and/or distribute this software for any
purpose with or without fee is hereby granted, provided that the above
copyright notice and this permission notice appear in all copies.
THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES
WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF
MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR
ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES
WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN
ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF
OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE.
*/

334
dev/_odoc-theme/odoc.css Normal file
View file

@ -0,0 +1,334 @@
@charset "UTF-8";
@import url("fonts/fonts.css");
@import url("theme.css");
/* Copyright (c) 2019 The odig programmers. All rights reserved.
Distributed under the ISC license, see terms at the end of the file. */
/* Reset a few things. */
html,body,div,span,applet,object,iframe,h1,h2,h3,h4,h5,h6,p,blockquote,pre,
a,abbr,acronym,address,big,cite,code,del,dfn,em,img,ins,kbd,q,s,samp,select,
small,strike,strong,sub,sup,tt,var,b,u,i,center,dl,dt,dd,ol,ul,li,
fieldset,form,label,legend,table,caption,tbody,tfoot,thead,tr,th,td,
article,aside,canvas,details,embed,figure,figcaption,footer,header,hgroup,
menu,nav,output,ruby,section,summary,time,mark,audio,video,button,input
{ margin: 0; padding: 0; border: 0; /* outline: 0; */
font-size: inherit; font: inherit; font-weight: inherit;
line-height: inherit; vertical-align: baseline;
text-align: inherit; color: inherit; background: transparent; }
table { border-collapse: collapse; border-spacing: 0; }
*, *:before, *:after { box-sizing: border-box; }
/* Basic geometry */
:root { --font-headings: "PT-Sans-Caption";
--font-body: "PT-Sans";
--font-mono: "DejaVu-SansMono";
--size-font: 0.96875rem;
--size-font-micro: calc(0.675 * var(--size-font));
--size-font-tiny-ratio: 0.75;
--size-font-tiny: calc(var(--size-font-tiny-ratio) * var(--size-font));
--size-font-small: calc(0.875 * var(--size-font));
--size-font-large: calc(1.25 * var(--size-font));
--size-font-big: calc(1.5 * var(--size-font));
--size-font-huge: calc(1.75 * var(--size-font));
--size-font-mono-ratio: 0.87097;
--size-font-mono-ratio: 0.865;
--size-line-ratio: 1.5;
--size-line: calc(var(--size-line-ratio) * var(--size-font));
--size-half-line: calc(0.5 * var(--size-line));
--size-fourth-line: calc(0.25 * var(--size-line)); }
.odoc { background-color: var(--color-bg);
color: var(--color-fg);
font-size: var(--size-font);
font-family: var(--font-body), sans-serif;
font-weight: 400;
line-height: var(--size-line);
text-align: left;
display: grid;
margin: 0 auto;
max-width: 130ch;
grid-template-columns: minmax(50ch,76ch) minmax(23ch,1fr);
grid-column-gap: calc(2 * var(--size-line));
grid-template-areas: "nav nav"
"header toc"
"content toc";
padding: calc(1.5 * var(--size-line));
padding-top: calc(0.5 * var(--size-line)); }
.odoc-nav { grid-area: nav; }
.odoc-preamble { grid-area: header; }
.odoc-content { grid-area: content; margin: 0 }
.odoc-toc
{ grid-area: toc;
margin-top: var(--size-line);
border-top: solid thin var(--color-rule); }
/* Media adjustments */
@media only screen and (min-width:160ch) /* and (min-height: 60rem) */
{
:root { --size-font: 1.125rem; } /* consider using vmin units */
}
@media only screen and (max-width:80ch) /* Basically mobile */
{
.odoc
{ padding: var(--size-line);
grid-template-columns: auto;
grid-template-rows: none;
grid-template-areas: "nav"
"header"
"toc"
"content"; }
.odoc-toc { margin: 0; margin-top: var(--size-line); }
pre { font-size: var(--size-font-tiny); }
}
@media print
{
* { -webkit-print-color-adjust: exact; }
.odoc-nav { visibility: hidden }
.odoc-toc { margin: 0; margin-top: var(--size-line); }
/* odig.light with slight adjustements */
:root
{ --color-bg: white;
--color-bg-highlight: #CAD7EF;
--color-fg: black;
--color-rule: #DADBDB;
--color-code-block-bg: #E8E8E8;
--color-code-fg: #16191D;
--color-code-comment: #747679;
--color-code-keyword: #874aa9;
--color-code-type-id: #a9874a;
--color-code-string: #4aa987;
--color-link: #557dcc;
--color-broken-link: #f71414; }
}
/* Block level markup */
header > * + *, div > * + *, details > * + *
{ margin-top: var(--size-half-line); }
ul + * , ol + * { margin-top: 0; }
ul, ol { margin-top: var(--size-fourth-line);
margin-bottom: var(--size-fourth-line);
list-style-position: outside; }
li *:first-child, li ol, li ul { margin-top: 0; }
ul { list-style-type: square; }
ul > li { margin-left: 2.25ch; }
ol > li { margin-left: 2ch; }
ol li::marker
{ font-family: var(--font-headings), sans-serif;
font-size: var(--size-font-small); }
img
{ display: block;
margin-top: var(--size-half-line);
margin-bottom: var(--size-half-line); }
/* Headings and horizontal rulers */
h1, h2, .odoc-content > *:first-child
{ border-top: solid thin var(--color-rule);
padding-top: calc(0.75 * var(--size-line));
margin-top: var(--size-line); }
h1, h2, h3, h4, h5, h6
{ font-family: var(--font-headings), sans-serif;
font-weight: 400;
text-transform: uppercase;
margin-top: var(--size-line); }
h1, h2 { line-height: calc(1.5 * var(--size-line)); }
h1 { font-size: var(--size-font-huge); }
h2 { font-size: var(--size-font-big); }
h3 { font-size: var(--size-font-large); }
/* Phrasing content */
em { font-style: italic }
b, strong { font-weight: 700 }
small { font-size: var(--size-font-small); }
sup { vertical-align: super; }
sub { vertical-align: sub; }
sup, sub
{ font-size : calc(1em * var(--size-font-tiny-ratio));
line-height: 0; margin-left: 0.2ex; }
/* Code and code highlighting */
code, pre
{ font-family: var(--font-mono), monospace;
font-weight: 400;
font-size: calc(1em * var(--size-font-mono-ratio));
color: var(--color-code-fg);
overflow-wrap: anywhere; }
code span span { white-space: nowrap } /* Do not break these units */
pre code { font-size: inherit } /* don't apply transform twice... */
a code { color: inherit }
h1 code, h2 code, h3 code, h4 code, h5 code, h6 code { text-transform: none; }
pre
{ background: var(--color-code-block-bg);
padding-left: 0.8ch; padding-right: 0.8ch;
margin-left: -0.8ch; margin-right: -0.8ch;
padding-top: 1ch; padding-bottom: 1ch;
white-space: pre-wrap;
overflow-wrap: break-word; }
.arrow { white-space: nowrap }
.keyword , .hljs-keyword { color : var(--color-code-keyword); }
.hljs-type { color : var(--color-code-type-id); }
.hljs-string { color : var(--color-code-string); }
.hljs-comment { color : var(--color-code-comment); font-style: italic; }
/* Links and anchors. Note anchors need to be refined a bit further down
in certain cases. */
a { text-decoration:none; color: var(--color-link); }
a:hover { box-shadow:0 1px 0 0 var(--color-link); }
a.anchor:before { content: "#" }
a.anchor:hover { box-shadow: none; text-decoration: underline; }
*:hover > a.anchor { visibility: visible }
a.anchor
{ visibility: hidden; position: absolute;
font-weight: normal;
font-style: normal;
margin-left: -2.5ch;
padding-right: 1ch; padding-left: 1ch; /* To remain selectable */
color: var(--color-link);
text-align: right; }
*:target /* Linked highlight */
{ background-color: var(--color-bg-highlight);
box-shadow: 0 0 0 3px var(--color-bg-highlight) }
.xref-unresolved { box-shadow:0 1px 0 0 var(--color-broken-link)}
/* Table of contents */
.odoc-toc { font-size: var(--size-font-small); }
.odoc-toc a { color : var(--color-fg); }
.odoc-toc a:hover { color : var(--color-link) }
.odoc-toc ul
{ font-family: var(--font-headings); text-transform: uppercase;
margin-top: var(--size-line);
list-style-type: none; }
.odoc-toc ul ul
{ font-family: var(--font-body); text-transform: none; margin-top:0; }
.odoc-toc ul ul ul { margin-left:1.5ch }
.odoc-toc li { margin-left: 0; padding-left: 1ch; text-indent: -1ch; }
.odoc-toc > ul > li { margin-top: calc(0.25 * var(--size-half-line)) }
.odoc-toc > ul > li > ul > li:last-child
{ margin-bottom: var(--size-half-line) }
.odoc-toc ul ul li { margin-left: 0; padding-left: 0; }
/* Module structure items */
.odoc-spec { padding-bottom: var(--size-fourth-line); }
.spec { margin-top: 0; }
.spec-doc { margin-top:0; padding-left: 1ch; }
.spec-doc > *:first-child { margin-top: 0 }
/* Indent on wrap */
.spec, .spec td:first-child { padding-left: 4ch; text-indent: -4ch }
.spec td.field { padding-left: 6ch }
.spec .def-doc .comment-delim + * { margin-top: 0 }
.spec .def-doc .comment-delim /* make them invisible yet copy-pastable */
{ position: absolute; width: 1px; height: 1px; overflow: hidden; }
/* But we don't do it for types for now because of variants and
records. This makes :target highlight be off. And poses
other problems (e.g. need to indent back the last ] or }.
A better markup strategy should be found here. */
.spec.type { padding-left: 0; text-indent: 0 }
.spec.type > a.anchor
{ padding-left: 1ch; padding-right: 1ch; /* values from a.anchor */ }
.spec li > a.anchor, .spec > a.anchor
{ padding-right: 0.5ch; padding-left: 2ch; }
.spec ol { margin:0; list-style-type: none; }
.spec li { margin-left: 0; padding-left: 4ch; text-indent: -4ch }
.spec li.record.field { margin-left: 2ch }
.spec .def-doc { display: inline-block }
.spec .def-doc { padding-left: /* 4 + 3 */ 7ch; }
.spec .def-doc p { margin-left: -4ch; text-indent: 0 }
.odoc-include summary { cursor: pointer }
/* Package, module and @tag lists
Allowing indent on wrap with the anchor makes all this quite convoluted.
Is there a better way ? */
.packages, .modules, .at-tags { list-style-type: none; margin-left: -2ch; }
.packages li, .modules li, .at-tags li { padding-left: 2ch; text-indent: -2ch; }
.modules li a.anchor, .packages li a.anchor
{ padding-right: 0.5ch; padding-left: 2ch; }
.synopsis { padding-left: 1ch; }
.version { font-size: var(--size-font-micro); }
.at-tag { text-transform : capitalize }
/* Package page */
h1 .version, h1 nav { font-size: var(--size-font); line-height:0 }
h1 nav
{ display: inline-block;
font-family: var(--font-body);
text-transform: capitalize; }
.package.info td:first-child { padding-right: 2ch; min-width: 13ch}
.package.info ul { list-style-type: none; display: inline; margin:0; padding:0}
.package.info li { display: inline-block; margin:0; margin-right:1ex; }
#info-authors li, #info-maintainers li { display: block; }
/* Package index page */
.by-name nav a
{ font-family: var(--font-headings);
font-size: var(--size-font-large);
text-transform: uppercase;
margin-right: 1ch;
display: inline-block; }
.by-tag ol { list-style-type: none; }
.by-tag ol.tags li { margin-left: 1ch; display: inline-block }
.by-tag td:first-child
{ font-family: var(--font-headings);
font-size: var(--size-font-large);
text-transform: uppercase; }
/*
Copyright (c) 2019 The odig programmers
Permission to use, copy, modify, and/or distribute this software for any
purpose with or without fee is hereby granted, provided that the above
copyright notice and this permission notice appear in all copies.
THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES
WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF
MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR
ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES
WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN
ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF
OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE.
*/

34
dev/_odoc-theme/theme.css Normal file
View file

@ -0,0 +1,34 @@
:root
{ --color-bg: #F6F6F6;
--color-bg-highlight: #CAD7EF;
--color-fg: #1F2227;
--color-rule: #DADBDB;
--color-code-block-bg: #E8E8E8;
--color-code-fg: #16191D;
--color-code-comment: #747679;
--color-code-keyword: #874aa9;
--color-code-type-id: #a9874a;
--color-code-string: #4aa987;
--color-link: #557dcc;
--color-broken-link: #f71414; }
@media (prefers-color-scheme: dark)
{
:root
{ --color-bg: #181B20;
--color-bg-highlight: #303644;
--color-fg: #8C8D90;
--color-rule: #2F3236;
--color-code-block-bg: #24272A;
--color-code-fg: #A3A4A6;
--color-code-comment: #747679;
--color-code-keyword: #7F668D;
--color-code-type-id: #8D7F66;
--color-code-string: #668d7f;
--color-link: #7788AA;
--color-broken-link: #900505; }
}

File diff suppressed because one or more lines are too long

View file

@ -0,0 +1,2 @@
<!DOCTYPE html>
<html xmlns="http://www.w3.org/1999/xhtml"><head><title>Either__ (either.Either__)</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">either</a> &#x00BB; Either__</nav><header class="odoc-preamble"><h1>Module <code><span>Either__</span></code></h1></header><div class="odoc-content"></div></body></html>

View file

@ -0,0 +1,2 @@
<!DOCTYPE html>
<html xmlns="http://www.w3.org/1999/xhtml"><head><title>Either__Either_intf (either.Either__Either_intf)</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">either</a> &#x00BB; Either__Either_intf</nav><header class="odoc-preamble"><h1>Module <code><span>Either__Either_intf</span></code></h1></header><div class="odoc-content"></div></body></html>

View file

@ -0,0 +1,3 @@
### 1.0.0 (2020-11-18)
Initial release.

View file

@ -0,0 +1,21 @@
The MIT License
Copyright (c) 2020 Craig Ferguson
Permission is hereby granted, free of charge, to any person obtaining a copy
of this software and associated documentation files (the "Software"), to deal
in the Software without restriction, including without limitation the rights
to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
copies of the Software, and to permit persons to whom the Software is
furnished to do so, subject to the following conditions:
The above copyright notice and this permission notice shall be included in
all copies or substantial portions of the Software.
THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
THE SOFTWARE.

View file

@ -0,0 +1,36 @@
## Compatibility `Either` module
[![OCaml-CI Build Status][ci-badge]][ci-status]
[![Documentation](https://img.shields.io/badge/doc-online-blue.svg)][docs]
Projects that want to use the `Either` module defined in OCaml 4.12.0 while
staying compatible with older versions of OCaml should use this library
instead. On OCaml versions 4.12 and above, this library defines an alias
`Either` to the standard library's definition of the module. Otherwise, it
provides an equivalent definition of `Either`.
[ci-status]: https://ci.ocamllabs.io/github/mirage/either
[ci-badge]: https://img.shields.io/endpoint?url=https%3A%2F%2Fci.ocamllabs.io%2Fbadge%2Fmirage%2Feither%2Fmain&logo=ocaml
[docs]: https://docs.mirage.io/either/either/index.html
#### Depending on this library
Opam libraries depending on this module are encouraged to use a conditional
dependency:
```
depends: [
("ocaml" {>= "4.12.0"} | "either")
]
```
This ensures that any dependencies of your library that _don't_ need pre-4.12
compatibility will never transitively depend on `either`.
<hr/>
#### Acknowledgements
This repository structure is mostly copied from
[`JaneStreet/result`](https://github.com/janestreet/result), which provides a
compatibility `result` type. Thanks to the OCaml maintainers for their
improvements to the standard library.

2
dev/either/index.html Normal file
View file

@ -0,0 +1,2 @@
<!DOCTYPE html>
<html xmlns="http://www.w3.org/1999/xhtml"><head><title>index (either.index)</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> either</nav><header class="odoc-preamble"><h1 id="package-either"><a href="#package-either" class="anchor"></a>Package either <nav><a type="text/plain; charset=UTF-8" href="_doc-dir/CHANGES.md">changes</a> <a href="#package_info">more…</a></nav></h1><ul class="modules"><li><a href="Either/index.html"><code>Either</code></a> </li></ul></header><nav class="odoc-toc"><ul><li><a href="#package_info">Package info</a></li></ul></nav><div class="odoc-content"><h2 id="package_info"><a href="#package_info" class="anchor"></a>Package info</h2><table class="package info"><tr id="info-changes-files"><td><a href="#info-changes-files" aria-hidden="true" class="anchor"></a>changes-files</td><td><ul><li><a type="text/plain; charset=UTF-8" href="_doc-dir/CHANGES.md">CHANGES.md</a></li></ul></td></tr><tr id="info-license-files"><td><a href="#info-license-files" aria-hidden="true" class="anchor"></a>license-files</td><td><ul><li><a type="text/plain; charset=UTF-8" href="_doc-dir/LICENSE">LICENSE</a></li></ul></td></tr><tr id="info-readme-files"><td><a href="#info-readme-files" aria-hidden="true" class="anchor"></a>readme-files</td><td><ul><li><a type="text/plain; charset=UTF-8" href="_doc-dir/README.md">README.md</a></li></ul></td></tr></table></div></body></html>

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

461
dev/highlight.pack.js Normal file
View file

@ -0,0 +1,461 @@
/*!
Highlight.js v11.7.0 (git: 82688fad18)
(c) 2006-2022 undefined and other contributors
License: BSD-3-Clause
*/
var hljs=function(){"use strict";var e={exports:{}};function t(e){
return e instanceof Map?e.clear=e.delete=e.set=()=>{
throw Error("map is read-only")}:e instanceof Set&&(e.add=e.clear=e.delete=()=>{
throw Error("set is read-only")
}),Object.freeze(e),Object.getOwnPropertyNames(e).forEach((n=>{var i=e[n]
;"object"!=typeof i||Object.isFrozen(i)||t(i)})),e}
e.exports=t,e.exports.default=t;class n{constructor(e){
void 0===e.data&&(e.data={}),this.data=e.data,this.isMatchIgnored=!1}
ignoreMatch(){this.isMatchIgnored=!0}}function i(e){
return e.replace(/&/g,"&amp;").replace(/</g,"&lt;").replace(/>/g,"&gt;").replace(/"/g,"&quot;").replace(/'/g,"&#x27;")
}function r(e,...t){const n=Object.create(null);for(const t in e)n[t]=e[t]
;return t.forEach((e=>{for(const t in e)n[t]=e[t]})),n}
const s=e=>!!e.scope||e.sublanguage&&e.language;class o{constructor(e,t){
this.buffer="",this.classPrefix=t.classPrefix,e.walk(this)}addText(e){
this.buffer+=i(e)}openNode(e){if(!s(e))return;let t=""
;t=e.sublanguage?"language-"+e.language:((e,{prefix:t})=>{if(e.includes(".")){
const n=e.split(".")
;return[`${t}${n.shift()}`,...n.map(((e,t)=>`${e}${"_".repeat(t+1)}`))].join(" ")
}return`${t}${e}`})(e.scope,{prefix:this.classPrefix}),this.span(t)}
closeNode(e){s(e)&&(this.buffer+="</span>")}value(){return this.buffer}span(e){
this.buffer+=`<span class="${e}">`}}const a=(e={})=>{const t={children:[]}
;return Object.assign(t,e),t};class c{constructor(){
this.rootNode=a(),this.stack=[this.rootNode]}get top(){
return this.stack[this.stack.length-1]}get root(){return this.rootNode}add(e){
this.top.children.push(e)}openNode(e){const t=a({scope:e})
;this.add(t),this.stack.push(t)}closeNode(){
if(this.stack.length>1)return this.stack.pop()}closeAllNodes(){
for(;this.closeNode(););}toJSON(){return JSON.stringify(this.rootNode,null,4)}
walk(e){return this.constructor._walk(e,this.rootNode)}static _walk(e,t){
return"string"==typeof t?e.addText(t):t.children&&(e.openNode(t),
t.children.forEach((t=>this._walk(e,t))),e.closeNode(t)),e}static _collapse(e){
"string"!=typeof e&&e.children&&(e.children.every((e=>"string"==typeof e))?e.children=[e.children.join("")]:e.children.forEach((e=>{
c._collapse(e)})))}}class l extends c{constructor(e){super(),this.options=e}
addKeyword(e,t){""!==e&&(this.openNode(t),this.addText(e),this.closeNode())}
addText(e){""!==e&&this.add(e)}addSublanguage(e,t){const n=e.root
;n.sublanguage=!0,n.language=t,this.add(n)}toHTML(){
return new o(this,this.options).value()}finalize(){return!0}}function g(e){
return e?"string"==typeof e?e:e.source:null}function d(e){return p("(?=",e,")")}
function u(e){return p("(?:",e,")*")}function h(e){return p("(?:",e,")?")}
function p(...e){return e.map((e=>g(e))).join("")}function f(...e){const t=(e=>{
const t=e[e.length-1]
;return"object"==typeof t&&t.constructor===Object?(e.splice(e.length-1,1),t):{}
})(e);return"("+(t.capture?"":"?:")+e.map((e=>g(e))).join("|")+")"}
function b(e){return RegExp(e.toString()+"|").exec("").length-1}
const m=/\[(?:[^\\\]]|\\.)*\]|\(\??|\\([1-9][0-9]*)|\\./
;function E(e,{joinWith:t}){let n=0;return e.map((e=>{n+=1;const t=n
;let i=g(e),r="";for(;i.length>0;){const e=m.exec(i);if(!e){r+=i;break}
r+=i.substring(0,e.index),
i=i.substring(e.index+e[0].length),"\\"===e[0][0]&&e[1]?r+="\\"+(Number(e[1])+t):(r+=e[0],
"("===e[0]&&n++)}return r})).map((e=>`(${e})`)).join(t)}
const x="[a-zA-Z]\\w*",w="[a-zA-Z_]\\w*",y="\\b\\d+(\\.\\d+)?",_="(-?)(\\b0[xX][a-fA-F0-9]+|(\\b\\d+(\\.\\d*)?|\\.\\d+)([eE][-+]?\\d+)?)",O="\\b(0b[01]+)",v={
begin:"\\\\[\\s\\S]",relevance:0},N={scope:"string",begin:"'",end:"'",
illegal:"\\n",contains:[v]},k={scope:"string",begin:'"',end:'"',illegal:"\\n",
contains:[v]},M=(e,t,n={})=>{const i=r({scope:"comment",begin:e,end:t,
contains:[]},n);i.contains.push({scope:"doctag",
begin:"[ ]*(?=(TODO|FIXME|NOTE|BUG|OPTIMIZE|HACK|XXX):)",
end:/(TODO|FIXME|NOTE|BUG|OPTIMIZE|HACK|XXX):/,excludeBegin:!0,relevance:0})
;const s=f("I","a","is","so","us","to","at","if","in","it","on",/[A-Za-z]+['](d|ve|re|ll|t|s|n)/,/[A-Za-z]+[-][a-z]+/,/[A-Za-z][a-z]{2,}/)
;return i.contains.push({begin:p(/[ ]+/,"(",s,/[.]?[:]?([.][ ]|[ ])/,"){3}")}),i
},S=M("//","$"),R=M("/\\*","\\*/"),j=M("#","$");var A=Object.freeze({
__proto__:null,MATCH_NOTHING_RE:/\b\B/,IDENT_RE:x,UNDERSCORE_IDENT_RE:w,
NUMBER_RE:y,C_NUMBER_RE:_,BINARY_NUMBER_RE:O,
RE_STARTERS_RE:"!|!=|!==|%|%=|&|&&|&=|\\*|\\*=|\\+|\\+=|,|-|-=|/=|/|:|;|<<|<<=|<=|<|===|==|=|>>>=|>>=|>=|>>>|>>|>|\\?|\\[|\\{|\\(|\\^|\\^=|\\||\\|=|\\|\\||~",
SHEBANG:(e={})=>{const t=/^#![ ]*\//
;return e.binary&&(e.begin=p(t,/.*\b/,e.binary,/\b.*/)),r({scope:"meta",begin:t,
end:/$/,relevance:0,"on:begin":(e,t)=>{0!==e.index&&t.ignoreMatch()}},e)},
BACKSLASH_ESCAPE:v,APOS_STRING_MODE:N,QUOTE_STRING_MODE:k,PHRASAL_WORDS_MODE:{
begin:/\b(a|an|the|are|I'm|isn't|don't|doesn't|won't|but|just|should|pretty|simply|enough|gonna|going|wtf|so|such|will|you|your|they|like|more)\b/
},COMMENT:M,C_LINE_COMMENT_MODE:S,C_BLOCK_COMMENT_MODE:R,HASH_COMMENT_MODE:j,
NUMBER_MODE:{scope:"number",begin:y,relevance:0},C_NUMBER_MODE:{scope:"number",
begin:_,relevance:0},BINARY_NUMBER_MODE:{scope:"number",begin:O,relevance:0},
REGEXP_MODE:{begin:/(?=\/[^/\n]*\/)/,contains:[{scope:"regexp",begin:/\//,
end:/\/[gimuy]*/,illegal:/\n/,contains:[v,{begin:/\[/,end:/\]/,relevance:0,
contains:[v]}]}]},TITLE_MODE:{scope:"title",begin:x,relevance:0},
UNDERSCORE_TITLE_MODE:{scope:"title",begin:w,relevance:0},METHOD_GUARD:{
begin:"\\.\\s*[a-zA-Z_]\\w*",relevance:0},END_SAME_AS_BEGIN:e=>Object.assign(e,{
"on:begin":(e,t)=>{t.data._beginMatch=e[1]},"on:end":(e,t)=>{
t.data._beginMatch!==e[1]&&t.ignoreMatch()}})});function I(e,t){
"."===e.input[e.index-1]&&t.ignoreMatch()}function T(e,t){
void 0!==e.className&&(e.scope=e.className,delete e.className)}function L(e,t){
t&&e.beginKeywords&&(e.begin="\\b("+e.beginKeywords.split(" ").join("|")+")(?!\\.)(?=\\b|\\s)",
e.__beforeBegin=I,e.keywords=e.keywords||e.beginKeywords,delete e.beginKeywords,
void 0===e.relevance&&(e.relevance=0))}function B(e,t){
Array.isArray(e.illegal)&&(e.illegal=f(...e.illegal))}function D(e,t){
if(e.match){
if(e.begin||e.end)throw Error("begin & end are not supported with match")
;e.begin=e.match,delete e.match}}function H(e,t){
void 0===e.relevance&&(e.relevance=1)}const P=(e,t)=>{if(!e.beforeMatch)return
;if(e.starts)throw Error("beforeMatch cannot be used with starts")
;const n=Object.assign({},e);Object.keys(e).forEach((t=>{delete e[t]
})),e.keywords=n.keywords,e.begin=p(n.beforeMatch,d(n.begin)),e.starts={
relevance:0,contains:[Object.assign(n,{endsParent:!0})]
},e.relevance=0,delete n.beforeMatch
},C=["of","and","for","in","not","or","if","then","parent","list","value"]
;function $(e,t,n="keyword"){const i=Object.create(null)
;return"string"==typeof e?r(n,e.split(" ")):Array.isArray(e)?r(n,e):Object.keys(e).forEach((n=>{
Object.assign(i,$(e[n],t,n))})),i;function r(e,n){
t&&(n=n.map((e=>e.toLowerCase()))),n.forEach((t=>{const n=t.split("|")
;i[n[0]]=[e,U(n[0],n[1])]}))}}function U(e,t){
return t?Number(t):(e=>C.includes(e.toLowerCase()))(e)?0:1}const z={},K=e=>{
console.error(e)},W=(e,...t)=>{console.log("WARN: "+e,...t)},X=(e,t)=>{
z[`${e}/${t}`]||(console.log(`Deprecated as of ${e}. ${t}`),z[`${e}/${t}`]=!0)
},G=Error();function Z(e,t,{key:n}){let i=0;const r=e[n],s={},o={}
;for(let e=1;e<=t.length;e++)o[e+i]=r[e],s[e+i]=!0,i+=b(t[e-1])
;e[n]=o,e[n]._emit=s,e[n]._multi=!0}function F(e){(e=>{
e.scope&&"object"==typeof e.scope&&null!==e.scope&&(e.beginScope=e.scope,
delete e.scope)})(e),"string"==typeof e.beginScope&&(e.beginScope={
_wrap:e.beginScope}),"string"==typeof e.endScope&&(e.endScope={_wrap:e.endScope
}),(e=>{if(Array.isArray(e.begin)){
if(e.skip||e.excludeBegin||e.returnBegin)throw K("skip, excludeBegin, returnBegin not compatible with beginScope: {}"),
G
;if("object"!=typeof e.beginScope||null===e.beginScope)throw K("beginScope must be object"),
G;Z(e,e.begin,{key:"beginScope"}),e.begin=E(e.begin,{joinWith:""})}})(e),(e=>{
if(Array.isArray(e.end)){
if(e.skip||e.excludeEnd||e.returnEnd)throw K("skip, excludeEnd, returnEnd not compatible with endScope: {}"),
G
;if("object"!=typeof e.endScope||null===e.endScope)throw K("endScope must be object"),
G;Z(e,e.end,{key:"endScope"}),e.end=E(e.end,{joinWith:""})}})(e)}function V(e){
function t(t,n){
return RegExp(g(t),"m"+(e.case_insensitive?"i":"")+(e.unicodeRegex?"u":"")+(n?"g":""))
}class n{constructor(){
this.matchIndexes={},this.regexes=[],this.matchAt=1,this.position=0}
addRule(e,t){
t.position=this.position++,this.matchIndexes[this.matchAt]=t,this.regexes.push([t,e]),
this.matchAt+=b(e)+1}compile(){0===this.regexes.length&&(this.exec=()=>null)
;const e=this.regexes.map((e=>e[1]));this.matcherRe=t(E(e,{joinWith:"|"
}),!0),this.lastIndex=0}exec(e){this.matcherRe.lastIndex=this.lastIndex
;const t=this.matcherRe.exec(e);if(!t)return null
;const n=t.findIndex(((e,t)=>t>0&&void 0!==e)),i=this.matchIndexes[n]
;return t.splice(0,n),Object.assign(t,i)}}class i{constructor(){
this.rules=[],this.multiRegexes=[],
this.count=0,this.lastIndex=0,this.regexIndex=0}getMatcher(e){
if(this.multiRegexes[e])return this.multiRegexes[e];const t=new n
;return this.rules.slice(e).forEach((([e,n])=>t.addRule(e,n))),
t.compile(),this.multiRegexes[e]=t,t}resumingScanAtSamePosition(){
return 0!==this.regexIndex}considerAll(){this.regexIndex=0}addRule(e,t){
this.rules.push([e,t]),"begin"===t.type&&this.count++}exec(e){
const t=this.getMatcher(this.regexIndex);t.lastIndex=this.lastIndex
;let n=t.exec(e)
;if(this.resumingScanAtSamePosition())if(n&&n.index===this.lastIndex);else{
const t=this.getMatcher(0);t.lastIndex=this.lastIndex+1,n=t.exec(e)}
return n&&(this.regexIndex+=n.position+1,
this.regexIndex===this.count&&this.considerAll()),n}}
if(e.compilerExtensions||(e.compilerExtensions=[]),
e.contains&&e.contains.includes("self"))throw Error("ERR: contains `self` is not supported at the top-level of a language. See documentation.")
;return e.classNameAliases=r(e.classNameAliases||{}),function n(s,o){const a=s
;if(s.isCompiled)return a
;[T,D,F,P].forEach((e=>e(s,o))),e.compilerExtensions.forEach((e=>e(s,o))),
s.__beforeBegin=null,[L,B,H].forEach((e=>e(s,o))),s.isCompiled=!0;let c=null
;return"object"==typeof s.keywords&&s.keywords.$pattern&&(s.keywords=Object.assign({},s.keywords),
c=s.keywords.$pattern,
delete s.keywords.$pattern),c=c||/\w+/,s.keywords&&(s.keywords=$(s.keywords,e.case_insensitive)),
a.keywordPatternRe=t(c,!0),
o&&(s.begin||(s.begin=/\B|\b/),a.beginRe=t(a.begin),s.end||s.endsWithParent||(s.end=/\B|\b/),
s.end&&(a.endRe=t(a.end)),
a.terminatorEnd=g(a.end)||"",s.endsWithParent&&o.terminatorEnd&&(a.terminatorEnd+=(s.end?"|":"")+o.terminatorEnd)),
s.illegal&&(a.illegalRe=t(s.illegal)),
s.contains||(s.contains=[]),s.contains=[].concat(...s.contains.map((e=>(e=>(e.variants&&!e.cachedVariants&&(e.cachedVariants=e.variants.map((t=>r(e,{
variants:null},t)))),e.cachedVariants?e.cachedVariants:q(e)?r(e,{
starts:e.starts?r(e.starts):null
}):Object.isFrozen(e)?r(e):e))("self"===e?s:e)))),s.contains.forEach((e=>{n(e,a)
})),s.starts&&n(s.starts,o),a.matcher=(e=>{const t=new i
;return e.contains.forEach((e=>t.addRule(e.begin,{rule:e,type:"begin"
}))),e.terminatorEnd&&t.addRule(e.terminatorEnd,{type:"end"
}),e.illegal&&t.addRule(e.illegal,{type:"illegal"}),t})(a),a}(e)}function q(e){
return!!e&&(e.endsWithParent||q(e.starts))}class J extends Error{
constructor(e,t){super(e),this.name="HTMLInjectionError",this.html=t}}
const Y=i,Q=r,ee=Symbol("nomatch");var te=(t=>{
const i=Object.create(null),r=Object.create(null),s=[];let o=!0
;const a="Could not find the language '{}', did you forget to load/include a language module?",c={
disableAutodetect:!0,name:"Plain text",contains:[]};let g={
ignoreUnescapedHTML:!1,throwUnescapedHTML:!1,noHighlightRe:/^(no-?highlight)$/i,
languageDetectRe:/\blang(?:uage)?-([\w-]+)\b/i,classPrefix:"hljs-",
cssSelector:"pre code",languages:null,__emitter:l};function b(e){
return g.noHighlightRe.test(e)}function m(e,t,n){let i="",r=""
;"object"==typeof t?(i=e,
n=t.ignoreIllegals,r=t.language):(X("10.7.0","highlight(lang, code, ...args) has been deprecated."),
X("10.7.0","Please use highlight(code, options) instead.\nhttps://github.com/highlightjs/highlight.js/issues/2277"),
r=e,i=t),void 0===n&&(n=!0);const s={code:i,language:r};k("before:highlight",s)
;const o=s.result?s.result:E(s.language,s.code,n)
;return o.code=s.code,k("after:highlight",o),o}function E(e,t,r,s){
const c=Object.create(null);function l(){if(!N.keywords)return void M.addText(S)
;let e=0;N.keywordPatternRe.lastIndex=0;let t=N.keywordPatternRe.exec(S),n=""
;for(;t;){n+=S.substring(e,t.index)
;const r=y.case_insensitive?t[0].toLowerCase():t[0],s=(i=r,N.keywords[i]);if(s){
const[e,i]=s
;if(M.addText(n),n="",c[r]=(c[r]||0)+1,c[r]<=7&&(R+=i),e.startsWith("_"))n+=t[0];else{
const n=y.classNameAliases[e]||e;M.addKeyword(t[0],n)}}else n+=t[0]
;e=N.keywordPatternRe.lastIndex,t=N.keywordPatternRe.exec(S)}var i
;n+=S.substring(e),M.addText(n)}function d(){null!=N.subLanguage?(()=>{
if(""===S)return;let e=null;if("string"==typeof N.subLanguage){
if(!i[N.subLanguage])return void M.addText(S)
;e=E(N.subLanguage,S,!0,k[N.subLanguage]),k[N.subLanguage]=e._top
}else e=x(S,N.subLanguage.length?N.subLanguage:null)
;N.relevance>0&&(R+=e.relevance),M.addSublanguage(e._emitter,e.language)
})():l(),S=""}function u(e,t){let n=1;const i=t.length-1;for(;n<=i;){
if(!e._emit[n]){n++;continue}const i=y.classNameAliases[e[n]]||e[n],r=t[n]
;i?M.addKeyword(r,i):(S=r,l(),S=""),n++}}function h(e,t){
return e.scope&&"string"==typeof e.scope&&M.openNode(y.classNameAliases[e.scope]||e.scope),
e.beginScope&&(e.beginScope._wrap?(M.addKeyword(S,y.classNameAliases[e.beginScope._wrap]||e.beginScope._wrap),
S=""):e.beginScope._multi&&(u(e.beginScope,t),S="")),N=Object.create(e,{parent:{
value:N}}),N}function p(e,t,i){let r=((e,t)=>{const n=e&&e.exec(t)
;return n&&0===n.index})(e.endRe,i);if(r){if(e["on:end"]){const i=new n(e)
;e["on:end"](t,i),i.isMatchIgnored&&(r=!1)}if(r){
for(;e.endsParent&&e.parent;)e=e.parent;return e}}
if(e.endsWithParent)return p(e.parent,t,i)}function f(e){
return 0===N.matcher.regexIndex?(S+=e[0],1):(I=!0,0)}function b(e){
const n=e[0],i=t.substring(e.index),r=p(N,e,i);if(!r)return ee;const s=N
;N.endScope&&N.endScope._wrap?(d(),
M.addKeyword(n,N.endScope._wrap)):N.endScope&&N.endScope._multi?(d(),
u(N.endScope,e)):s.skip?S+=n:(s.returnEnd||s.excludeEnd||(S+=n),
d(),s.excludeEnd&&(S=n));do{
N.scope&&M.closeNode(),N.skip||N.subLanguage||(R+=N.relevance),N=N.parent
}while(N!==r.parent);return r.starts&&h(r.starts,e),s.returnEnd?0:n.length}
let m={};function w(i,s){const a=s&&s[0];if(S+=i,null==a)return d(),0
;if("begin"===m.type&&"end"===s.type&&m.index===s.index&&""===a){
if(S+=t.slice(s.index,s.index+1),!o){const t=Error(`0 width match regex (${e})`)
;throw t.languageName=e,t.badRule=m.rule,t}return 1}
if(m=s,"begin"===s.type)return(e=>{
const t=e[0],i=e.rule,r=new n(i),s=[i.__beforeBegin,i["on:begin"]]
;for(const n of s)if(n&&(n(e,r),r.isMatchIgnored))return f(t)
;return i.skip?S+=t:(i.excludeBegin&&(S+=t),
d(),i.returnBegin||i.excludeBegin||(S=t)),h(i,e),i.returnBegin?0:t.length})(s)
;if("illegal"===s.type&&!r){
const e=Error('Illegal lexeme "'+a+'" for mode "'+(N.scope||"<unnamed>")+'"')
;throw e.mode=N,e}if("end"===s.type){const e=b(s);if(e!==ee)return e}
if("illegal"===s.type&&""===a)return 1
;if(A>1e5&&A>3*s.index)throw Error("potential infinite loop, way more iterations than matches")
;return S+=a,a.length}const y=O(e)
;if(!y)throw K(a.replace("{}",e)),Error('Unknown language: "'+e+'"')
;const _=V(y);let v="",N=s||_;const k={},M=new g.__emitter(g);(()=>{const e=[]
;for(let t=N;t!==y;t=t.parent)t.scope&&e.unshift(t.scope)
;e.forEach((e=>M.openNode(e)))})();let S="",R=0,j=0,A=0,I=!1;try{
for(N.matcher.considerAll();;){
A++,I?I=!1:N.matcher.considerAll(),N.matcher.lastIndex=j
;const e=N.matcher.exec(t);if(!e)break;const n=w(t.substring(j,e.index),e)
;j=e.index+n}
return w(t.substring(j)),M.closeAllNodes(),M.finalize(),v=M.toHTML(),{
language:e,value:v,relevance:R,illegal:!1,_emitter:M,_top:N}}catch(n){
if(n.message&&n.message.includes("Illegal"))return{language:e,value:Y(t),
illegal:!0,relevance:0,_illegalBy:{message:n.message,index:j,
context:t.slice(j-100,j+100),mode:n.mode,resultSoFar:v},_emitter:M};if(o)return{
language:e,value:Y(t),illegal:!1,relevance:0,errorRaised:n,_emitter:M,_top:N}
;throw n}}function x(e,t){t=t||g.languages||Object.keys(i);const n=(e=>{
const t={value:Y(e),illegal:!1,relevance:0,_top:c,_emitter:new g.__emitter(g)}
;return t._emitter.addText(e),t})(e),r=t.filter(O).filter(N).map((t=>E(t,e,!1)))
;r.unshift(n);const s=r.sort(((e,t)=>{
if(e.relevance!==t.relevance)return t.relevance-e.relevance
;if(e.language&&t.language){if(O(e.language).supersetOf===t.language)return 1
;if(O(t.language).supersetOf===e.language)return-1}return 0})),[o,a]=s,l=o
;return l.secondBest=a,l}function w(e){let t=null;const n=(e=>{
let t=e.className+" ";t+=e.parentNode?e.parentNode.className:""
;const n=g.languageDetectRe.exec(t);if(n){const t=O(n[1])
;return t||(W(a.replace("{}",n[1])),
W("Falling back to no-highlight mode for this block.",e)),t?n[1]:"no-highlight"}
return t.split(/\s+/).find((e=>b(e)||O(e)))})(e);if(b(n))return
;if(k("before:highlightElement",{el:e,language:n
}),e.children.length>0&&(g.ignoreUnescapedHTML||(console.warn("One of your code blocks includes unescaped HTML. This is a potentially serious security risk."),
console.warn("https://github.com/highlightjs/highlight.js/wiki/security"),
console.warn("The element with unescaped HTML:"),
console.warn(e)),g.throwUnescapedHTML))throw new J("One of your code blocks includes unescaped HTML.",e.innerHTML)
;t=e;const i=t.textContent,s=n?m(i,{language:n,ignoreIllegals:!0}):x(i)
;e.innerHTML=s.value,((e,t,n)=>{const i=t&&r[t]||n
;e.classList.add("hljs"),e.classList.add("language-"+i)
})(e,n,s.language),e.result={language:s.language,re:s.relevance,
relevance:s.relevance},s.secondBest&&(e.secondBest={
language:s.secondBest.language,relevance:s.secondBest.relevance
}),k("after:highlightElement",{el:e,result:s,text:i})}let y=!1;function _(){
"loading"!==document.readyState?document.querySelectorAll(g.cssSelector).forEach(w):y=!0
}function O(e){return e=(e||"").toLowerCase(),i[e]||i[r[e]]}
function v(e,{languageName:t}){"string"==typeof e&&(e=[e]),e.forEach((e=>{
r[e.toLowerCase()]=t}))}function N(e){const t=O(e)
;return t&&!t.disableAutodetect}function k(e,t){const n=e;s.forEach((e=>{
e[n]&&e[n](t)}))}
"undefined"!=typeof window&&window.addEventListener&&window.addEventListener("DOMContentLoaded",(()=>{
y&&_()}),!1),Object.assign(t,{highlight:m,highlightAuto:x,highlightAll:_,
highlightElement:w,
highlightBlock:e=>(X("10.7.0","highlightBlock will be removed entirely in v12.0"),
X("10.7.0","Please use highlightElement now."),w(e)),configure:e=>{g=Q(g,e)},
initHighlighting:()=>{
_(),X("10.6.0","initHighlighting() deprecated. Use highlightAll() now.")},
initHighlightingOnLoad:()=>{
_(),X("10.6.0","initHighlightingOnLoad() deprecated. Use highlightAll() now.")
},registerLanguage:(e,n)=>{let r=null;try{r=n(t)}catch(t){
if(K("Language definition for '{}' could not be registered.".replace("{}",e)),
!o)throw t;K(t),r=c}
r.name||(r.name=e),i[e]=r,r.rawDefinition=n.bind(null,t),r.aliases&&v(r.aliases,{
languageName:e})},unregisterLanguage:e=>{delete i[e]
;for(const t of Object.keys(r))r[t]===e&&delete r[t]},
listLanguages:()=>Object.keys(i),getLanguage:O,registerAliases:v,
autoDetection:N,inherit:Q,addPlugin:e=>{(e=>{
e["before:highlightBlock"]&&!e["before:highlightElement"]&&(e["before:highlightElement"]=t=>{
e["before:highlightBlock"](Object.assign({block:t.el},t))
}),e["after:highlightBlock"]&&!e["after:highlightElement"]&&(e["after:highlightElement"]=t=>{
e["after:highlightBlock"](Object.assign({block:t.el},t))})})(e),s.push(e)}
}),t.debugMode=()=>{o=!1},t.safeMode=()=>{o=!0
},t.versionString="11.7.0",t.regex={concat:p,lookahead:d,either:f,optional:h,
anyNumberOfTimes:u};for(const t in A)"object"==typeof A[t]&&e.exports(A[t])
;return Object.assign(t,A),t})({});return te}()
;"object"==typeof exports&&"undefined"!=typeof module&&(module.exports=hljs);/*! `xml` grammar compiled for Highlight.js 11.7.0 */
(()=>{var e=(()=>{"use strict";return e=>{
const a=e.regex,n=a.concat(/[\p{L}_]/u,a.optional(/[\p{L}0-9_.-]*:/u),/[\p{L}0-9_.-]*/u),s={
className:"symbol",begin:/&[a-z]+;|&#[0-9]+;|&#x[a-f0-9]+;/},t={begin:/\s/,
contains:[{className:"keyword",begin:/#?[a-z_][a-z1-9_-]+/,illegal:/\n/}]
},i=e.inherit(t,{begin:/\(/,end:/\)/}),c=e.inherit(e.APOS_STRING_MODE,{
className:"string"}),l=e.inherit(e.QUOTE_STRING_MODE,{className:"string"}),r={
endsWithParent:!0,illegal:/</,relevance:0,contains:[{className:"attr",
begin:/[\p{L}0-9._:-]+/u,relevance:0},{begin:/=\s*/,relevance:0,contains:[{
className:"string",endsParent:!0,variants:[{begin:/"/,end:/"/,contains:[s]},{
begin:/'/,end:/'/,contains:[s]},{begin:/[^\s"'=<>`]+/}]}]}]};return{
name:"HTML, XML",
aliases:["html","xhtml","rss","atom","xjb","xsd","xsl","plist","wsf","svg"],
case_insensitive:!0,unicodeRegex:!0,contains:[{className:"meta",begin:/<![a-z]/,
end:/>/,relevance:10,contains:[t,l,c,i,{begin:/\[/,end:/\]/,contains:[{
className:"meta",begin:/<![a-z]/,end:/>/,contains:[t,i,l,c]}]}]
},e.COMMENT(/<!--/,/-->/,{relevance:10}),{begin:/<!\[CDATA\[/,end:/\]\]>/,
relevance:10},s,{className:"meta",end:/\?>/,variants:[{begin:/<\?xml/,
relevance:10,contains:[l]},{begin:/<\?[a-z][a-z0-9]+/}]},{className:"tag",
begin:/<style(?=\s|>)/,end:/>/,keywords:{name:"style"},contains:[r],starts:{
end:/<\/style>/,returnEnd:!0,subLanguage:["css","xml"]}},{className:"tag",
begin:/<script(?=\s|>)/,end:/>/,keywords:{name:"script"},contains:[r],starts:{
end:/<\/script>/,returnEnd:!0,subLanguage:["javascript","handlebars","xml"]}},{
className:"tag",begin:/<>|<\/>/},{className:"tag",
begin:a.concat(/</,a.lookahead(a.concat(n,a.either(/\/>/,/>/,/\s/)))),
end:/\/?>/,contains:[{className:"name",begin:n,relevance:0,starts:r}]},{
className:"tag",begin:a.concat(/<\//,a.lookahead(a.concat(n,/>/))),contains:[{
className:"name",begin:n,relevance:0},{begin:/>/,relevance:0,endsParent:!0}]}]}}
})();hljs.registerLanguage("xml",e)})();/*! `markdown` grammar compiled for Highlight.js 11.7.0 */
(()=>{var e=(()=>{"use strict";return e=>{const n={begin:/<\/?[A-Za-z_]/,
end:">",subLanguage:"xml",relevance:0},a={variants:[{begin:/\[.+?\]\[.*?\]/,
relevance:0},{
begin:/\[.+?\]\(((data|javascript|mailto):|(?:http|ftp)s?:\/\/).*?\)/,
relevance:2},{
begin:e.regex.concat(/\[.+?\]\(/,/[A-Za-z][A-Za-z0-9+.-]*/,/:\/\/.*?\)/),
relevance:2},{begin:/\[.+?\]\([./?&#].*?\)/,relevance:1},{
begin:/\[.*?\]\(.*?\)/,relevance:0}],returnBegin:!0,contains:[{match:/\[(?=\])/
},{className:"string",relevance:0,begin:"\\[",end:"\\]",excludeBegin:!0,
returnEnd:!0},{className:"link",relevance:0,begin:"\\]\\(",end:"\\)",
excludeBegin:!0,excludeEnd:!0},{className:"symbol",relevance:0,begin:"\\]\\[",
end:"\\]",excludeBegin:!0,excludeEnd:!0}]},i={className:"strong",contains:[],
variants:[{begin:/_{2}(?!\s)/,end:/_{2}/},{begin:/\*{2}(?!\s)/,end:/\*{2}/}]
},s={className:"emphasis",contains:[],variants:[{begin:/\*(?![*\s])/,end:/\*/},{
begin:/_(?![_\s])/,end:/_/,relevance:0}]},c=e.inherit(i,{contains:[]
}),t=e.inherit(s,{contains:[]});i.contains.push(t),s.contains.push(c)
;let g=[n,a];return[i,s,c,t].forEach((e=>{e.contains=e.contains.concat(g)
})),g=g.concat(i,s),{name:"Markdown",aliases:["md","mkdown","mkd"],contains:[{
className:"section",variants:[{begin:"^#{1,6}",end:"$",contains:g},{
begin:"(?=^.+?\\n[=-]{2,}$)",contains:[{begin:"^[=-]*$"},{begin:"^",end:"\\n",
contains:g}]}]},n,{className:"bullet",begin:"^[ \t]*([*+-]|(\\d+\\.))(?=\\s+)",
end:"\\s+",excludeEnd:!0},i,s,{className:"quote",begin:"^>\\s+",contains:g,
end:"$"},{className:"code",variants:[{begin:"(`{3,})[^`](.|\\n)*?\\1`*[ ]*"},{
begin:"(~{3,})[^~](.|\\n)*?\\1~*[ ]*"},{begin:"```",end:"```+[ ]*$"},{
begin:"~~~",end:"~~~+[ ]*$"},{begin:"`.+?`"},{begin:"(?=^( {4}|\\t))",
contains:[{begin:"^( {4}|\\t)",end:"(\\n)$"}],relevance:0}]},{
begin:"^[-\\*]{3,}",end:"$"},a,{begin:/^\[[^\n]+\]:/,returnBegin:!0,contains:[{
className:"symbol",begin:/\[/,end:/\]/,excludeBegin:!0,excludeEnd:!0},{
className:"link",begin:/:\s*/,end:/$/,excludeBegin:!0}]}]}}})()
;hljs.registerLanguage("markdown",e)})();/*! `plaintext` grammar compiled for Highlight.js 11.7.0 */
(()=>{var t=(()=>{"use strict";return t=>({name:"Plain text",
aliases:["text","txt"],disableAutodetect:!0})})()
;hljs.registerLanguage("plaintext",t)})();/*! `ocaml` grammar compiled for Highlight.js 11.7.0 */
(()=>{var e=(()=>{"use strict";return e=>({name:"OCaml",aliases:["ml"],
keywords:{$pattern:"[a-z_]\\w*!?",
keyword:"and as assert asr begin class constraint do done downto else end exception external for fun function functor if in include inherit! inherit initializer land lazy let lor lsl lsr lxor match method!|10 method mod module mutable new object of open! open or private rec sig struct then to try type val! val virtual when while with parser value",
built_in:"array bool bytes char exn|5 float int int32 int64 list lazy_t|5 nativeint|5 string unit in_channel out_channel ref",
literal:"true false"},illegal:/\/\/|>>/,contains:[{className:"literal",
begin:"\\[(\\|\\|)?\\]|\\(\\)",relevance:0},e.COMMENT("\\(\\*","\\*\\)",{
contains:["self"]}),{className:"symbol",begin:"'[A-Za-z_](?!')[\\w']*"},{
className:"type",begin:"`[A-Z][\\w']*"},{className:"type",
begin:"\\b[A-Z][\\w']*",relevance:0},{begin:"[a-z_]\\w*'[\\w']*",relevance:0
},e.inherit(e.APOS_STRING_MODE,{className:"string",relevance:0
}),e.inherit(e.QUOTE_STRING_MODE,{illegal:null}),{className:"number",
begin:"\\b(0[xX][a-fA-F0-9_]+[Lln]?|0[oO][0-7_]+[Lln]?|0[bB][01_]+[Lln]?|[0-9][0-9_]*([Lln]|(\\.[0-9_]*)?([eE][-+]?[0-9_]+)?)?)",
relevance:0},{begin:/->/}]})})();hljs.registerLanguage("ocaml",e)})();/*! `python` grammar compiled for Highlight.js 11.7.0 */
(()=>{var e=(()=>{"use strict";return e=>{
const n=e.regex,a=/[\p{XID_Start}_]\p{XID_Continue}*/u,i=["and","as","assert","async","await","break","case","class","continue","def","del","elif","else","except","finally","for","from","global","if","import","in","is","lambda","match","nonlocal|10","not","or","pass","raise","return","try","while","with","yield"],s={
$pattern:/[A-Za-z]\w+|__\w+__/,keyword:i,
built_in:["__import__","abs","all","any","ascii","bin","bool","breakpoint","bytearray","bytes","callable","chr","classmethod","compile","complex","delattr","dict","dir","divmod","enumerate","eval","exec","filter","float","format","frozenset","getattr","globals","hasattr","hash","help","hex","id","input","int","isinstance","issubclass","iter","len","list","locals","map","max","memoryview","min","next","object","oct","open","ord","pow","print","property","range","repr","reversed","round","set","setattr","slice","sorted","staticmethod","str","sum","super","tuple","type","vars","zip"],
literal:["__debug__","Ellipsis","False","None","NotImplemented","True"],
type:["Any","Callable","Coroutine","Dict","List","Literal","Generic","Optional","Sequence","Set","Tuple","Type","Union"]
},t={className:"meta",begin:/^(>>>|\.\.\.) /},r={className:"subst",begin:/\{/,
end:/\}/,keywords:s,illegal:/#/},l={begin:/\{\{/,relevance:0},b={
className:"string",contains:[e.BACKSLASH_ESCAPE],variants:[{
begin:/([uU]|[bB]|[rR]|[bB][rR]|[rR][bB])?'''/,end:/'''/,
contains:[e.BACKSLASH_ESCAPE,t],relevance:10},{
begin:/([uU]|[bB]|[rR]|[bB][rR]|[rR][bB])?"""/,end:/"""/,
contains:[e.BACKSLASH_ESCAPE,t],relevance:10},{
begin:/([fF][rR]|[rR][fF]|[fF])'''/,end:/'''/,
contains:[e.BACKSLASH_ESCAPE,t,l,r]},{begin:/([fF][rR]|[rR][fF]|[fF])"""/,
end:/"""/,contains:[e.BACKSLASH_ESCAPE,t,l,r]},{begin:/([uU]|[rR])'/,end:/'/,
relevance:10},{begin:/([uU]|[rR])"/,end:/"/,relevance:10},{
begin:/([bB]|[bB][rR]|[rR][bB])'/,end:/'/},{begin:/([bB]|[bB][rR]|[rR][bB])"/,
end:/"/},{begin:/([fF][rR]|[rR][fF]|[fF])'/,end:/'/,
contains:[e.BACKSLASH_ESCAPE,l,r]},{begin:/([fF][rR]|[rR][fF]|[fF])"/,end:/"/,
contains:[e.BACKSLASH_ESCAPE,l,r]},e.APOS_STRING_MODE,e.QUOTE_STRING_MODE]
},o="[0-9](_?[0-9])*",c=`(\\b(${o}))?\\.(${o})|\\b(${o})\\.`,d="\\b|"+i.join("|"),g={
className:"number",relevance:0,variants:[{
begin:`(\\b(${o})|(${c}))[eE][+-]?(${o})[jJ]?(?=${d})`},{begin:`(${c})[jJ]?`},{
begin:`\\b([1-9](_?[0-9])*|0+(_?0)*)[lLjJ]?(?=${d})`},{
begin:`\\b0[bB](_?[01])+[lL]?(?=${d})`},{begin:`\\b0[oO](_?[0-7])+[lL]?(?=${d})`
},{begin:`\\b0[xX](_?[0-9a-fA-F])+[lL]?(?=${d})`},{begin:`\\b(${o})[jJ](?=${d})`
}]},p={className:"comment",begin:n.lookahead(/# type:/),end:/$/,keywords:s,
contains:[{begin:/# type:/},{begin:/#/,end:/\b\B/,endsWithParent:!0}]},m={
className:"params",variants:[{className:"",begin:/\(\s*\)/,skip:!0},{begin:/\(/,
end:/\)/,excludeBegin:!0,excludeEnd:!0,keywords:s,
contains:["self",t,g,b,e.HASH_COMMENT_MODE]}]};return r.contains=[b,g,t],{
name:"Python",aliases:["py","gyp","ipython"],unicodeRegex:!0,keywords:s,
illegal:/(<\/|->|\?)|=>/,contains:[t,g,{begin:/\bself\b/},{beginKeywords:"if",
relevance:0},b,p,e.HASH_COMMENT_MODE,{match:[/\bdef/,/\s+/,a],scope:{
1:"keyword",3:"title.function"},contains:[m]},{variants:[{
match:[/\bclass/,/\s+/,a,/\s*/,/\(\s*/,a,/\s*\)/]},{match:[/\bclass/,/\s+/,a]}],
scope:{1:"keyword",3:"title.class",6:"title.class.inherited"}},{
className:"meta",begin:/^[\t ]*@/,end:/(?=#)|$/,contains:[g,m,b]}]}}})()
;hljs.registerLanguage("python",e)})();/*! `reasonml` grammar compiled for Highlight.js 11.7.0 */
(()=>{var e=(()=>{"use strict";return e=>{
const n="~?[a-z$_][0-9a-zA-Z$_]*",a="`?[A-Z$_][0-9a-zA-Z$_]*",s="("+["||","++","**","+.","*","/","*.","/.","..."].map((e=>e.split("").map((e=>"\\"+e)).join(""))).join("|")+"|\\|>|&&|==|===)",i="\\s+"+s+"\\s+",r={
keyword:"and as asr assert begin class constraint do done downto else end exception external for fun function functor if in include inherit initializer land lazy let lor lsl lsr lxor match method mod module mutable new nonrec object of open or private rec sig struct then to try type val virtual when while with",
built_in:"array bool bytes char exn|5 float int int32 int64 list lazy_t|5 nativeint|5 ref string unit ",
literal:"true false"
},l="\\b(0[xX][a-fA-F0-9_]+[Lln]?|0[oO][0-7_]+[Lln]?|0[bB][01_]+[Lln]?|[0-9][0-9_]*([Lln]|(\\.[0-9_]*)?([eE][-+]?[0-9_]+)?)?)",t={
className:"number",relevance:0,variants:[{begin:l},{begin:"\\(-"+l+"\\)"}]},c={
className:"operator",relevance:0,begin:s},o=[{className:"identifier",
relevance:0,begin:n},c,t],g=[e.QUOTE_STRING_MODE,c,{className:"module",
begin:"\\b"+a,returnBegin:!0,relevance:0,end:".",contains:[{
className:"identifier",begin:a,relevance:0}]}],b=[{className:"module",
begin:"\\b"+a,returnBegin:!0,end:".",relevance:0,contains:[{
className:"identifier",begin:a,relevance:0}]}],m={className:"function",
relevance:0,keywords:r,variants:[{begin:"\\s(\\(\\.?.*?\\)|"+n+")\\s*=>",
end:"\\s*=>",returnBegin:!0,relevance:0,contains:[{className:"params",
variants:[{begin:n},{
begin:"~?[a-z$_][0-9a-zA-Z$_]*(\\s*:\\s*[a-z$_][0-9a-z$_]*(\\(\\s*('?[a-z$_][0-9a-z$_]*\\s*(,'?[a-z$_][0-9a-z$_]*\\s*)*)?\\))?){0,2}"
},{begin:/\(\s*\)/}]}]},{begin:"\\s\\(\\.?[^;\\|]*\\)\\s*=>",end:"\\s=>",
returnBegin:!0,relevance:0,contains:[{className:"params",relevance:0,variants:[{
begin:n,end:"(,|\\n|\\))",relevance:0,contains:[c,{className:"typing",begin:":",
end:"(,|\\n)",returnBegin:!0,relevance:0,contains:b}]}]}]},{
begin:"\\(\\.\\s"+n+"\\)\\s*=>"}]};g.push(m);const d={className:"constructor",
begin:a+"\\(",end:"\\)",illegal:"\\n",keywords:r,
contains:[e.QUOTE_STRING_MODE,c,{className:"params",begin:"\\b"+n}]},u={
className:"pattern-match",begin:"\\|",returnBegin:!0,keywords:r,end:"=>",
relevance:0,contains:[d,c,{relevance:0,className:"constructor",begin:a}]},v={
className:"module-access",keywords:r,returnBegin:!0,variants:[{
begin:"\\b("+a+"\\.)+"+n},{begin:"\\b("+a+"\\.)+\\(",end:"\\)",returnBegin:!0,
contains:[m,{begin:"\\(",end:"\\)",relevance:0,skip:!0}].concat(g)},{
begin:"\\b("+a+"\\.)+\\{",end:/\}/}],contains:g};return b.push(v),{
name:"ReasonML",aliases:["re"],keywords:r,illegal:"(:-|:=|\\$\\{|\\+=)",
contains:[e.COMMENT("/\\*","\\*/",{illegal:"^(#,\\/\\/)"}),{
className:"character",begin:"'(\\\\[^']+|[^'])'",illegal:"\\n",relevance:0
},e.QUOTE_STRING_MODE,{className:"literal",begin:"\\(\\)",relevance:0},{
className:"literal",begin:"\\[\\|",end:"\\|\\]",relevance:0,contains:o},{
className:"literal",begin:"\\[",end:"\\]",relevance:0,contains:o},d,{
className:"operator",begin:i,illegal:"--\x3e",relevance:0
},t,e.C_LINE_COMMENT_MODE,u,m,{className:"module-def",
begin:"\\bmodule\\s+"+n+"\\s+"+a+"\\s+=\\s+\\{",end:/\}/,returnBegin:!0,
keywords:r,relevance:0,contains:[{className:"module",relevance:0,begin:a},{
begin:/\{/,end:/\}/,relevance:0,skip:!0}].concat(g)},v]}}})()
;hljs.registerLanguage("reasonml",e)})();

2
dev/index.html Normal file
View file

@ -0,0 +1,2 @@
<!DOCTYPE html>
<html><head><meta charset="utf-8"><meta name="generator" content="odig v0.0.9"><meta name="viewport" content="width=device-width, initial-scale=1.0"><link rel="stylesheet" type="text/css" media="screen, print" href="_odoc-theme/odoc.css"><title>_opam</title></head><body class="odoc"><nav class="odoc-nav">🐫</nav><header class="odoc-preamble"><h1>OCaml package documentation</h1><p>Browse <a href="#by-name">by name</a>, <a href="#by-tag">by tag</a>, the <a href="ocaml/Stdlib/index.html#modules">standard library</a> and the <a href="https://ocaml.org/manual/">OCaml manual</a> (online, latest version).</p><p><small>Generated for <code>/home/runner/work/moonpool/moonpool/_opam/lib</code></small></p></header><nav class="odoc-toc"><ul><li><a href="ocaml/Stdlib/index.html#modules">OCaml standard library</a></li><li><a href="https://ocaml.org/manual/">OCaml manual</a></li><li><a href="#by-name">Packages by name</a></li><li><a href="#by-tag">Packages by tag</a></li></ul></nav><div class="odoc-content"><h2 id="by-name"><a href="#by-name" aria-hidden="true" class="anchor"></a>Packages by name</h2><div class="by-name"><nav><a href="#name-e">e</a><a href="#name-m">m</a><a href="#name-o">o</a></nav><h3 id="name-e"><a href="#name-e" aria-hidden="true" class="anchor"></a>e</h3><ol class="packages"><li id="package-either"><a href="#package-either" aria-hidden="true" class="anchor"></a><a href="either/index.html">either</a> <span class="version"></span> <span class="synopsis"></span></li></ol><h3 id="name-m"><a href="#name-m" aria-hidden="true" class="anchor"></a>m</h3><ol class="packages"><li id="package-moonpool"><a href="#package-moonpool" aria-hidden="true" class="anchor"></a><a href="moonpool/index.html">moonpool</a> <span class="version"></span> <span class="synopsis"></span></li></ol><h3 id="name-o"><a href="#name-o" aria-hidden="true" class="anchor"></a>o</h3><ol class="packages"><li id="package-ocaml"><a href="#package-ocaml" aria-hidden="true" class="anchor"></a><a href="ocaml/index.html">ocaml</a> <span class="version"></span> <span class="synopsis"></span></li></ol></div><h2 id="by-tag"><a href="#by-tag" aria-hidden="true" class="anchor"></a>Packages by tag</h2><div class="by-tag"><nav><table></table></nav></div></div></body></html>

1
dev/katex.min.css vendored Normal file

File diff suppressed because one or more lines are too long

1
dev/katex.min.js vendored Normal file

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

View file

@ -0,0 +1,2 @@
<!DOCTYPE html>
<html xmlns="http://www.w3.org/1999/xhtml"><head><title>Fork_join (moonpool.Moonpool.Fork_join)</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">moonpool</a> &#x00BB; <a href="../index.html">Moonpool</a> &#x00BB; Fork_join</nav><header class="odoc-preamble"><h1>Module <code><span>Moonpool.Fork_join</span></code></h1><p>Fork-join primitives.</p><p><b>NOTE</b> These are only available on OCaml 5.0 and above.</p><ul class="at-tags"><li class="since"><span class="at-tag">since</span> 0.3</li></ul></header><div class="odoc-content"></div></body></html>

View file

@ -0,0 +1,2 @@
<!DOCTYPE html>
<html xmlns="http://www.w3.org/1999/xhtml"><head><title>_ (moonpool.Moonpool.Fut.Infix._)</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">moonpool</a> &#x00BB; <a href="../../../index.html">Moonpool</a> &#x00BB; <a href="../../index.html">Fut</a> &#x00BB; <a href="../index.html">Infix</a> &#x00BB; _</nav><header class="odoc-preamble"><h1>Parameter <code><span>Infix._</span></code></h1></header><div class="odoc-content"><div class="odoc-spec"><div class="spec value anchored" id="val-pool"><a href="#val-pool" class="anchor"></a><code><span><span class="keyword">val</span> pool : <a href="../../../Runner/index.html#type-t">Runner.t</a></span></code></div></div></div></body></html>

File diff suppressed because one or more lines are too long

View file

@ -0,0 +1,2 @@
<!DOCTYPE html>
<html xmlns="http://www.w3.org/1999/xhtml"><head><title>Infix_local (moonpool.Moonpool.Fut.Infix_local)</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">moonpool</a> &#x00BB; <a href="../../index.html">Moonpool</a> &#x00BB; <a href="../index.html">Fut</a> &#x00BB; Infix_local</nav><header class="odoc-preamble"><h1>Module <code><span>Fut.Infix_local</span></code></h1><p>Operators that run on the same thread as the first future.</p></header><div class="odoc-content"><div class="odoc-spec"><div class="spec value anchored" id="val-(&gt;|=)"><a href="#val-(&gt;|=)" class="anchor"></a><code><span><span class="keyword">val</span> (&gt;|=) : <span><span><span class="type-var">'a</span> <a href="../index.html#type-t">t</a></span> <span class="arrow">&#45;&gt;</span></span> <span><span>(<span><span class="type-var">'a</span> <span class="arrow">&#45;&gt;</span></span> <span class="type-var">'b</span>)</span> <span class="arrow">&#45;&gt;</span></span> <span><span class="type-var">'b</span> <a href="../index.html#type-t">t</a></span></span></code></div></div><div class="odoc-spec"><div class="spec value anchored" id="val-(&gt;&gt;=)"><a href="#val-(&gt;&gt;=)" class="anchor"></a><code><span><span class="keyword">val</span> (&gt;&gt;=) : <span><span><span class="type-var">'a</span> <a href="../index.html#type-t">t</a></span> <span class="arrow">&#45;&gt;</span></span> <span><span>(<span><span class="type-var">'a</span> <span class="arrow">&#45;&gt;</span></span> <span><span class="type-var">'b</span> <a href="../index.html#type-t">t</a></span>)</span> <span class="arrow">&#45;&gt;</span></span> <span><span class="type-var">'b</span> <a href="../index.html#type-t">t</a></span></span></code></div></div><div class="odoc-spec"><div class="spec value anchored" id="val-let+"><a href="#val-let+" class="anchor"></a><code><span><span class="keyword">val</span> let+ : <span><span><span class="type-var">'a</span> <a href="../index.html#type-t">t</a></span> <span class="arrow">&#45;&gt;</span></span> <span><span>(<span><span class="type-var">'a</span> <span class="arrow">&#45;&gt;</span></span> <span class="type-var">'b</span>)</span> <span class="arrow">&#45;&gt;</span></span> <span><span class="type-var">'b</span> <a href="../index.html#type-t">t</a></span></span></code></div></div><div class="odoc-spec"><div class="spec value anchored" id="val-and+"><a href="#val-and+" class="anchor"></a><code><span><span class="keyword">val</span> and+ : <span><span><span class="type-var">'a</span> <a href="../index.html#type-t">t</a></span> <span class="arrow">&#45;&gt;</span></span> <span><span><span class="type-var">'b</span> <a href="../index.html#type-t">t</a></span> <span class="arrow">&#45;&gt;</span></span> <span><span>(<span class="type-var">'a</span> * <span class="type-var">'b</span>)</span> <a href="../index.html#type-t">t</a></span></span></code></div></div><div class="odoc-spec"><div class="spec value anchored" id="val-let*"><a href="#val-let*" class="anchor"></a><code><span><span class="keyword">val</span> let* : <span><span><span class="type-var">'a</span> <a href="../index.html#type-t">t</a></span> <span class="arrow">&#45;&gt;</span></span> <span><span>(<span><span class="type-var">'a</span> <span class="arrow">&#45;&gt;</span></span> <span><span class="type-var">'b</span> <a href="../index.html#type-t">t</a></span>)</span> <span class="arrow">&#45;&gt;</span></span> <span><span class="type-var">'b</span> <a href="../index.html#type-t">t</a></span></span></code></div></div><div class="odoc-spec"><div class="spec value anchored" id="val-and*"><a href="#val-and*" class="anchor"></a><code><span><span class="keyword">val</span> and* : <span><span><span class="type-var">'a</span> <a href="../index.html#type-t">t</a></span> <span class="arrow">&#45;&gt;</span></span> <span><span><span class="type-var">'b</span> <a href="../index.html#type-t">t</a></span> <span class="arrow">&#45;&gt;</span></span> <span><span>(<span class="type-var">'a</span> * <span class="type-var">'b</span>)</span> <a href="../index.html#type-t">t</a></span></span></code></div></div></div></body></html>

File diff suppressed because one or more lines are too long

View file

@ -0,0 +1,2 @@
<!DOCTYPE html>
<html xmlns="http://www.w3.org/1999/xhtml"><head><title>INFIX (moonpool.Moonpool.Fut.INFIX)</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">moonpool</a> &#x00BB; <a href="../../index.html">Moonpool</a> &#x00BB; <a href="../index.html">Fut</a> &#x00BB; INFIX</nav><header class="odoc-preamble"><h1>Module type <code><span>Fut.INFIX</span></code></h1></header><div class="odoc-content"><div class="odoc-spec"><div class="spec value anchored" id="val-(&gt;|=)"><a href="#val-(&gt;|=)" class="anchor"></a><code><span><span class="keyword">val</span> (&gt;|=) : <span><span><span class="type-var">'a</span> <a href="../index.html#type-t">t</a></span> <span class="arrow">&#45;&gt;</span></span> <span><span>(<span><span class="type-var">'a</span> <span class="arrow">&#45;&gt;</span></span> <span class="type-var">'b</span>)</span> <span class="arrow">&#45;&gt;</span></span> <span><span class="type-var">'b</span> <a href="../index.html#type-t">t</a></span></span></code></div></div><div class="odoc-spec"><div class="spec value anchored" id="val-(&gt;&gt;=)"><a href="#val-(&gt;&gt;=)" class="anchor"></a><code><span><span class="keyword">val</span> (&gt;&gt;=) : <span><span><span class="type-var">'a</span> <a href="../index.html#type-t">t</a></span> <span class="arrow">&#45;&gt;</span></span> <span><span>(<span><span class="type-var">'a</span> <span class="arrow">&#45;&gt;</span></span> <span><span class="type-var">'b</span> <a href="../index.html#type-t">t</a></span>)</span> <span class="arrow">&#45;&gt;</span></span> <span><span class="type-var">'b</span> <a href="../index.html#type-t">t</a></span></span></code></div></div><div class="odoc-spec"><div class="spec value anchored" id="val-let+"><a href="#val-let+" class="anchor"></a><code><span><span class="keyword">val</span> let+ : <span><span><span class="type-var">'a</span> <a href="../index.html#type-t">t</a></span> <span class="arrow">&#45;&gt;</span></span> <span><span>(<span><span class="type-var">'a</span> <span class="arrow">&#45;&gt;</span></span> <span class="type-var">'b</span>)</span> <span class="arrow">&#45;&gt;</span></span> <span><span class="type-var">'b</span> <a href="../index.html#type-t">t</a></span></span></code></div></div><div class="odoc-spec"><div class="spec value anchored" id="val-and+"><a href="#val-and+" class="anchor"></a><code><span><span class="keyword">val</span> and+ : <span><span><span class="type-var">'a</span> <a href="../index.html#type-t">t</a></span> <span class="arrow">&#45;&gt;</span></span> <span><span><span class="type-var">'b</span> <a href="../index.html#type-t">t</a></span> <span class="arrow">&#45;&gt;</span></span> <span><span>(<span class="type-var">'a</span> * <span class="type-var">'b</span>)</span> <a href="../index.html#type-t">t</a></span></span></code></div></div><div class="odoc-spec"><div class="spec value anchored" id="val-let*"><a href="#val-let*" class="anchor"></a><code><span><span class="keyword">val</span> let* : <span><span><span class="type-var">'a</span> <a href="../index.html#type-t">t</a></span> <span class="arrow">&#45;&gt;</span></span> <span><span>(<span><span class="type-var">'a</span> <span class="arrow">&#45;&gt;</span></span> <span><span class="type-var">'b</span> <a href="../index.html#type-t">t</a></span>)</span> <span class="arrow">&#45;&gt;</span></span> <span><span class="type-var">'b</span> <a href="../index.html#type-t">t</a></span></span></code></div></div><div class="odoc-spec"><div class="spec value anchored" id="val-and*"><a href="#val-and*" class="anchor"></a><code><span><span class="keyword">val</span> and* : <span><span><span class="type-var">'a</span> <a href="../index.html#type-t">t</a></span> <span class="arrow">&#45;&gt;</span></span> <span><span><span class="type-var">'b</span> <a href="../index.html#type-t">t</a></span> <span class="arrow">&#45;&gt;</span></span> <span><span>(<span class="type-var">'a</span> * <span class="type-var">'b</span>)</span> <a href="../index.html#type-t">t</a></span></span></code></div></div></div></body></html>

File diff suppressed because one or more lines are too long

View file

@ -0,0 +1,8 @@
<!DOCTYPE html>
<html xmlns="http://www.w3.org/1999/xhtml"><head><title>For_runner_implementors (moonpool.Moonpool.Pool.For_runner_implementors)</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">moonpool</a> &#x00BB; <a href="../../index.html">Moonpool</a> &#x00BB; <a href="../index.html">Pool</a> &#x00BB; For_runner_implementors</nav><header class="odoc-preamble"><h1>Module <code><span>Pool.For_runner_implementors</span></code></h1></header><div class="odoc-content"><div class="odoc-spec"><div class="spec value anchored" id="val-create"><a href="#val-create" class="anchor"></a><code><span><span class="keyword">val</span> create :
<span>size:<span>(<span>unit <span class="arrow">&#45;&gt;</span></span> int)</span> <span class="arrow">&#45;&gt;</span></span>
<span>num_tasks:<span>(<span>unit <span class="arrow">&#45;&gt;</span></span> int)</span> <span class="arrow">&#45;&gt;</span></span>
<span>shutdown:<span>(<span>wait:bool <span class="arrow">&#45;&gt;</span></span> <span>unit <span class="arrow">&#45;&gt;</span></span> unit)</span> <span class="arrow">&#45;&gt;</span></span>
<span>run_async:<span>(<span><a href="../index.html#type-task">task</a> <span class="arrow">&#45;&gt;</span></span> unit)</span> <span class="arrow">&#45;&gt;</span></span>
<span>unit <span class="arrow">&#45;&gt;</span></span>
<a href="../index.html#type-t">t</a></span></code></div><div class="spec-doc"><p>Create a new runner.</p><p><b>NOTE</b>: the runner should support DLA and <a href="../../Suspend_/index.html"><code>Suspend_</code></a> on OCaml 5.x, so that <a href="../../Fork_join/index.html"><code>Fork_join</code></a> and other 5.x features work properly.</p></div></div></div></body></html>

File diff suppressed because one or more lines are too long

View file

@ -0,0 +1,8 @@
<!DOCTYPE html>
<html xmlns="http://www.w3.org/1999/xhtml"><head><title>For_runner_implementors (moonpool.Moonpool.Runner.For_runner_implementors)</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">moonpool</a> &#x00BB; <a href="../../index.html">Moonpool</a> &#x00BB; <a href="../index.html">Runner</a> &#x00BB; For_runner_implementors</nav><header class="odoc-preamble"><h1>Module <code><span>Runner.For_runner_implementors</span></code></h1></header><div class="odoc-content"><div class="odoc-spec"><div class="spec value anchored" id="val-create"><a href="#val-create" class="anchor"></a><code><span><span class="keyword">val</span> create :
<span>size:<span>(<span>unit <span class="arrow">&#45;&gt;</span></span> int)</span> <span class="arrow">&#45;&gt;</span></span>
<span>num_tasks:<span>(<span>unit <span class="arrow">&#45;&gt;</span></span> int)</span> <span class="arrow">&#45;&gt;</span></span>
<span>shutdown:<span>(<span>wait:bool <span class="arrow">&#45;&gt;</span></span> <span>unit <span class="arrow">&#45;&gt;</span></span> unit)</span> <span class="arrow">&#45;&gt;</span></span>
<span>run_async:<span>(<span><a href="../index.html#type-task">task</a> <span class="arrow">&#45;&gt;</span></span> unit)</span> <span class="arrow">&#45;&gt;</span></span>
<span>unit <span class="arrow">&#45;&gt;</span></span>
<a href="../index.html#type-t">t</a></span></code></div><div class="spec-doc"><p>Create a new runner.</p><p><b>NOTE</b>: the runner should support DLA and <a href="../../Suspend_/index.html"><code>Suspend_</code></a> on OCaml 5.x, so that <a href="../../Fork_join/index.html"><code>Fork_join</code></a> and other 5.x features work properly.</p></div></div></div></body></html>

File diff suppressed because one or more lines are too long

View file

@ -0,0 +1,5 @@
<!DOCTYPE html>
<html xmlns="http://www.w3.org/1999/xhtml"><head><title>Suspend_ (moonpool.Moonpool.Suspend_)</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">moonpool</a> &#x00BB; <a href="../index.html">Moonpool</a> &#x00BB; Suspend_</nav><header class="odoc-preamble"><h1>Module <code><span>Moonpool.Suspend_</span></code></h1><p>Suspensions.</p><p>This is only going to work on OCaml 5.x.</p><p><b>NOTE</b>: this is not stable for now.</p><ul class="at-tags"><li class="alert"><span class="at-tag">alert</span> unstable this module is an implementation detail of moonpool for now</li></ul><p>(Private) suspending tasks using Effects.</p><p>This module is an implementation detail of Moonpool and should not be used outside of it, except by experts to implement <a href="../Runner/index.html"><code>Runner</code></a>.</p></header><div class="odoc-content"><div class="odoc-spec"><div class="spec type anchored" id="type-suspension"><a href="#type-suspension" class="anchor"></a><code><span><span class="keyword">type</span> suspension</span><span> = <span><span><span>(unit, exn * <a href="../../../ocaml/Stdlib/Printexc/index.html#type-raw_backtrace">Stdlib.Printexc.raw_backtrace</a>)</span> <a href="../../../ocaml/Stdlib/index.html#type-result">result</a></span> <span class="arrow">&#45;&gt;</span></span> unit</span></code></div><div class="spec-doc"><p>A suspended computation</p></div></div><div class="odoc-spec"><div class="spec type anchored" id="type-task"><a href="#type-task" class="anchor"></a><code><span><span class="keyword">type</span> task</span><span> = <span>unit <span class="arrow">&#45;&gt;</span></span> unit</span></code></div></div><div class="odoc-spec"><div class="spec type anchored" id="type-suspension_handler"><a href="#type-suspension_handler" class="anchor"></a><code><span><span class="keyword">type</span> suspension_handler</span><span> = </span><span>{</span></code><ol><li id="type-suspension_handler.handle" class="def record field anchored"><a href="#type-suspension_handler.handle" class="anchor"></a><code><span>handle : <span>run:<span>(<span>with_handler:bool <span class="arrow">&#45;&gt;</span></span> <span><a href="#type-task">task</a> <span class="arrow">&#45;&gt;</span></span> unit)</span> <span class="arrow">&#45;&gt;</span></span> <span><a href="#type-suspension">suspension</a> <span class="arrow">&#45;&gt;</span></span> unit;</span></code></li></ol><code><span>}</span></code></div><div class="spec-doc"><p>The handler that knows what to do with the suspended computation.</p><p>The handler is given two things:</p><ul><li>the suspended computation (which can be resumed with a result eventually);</li><li>a <code>run</code> function that can be used to start tasks to perform some computation.</li></ul><p>This means that a fork-join primitive, for example, can use a single call to <code>suspend</code> to:</p><ul><li>suspend the caller until the fork-join is done</li><li>use <code>run</code> to start all the tasks. Typically <code>run</code> is called multiple times, which is where the &quot;fork&quot; part comes from. Each call to <code>run</code> potentially runs in parallel with the other calls. The calls must coordinate so that, once they are all done, the suspended caller is resumed with the aggregated result of the computation.</li></ul></div></div><div class="odoc-spec"><div class="spec value anchored" id="val-with_suspend"><a href="#val-with_suspend" class="anchor"></a><code><span><span class="keyword">val</span> with_suspend :
<span>run:<span>(<span>with_handler:bool <span class="arrow">&#45;&gt;</span></span> <span><a href="#type-task">task</a> <span class="arrow">&#45;&gt;</span></span> unit)</span> <span class="arrow">&#45;&gt;</span></span>
<span><span>(<span>unit <span class="arrow">&#45;&gt;</span></span> unit)</span> <span class="arrow">&#45;&gt;</span></span>
unit</span></code></div><div class="spec-doc"><p><code>with_suspend ~run f</code> runs <code>f()</code> in an environment where <code>suspend</code> will work. If <code>f()</code> suspends with suspension handler <code>h</code>, this calls <code>h ~run k</code> where <code>k</code> is the suspension.</p><p>This will not do anything on OCaml 4.x.</p></div></div></div></body></html>

File diff suppressed because one or more lines are too long

View file

@ -0,0 +1,2 @@
<!DOCTYPE html>
<html xmlns="http://www.w3.org/1999/xhtml"><head><title>Moonpool__ (moonpool.Moonpool__)</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">moonpool</a> &#x00BB; Moonpool__</nav><header class="odoc-preamble"><h1>Module <code><span>Moonpool__</span></code></h1></header><div class="odoc-content"></div></body></html>

View file

@ -0,0 +1,2 @@
<!DOCTYPE html>
<html xmlns="http://www.w3.org/1999/xhtml"><head><title>Moonpool__Atomic_ (moonpool.Moonpool__Atomic_)</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">moonpool</a> &#x00BB; Moonpool__Atomic_</nav><header class="odoc-preamble"><h1>Module <code><span>Moonpool__Atomic_</span></code></h1></header><div class="odoc-content"></div></body></html>

View file

@ -0,0 +1,2 @@
<!DOCTYPE html>
<html xmlns="http://www.w3.org/1999/xhtml"><head><title>Moonpool__Bb_queue (moonpool.Moonpool__Bb_queue)</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">moonpool</a> &#x00BB; Moonpool__Bb_queue</nav><header class="odoc-preamble"><h1>Module <code><span>Moonpool__Bb_queue</span></code></h1></header><div class="odoc-content"></div></body></html>

View file

@ -0,0 +1,2 @@
<!DOCTYPE html>
<html xmlns="http://www.w3.org/1999/xhtml"><head><title>Moonpool__Chan (moonpool.Moonpool__Chan)</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">moonpool</a> &#x00BB; Moonpool__Chan</nav><header class="odoc-preamble"><h1>Module <code><span>Moonpool__Chan</span></code></h1></header><div class="odoc-content"></div></body></html>

View file

@ -0,0 +1,2 @@
<!DOCTYPE html>
<html xmlns="http://www.w3.org/1999/xhtml"><head><title>Moonpool__Dla_ (moonpool.Moonpool__Dla_)</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">moonpool</a> &#x00BB; Moonpool__Dla_</nav><header class="odoc-preamble"><h1>Module <code><span>Moonpool__Dla_</span></code></h1></header><div class="odoc-content"></div></body></html>

View file

@ -0,0 +1,2 @@
<!DOCTYPE html>
<html xmlns="http://www.w3.org/1999/xhtml"><head><title>Moonpool__Domain_ (moonpool.Moonpool__Domain_)</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">moonpool</a> &#x00BB; Moonpool__Domain_</nav><header class="odoc-preamble"><h1>Module <code><span>Moonpool__Domain_</span></code></h1></header><div class="odoc-content"></div></body></html>

View file

@ -0,0 +1,2 @@
<!DOCTYPE html>
<html xmlns="http://www.w3.org/1999/xhtml"><head><title>Moonpool__Fork_join (moonpool.Moonpool__Fork_join)</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">moonpool</a> &#x00BB; Moonpool__Fork_join</nav><header class="odoc-preamble"><h1>Module <code><span>Moonpool__Fork_join</span></code></h1></header><div class="odoc-content"></div></body></html>

View file

@ -0,0 +1,2 @@
<!DOCTYPE html>
<html xmlns="http://www.w3.org/1999/xhtml"><head><title>Moonpool__Fut (moonpool.Moonpool__Fut)</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">moonpool</a> &#x00BB; Moonpool__Fut</nav><header class="odoc-preamble"><h1>Module <code><span>Moonpool__Fut</span></code></h1></header><div class="odoc-content"></div></body></html>

View file

@ -0,0 +1,2 @@
<!DOCTYPE html>
<html xmlns="http://www.w3.org/1999/xhtml"><head><title>Moonpool__Lock (moonpool.Moonpool__Lock)</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">moonpool</a> &#x00BB; Moonpool__Lock</nav><header class="odoc-preamble"><h1>Module <code><span>Moonpool__Lock</span></code></h1></header><div class="odoc-content"></div></body></html>

View file

@ -0,0 +1,2 @@
<!DOCTYPE html>
<html xmlns="http://www.w3.org/1999/xhtml"><head><title>Moonpool__Pool (moonpool.Moonpool__Pool)</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">moonpool</a> &#x00BB; Moonpool__Pool</nav><header class="odoc-preamble"><h1>Module <code><span>Moonpool__Pool</span></code></h1></header><div class="odoc-content"></div></body></html>

View file

@ -0,0 +1,2 @@
<!DOCTYPE html>
<html xmlns="http://www.w3.org/1999/xhtml"><head><title>Moonpool__Runner (moonpool.Moonpool__Runner)</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">moonpool</a> &#x00BB; Moonpool__Runner</nav><header class="odoc-preamble"><h1>Module <code><span>Moonpool__Runner</span></code></h1></header><div class="odoc-content"></div></body></html>

View file

@ -0,0 +1,2 @@
<!DOCTYPE html>
<html xmlns="http://www.w3.org/1999/xhtml"><head><title>Moonpool__Suspend_ (moonpool.Moonpool__Suspend_)</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">moonpool</a> &#x00BB; Moonpool__Suspend_</nav><header class="odoc-preamble"><h1>Module <code><span>Moonpool__Suspend_</span></code></h1></header><div class="odoc-content"></div></body></html>

View file

@ -0,0 +1,60 @@
# 0.4
- add `Fut.{reify_error,bind_reify_error}`
- full lifecycle for worker domains, where a domain
will shutdown if no thread runs on it, after a
short delay.
- fix: generalize type of `create_arg`
- perf: in `Bb_queue`, only signal condition on push if queue was empty
# 0.3
- add `Fork_join` for parallelizing computations. This is only
available on OCaml 5.x because it relies on effects.
- add `Fork_join.{for_,map_array,map_list}`
- add `Fork_join.all_{list,init}`
- add `Pool.with_`
- add a channel module
- add `Runner`, change `Pool` to produce a `Runner.t`
- add a `Lock` module
- add support for domain-local-await when installed
- add `Fut.await` for OCaml >= 5.0
- fix: Fork_join.both_ignore now has a more general type
- expose `Suspend_` and its internal effect with an unstability alert.
This is intended for implementors of `Runner` only.
- port `cpp.ml` from containers, replace previous codegen with it.
This will provide better flexibility for supporting multiple versions
of OCaml in the future.
- add `Pool.run_wait_block`; rename `Pool.run` into `Pool.run_async`
- fix: in blocking queue, `pop` works on a non empty closed queue
# 0.2
- add `Fut.for_list`
- add `around_task` to `Pool.create`
- add `Pool.shutdown_without_waiting`
- add `Pool.num_tasks`
- add `Fut.is_done`
- add `Blocking_queue.size`
- add `Fut.for_array` to easily iterate on an array in parallel
- add `Fut.get_or_fail{,_exn}`
- perf: limit number of work queues in pool
- perf: use multiple queues and non-blocking work-stealing from them, in pool
this improves the behavior for many small tasks by reducing contention on
each queue
- fix: fut: actually run all map/bind callbacks in pool if provided
# 0.1.1
- fix(fut): fix bug when calling `wait_list []`
- fix: join_array on arrays of length=1 had a bound error
# 0.1
initial release

View file

@ -0,0 +1,278 @@
# Moonpool
[![build](https://github.com/c-cube/moonpool/actions/workflows/main.yml/badge.svg)](https://github.com/c-cube/moonpool/actions/workflows/main.yml)
A pool within a bigger pool (ie the ocean). Here, we're talking about
pools of `Thread.t` which live within a fixed pool of `Domain.t`.
This fixed pool of domains is shared between *all* the pools in moonpool.
The rationale is that we should not have more domains than cores, so
it's easier to pre-allocate exactly that many domains, and run more flexible
thread pools on top.
In addition, some concurrency and parallelism primitives are provided:
- `Moonpool.Fut` provides futures/promises that execute
on these thread pools. The futures are thread safe.
- `Moonpool.Chan` provides simple cooperative and thread-safe channels
to use within pool-bound tasks. They're essentially re-usable futures.
On OCaml 5 (meaning there's actual domains and effects, not just threads),
a `Fut.await` primitive is provided. It's simpler and more powerful
than the monadic combinators.
- `Moonpool.Fork_join` provides the fork-join parallelism primitives
to use within tasks running in the pool.
## Usage
The user can create several thread pools. These pools use regular posix threads,
but the threads are spread across multiple domains (on OCaml 5), which enables
parallelism.
The function `Pool.run_async pool task` runs `task()` on one of the workers
of `pool`, as soon as one is available. No result is returned.
```ocaml
# #require "threads";;
# let pool = Moonpool.Pool.create ~min:4 ();;
val pool : Moonpool.Runner.t =
{Moonpool.Pool.run_async = <fun>; shutdown = <fun>; size = <fun>;
num_tasks = <fun>}
# begin
Moonpool.Pool.run_async pool
(fun () ->
Thread.delay 0.1;
print_endline "running from the pool");
print_endline "running from the caller";
Thread.delay 0.3; (* wait for task to run before returning *)
end ;;
running from the caller
running from the pool
- : unit = ()
```
To wait until the task is done, you can use `Pool.run_wait_block` instead:
```ocaml
# begin
Moonpool.Pool.run_wait_block pool
(fun () ->
Thread.delay 0.1;
print_endline "running from the pool");
print_endline "running from the caller (after waiting)";
end ;;
running from the pool
running from the caller (after waiting)
- : unit = ()
```
The function `Fut.spawn ~on f` schedules `f ()` on the pool `on`, and immediately
returns a _future_ which will eventually hold the result (or an exception).
The function `Fut.peek` will return the current value, or `None` if the future is
still not completed.
The functions `Fut.wait_block` and `Fut.wait_block_exn` will
block the current thread and wait for the future to complete.
There are some deadlock risks associated with careless use of these, so
be sure to consult the documentation of the `Fut` module.
```ocaml
# let fut = Moonpool.Fut.spawn ~on:pool
(fun () ->
Thread.delay 0.5;
1+1);;
val fut : int Moonpool.Fut.t = <abstr>
# Moonpool.Fut.peek fut;
- : int Moonpool.Fut.or_error option = None
# Moonpool.Fut.wait_block_exn fut;;
- : int = 2
```
Some combinators on futures are also provided, e.g. to wait for all futures in
an array to complete:
```ocaml
# let rec fib x =
if x <= 1 then 1 else fib (x-1) + fib (x-2);;
val fib : int -> int = <fun>
# List.init 10 fib;;
- : int list = [1; 1; 2; 3; 5; 8; 13; 21; 34; 55]
# let fibs = Array.init 35 (fun n -> Moonpool.Fut.spawn ~on:pool (fun () -> fib n));;
val fibs : int Moonpool.Fut.t array =
[|<abstr>; <abstr>; <abstr>; <abstr>; <abstr>; <abstr>; <abstr>; <abstr>;
<abstr>; <abstr>; <abstr>; <abstr>; <abstr>; <abstr>; <abstr>; <abstr>;
<abstr>; <abstr>; <abstr>; <abstr>; <abstr>; <abstr>; <abstr>; <abstr>;
<abstr>; <abstr>; <abstr>; <abstr>; <abstr>; <abstr>; <abstr>; <abstr>;
<abstr>; <abstr>; <abstr>|]
# Moonpool.Fut.join_array fibs |> Moonpool.Fut.wait_block;;
- : int array Moonpool.Fut.or_error =
Ok
[|1; 1; 2; 3; 5; 8; 13; 21; 34; 55; 89; 144; 233; 377; 610; 987; 1597; 2584;
4181; 6765; 10946; 17711; 28657; 46368; 75025; 121393; 196418; 317811;
514229; 832040; 1346269; 2178309; 3524578; 5702887; 9227465|]
```
### Support for `await`
On OCaml 5, effect handlers can be used to implement `Fut.await : 'a Fut.t -> 'a`.
The expression `Fut.await some_fut`, when run from inside some thread pool,
suspends its caller task; the suspended task is then parked, and will
be resumed when the future is completed.
The pool worker that was executing this expression, in the mean time, moves
on to another task.
This means that `await` is free of the deadlock risks associated with
`Fut.wait_block`.
In the following example, we bypass the need for `Fut.join_array` by simply
using regular array functions along with `Fut.await`.
```ocaml
# let main_fut =
let open Moonpool.Fut in
spawn ~on:pool @@ fun () ->
(* array of sub-futures *)
let tasks: _ Moonpool.Fut.t array = Array.init 100 (fun i ->
spawn ~on:pool (fun () ->
Thread.delay 0.01;
i+1))
in
Array.fold_left (fun n fut -> n + await fut) 0 tasks
;;
val main_fut : int Moonpool.Fut.t = <abstr>
# let expected_sum = Array.init 100 (fun i->i+1) |> Array.fold_left (+) 0;;
val expected_sum : int = 5050
# assert (expected_sum = Moonpool.Fut.wait_block_exn main_fut);;
- : unit = ()
```
### Fork-join
On OCaml 5, again using effect handlers, the module `Fork_join`
implements the [fork-join model](https://en.wikipedia.org/wiki/Fork%E2%80%93join_model).
It must run on a pool (using [Pool.run] or inside a future via [Future.spawn]).
```ocaml
# let rec select_sort arr i len =
if len >= 2 then (
let idx = ref i in
for j = i+1 to i+len-1 do
if arr.(j) < arr.(!idx) then idx := j
done;
let tmp = arr.(!idx) in
arr.(!idx) <- arr.(i);
arr.(i) <- tmp;
select_sort arr (i+1) (len-1)
);;
val select_sort : 'a array -> int -> int -> unit = <fun>
# let rec quicksort arr i len : unit =
if len <= 10 then select_sort arr i len
else (
let pivot = arr.(i + (len / 2)) in
let low = ref (i - 1) in
let high = ref (i + len) in
while !low < !high do
incr low;
decr high;
while arr.(!low) < pivot do
incr low
done;
while arr.(!high) > pivot do
decr high
done;
if !low < !high then (
let tmp = arr.(!low) in
arr.(!low) <- arr.(!high);
arr.(!high) <- tmp
)
done;
Moonpool.Fork_join.both_ignore
(fun () -> quicksort arr i (!low - i))
(fun () -> quicksort arr !low (len - (!low - i)))
);;
val quicksort : 'a array -> int -> int -> unit = <fun>
# let arr = [| 4;2;1;5;1;10;3 |];;
val arr : int array = [|4; 2; 1; 5; 1; 10; 3|]
# Moonpool.Fut.spawn
~on:pool (fun () -> quicksort arr 0 (Array.length arr))
|> Moonpool.Fut.wait_block_exn;;
- : unit = ()
# arr;;
- : int array = [|1; 1; 2; 3; 4; 5; 10|]
# let arr =
let rand = Random.State.make [| 42 |] in
Array.init 40 (fun _-> Random.State.int rand 300);;
val arr : int array =
[|64; 220; 247; 196; 51; 186; 22; 106; 58; 58; 11; 161; 243; 111; 74; 109;
49; 135; 59; 192; 132; 38; 19; 44; 126; 147; 182; 83; 95; 231; 204; 121;
142; 255; 72; 85; 95; 93; 73; 202|]
# Moonpool.Fut.spawn ~on:pool
(fun () -> quicksort arr 0 (Array.length arr))
|> Moonpool.Fut.wait_block_exn
;;
- : unit = ()
# arr;;
- : int array =
[|11; 19; 22; 38; 44; 49; 51; 58; 58; 59; 64; 72; 73; 74; 83; 85; 93; 95; 95;
106; 109; 111; 121; 126; 132; 135; 142; 147; 161; 182; 186; 192; 196; 202;
204; 220; 231; 243; 247; 255|]
```
### More intuition
To quote [gasche](https://discuss.ocaml.org/t/ann-moonpool-0-1/12387/15):
<blockquote>
You are assuming that, if pool P1 has 5000 tasks, and pool P2 has 10 other tasks, then these 10 tasks will get to run faster than if we just added them at the end of pool P1. This sounds like a “fairness” assumption: separate pools will get comparable shares of domain compute ressources, or at least no pool will be delayed too much from running their first tasks.
[…]
- each pool uses a fixed number of threads, all running simultaneously; if there are more tasks sent to the pool, they are delayed and will only get one of the pool threads when previous tasks have finished
- separate pools run their separate threads simultaneously, so they compete for compute resources on their domain using OCamls systhreads scheduler which does provide fairness in practice
- as a result, running in a new pool enables quicker completion than adding to an existing pool (as we will be scheduled right away instead of waiting for previous tasks in our pool to free some threads)
- the ratio of compute resources that each pool gets should be roughly proportional to its number of worker threads
</blockquote>
## OCaml versions
This works for OCaml >= 4.08.
- On OCaml 4.xx, there are no domains, so this is just a library for regular thread pools
with not actual parallelism (except for threads that call C code that releases the runtime lock, that is).
- on OCaml 5.xx, there is a fixed pool of domains (using the recommended domain count).
These domains do not do much by themselves, but we schedule new threads on them, and group
threads from each domain into pools.
Each domain might thus have multiple threads that belong to distinct pools (and several threads from
the same pool, too — this is useful for threads blocking on IO).
A useful analogy is that each domain is a bit like a CPU core, and `Thread.t` is a logical thread running on a core.
Multiple threads have to share a single core and do not run in parallel on it[^1].
We can therefore build pools that spread their worker threads on multiple cores to enable parallelism within each pool.
TODO: actually use https://github.com/haesbaert/ocaml-processor to pin domains to cores,
possibly optionally using `select` in dune.
## License
MIT license.
## Install
```sh, skip
$ opam install moonpool
```
[^1]: let's not talk about hyperthreading.

2
dev/moonpool/index.html Normal file
View file

@ -0,0 +1,2 @@
<!DOCTYPE html>
<html xmlns="http://www.w3.org/1999/xhtml"><head><title>index (moonpool.index)</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> moonpool</nav><header class="odoc-preamble"><h1 id="package-moonpool"><a href="#package-moonpool" class="anchor"></a>Package moonpool <nav><a type="text/plain; charset=UTF-8" href="_doc-dir/CHANGES.md">changes</a> <a href="#package_info">more…</a></nav></h1><ul class="modules"><li><a href="Moonpool/index.html"><code>Moonpool</code></a> <span class="synopsis">Moonpool</span></li></ul></header><nav class="odoc-toc"><ul><li><a href="#package_info">Package info</a></li></ul></nav><div class="odoc-content"><h2 id="package_info"><a href="#package_info" class="anchor"></a>Package info</h2><table class="package info"><tr id="info-changes-files"><td><a href="#info-changes-files" aria-hidden="true" class="anchor"></a>changes-files</td><td><ul><li><a type="text/plain; charset=UTF-8" href="_doc-dir/CHANGES.md">CHANGES.md</a></li></ul></td></tr><tr id="info-readme-files"><td><a href="#info-readme-files" aria-hidden="true" class="anchor"></a>readme-files</td><td><ul><li><a type="text/plain; charset=UTF-8" href="_doc-dir/README.md">README.md</a></li></ul></td></tr></table></div></body></html>

View file

@ -0,0 +1,5 @@
<!DOCTYPE html>
<html xmlns="http://www.w3.org/1999/xhtml"><head><title>Afl_instrument (ocaml.Afl_instrument)</title><link rel="stylesheet" href="../../_odoc-theme/odoc.css"/><meta charset="utf-8"/><meta name="generator" content="odoc 2.2.1"/><meta name="viewport" content="width=device-width,initial-scale=1.0"/><script src="../../highlight.pack.js"></script><script>hljs.initHighlightingOnLoad();</script></head><body class="odoc"><nav class="odoc-nav"><a href="../index.html">Up</a> <a href="../index.html">ocaml</a> &#x00BB; Afl_instrument</nav><header class="odoc-preamble"><h1>Module <code><span>Afl_instrument</span></code></h1><p>Instrumentation for afl-fuzz.</p></header><div class="odoc-content"><div class="odoc-spec"><div class="spec value anchored" id="val-instrument_function"><a href="#val-instrument_function" class="anchor"></a><code><span><span class="keyword">val</span> instrument_function : <span><a href="../Cmm/index.html#type-expression">Cmm.expression</a> <span class="arrow">&#45;&gt;</span></span> <span><a href="../Debuginfo/index.html#type-t">Debuginfo.t</a> <span class="arrow">&#45;&gt;</span></span> <a href="../Cmm/index.html#type-expression">Cmm.expression</a></span></code></div></div><div class="odoc-spec"><div class="spec value anchored" id="val-instrument_initialiser"><a href="#val-instrument_initialiser" class="anchor"></a><code><span><span class="keyword">val</span> instrument_initialiser :
<span><a href="../Cmm/index.html#type-expression">Cmm.expression</a> <span class="arrow">&#45;&gt;</span></span>
<span><span>(<span>unit <span class="arrow">&#45;&gt;</span></span> <a href="../Debuginfo/index.html#type-t">Debuginfo.t</a>)</span> <span class="arrow">&#45;&gt;</span></span>
<a href="../Cmm/index.html#type-expression">Cmm.expression</a></span></code></div></div></div></body></html>

File diff suppressed because one or more lines are too long

View file

@ -0,0 +1,2 @@
<!DOCTYPE html>
<html xmlns="http://www.w3.org/1999/xhtml"><head><title>Allocated_const (ocaml.Allocated_const)</title><link rel="stylesheet" href="../../_odoc-theme/odoc.css"/><meta charset="utf-8"/><meta name="generator" content="odoc 2.2.1"/><meta name="viewport" content="width=device-width,initial-scale=1.0"/><script src="../../highlight.pack.js"></script><script>hljs.initHighlightingOnLoad();</script></head><body class="odoc"><nav class="odoc-nav"><a href="../index.html">Up</a> <a href="../index.html">ocaml</a> &#x00BB; Allocated_const</nav><header class="odoc-preamble"><h1>Module <code><span>Allocated_const</span></code></h1><p>Constants that are always allocated (possibly statically). Blocks are not included here since they are always encoded using <code>Prim (Pmakeblock, ...)</code>.</p></header><div class="odoc-content"><div class="odoc-spec"><div class="spec type anchored" id="type-t"><a href="#type-t" class="anchor"></a><code><span><span class="keyword">type</span> t</span><span> = </span></code><ol><li id="type-t.Float" class="def variant constructor anchored"><a href="#type-t.Float" class="anchor"></a><code><span>| </span><span><span class="constructor">Float</span> <span class="keyword">of</span> float</span></code></li><li id="type-t.Int32" class="def variant constructor anchored"><a href="#type-t.Int32" class="anchor"></a><code><span>| </span><span><span class="constructor">Int32</span> <span class="keyword">of</span> int32</span></code></li><li id="type-t.Int64" class="def variant constructor anchored"><a href="#type-t.Int64" class="anchor"></a><code><span>| </span><span><span class="constructor">Int64</span> <span class="keyword">of</span> int64</span></code></li><li id="type-t.Nativeint" class="def variant constructor anchored"><a href="#type-t.Nativeint" class="anchor"></a><code><span>| </span><span><span class="constructor">Nativeint</span> <span class="keyword">of</span> nativeint</span></code></li><li id="type-t.Float_array" class="def variant constructor anchored"><a href="#type-t.Float_array" class="anchor"></a><code><span>| </span><span><span class="constructor">Float_array</span> <span class="keyword">of</span> <span>float list</span></span></code></li><li id="type-t.Immutable_float_array" class="def variant constructor anchored"><a href="#type-t.Immutable_float_array" class="anchor"></a><code><span>| </span><span><span class="constructor">Immutable_float_array</span> <span class="keyword">of</span> <span>float list</span></span></code></li><li id="type-t.String" class="def variant constructor anchored"><a href="#type-t.String" class="anchor"></a><code><span>| </span><span><span class="constructor">String</span> <span class="keyword">of</span> string</span></code></li><li id="type-t.Immutable_string" class="def variant constructor anchored"><a href="#type-t.Immutable_string" class="anchor"></a><code><span>| </span><span><span class="constructor">Immutable_string</span> <span class="keyword">of</span> string</span></code></li></ol></div></div><div class="odoc-spec"><div class="spec value anchored" id="val-compare_floats"><a href="#val-compare_floats" class="anchor"></a><code><span><span class="keyword">val</span> compare_floats : <span>float <span class="arrow">&#45;&gt;</span></span> <span>float <span class="arrow">&#45;&gt;</span></span> int</span></code></div></div><div class="odoc-spec"><div class="spec value anchored" id="val-compare"><a href="#val-compare" class="anchor"></a><code><span><span class="keyword">val</span> compare : <span><a href="#type-t">t</a> <span class="arrow">&#45;&gt;</span></span> <span><a href="#type-t">t</a> <span class="arrow">&#45;&gt;</span></span> int</span></code></div></div><div class="odoc-spec"><div class="spec value anchored" id="val-print"><a href="#val-print" class="anchor"></a><code><span><span class="keyword">val</span> print : <span><a href="../Stdlib/Format/index.html#type-formatter">Stdlib.Format.formatter</a> <span class="arrow">&#45;&gt;</span></span> <span><a href="#type-t">t</a> <span class="arrow">&#45;&gt;</span></span> unit</span></code></div></div></div></body></html>

View file

@ -0,0 +1,2 @@
<!DOCTYPE html>
<html xmlns="http://www.w3.org/1999/xhtml"><head><title>Annot (ocaml.Annot)</title><link rel="stylesheet" href="../../_odoc-theme/odoc.css"/><meta charset="utf-8"/><meta name="generator" content="odoc 2.2.1"/><meta name="viewport" content="width=device-width,initial-scale=1.0"/><script src="../../highlight.pack.js"></script><script>hljs.initHighlightingOnLoad();</script></head><body class="odoc"><nav class="odoc-nav"><a href="../index.html">Up</a> <a href="../index.html">ocaml</a> &#x00BB; Annot</nav><header class="odoc-preamble"><h1>Module <code><span>Annot</span></code></h1></header><div class="odoc-content"><div class="odoc-spec"><div class="spec type anchored" id="type-call"><a href="#type-call" class="anchor"></a><code><span><span class="keyword">type</span> call</span><span> = </span></code><ol><li id="type-call.Tail" class="def variant constructor anchored"><a href="#type-call.Tail" class="anchor"></a><code><span>| </span><span><span class="constructor">Tail</span></span></code></li><li id="type-call.Stack" class="def variant constructor anchored"><a href="#type-call.Stack" class="anchor"></a><code><span>| </span><span><span class="constructor">Stack</span></span></code></li><li id="type-call.Inline" class="def variant constructor anchored"><a href="#type-call.Inline" class="anchor"></a><code><span>| </span><span><span class="constructor">Inline</span></span></code></li></ol></div></div><div class="odoc-spec"><div class="spec type anchored" id="type-ident"><a href="#type-ident" class="anchor"></a><code><span><span class="keyword">type</span> ident</span><span> = </span></code><ol><li id="type-ident.Iref_internal" class="def variant constructor anchored"><a href="#type-ident.Iref_internal" class="anchor"></a><code><span>| </span><span><span class="constructor">Iref_internal</span> <span class="keyword">of</span> <a href="../Location/index.html#type-t">Location.t</a></span></code></li><li id="type-ident.Iref_external" class="def variant constructor anchored"><a href="#type-ident.Iref_external" class="anchor"></a><code><span>| </span><span><span class="constructor">Iref_external</span></span></code></li><li id="type-ident.Idef" class="def variant constructor anchored"><a href="#type-ident.Idef" class="anchor"></a><code><span>| </span><span><span class="constructor">Idef</span> <span class="keyword">of</span> <a href="../Location/index.html#type-t">Location.t</a></span></code></li></ol></div></div></div></body></html>

12
dev/ocaml/Arch/index.html Normal file

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

View file

@ -0,0 +1,2 @@
<!DOCTYPE html>
<html xmlns="http://www.w3.org/1999/xhtml"><head><title>Key (ocaml.Arg_helper.Make.S.Key)</title><link rel="stylesheet" href="../../../../../_odoc-theme/odoc.css"/><meta charset="utf-8"/><meta name="generator" content="odoc 2.2.1"/><meta name="viewport" content="width=device-width,initial-scale=1.0"/><script src="../../../../../highlight.pack.js"></script><script>hljs.initHighlightingOnLoad();</script></head><body class="odoc"><nav class="odoc-nav"><a href="../index.html">Up</a> <a href="../../../../index.html">ocaml</a> &#x00BB; <a href="../../../index.html">Arg_helper</a> &#x00BB; <a href="../../index.html">Make</a> &#x00BB; <a href="../index.html">S</a> &#x00BB; Key</nav><header class="odoc-preamble"><h1>Module <code><span>S.Key</span></code></h1></header><div class="odoc-content"><div class="odoc-spec"><div class="spec type anchored" id="type-t"><a href="#type-t" class="anchor"></a><code><span><span class="keyword">type</span> t</span></code></div></div><div class="odoc-spec"><div class="spec value anchored" id="val-of_string"><a href="#val-of_string" class="anchor"></a><code><span><span class="keyword">val</span> of_string : <span>string <span class="arrow">&#45;&gt;</span></span> <a href="#type-t">t</a></span></code></div><div class="spec-doc"><p>The textual representation of a key must not contain '=' or ','.</p></div></div><div class="odoc-spec"><div class="spec module anchored" id="module-Map"><a href="#module-Map" class="anchor"></a><code><span><span class="keyword">module</span> <a href="Map/index.html">Map</a></span><span> : <a href="../../../../Stdlib/Map/module-type-S/index.html">Map.S</a> <span class="keyword">with</span> <span><span class="keyword">type</span> <a href="../../../../Stdlib/Map/module-type-S/index.html#type-key">key</a> = <a href="#type-t">t</a></span></span></code></div></div></div></body></html>

View file

@ -0,0 +1,2 @@
<!DOCTYPE html>
<html xmlns="http://www.w3.org/1999/xhtml"><head><title>Value (ocaml.Arg_helper.Make.S.Value)</title><link rel="stylesheet" href="../../../../../_odoc-theme/odoc.css"/><meta charset="utf-8"/><meta name="generator" content="odoc 2.2.1"/><meta name="viewport" content="width=device-width,initial-scale=1.0"/><script src="../../../../../highlight.pack.js"></script><script>hljs.initHighlightingOnLoad();</script></head><body class="odoc"><nav class="odoc-nav"><a href="../index.html">Up</a> <a href="../../../../index.html">ocaml</a> &#x00BB; <a href="../../../index.html">Arg_helper</a> &#x00BB; <a href="../../index.html">Make</a> &#x00BB; <a href="../index.html">S</a> &#x00BB; Value</nav><header class="odoc-preamble"><h1>Module <code><span>S.Value</span></code></h1></header><div class="odoc-content"><div class="odoc-spec"><div class="spec type anchored" id="type-t"><a href="#type-t" class="anchor"></a><code><span><span class="keyword">type</span> t</span></code></div></div><div class="odoc-spec"><div class="spec value anchored" id="val-of_string"><a href="#val-of_string" class="anchor"></a><code><span><span class="keyword">val</span> of_string : <span>string <span class="arrow">&#45;&gt;</span></span> <a href="#type-t">t</a></span></code></div><div class="spec-doc"><p>The textual representation of a value must not contain ','.</p></div></div></div></body></html>

View file

@ -0,0 +1,2 @@
<!DOCTYPE html>
<html xmlns="http://www.w3.org/1999/xhtml"><head><title>S (ocaml.Arg_helper.Make.S)</title><link rel="stylesheet" href="../../../../_odoc-theme/odoc.css"/><meta charset="utf-8"/><meta name="generator" content="odoc 2.2.1"/><meta name="viewport" content="width=device-width,initial-scale=1.0"/><script src="../../../../highlight.pack.js"></script><script>hljs.initHighlightingOnLoad();</script></head><body class="odoc"><nav class="odoc-nav"><a href="../index.html">Up</a> <a href="../../../index.html">ocaml</a> &#x00BB; <a href="../../index.html">Arg_helper</a> &#x00BB; <a href="../index.html">Make</a> &#x00BB; S</nav><header class="odoc-preamble"><h1>Parameter <code><span>Make.S</span></code></h1></header><div class="odoc-content"><div class="odoc-spec"><div class="spec module anchored" id="module-Key"><a href="#module-Key" class="anchor"></a><code><span><span class="keyword">module</span> <a href="Key/index.html">Key</a></span><span> : <span class="keyword">sig</span> ... <span class="keyword">end</span></span></code></div></div><div class="odoc-spec"><div class="spec module anchored" id="module-Value"><a href="#module-Value" class="anchor"></a><code><span><span class="keyword">module</span> <a href="Value/index.html">Value</a></span><span> : <span class="keyword">sig</span> ... <span class="keyword">end</span></span></code></div></div></div></body></html>

File diff suppressed because one or more lines are too long

View file

@ -0,0 +1,2 @@
<!DOCTYPE html>
<html xmlns="http://www.w3.org/1999/xhtml"><head><title>Arg_helper (ocaml.Arg_helper)</title><link rel="stylesheet" href="../../_odoc-theme/odoc.css"/><meta charset="utf-8"/><meta name="generator" content="odoc 2.2.1"/><meta name="viewport" content="width=device-width,initial-scale=1.0"/><script src="../../highlight.pack.js"></script><script>hljs.initHighlightingOnLoad();</script></head><body class="odoc"><nav class="odoc-nav"><a href="../index.html">Up</a> <a href="../index.html">ocaml</a> &#x00BB; Arg_helper</nav><header class="odoc-preamble"><h1>Module <code><span>Arg_helper</span></code></h1><p>Decipher command line arguments of the form &lt;value&gt; | &lt;key&gt;=&lt;value&gt;<code>,...</code></p><p>(as used for example for the specification of inlining parameters varying by simplification round).</p><p><b>Warning:</b> this module is unstable and part of <span class="xref-unresolved">compiler-libs</span>.</p></header><div class="odoc-content"><div class="odoc-spec"><div class="spec module anchored" id="module-Make"><a href="#module-Make" class="anchor"></a><code><span><span class="keyword">module</span> <a href="Make/index.html">Make</a></span><span> (<a href="Make/argument-1-S/index.html">S</a> : <span class="keyword">sig</span> ... <span class="keyword">end</span>) : <span class="keyword">sig</span> ... <span class="keyword">end</span></span></code></div></div></div></body></html>

View file

@ -0,0 +1,20 @@
<!DOCTYPE html>
<html xmlns="http://www.w3.org/1999/xhtml"><head><title>Asmgen (ocaml.Asmgen)</title><link rel="stylesheet" href="../../_odoc-theme/odoc.css"/><meta charset="utf-8"/><meta name="generator" content="odoc 2.2.1"/><meta name="viewport" content="width=device-width,initial-scale=1.0"/><script src="../../highlight.pack.js"></script><script>hljs.initHighlightingOnLoad();</script></head><body class="odoc"><nav class="odoc-nav"><a href="../index.html">Up</a> <a href="../index.html">ocaml</a> &#x00BB; Asmgen</nav><header class="odoc-preamble"><h1>Module <code><span>Asmgen</span></code></h1><p>From Lambda to assembly code</p></header><div class="odoc-content"><div class="odoc-spec"><div class="spec type anchored" id="type-middle_end"><a href="#type-middle_end" class="anchor"></a><code><span><span class="keyword">type</span> middle_end</span><span> =
<span>backend:<span>(<span class="keyword">module</span> <a href="../Backend_intf/module-type-S/index.html">Backend_intf.S</a>)</span> <span class="arrow">&#45;&gt;</span></span>
<span>prefixname:string <span class="arrow">&#45;&gt;</span></span>
<span>ppf_dump:<a href="../Stdlib/Format/index.html#type-formatter">Stdlib.Format.formatter</a> <span class="arrow">&#45;&gt;</span></span>
<span><a href="../Lambda/index.html#type-program">Lambda.program</a> <span class="arrow">&#45;&gt;</span></span>
<a href="../Clambda/index.html#type-with_constants">Clambda.with_constants</a></span></code></div><div class="spec-doc"><p>The type of converters from Lambda to Clambda.</p></div></div><div class="odoc-spec"><div class="spec value anchored" id="val-compile_implementation"><a href="#val-compile_implementation" class="anchor"></a><code><span><span class="keyword">val</span> compile_implementation :
<span>?toplevel:<span>(<span>string <span class="arrow">&#45;&gt;</span></span> bool)</span> <span class="arrow">&#45;&gt;</span></span>
<span>backend:<span>(<span class="keyword">module</span> <a href="../Backend_intf/module-type-S/index.html">Backend_intf.S</a>)</span> <span class="arrow">&#45;&gt;</span></span>
<span>prefixname:string <span class="arrow">&#45;&gt;</span></span>
<span>middle_end:<a href="#type-middle_end">middle_end</a> <span class="arrow">&#45;&gt;</span></span>
<span>ppf_dump:<a href="../Stdlib/Format/index.html#type-formatter">Stdlib.Format.formatter</a> <span class="arrow">&#45;&gt;</span></span>
<span><a href="../Lambda/index.html#type-program">Lambda.program</a> <span class="arrow">&#45;&gt;</span></span>
unit</span></code></div><div class="spec-doc"><p>Compile an implementation from Lambda using the given middle end.</p></div></div><div class="odoc-spec"><div class="spec value anchored" id="val-compile_implementation_linear"><a href="#val-compile_implementation_linear" class="anchor"></a><code><span><span class="keyword">val</span> compile_implementation_linear : <span>string <span class="arrow">&#45;&gt;</span></span> <span>progname:string <span class="arrow">&#45;&gt;</span></span> unit</span></code></div></div><div class="odoc-spec"><div class="spec value anchored" id="val-compile_phrase"><a href="#val-compile_phrase" class="anchor"></a><code><span><span class="keyword">val</span> compile_phrase : <span>ppf_dump:<a href="../Stdlib/Format/index.html#type-formatter">Stdlib.Format.formatter</a> <span class="arrow">&#45;&gt;</span></span> <span><a href="../Cmm/index.html#type-phrase">Cmm.phrase</a> <span class="arrow">&#45;&gt;</span></span> unit</span></code></div></div><div class="odoc-spec"><div class="spec type anchored" id="type-error"><a href="#type-error" class="anchor"></a><code><span><span class="keyword">type</span> error</span><span> = </span></code><ol><li id="type-error.Assembler_error" class="def variant constructor anchored"><a href="#type-error.Assembler_error" class="anchor"></a><code><span>| </span><span><span class="constructor">Assembler_error</span> <span class="keyword">of</span> string</span></code></li><li id="type-error.Mismatched_for_pack" class="def variant constructor anchored"><a href="#type-error.Mismatched_for_pack" class="anchor"></a><code><span>| </span><span><span class="constructor">Mismatched_for_pack</span> <span class="keyword">of</span> <span>string option</span></span></code></li><li id="type-error.Asm_generation" class="def variant constructor anchored"><a href="#type-error.Asm_generation" class="anchor"></a><code><span>| </span><span><span class="constructor">Asm_generation</span> <span class="keyword">of</span> string * <a href="../Emitaux/index.html#type-error">Emitaux.error</a></span></code></li></ol></div></div><div class="odoc-spec"><div class="spec exception anchored" id="exception-Error"><a href="#exception-Error" class="anchor"></a><code><span><span class="keyword">exception</span> </span><span><span class="exception">Error</span> <span class="keyword">of</span> <a href="#type-error">error</a></span></code></div></div><div class="odoc-spec"><div class="spec value anchored" id="val-report_error"><a href="#val-report_error" class="anchor"></a><code><span><span class="keyword">val</span> report_error : <span><a href="../Stdlib/Format/index.html#type-formatter">Stdlib.Format.formatter</a> <span class="arrow">&#45;&gt;</span></span> <span><a href="#type-error">error</a> <span class="arrow">&#45;&gt;</span></span> unit</span></code></div></div><div class="odoc-spec"><div class="spec value anchored" id="val-compile_unit"><a href="#val-compile_unit" class="anchor"></a><code><span><span class="keyword">val</span> compile_unit :
<span>output_prefix:string <span class="arrow">&#45;&gt;</span></span>
<span>asm_filename:string <span class="arrow">&#45;&gt;</span></span>
<span>keep_asm:bool <span class="arrow">&#45;&gt;</span></span>
<span>obj_filename:string <span class="arrow">&#45;&gt;</span></span>
<span><span>(<span>unit <span class="arrow">&#45;&gt;</span></span> unit)</span> <span class="arrow">&#45;&gt;</span></span>
unit</span></code></div></div></div></body></html>

View file

@ -0,0 +1,2 @@
<!DOCTYPE html>
<html xmlns="http://www.w3.org/1999/xhtml"><head><title>Asmlibrarian (ocaml.Asmlibrarian)</title><link rel="stylesheet" href="../../_odoc-theme/odoc.css"/><meta charset="utf-8"/><meta name="generator" content="odoc 2.2.1"/><meta name="viewport" content="width=device-width,initial-scale=1.0"/><script src="../../highlight.pack.js"></script><script>hljs.initHighlightingOnLoad();</script></head><body class="odoc"><nav class="odoc-nav"><a href="../index.html">Up</a> <a href="../index.html">ocaml</a> &#x00BB; Asmlibrarian</nav><header class="odoc-preamble"><h1>Module <code><span>Asmlibrarian</span></code></h1></header><div class="odoc-content"><div class="odoc-spec"><div class="spec value anchored" id="val-create_archive"><a href="#val-create_archive" class="anchor"></a><code><span><span class="keyword">val</span> create_archive : <span><span>string list</span> <span class="arrow">&#45;&gt;</span></span> <span>string <span class="arrow">&#45;&gt;</span></span> unit</span></code></div></div><div class="odoc-spec"><div class="spec type anchored" id="type-error"><a href="#type-error" class="anchor"></a><code><span><span class="keyword">type</span> error</span><span> = </span></code><ol><li id="type-error.File_not_found" class="def variant constructor anchored"><a href="#type-error.File_not_found" class="anchor"></a><code><span>| </span><span><span class="constructor">File_not_found</span> <span class="keyword">of</span> string</span></code></li><li id="type-error.Archiver_error" class="def variant constructor anchored"><a href="#type-error.Archiver_error" class="anchor"></a><code><span>| </span><span><span class="constructor">Archiver_error</span> <span class="keyword">of</span> string</span></code></li></ol></div></div><div class="odoc-spec"><div class="spec exception anchored" id="exception-Error"><a href="#exception-Error" class="anchor"></a><code><span><span class="keyword">exception</span> </span><span><span class="exception">Error</span> <span class="keyword">of</span> <a href="#type-error">error</a></span></code></div></div><div class="odoc-spec"><div class="spec value anchored" id="val-report_error"><a href="#val-report_error" class="anchor"></a><code><span><span class="keyword">val</span> report_error : <span><a href="../Stdlib/Format/index.html#type-formatter">Stdlib.Format.formatter</a> <span class="arrow">&#45;&gt;</span></span> <span><a href="#type-error">error</a> <span class="arrow">&#45;&gt;</span></span> unit</span></code></div></div></div></body></html>

File diff suppressed because one or more lines are too long

View file

@ -0,0 +1,8 @@
<!DOCTYPE html>
<html xmlns="http://www.w3.org/1999/xhtml"><head><title>Asmpackager (ocaml.Asmpackager)</title><link rel="stylesheet" href="../../_odoc-theme/odoc.css"/><meta charset="utf-8"/><meta name="generator" content="odoc 2.2.1"/><meta name="viewport" content="width=device-width,initial-scale=1.0"/><script src="../../highlight.pack.js"></script><script>hljs.initHighlightingOnLoad();</script></head><body class="odoc"><nav class="odoc-nav"><a href="../index.html">Up</a> <a href="../index.html">ocaml</a> &#x00BB; Asmpackager</nav><header class="odoc-preamble"><h1>Module <code><span>Asmpackager</span></code></h1></header><div class="odoc-content"><div class="odoc-spec"><div class="spec value anchored" id="val-package_files"><a href="#val-package_files" class="anchor"></a><code><span><span class="keyword">val</span> package_files :
<span>ppf_dump:<a href="../Stdlib/Format/index.html#type-formatter">Stdlib.Format.formatter</a> <span class="arrow">&#45;&gt;</span></span>
<span><a href="../Env/index.html#type-t">Env.t</a> <span class="arrow">&#45;&gt;</span></span>
<span><span>string list</span> <span class="arrow">&#45;&gt;</span></span>
<span>string <span class="arrow">&#45;&gt;</span></span>
<span>backend:<span>(<span class="keyword">module</span> <a href="../Backend_intf/module-type-S/index.html">Backend_intf.S</a>)</span> <span class="arrow">&#45;&gt;</span></span>
unit</span></code></div></div><div class="odoc-spec"><div class="spec type anchored" id="type-error"><a href="#type-error" class="anchor"></a><code><span><span class="keyword">type</span> error</span><span> = </span></code><ol><li id="type-error.Illegal_renaming" class="def variant constructor anchored"><a href="#type-error.Illegal_renaming" class="anchor"></a><code><span>| </span><span><span class="constructor">Illegal_renaming</span> <span class="keyword">of</span> string * string * string</span></code></li><li id="type-error.Forward_reference" class="def variant constructor anchored"><a href="#type-error.Forward_reference" class="anchor"></a><code><span>| </span><span><span class="constructor">Forward_reference</span> <span class="keyword">of</span> string * string</span></code></li><li id="type-error.Wrong_for_pack" class="def variant constructor anchored"><a href="#type-error.Wrong_for_pack" class="anchor"></a><code><span>| </span><span><span class="constructor">Wrong_for_pack</span> <span class="keyword">of</span> string * string</span></code></li><li id="type-error.Linking_error" class="def variant constructor anchored"><a href="#type-error.Linking_error" class="anchor"></a><code><span>| </span><span><span class="constructor">Linking_error</span></span></code></li><li id="type-error.Assembler_error" class="def variant constructor anchored"><a href="#type-error.Assembler_error" class="anchor"></a><code><span>| </span><span><span class="constructor">Assembler_error</span> <span class="keyword">of</span> string</span></code></li><li id="type-error.File_not_found" class="def variant constructor anchored"><a href="#type-error.File_not_found" class="anchor"></a><code><span>| </span><span><span class="constructor">File_not_found</span> <span class="keyword">of</span> string</span></code></li></ol></div></div><div class="odoc-spec"><div class="spec exception anchored" id="exception-Error"><a href="#exception-Error" class="anchor"></a><code><span><span class="keyword">exception</span> </span><span><span class="exception">Error</span> <span class="keyword">of</span> <a href="#type-error">error</a></span></code></div></div><div class="odoc-spec"><div class="spec value anchored" id="val-report_error"><a href="#val-report_error" class="anchor"></a><code><span><span class="keyword">val</span> report_error : <span><a href="../Stdlib/Format/index.html#type-formatter">Stdlib.Format.formatter</a> <span class="arrow">&#45;&gt;</span></span> <span><a href="#type-error">error</a> <span class="arrow">&#45;&gt;</span></span> unit</span></code></div></div></div></body></html>

View file

@ -0,0 +1,2 @@
<!DOCTYPE html>
<html xmlns="http://www.w3.org/1999/xhtml"><head><title>Attr (ocaml.Ast_helper.Attr)</title><link rel="stylesheet" href="../../../_odoc-theme/odoc.css"/><meta charset="utf-8"/><meta name="generator" content="odoc 2.2.1"/><meta name="viewport" content="width=device-width,initial-scale=1.0"/><script src="../../../highlight.pack.js"></script><script>hljs.initHighlightingOnLoad();</script></head><body class="odoc"><nav class="odoc-nav"><a href="../index.html">Up</a> <a href="../../index.html">ocaml</a> &#x00BB; <a href="../index.html">Ast_helper</a> &#x00BB; Attr</nav><header class="odoc-preamble"><h1>Module <code><span>Ast_helper.Attr</span></code></h1></header><nav class="odoc-toc"><ul><li><a href="#attributes">Attributes</a></li></ul></nav><div class="odoc-content"><h2 id="attributes"><a href="#attributes" class="anchor"></a>Attributes</h2><div class="odoc-spec"><div class="spec value anchored" id="val-mk"><a href="#val-mk" class="anchor"></a><code><span><span class="keyword">val</span> mk : <span>?loc:<a href="../index.html#type-loc">loc</a> <span class="arrow">&#45;&gt;</span></span> <span><a href="../index.html#type-str">str</a> <span class="arrow">&#45;&gt;</span></span> <span><a href="../../Parsetree/index.html#type-payload">Parsetree.payload</a> <span class="arrow">&#45;&gt;</span></span> <a href="../../Parsetree/index.html#type-attribute">Parsetree.attribute</a></span></code></div></div></div></body></html>

View file

@ -0,0 +1,44 @@
<!DOCTYPE html>
<html xmlns="http://www.w3.org/1999/xhtml"><head><title>Cf (ocaml.Ast_helper.Cf)</title><link rel="stylesheet" href="../../../_odoc-theme/odoc.css"/><meta charset="utf-8"/><meta name="generator" content="odoc 2.2.1"/><meta name="viewport" content="width=device-width,initial-scale=1.0"/><script src="../../../highlight.pack.js"></script><script>hljs.initHighlightingOnLoad();</script></head><body class="odoc"><nav class="odoc-nav"><a href="../index.html">Up</a> <a href="../../index.html">ocaml</a> &#x00BB; <a href="../index.html">Ast_helper</a> &#x00BB; Cf</nav><header class="odoc-preamble"><h1>Module <code><span>Ast_helper.Cf</span></code></h1><p>Class fields</p></header><div class="odoc-content"><div class="odoc-spec"><div class="spec value anchored" id="val-mk"><a href="#val-mk" class="anchor"></a><code><span><span class="keyword">val</span> mk :
<span>?loc:<a href="../index.html#type-loc">loc</a> <span class="arrow">&#45;&gt;</span></span>
<span>?attrs:<a href="../index.html#type-attrs">attrs</a> <span class="arrow">&#45;&gt;</span></span>
<span>?docs:<a href="../../Docstrings/index.html#type-docs">Docstrings.docs</a> <span class="arrow">&#45;&gt;</span></span>
<span><a href="../../Parsetree/index.html#type-class_field_desc">Parsetree.class_field_desc</a> <span class="arrow">&#45;&gt;</span></span>
<a href="../../Parsetree/index.html#type-class_field">Parsetree.class_field</a></span></code></div></div><div class="odoc-spec"><div class="spec value anchored" id="val-attr"><a href="#val-attr" class="anchor"></a><code><span><span class="keyword">val</span> attr :
<span><a href="../../Parsetree/index.html#type-class_field">Parsetree.class_field</a> <span class="arrow">&#45;&gt;</span></span>
<span><a href="../../Parsetree/index.html#type-attribute">Parsetree.attribute</a> <span class="arrow">&#45;&gt;</span></span>
<a href="../../Parsetree/index.html#type-class_field">Parsetree.class_field</a></span></code></div></div><div class="odoc-spec"><div class="spec value anchored" id="val-inherit_"><a href="#val-inherit_" class="anchor"></a><code><span><span class="keyword">val</span> inherit_ :
<span>?loc:<a href="../index.html#type-loc">loc</a> <span class="arrow">&#45;&gt;</span></span>
<span>?attrs:<a href="../index.html#type-attrs">attrs</a> <span class="arrow">&#45;&gt;</span></span>
<span><a href="../../Asttypes/index.html#type-override_flag">Asttypes.override_flag</a> <span class="arrow">&#45;&gt;</span></span>
<span><a href="../../Parsetree/index.html#type-class_expr">Parsetree.class_expr</a> <span class="arrow">&#45;&gt;</span></span>
<span><span><a href="../index.html#type-str">str</a> option</span> <span class="arrow">&#45;&gt;</span></span>
<a href="../../Parsetree/index.html#type-class_field">Parsetree.class_field</a></span></code></div></div><div class="odoc-spec"><div class="spec value anchored" id="val-val_"><a href="#val-val_" class="anchor"></a><code><span><span class="keyword">val</span> val_ :
<span>?loc:<a href="../index.html#type-loc">loc</a> <span class="arrow">&#45;&gt;</span></span>
<span>?attrs:<a href="../index.html#type-attrs">attrs</a> <span class="arrow">&#45;&gt;</span></span>
<span><a href="../index.html#type-str">str</a> <span class="arrow">&#45;&gt;</span></span>
<span><a href="../../Asttypes/index.html#type-mutable_flag">Asttypes.mutable_flag</a> <span class="arrow">&#45;&gt;</span></span>
<span><a href="../../Parsetree/index.html#type-class_field_kind">Parsetree.class_field_kind</a> <span class="arrow">&#45;&gt;</span></span>
<a href="../../Parsetree/index.html#type-class_field">Parsetree.class_field</a></span></code></div></div><div class="odoc-spec"><div class="spec value anchored" id="val-method_"><a href="#val-method_" class="anchor"></a><code><span><span class="keyword">val</span> method_ :
<span>?loc:<a href="../index.html#type-loc">loc</a> <span class="arrow">&#45;&gt;</span></span>
<span>?attrs:<a href="../index.html#type-attrs">attrs</a> <span class="arrow">&#45;&gt;</span></span>
<span><a href="../index.html#type-str">str</a> <span class="arrow">&#45;&gt;</span></span>
<span><a href="../../Asttypes/index.html#type-private_flag">Asttypes.private_flag</a> <span class="arrow">&#45;&gt;</span></span>
<span><a href="../../Parsetree/index.html#type-class_field_kind">Parsetree.class_field_kind</a> <span class="arrow">&#45;&gt;</span></span>
<a href="../../Parsetree/index.html#type-class_field">Parsetree.class_field</a></span></code></div></div><div class="odoc-spec"><div class="spec value anchored" id="val-constraint_"><a href="#val-constraint_" class="anchor"></a><code><span><span class="keyword">val</span> constraint_ :
<span>?loc:<a href="../index.html#type-loc">loc</a> <span class="arrow">&#45;&gt;</span></span>
<span>?attrs:<a href="../index.html#type-attrs">attrs</a> <span class="arrow">&#45;&gt;</span></span>
<span><a href="../../Parsetree/index.html#type-core_type">Parsetree.core_type</a> <span class="arrow">&#45;&gt;</span></span>
<span><a href="../../Parsetree/index.html#type-core_type">Parsetree.core_type</a> <span class="arrow">&#45;&gt;</span></span>
<a href="../../Parsetree/index.html#type-class_field">Parsetree.class_field</a></span></code></div></div><div class="odoc-spec"><div class="spec value anchored" id="val-initializer_"><a href="#val-initializer_" class="anchor"></a><code><span><span class="keyword">val</span> initializer_ :
<span>?loc:<a href="../index.html#type-loc">loc</a> <span class="arrow">&#45;&gt;</span></span>
<span>?attrs:<a href="../index.html#type-attrs">attrs</a> <span class="arrow">&#45;&gt;</span></span>
<span><a href="../../Parsetree/index.html#type-expression">Parsetree.expression</a> <span class="arrow">&#45;&gt;</span></span>
<a href="../../Parsetree/index.html#type-class_field">Parsetree.class_field</a></span></code></div></div><div class="odoc-spec"><div class="spec value anchored" id="val-extension"><a href="#val-extension" class="anchor"></a><code><span><span class="keyword">val</span> extension :
<span>?loc:<a href="../index.html#type-loc">loc</a> <span class="arrow">&#45;&gt;</span></span>
<span>?attrs:<a href="../index.html#type-attrs">attrs</a> <span class="arrow">&#45;&gt;</span></span>
<span><a href="../../Parsetree/index.html#type-extension">Parsetree.extension</a> <span class="arrow">&#45;&gt;</span></span>
<a href="../../Parsetree/index.html#type-class_field">Parsetree.class_field</a></span></code></div></div><div class="odoc-spec"><div class="spec value anchored" id="val-attribute"><a href="#val-attribute" class="anchor"></a><code><span><span class="keyword">val</span> attribute : <span>?loc:<a href="../index.html#type-loc">loc</a> <span class="arrow">&#45;&gt;</span></span> <span><a href="../../Parsetree/index.html#type-attribute">Parsetree.attribute</a> <span class="arrow">&#45;&gt;</span></span> <a href="../../Parsetree/index.html#type-class_field">Parsetree.class_field</a></span></code></div></div><div class="odoc-spec"><div class="spec value anchored" id="val-text"><a href="#val-text" class="anchor"></a><code><span><span class="keyword">val</span> text : <span><a href="../../Docstrings/index.html#type-text">Docstrings.text</a> <span class="arrow">&#45;&gt;</span></span> <span><a href="../../Parsetree/index.html#type-class_field">Parsetree.class_field</a> list</span></span></code></div></div><div class="odoc-spec"><div class="spec value anchored" id="val-virtual_"><a href="#val-virtual_" class="anchor"></a><code><span><span class="keyword">val</span> virtual_ : <span><a href="../../Parsetree/index.html#type-core_type">Parsetree.core_type</a> <span class="arrow">&#45;&gt;</span></span> <a href="../../Parsetree/index.html#type-class_field_kind">Parsetree.class_field_kind</a></span></code></div></div><div class="odoc-spec"><div class="spec value anchored" id="val-concrete"><a href="#val-concrete" class="anchor"></a><code><span><span class="keyword">val</span> concrete :
<span><a href="../../Asttypes/index.html#type-override_flag">Asttypes.override_flag</a> <span class="arrow">&#45;&gt;</span></span>
<span><a href="../../Parsetree/index.html#type-expression">Parsetree.expression</a> <span class="arrow">&#45;&gt;</span></span>
<a href="../../Parsetree/index.html#type-class_field_kind">Parsetree.class_field_kind</a></span></code></div></div></div></body></html>

View file

@ -0,0 +1,12 @@
<!DOCTYPE html>
<html xmlns="http://www.w3.org/1999/xhtml"><head><title>Ci (ocaml.Ast_helper.Ci)</title><link rel="stylesheet" href="../../../_odoc-theme/odoc.css"/><meta charset="utf-8"/><meta name="generator" content="odoc 2.2.1"/><meta name="viewport" content="width=device-width,initial-scale=1.0"/><script src="../../../highlight.pack.js"></script><script>hljs.initHighlightingOnLoad();</script></head><body class="odoc"><nav class="odoc-nav"><a href="../index.html">Up</a> <a href="../../index.html">ocaml</a> &#x00BB; <a href="../index.html">Ast_helper</a> &#x00BB; Ci</nav><header class="odoc-preamble"><h1>Module <code><span>Ast_helper.Ci</span></code></h1><p>Classes</p></header><div class="odoc-content"><div class="odoc-spec"><div class="spec value anchored" id="val-mk"><a href="#val-mk" class="anchor"></a><code><span><span class="keyword">val</span> mk :
<span>?loc:<a href="../index.html#type-loc">loc</a> <span class="arrow">&#45;&gt;</span></span>
<span>?attrs:<a href="../index.html#type-attrs">attrs</a> <span class="arrow">&#45;&gt;</span></span>
<span>?docs:<a href="../../Docstrings/index.html#type-docs">Docstrings.docs</a> <span class="arrow">&#45;&gt;</span></span>
<span>?text:<a href="../../Docstrings/index.html#type-text">Docstrings.text</a> <span class="arrow">&#45;&gt;</span></span>
<span>?virt:<a href="../../Asttypes/index.html#type-virtual_flag">Asttypes.virtual_flag</a> <span class="arrow">&#45;&gt;</span></span>
<span>?params:
<span><span>(<a href="../../Parsetree/index.html#type-core_type">Parsetree.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 class="arrow">&#45;&gt;</span></span>
<span><a href="../index.html#type-str">str</a> <span class="arrow">&#45;&gt;</span></span>
<span><span class="type-var">'a</span> <span class="arrow">&#45;&gt;</span></span>
<span><span class="type-var">'a</span> <a href="../../Parsetree/index.html#type-class_infos">Parsetree.class_infos</a></span></span></code></div></div></div></body></html>

View file

@ -0,0 +1,47 @@
<!DOCTYPE html>
<html xmlns="http://www.w3.org/1999/xhtml"><head><title>Cl (ocaml.Ast_helper.Cl)</title><link rel="stylesheet" href="../../../_odoc-theme/odoc.css"/><meta charset="utf-8"/><meta name="generator" content="odoc 2.2.1"/><meta name="viewport" content="width=device-width,initial-scale=1.0"/><script src="../../../highlight.pack.js"></script><script>hljs.initHighlightingOnLoad();</script></head><body class="odoc"><nav class="odoc-nav"><a href="../index.html">Up</a> <a href="../../index.html">ocaml</a> &#x00BB; <a href="../index.html">Ast_helper</a> &#x00BB; Cl</nav><header class="odoc-preamble"><h1>Module <code><span>Ast_helper.Cl</span></code></h1><p>Class expressions</p></header><div class="odoc-content"><div class="odoc-spec"><div class="spec value anchored" id="val-mk"><a href="#val-mk" class="anchor"></a><code><span><span class="keyword">val</span> mk :
<span>?loc:<a href="../index.html#type-loc">loc</a> <span class="arrow">&#45;&gt;</span></span>
<span>?attrs:<a href="../index.html#type-attrs">attrs</a> <span class="arrow">&#45;&gt;</span></span>
<span><a href="../../Parsetree/index.html#type-class_expr_desc">Parsetree.class_expr_desc</a> <span class="arrow">&#45;&gt;</span></span>
<a href="../../Parsetree/index.html#type-class_expr">Parsetree.class_expr</a></span></code></div></div><div class="odoc-spec"><div class="spec value anchored" id="val-attr"><a href="#val-attr" class="anchor"></a><code><span><span class="keyword">val</span> attr : <span><a href="../../Parsetree/index.html#type-class_expr">Parsetree.class_expr</a> <span class="arrow">&#45;&gt;</span></span> <span><a href="../../Parsetree/index.html#type-attribute">Parsetree.attribute</a> <span class="arrow">&#45;&gt;</span></span> <a href="../../Parsetree/index.html#type-class_expr">Parsetree.class_expr</a></span></code></div></div><div class="odoc-spec"><div class="spec value anchored" id="val-constr"><a href="#val-constr" class="anchor"></a><code><span><span class="keyword">val</span> constr :
<span>?loc:<a href="../index.html#type-loc">loc</a> <span class="arrow">&#45;&gt;</span></span>
<span>?attrs:<a href="../index.html#type-attrs">attrs</a> <span class="arrow">&#45;&gt;</span></span>
<span><a href="../index.html#type-lid">lid</a> <span class="arrow">&#45;&gt;</span></span>
<span><span><a href="../../Parsetree/index.html#type-core_type">Parsetree.core_type</a> list</span> <span class="arrow">&#45;&gt;</span></span>
<a href="../../Parsetree/index.html#type-class_expr">Parsetree.class_expr</a></span></code></div></div><div class="odoc-spec"><div class="spec value anchored" id="val-structure"><a href="#val-structure" class="anchor"></a><code><span><span class="keyword">val</span> structure :
<span>?loc:<a href="../index.html#type-loc">loc</a> <span class="arrow">&#45;&gt;</span></span>
<span>?attrs:<a href="../index.html#type-attrs">attrs</a> <span class="arrow">&#45;&gt;</span></span>
<span><a href="../../Parsetree/index.html#type-class_structure">Parsetree.class_structure</a> <span class="arrow">&#45;&gt;</span></span>
<a href="../../Parsetree/index.html#type-class_expr">Parsetree.class_expr</a></span></code></div></div><div class="odoc-spec"><div class="spec value anchored" id="val-fun_"><a href="#val-fun_" class="anchor"></a><code><span><span class="keyword">val</span> fun_ :
<span>?loc:<a href="../index.html#type-loc">loc</a> <span class="arrow">&#45;&gt;</span></span>
<span>?attrs:<a href="../index.html#type-attrs">attrs</a> <span class="arrow">&#45;&gt;</span></span>
<span><a href="../../Asttypes/index.html#type-arg_label">Asttypes.arg_label</a> <span class="arrow">&#45;&gt;</span></span>
<span><span><a href="../../Parsetree/index.html#type-expression">Parsetree.expression</a> option</span> <span class="arrow">&#45;&gt;</span></span>
<span><a href="../../Parsetree/index.html#type-pattern">Parsetree.pattern</a> <span class="arrow">&#45;&gt;</span></span>
<span><a href="../../Parsetree/index.html#type-class_expr">Parsetree.class_expr</a> <span class="arrow">&#45;&gt;</span></span>
<a href="../../Parsetree/index.html#type-class_expr">Parsetree.class_expr</a></span></code></div></div><div class="odoc-spec"><div class="spec value anchored" id="val-apply"><a href="#val-apply" class="anchor"></a><code><span><span class="keyword">val</span> apply :
<span>?loc:<a href="../index.html#type-loc">loc</a> <span class="arrow">&#45;&gt;</span></span>
<span>?attrs:<a href="../index.html#type-attrs">attrs</a> <span class="arrow">&#45;&gt;</span></span>
<span><a href="../../Parsetree/index.html#type-class_expr">Parsetree.class_expr</a> <span class="arrow">&#45;&gt;</span></span>
<span><span><span>(<a href="../../Asttypes/index.html#type-arg_label">Asttypes.arg_label</a> * <a href="../../Parsetree/index.html#type-expression">Parsetree.expression</a>)</span> list</span> <span class="arrow">&#45;&gt;</span></span>
<a href="../../Parsetree/index.html#type-class_expr">Parsetree.class_expr</a></span></code></div></div><div class="odoc-spec"><div class="spec value anchored" id="val-let_"><a href="#val-let_" class="anchor"></a><code><span><span class="keyword">val</span> let_ :
<span>?loc:<a href="../index.html#type-loc">loc</a> <span class="arrow">&#45;&gt;</span></span>
<span>?attrs:<a href="../index.html#type-attrs">attrs</a> <span class="arrow">&#45;&gt;</span></span>
<span><a href="../../Asttypes/index.html#type-rec_flag">Asttypes.rec_flag</a> <span class="arrow">&#45;&gt;</span></span>
<span><span><a href="../../Parsetree/index.html#type-value_binding">Parsetree.value_binding</a> list</span> <span class="arrow">&#45;&gt;</span></span>
<span><a href="../../Parsetree/index.html#type-class_expr">Parsetree.class_expr</a> <span class="arrow">&#45;&gt;</span></span>
<a href="../../Parsetree/index.html#type-class_expr">Parsetree.class_expr</a></span></code></div></div><div class="odoc-spec"><div class="spec value anchored" id="val-constraint_"><a href="#val-constraint_" class="anchor"></a><code><span><span class="keyword">val</span> constraint_ :
<span>?loc:<a href="../index.html#type-loc">loc</a> <span class="arrow">&#45;&gt;</span></span>
<span>?attrs:<a href="../index.html#type-attrs">attrs</a> <span class="arrow">&#45;&gt;</span></span>
<span><a href="../../Parsetree/index.html#type-class_expr">Parsetree.class_expr</a> <span class="arrow">&#45;&gt;</span></span>
<span><a href="../../Parsetree/index.html#type-class_type">Parsetree.class_type</a> <span class="arrow">&#45;&gt;</span></span>
<a href="../../Parsetree/index.html#type-class_expr">Parsetree.class_expr</a></span></code></div></div><div class="odoc-spec"><div class="spec value anchored" id="val-extension"><a href="#val-extension" class="anchor"></a><code><span><span class="keyword">val</span> extension :
<span>?loc:<a href="../index.html#type-loc">loc</a> <span class="arrow">&#45;&gt;</span></span>
<span>?attrs:<a href="../index.html#type-attrs">attrs</a> <span class="arrow">&#45;&gt;</span></span>
<span><a href="../../Parsetree/index.html#type-extension">Parsetree.extension</a> <span class="arrow">&#45;&gt;</span></span>
<a href="../../Parsetree/index.html#type-class_expr">Parsetree.class_expr</a></span></code></div></div><div class="odoc-spec"><div class="spec value anchored" id="val-open_"><a href="#val-open_" class="anchor"></a><code><span><span class="keyword">val</span> open_ :
<span>?loc:<a href="../index.html#type-loc">loc</a> <span class="arrow">&#45;&gt;</span></span>
<span>?attrs:<a href="../index.html#type-attrs">attrs</a> <span class="arrow">&#45;&gt;</span></span>
<span><a href="../../Parsetree/index.html#type-open_description">Parsetree.open_description</a> <span class="arrow">&#45;&gt;</span></span>
<span><a href="../../Parsetree/index.html#type-class_expr">Parsetree.class_expr</a> <span class="arrow">&#45;&gt;</span></span>
<a href="../../Parsetree/index.html#type-class_expr">Parsetree.class_expr</a></span></code></div></div></div></body></html>

View file

@ -0,0 +1,6 @@
<!DOCTYPE html>
<html xmlns="http://www.w3.org/1999/xhtml"><head><title>Const (ocaml.Ast_helper.Const)</title><link rel="stylesheet" href="../../../_odoc-theme/odoc.css"/><meta charset="utf-8"/><meta name="generator" content="odoc 2.2.1"/><meta name="viewport" content="width=device-width,initial-scale=1.0"/><script src="../../../highlight.pack.js"></script><script>hljs.initHighlightingOnLoad();</script></head><body class="odoc"><nav class="odoc-nav"><a href="../index.html">Up</a> <a href="../../index.html">ocaml</a> &#x00BB; <a href="../index.html">Ast_helper</a> &#x00BB; Const</nav><header class="odoc-preamble"><h1>Module <code><span>Ast_helper.Const</span></code></h1></header><div class="odoc-content"><div class="odoc-spec"><div class="spec value anchored" id="val-char"><a href="#val-char" class="anchor"></a><code><span><span class="keyword">val</span> char : <span>char <span class="arrow">&#45;&gt;</span></span> <a href="../../Parsetree/index.html#type-constant">Parsetree.constant</a></span></code></div></div><div class="odoc-spec"><div class="spec value anchored" id="val-string"><a href="#val-string" class="anchor"></a><code><span><span class="keyword">val</span> string :
<span>?quotation_delimiter:string <span class="arrow">&#45;&gt;</span></span>
<span>?loc:<a href="../../Location/index.html#type-t">Location.t</a> <span class="arrow">&#45;&gt;</span></span>
<span>string <span class="arrow">&#45;&gt;</span></span>
<a href="../../Parsetree/index.html#type-constant">Parsetree.constant</a></span></code></div></div><div class="odoc-spec"><div class="spec value anchored" id="val-integer"><a href="#val-integer" class="anchor"></a><code><span><span class="keyword">val</span> integer : <span>?suffix:char <span class="arrow">&#45;&gt;</span></span> <span>string <span class="arrow">&#45;&gt;</span></span> <a href="../../Parsetree/index.html#type-constant">Parsetree.constant</a></span></code></div></div><div class="odoc-spec"><div class="spec value anchored" id="val-int"><a href="#val-int" class="anchor"></a><code><span><span class="keyword">val</span> int : <span>?suffix:char <span class="arrow">&#45;&gt;</span></span> <span>int <span class="arrow">&#45;&gt;</span></span> <a href="../../Parsetree/index.html#type-constant">Parsetree.constant</a></span></code></div></div><div class="odoc-spec"><div class="spec value anchored" id="val-int32"><a href="#val-int32" class="anchor"></a><code><span><span class="keyword">val</span> int32 : <span>?suffix:char <span class="arrow">&#45;&gt;</span></span> <span>int32 <span class="arrow">&#45;&gt;</span></span> <a href="../../Parsetree/index.html#type-constant">Parsetree.constant</a></span></code></div></div><div class="odoc-spec"><div class="spec value anchored" id="val-int64"><a href="#val-int64" class="anchor"></a><code><span><span class="keyword">val</span> int64 : <span>?suffix:char <span class="arrow">&#45;&gt;</span></span> <span>int64 <span class="arrow">&#45;&gt;</span></span> <a href="../../Parsetree/index.html#type-constant">Parsetree.constant</a></span></code></div></div><div class="odoc-spec"><div class="spec value anchored" id="val-nativeint"><a href="#val-nativeint" class="anchor"></a><code><span><span class="keyword">val</span> nativeint : <span>?suffix:char <span class="arrow">&#45;&gt;</span></span> <span>nativeint <span class="arrow">&#45;&gt;</span></span> <a href="../../Parsetree/index.html#type-constant">Parsetree.constant</a></span></code></div></div><div class="odoc-spec"><div class="spec value anchored" id="val-float"><a href="#val-float" class="anchor"></a><code><span><span class="keyword">val</span> float : <span>?suffix:char <span class="arrow">&#45;&gt;</span></span> <span>string <span class="arrow">&#45;&gt;</span></span> <a href="../../Parsetree/index.html#type-constant">Parsetree.constant</a></span></code></div></div></div></body></html>

View file

@ -0,0 +1,5 @@
<!DOCTYPE html>
<html xmlns="http://www.w3.org/1999/xhtml"><head><title>Csig (ocaml.Ast_helper.Csig)</title><link rel="stylesheet" href="../../../_odoc-theme/odoc.css"/><meta charset="utf-8"/><meta name="generator" content="odoc 2.2.1"/><meta name="viewport" content="width=device-width,initial-scale=1.0"/><script src="../../../highlight.pack.js"></script><script>hljs.initHighlightingOnLoad();</script></head><body class="odoc"><nav class="odoc-nav"><a href="../index.html">Up</a> <a href="../../index.html">ocaml</a> &#x00BB; <a href="../index.html">Ast_helper</a> &#x00BB; Csig</nav><header class="odoc-preamble"><h1>Module <code><span>Ast_helper.Csig</span></code></h1><p>Class signatures</p></header><div class="odoc-content"><div class="odoc-spec"><div class="spec value anchored" id="val-mk"><a href="#val-mk" class="anchor"></a><code><span><span class="keyword">val</span> mk :
<span><a href="../../Parsetree/index.html#type-core_type">Parsetree.core_type</a> <span class="arrow">&#45;&gt;</span></span>
<span><span><a href="../../Parsetree/index.html#type-class_type_field">Parsetree.class_type_field</a> list</span> <span class="arrow">&#45;&gt;</span></span>
<a href="../../Parsetree/index.html#type-class_signature">Parsetree.class_signature</a></span></code></div></div></div></body></html>

View file

@ -0,0 +1,5 @@
<!DOCTYPE html>
<html xmlns="http://www.w3.org/1999/xhtml"><head><title>Cstr (ocaml.Ast_helper.Cstr)</title><link rel="stylesheet" href="../../../_odoc-theme/odoc.css"/><meta charset="utf-8"/><meta name="generator" content="odoc 2.2.1"/><meta name="viewport" content="width=device-width,initial-scale=1.0"/><script src="../../../highlight.pack.js"></script><script>hljs.initHighlightingOnLoad();</script></head><body class="odoc"><nav class="odoc-nav"><a href="../index.html">Up</a> <a href="../../index.html">ocaml</a> &#x00BB; <a href="../index.html">Ast_helper</a> &#x00BB; Cstr</nav><header class="odoc-preamble"><h1>Module <code><span>Ast_helper.Cstr</span></code></h1><p>Class structures</p></header><div class="odoc-content"><div class="odoc-spec"><div class="spec value anchored" id="val-mk"><a href="#val-mk" class="anchor"></a><code><span><span class="keyword">val</span> mk :
<span><a href="../../Parsetree/index.html#type-pattern">Parsetree.pattern</a> <span class="arrow">&#45;&gt;</span></span>
<span><span><a href="../../Parsetree/index.html#type-class_field">Parsetree.class_field</a> list</span> <span class="arrow">&#45;&gt;</span></span>
<a href="../../Parsetree/index.html#type-class_structure">Parsetree.class_structure</a></span></code></div></div></div></body></html>

View file

@ -0,0 +1,37 @@
<!DOCTYPE html>
<html xmlns="http://www.w3.org/1999/xhtml"><head><title>Ctf (ocaml.Ast_helper.Ctf)</title><link rel="stylesheet" href="../../../_odoc-theme/odoc.css"/><meta charset="utf-8"/><meta name="generator" content="odoc 2.2.1"/><meta name="viewport" content="width=device-width,initial-scale=1.0"/><script src="../../../highlight.pack.js"></script><script>hljs.initHighlightingOnLoad();</script></head><body class="odoc"><nav class="odoc-nav"><a href="../index.html">Up</a> <a href="../../index.html">ocaml</a> &#x00BB; <a href="../index.html">Ast_helper</a> &#x00BB; Ctf</nav><header class="odoc-preamble"><h1>Module <code><span>Ast_helper.Ctf</span></code></h1><p>Class type fields</p></header><div class="odoc-content"><div class="odoc-spec"><div class="spec value anchored" id="val-mk"><a href="#val-mk" class="anchor"></a><code><span><span class="keyword">val</span> mk :
<span>?loc:<a href="../index.html#type-loc">loc</a> <span class="arrow">&#45;&gt;</span></span>
<span>?attrs:<a href="../index.html#type-attrs">attrs</a> <span class="arrow">&#45;&gt;</span></span>
<span>?docs:<a href="../../Docstrings/index.html#type-docs">Docstrings.docs</a> <span class="arrow">&#45;&gt;</span></span>
<span><a href="../../Parsetree/index.html#type-class_type_field_desc">Parsetree.class_type_field_desc</a> <span class="arrow">&#45;&gt;</span></span>
<a href="../../Parsetree/index.html#type-class_type_field">Parsetree.class_type_field</a></span></code></div></div><div class="odoc-spec"><div class="spec value anchored" id="val-attr"><a href="#val-attr" class="anchor"></a><code><span><span class="keyword">val</span> attr :
<span><a href="../../Parsetree/index.html#type-class_type_field">Parsetree.class_type_field</a> <span class="arrow">&#45;&gt;</span></span>
<span><a href="../../Parsetree/index.html#type-attribute">Parsetree.attribute</a> <span class="arrow">&#45;&gt;</span></span>
<a href="../../Parsetree/index.html#type-class_type_field">Parsetree.class_type_field</a></span></code></div></div><div class="odoc-spec"><div class="spec value anchored" id="val-inherit_"><a href="#val-inherit_" class="anchor"></a><code><span><span class="keyword">val</span> inherit_ :
<span>?loc:<a href="../index.html#type-loc">loc</a> <span class="arrow">&#45;&gt;</span></span>
<span>?attrs:<a href="../index.html#type-attrs">attrs</a> <span class="arrow">&#45;&gt;</span></span>
<span><a href="../../Parsetree/index.html#type-class_type">Parsetree.class_type</a> <span class="arrow">&#45;&gt;</span></span>
<a href="../../Parsetree/index.html#type-class_type_field">Parsetree.class_type_field</a></span></code></div></div><div class="odoc-spec"><div class="spec value anchored" id="val-val_"><a href="#val-val_" class="anchor"></a><code><span><span class="keyword">val</span> val_ :
<span>?loc:<a href="../index.html#type-loc">loc</a> <span class="arrow">&#45;&gt;</span></span>
<span>?attrs:<a href="../index.html#type-attrs">attrs</a> <span class="arrow">&#45;&gt;</span></span>
<span><a href="../index.html#type-str">str</a> <span class="arrow">&#45;&gt;</span></span>
<span><a href="../../Asttypes/index.html#type-mutable_flag">Asttypes.mutable_flag</a> <span class="arrow">&#45;&gt;</span></span>
<span><a href="../../Asttypes/index.html#type-virtual_flag">Asttypes.virtual_flag</a> <span class="arrow">&#45;&gt;</span></span>
<span><a href="../../Parsetree/index.html#type-core_type">Parsetree.core_type</a> <span class="arrow">&#45;&gt;</span></span>
<a href="../../Parsetree/index.html#type-class_type_field">Parsetree.class_type_field</a></span></code></div></div><div class="odoc-spec"><div class="spec value anchored" id="val-method_"><a href="#val-method_" class="anchor"></a><code><span><span class="keyword">val</span> method_ :
<span>?loc:<a href="../index.html#type-loc">loc</a> <span class="arrow">&#45;&gt;</span></span>
<span>?attrs:<a href="../index.html#type-attrs">attrs</a> <span class="arrow">&#45;&gt;</span></span>
<span><a href="../index.html#type-str">str</a> <span class="arrow">&#45;&gt;</span></span>
<span><a href="../../Asttypes/index.html#type-private_flag">Asttypes.private_flag</a> <span class="arrow">&#45;&gt;</span></span>
<span><a href="../../Asttypes/index.html#type-virtual_flag">Asttypes.virtual_flag</a> <span class="arrow">&#45;&gt;</span></span>
<span><a href="../../Parsetree/index.html#type-core_type">Parsetree.core_type</a> <span class="arrow">&#45;&gt;</span></span>
<a href="../../Parsetree/index.html#type-class_type_field">Parsetree.class_type_field</a></span></code></div></div><div class="odoc-spec"><div class="spec value anchored" id="val-constraint_"><a href="#val-constraint_" class="anchor"></a><code><span><span class="keyword">val</span> constraint_ :
<span>?loc:<a href="../index.html#type-loc">loc</a> <span class="arrow">&#45;&gt;</span></span>
<span>?attrs:<a href="../index.html#type-attrs">attrs</a> <span class="arrow">&#45;&gt;</span></span>
<span><a href="../../Parsetree/index.html#type-core_type">Parsetree.core_type</a> <span class="arrow">&#45;&gt;</span></span>
<span><a href="../../Parsetree/index.html#type-core_type">Parsetree.core_type</a> <span class="arrow">&#45;&gt;</span></span>
<a href="../../Parsetree/index.html#type-class_type_field">Parsetree.class_type_field</a></span></code></div></div><div class="odoc-spec"><div class="spec value anchored" id="val-extension"><a href="#val-extension" class="anchor"></a><code><span><span class="keyword">val</span> extension :
<span>?loc:<a href="../index.html#type-loc">loc</a> <span class="arrow">&#45;&gt;</span></span>
<span>?attrs:<a href="../index.html#type-attrs">attrs</a> <span class="arrow">&#45;&gt;</span></span>
<span><a href="../../Parsetree/index.html#type-extension">Parsetree.extension</a> <span class="arrow">&#45;&gt;</span></span>
<a href="../../Parsetree/index.html#type-class_type_field">Parsetree.class_type_field</a></span></code></div></div><div class="odoc-spec"><div class="spec value anchored" id="val-attribute"><a href="#val-attribute" class="anchor"></a><code><span><span class="keyword">val</span> attribute : <span>?loc:<a href="../index.html#type-loc">loc</a> <span class="arrow">&#45;&gt;</span></span> <span><a href="../../Parsetree/index.html#type-attribute">Parsetree.attribute</a> <span class="arrow">&#45;&gt;</span></span> <a href="../../Parsetree/index.html#type-class_type_field">Parsetree.class_type_field</a></span></code></div></div><div class="odoc-spec"><div class="spec value anchored" id="val-text"><a href="#val-text" class="anchor"></a><code><span><span class="keyword">val</span> text : <span><a href="../../Docstrings/index.html#type-text">Docstrings.text</a> <span class="arrow">&#45;&gt;</span></span> <span><a href="../../Parsetree/index.html#type-class_type_field">Parsetree.class_type_field</a> list</span></span></code></div></div></div></body></html>

View file

@ -0,0 +1,30 @@
<!DOCTYPE html>
<html xmlns="http://www.w3.org/1999/xhtml"><head><title>Cty (ocaml.Ast_helper.Cty)</title><link rel="stylesheet" href="../../../_odoc-theme/odoc.css"/><meta charset="utf-8"/><meta name="generator" content="odoc 2.2.1"/><meta name="viewport" content="width=device-width,initial-scale=1.0"/><script src="../../../highlight.pack.js"></script><script>hljs.initHighlightingOnLoad();</script></head><body class="odoc"><nav class="odoc-nav"><a href="../index.html">Up</a> <a href="../../index.html">ocaml</a> &#x00BB; <a href="../index.html">Ast_helper</a> &#x00BB; Cty</nav><header class="odoc-preamble"><h1>Module <code><span>Ast_helper.Cty</span></code></h1><p>Class type expressions</p></header><div class="odoc-content"><div class="odoc-spec"><div class="spec value anchored" id="val-mk"><a href="#val-mk" class="anchor"></a><code><span><span class="keyword">val</span> mk :
<span>?loc:<a href="../index.html#type-loc">loc</a> <span class="arrow">&#45;&gt;</span></span>
<span>?attrs:<a href="../index.html#type-attrs">attrs</a> <span class="arrow">&#45;&gt;</span></span>
<span><a href="../../Parsetree/index.html#type-class_type_desc">Parsetree.class_type_desc</a> <span class="arrow">&#45;&gt;</span></span>
<a href="../../Parsetree/index.html#type-class_type">Parsetree.class_type</a></span></code></div></div><div class="odoc-spec"><div class="spec value anchored" id="val-attr"><a href="#val-attr" class="anchor"></a><code><span><span class="keyword">val</span> attr : <span><a href="../../Parsetree/index.html#type-class_type">Parsetree.class_type</a> <span class="arrow">&#45;&gt;</span></span> <span><a href="../../Parsetree/index.html#type-attribute">Parsetree.attribute</a> <span class="arrow">&#45;&gt;</span></span> <a href="../../Parsetree/index.html#type-class_type">Parsetree.class_type</a></span></code></div></div><div class="odoc-spec"><div class="spec value anchored" id="val-constr"><a href="#val-constr" class="anchor"></a><code><span><span class="keyword">val</span> constr :
<span>?loc:<a href="../index.html#type-loc">loc</a> <span class="arrow">&#45;&gt;</span></span>
<span>?attrs:<a href="../index.html#type-attrs">attrs</a> <span class="arrow">&#45;&gt;</span></span>
<span><a href="../index.html#type-lid">lid</a> <span class="arrow">&#45;&gt;</span></span>
<span><span><a href="../../Parsetree/index.html#type-core_type">Parsetree.core_type</a> list</span> <span class="arrow">&#45;&gt;</span></span>
<a href="../../Parsetree/index.html#type-class_type">Parsetree.class_type</a></span></code></div></div><div class="odoc-spec"><div class="spec value anchored" id="val-signature"><a href="#val-signature" class="anchor"></a><code><span><span class="keyword">val</span> signature :
<span>?loc:<a href="../index.html#type-loc">loc</a> <span class="arrow">&#45;&gt;</span></span>
<span>?attrs:<a href="../index.html#type-attrs">attrs</a> <span class="arrow">&#45;&gt;</span></span>
<span><a href="../../Parsetree/index.html#type-class_signature">Parsetree.class_signature</a> <span class="arrow">&#45;&gt;</span></span>
<a href="../../Parsetree/index.html#type-class_type">Parsetree.class_type</a></span></code></div></div><div class="odoc-spec"><div class="spec value anchored" id="val-arrow"><a href="#val-arrow" class="anchor"></a><code><span><span class="keyword">val</span> arrow :
<span>?loc:<a href="../index.html#type-loc">loc</a> <span class="arrow">&#45;&gt;</span></span>
<span>?attrs:<a href="../index.html#type-attrs">attrs</a> <span class="arrow">&#45;&gt;</span></span>
<span><a href="../../Asttypes/index.html#type-arg_label">Asttypes.arg_label</a> <span class="arrow">&#45;&gt;</span></span>
<span><a href="../../Parsetree/index.html#type-core_type">Parsetree.core_type</a> <span class="arrow">&#45;&gt;</span></span>
<span><a href="../../Parsetree/index.html#type-class_type">Parsetree.class_type</a> <span class="arrow">&#45;&gt;</span></span>
<a href="../../Parsetree/index.html#type-class_type">Parsetree.class_type</a></span></code></div></div><div class="odoc-spec"><div class="spec value anchored" id="val-extension"><a href="#val-extension" class="anchor"></a><code><span><span class="keyword">val</span> extension :
<span>?loc:<a href="../index.html#type-loc">loc</a> <span class="arrow">&#45;&gt;</span></span>
<span>?attrs:<a href="../index.html#type-attrs">attrs</a> <span class="arrow">&#45;&gt;</span></span>
<span><a href="../../Parsetree/index.html#type-extension">Parsetree.extension</a> <span class="arrow">&#45;&gt;</span></span>
<a href="../../Parsetree/index.html#type-class_type">Parsetree.class_type</a></span></code></div></div><div class="odoc-spec"><div class="spec value anchored" id="val-open_"><a href="#val-open_" class="anchor"></a><code><span><span class="keyword">val</span> open_ :
<span>?loc:<a href="../index.html#type-loc">loc</a> <span class="arrow">&#45;&gt;</span></span>
<span>?attrs:<a href="../index.html#type-attrs">attrs</a> <span class="arrow">&#45;&gt;</span></span>
<span><a href="../../Parsetree/index.html#type-open_description">Parsetree.open_description</a> <span class="arrow">&#45;&gt;</span></span>
<span><a href="../../Parsetree/index.html#type-class_type">Parsetree.class_type</a> <span class="arrow">&#45;&gt;</span></span>
<a href="../../Parsetree/index.html#type-class_type">Parsetree.class_type</a></span></code></div></div></div></body></html>

Some files were not shown because too many files have changed in this diff Show more