mirror of
https://github.com/c-cube/tiny_httpd.git
synced 2025-12-06 03:05:29 -05:00
deploy: 075ad0825a
This commit is contained in:
parent
63119d6ccf
commit
a787ce7bbe
2 changed files with 7 additions and 4 deletions
File diff suppressed because one or more lines are too long
|
|
@ -2,10 +2,11 @@
|
||||||
<html xmlns="http://www.w3.org/1999/xhtml"><head><title>Server (tiny_httpd.Tiny_httpd_core.Server)</title><meta charset="utf-8"/><link rel="stylesheet" href="../../../_odoc-theme/odoc.css"/><meta name="generator" content="odoc 2.4.4"/><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">tiny_httpd</a> » <a href="../index.html">Tiny_httpd_core</a> » Server</nav><header class="odoc-preamble"><h1>Module <code><span>Tiny_httpd_core.Server</span></code></h1><p>HTTP server.</p><p>This module implements a very simple, basic HTTP/1.1 server using blocking IOs and threads.</p><p>It is possible to use a thread pool, see <code>create</code>'s argument <code>new_thread</code>.</p><ul class="at-tags"><li class="since"><span class="at-tag">since</span> 0.13</li></ul></header><nav class="odoc-toc"><ul><li><a href="#middlewares">Middlewares</a></li><li><a href="#main-server-type">Main Server type</a></li><li><a href="#request-handlers">Request handlers</a></li><li><a href="#server-sent-events">Server-sent events</a></li><li><a href="#upgrade-handlers">Upgrade handlers</a></li><li><a href="#run-the-server">Run the server</a></li></ul></nav><div class="odoc-content"><div class="odoc-spec"><div class="spec exception anchored" id="exception-Bad_req"><a href="#exception-Bad_req" class="anchor"></a><code><span><span class="keyword">exception</span> </span><span><span class="exception">Bad_req</span> <span class="keyword">of</span> int * string</span></code></div><div class="spec-doc"><p>Exception raised to exit request handlers with a code+error message</p></div></div><h3 id="middlewares"><a href="#middlewares" class="anchor"></a>Middlewares</h3><p>A middleware can be inserted in a handler to modify or observe its behavior.</p><ul class="at-tags"><li class="since"><span class="at-tag">since</span> 0.11</li></ul><div class="odoc-spec"><div class="spec module anchored" id="module-Middleware"><a href="#module-Middleware" class="anchor"></a><code><span><span class="keyword">module</span> <a href="Middleware/index.html">Middleware</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-Head_middleware"><a href="#module-Head_middleware" class="anchor"></a><code><span><span class="keyword">module</span> <a href="Head_middleware/index.html">Head_middleware</a></span><span> : <span class="keyword">sig</span> ... <span class="keyword">end</span></span></code></div><div class="spec-doc"><p>A middleware that only considers the request's head+headers.</p></div></div><h3 id="main-server-type"><a href="#main-server-type" class="anchor"></a>Main Server type</h3><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 class="spec-doc"><p>A HTTP server. See <code>create</code> for more details.</p></div></div><div class="odoc-spec"><div class="spec module-type anchored" id="module-type-IO_BACKEND"><a href="#module-type-IO_BACKEND" class="anchor"></a><code><span><span class="keyword">module</span> <span class="keyword">type</span> <a href="module-type-IO_BACKEND/index.html">IO_BACKEND</a></span><span> = <span class="keyword">sig</span> ... <span class="keyword">end</span></span></code></div><div class="spec-doc"><p>A backend that provides IO operations, network operations, etc.</p></div></div><div class="odoc-spec"><div class="spec value anchored" id="val-create_from"><a href="#val-create_from" class="anchor"></a><code><span><span class="keyword">val</span> create_from :
|
<html xmlns="http://www.w3.org/1999/xhtml"><head><title>Server (tiny_httpd.Tiny_httpd_core.Server)</title><meta charset="utf-8"/><link rel="stylesheet" href="../../../_odoc-theme/odoc.css"/><meta name="generator" content="odoc 2.4.4"/><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">tiny_httpd</a> » <a href="../index.html">Tiny_httpd_core</a> » Server</nav><header class="odoc-preamble"><h1>Module <code><span>Tiny_httpd_core.Server</span></code></h1><p>HTTP server.</p><p>This module implements a very simple, basic HTTP/1.1 server using blocking IOs and threads.</p><p>It is possible to use a thread pool, see <code>create</code>'s argument <code>new_thread</code>.</p><ul class="at-tags"><li class="since"><span class="at-tag">since</span> 0.13</li></ul></header><nav class="odoc-toc"><ul><li><a href="#middlewares">Middlewares</a></li><li><a href="#main-server-type">Main Server type</a></li><li><a href="#request-handlers">Request handlers</a></li><li><a href="#server-sent-events">Server-sent events</a></li><li><a href="#upgrade-handlers">Upgrade handlers</a></li><li><a href="#run-the-server">Run the server</a></li></ul></nav><div class="odoc-content"><div class="odoc-spec"><div class="spec exception anchored" id="exception-Bad_req"><a href="#exception-Bad_req" class="anchor"></a><code><span><span class="keyword">exception</span> </span><span><span class="exception">Bad_req</span> <span class="keyword">of</span> int * string</span></code></div><div class="spec-doc"><p>Exception raised to exit request handlers with a code+error message</p></div></div><h3 id="middlewares"><a href="#middlewares" class="anchor"></a>Middlewares</h3><p>A middleware can be inserted in a handler to modify or observe its behavior.</p><ul class="at-tags"><li class="since"><span class="at-tag">since</span> 0.11</li></ul><div class="odoc-spec"><div class="spec module anchored" id="module-Middleware"><a href="#module-Middleware" class="anchor"></a><code><span><span class="keyword">module</span> <a href="Middleware/index.html">Middleware</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-Head_middleware"><a href="#module-Head_middleware" class="anchor"></a><code><span><span class="keyword">module</span> <a href="Head_middleware/index.html">Head_middleware</a></span><span> : <span class="keyword">sig</span> ... <span class="keyword">end</span></span></code></div><div class="spec-doc"><p>A middleware that only considers the request's head+headers.</p></div></div><h3 id="main-server-type"><a href="#main-server-type" class="anchor"></a>Main Server type</h3><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 class="spec-doc"><p>A HTTP server. See <code>create</code> for more details.</p></div></div><div class="odoc-spec"><div class="spec module-type anchored" id="module-type-IO_BACKEND"><a href="#module-type-IO_BACKEND" class="anchor"></a><code><span><span class="keyword">module</span> <span class="keyword">type</span> <a href="module-type-IO_BACKEND/index.html">IO_BACKEND</a></span><span> = <span class="keyword">sig</span> ... <span class="keyword">end</span></span></code></div><div class="spec-doc"><p>A backend that provides IO operations, network operations, etc.</p></div></div><div class="odoc-spec"><div class="spec value anchored" id="val-create_from"><a href="#val-create_from" class="anchor"></a><code><span><span class="keyword">val</span> create_from :
|
||||||
<span><span class="optlabel">?enable_logging</span>:bool <span class="arrow">-></span></span>
|
<span><span class="optlabel">?enable_logging</span>:bool <span class="arrow">-></span></span>
|
||||||
<span><span class="optlabel">?buf_size</span>:int <span class="arrow">-></span></span>
|
<span><span class="optlabel">?buf_size</span>:int <span class="arrow">-></span></span>
|
||||||
|
<span><span class="optlabel">?head_middlewares</span>:<span><a href="Head_middleware/index.html#type-t">Head_middleware.t</a> list</span> <span class="arrow">-></span></span>
|
||||||
<span><span class="optlabel">?middlewares</span>:<span><span>(<span>[ `Encoding <span><span>| `Stage</span> of int</span> ]</span> * <a href="Middleware/index.html#type-t">Middleware.t</a>)</span> list</span> <span class="arrow">-></span></span>
|
<span><span class="optlabel">?middlewares</span>:<span><span>(<span>[ `Encoding <span><span>| `Stage</span> of int</span> ]</span> * <a href="Middleware/index.html#type-t">Middleware.t</a>)</span> list</span> <span class="arrow">-></span></span>
|
||||||
<span><span class="label">backend</span>:<span>(<span class="keyword">module</span> <a href="module-type-IO_BACKEND/index.html">IO_BACKEND</a>)</span> <span class="arrow">-></span></span>
|
<span><span class="label">backend</span>:<span>(<span class="keyword">module</span> <a href="module-type-IO_BACKEND/index.html">IO_BACKEND</a>)</span> <span class="arrow">-></span></span>
|
||||||
<span>unit <span class="arrow">-></span></span>
|
<span>unit <span class="arrow">-></span></span>
|
||||||
<a href="#type-t">t</a></span></code></div><div class="spec-doc"><p>Create a new webserver using provided backend.</p><p>The server will not do anything until <a href="#val-run"><code>run</code></a> is called on it. Before starting the server, one can use <code>add_path_handler</code> and <a href="#val-set_top_handler"><code>set_top_handler</code></a> to specify how to handle incoming requests.</p><ul class="at-tags"><li class="parameter"><span class="at-tag">parameter</span> <span class="value">buf_size</span> <p>size for buffers (since 0.11)</p></li></ul><ul class="at-tags"><li class="parameter"><span class="at-tag">parameter</span> <span class="value">middlewares</span> <p>see <a href="#val-add_middleware"><code>add_middleware</code></a> for more details.</p></li></ul><ul class="at-tags"><li class="parameter"><span class="at-tag">parameter</span> <span class="value">enable_logging</span> <p>if true and <code>Logs</code> is installed, emit logs via Logs (since NEXT_RELEASE). Default <code>true</code>.</p></li></ul><ul class="at-tags"><li class="since"><span class="at-tag">since</span> 0.14</li></ul></div></div><div class="odoc-spec"><div class="spec value anchored" id="val-addr"><a href="#val-addr" class="anchor"></a><code><span><span class="keyword">val</span> addr : <span><a href="#type-t">t</a> <span class="arrow">-></span></span> string</span></code></div><div class="spec-doc"><p>Address on which the server listens.</p></div></div><div class="odoc-spec"><div class="spec value anchored" id="val-is_ipv6"><a href="#val-is_ipv6" class="anchor"></a><code><span><span class="keyword">val</span> is_ipv6 : <span><a href="#type-t">t</a> <span class="arrow">-></span></span> bool</span></code></div><div class="spec-doc"><p><code>is_ipv6 server</code> returns <code>true</code> iff the address of the server is an IPv6 address.</p><ul class="at-tags"><li class="since"><span class="at-tag">since</span> 0.3</li></ul></div></div><div class="odoc-spec"><div class="spec value anchored" id="val-port"><a href="#val-port" class="anchor"></a><code><span><span class="keyword">val</span> port : <span><a href="#type-t">t</a> <span class="arrow">-></span></span> int</span></code></div><div class="spec-doc"><p>Port on which the server listens. Note that this might be different than the port initially given if the port was <code>0</code> (meaning that the OS picks a port for us).</p></div></div><div class="odoc-spec"><div class="spec value anchored" id="val-active_connections"><a href="#val-active_connections" class="anchor"></a><code><span><span class="keyword">val</span> active_connections : <span><a href="#type-t">t</a> <span class="arrow">-></span></span> int</span></code></div><div class="spec-doc"><p>Number of currently active connections.</p></div></div><div class="odoc-spec"><div class="spec value anchored" id="val-add_decode_request_cb"><a href="#val-add_decode_request_cb" class="anchor"></a><code><span><span class="keyword">val</span> add_decode_request_cb :
|
<a href="#type-t">t</a></span></code></div><div class="spec-doc"><p>Create a new webserver using provided backend.</p><p>The server will not do anything until <a href="#val-run"><code>run</code></a> is called on it. Before starting the server, one can use <code>add_path_handler</code> and <a href="#val-set_top_handler"><code>set_top_handler</code></a> to specify how to handle incoming requests.</p><ul class="at-tags"><li class="parameter"><span class="at-tag">parameter</span> <span class="value">buf_size</span> <p>size for buffers (since 0.11)</p></li></ul><ul class="at-tags"><li class="parameter"><span class="at-tag">parameter</span> <span class="value">head_middlewares</span> <p>see <a href="#val-add_head_middleware"><code>add_head_middleware</code></a> for details (since NEXT_RELEASE)</p></li></ul><ul class="at-tags"><li class="parameter"><span class="at-tag">parameter</span> <span class="value">middlewares</span> <p>see <a href="#val-add_middleware"><code>add_middleware</code></a> for more details.</p></li></ul><ul class="at-tags"><li class="parameter"><span class="at-tag">parameter</span> <span class="value">enable_logging</span> <p>if true and <code>Logs</code> is installed, emit logs via Logs (since NEXT_RELEASE). Default <code>true</code>.</p></li></ul><ul class="at-tags"><li class="since"><span class="at-tag">since</span> 0.14</li></ul></div></div><div class="odoc-spec"><div class="spec value anchored" id="val-addr"><a href="#val-addr" class="anchor"></a><code><span><span class="keyword">val</span> addr : <span><a href="#type-t">t</a> <span class="arrow">-></span></span> string</span></code></div><div class="spec-doc"><p>Address on which the server listens.</p></div></div><div class="odoc-spec"><div class="spec value anchored" id="val-is_ipv6"><a href="#val-is_ipv6" class="anchor"></a><code><span><span class="keyword">val</span> is_ipv6 : <span><a href="#type-t">t</a> <span class="arrow">-></span></span> bool</span></code></div><div class="spec-doc"><p><code>is_ipv6 server</code> returns <code>true</code> iff the address of the server is an IPv6 address.</p><ul class="at-tags"><li class="since"><span class="at-tag">since</span> 0.3</li></ul></div></div><div class="odoc-spec"><div class="spec value anchored" id="val-port"><a href="#val-port" class="anchor"></a><code><span><span class="keyword">val</span> port : <span><a href="#type-t">t</a> <span class="arrow">-></span></span> int</span></code></div><div class="spec-doc"><p>Port on which the server listens. Note that this might be different than the port initially given if the port was <code>0</code> (meaning that the OS picks a port for us).</p></div></div><div class="odoc-spec"><div class="spec value anchored" id="val-active_connections"><a href="#val-active_connections" class="anchor"></a><code><span><span class="keyword">val</span> active_connections : <span><a href="#type-t">t</a> <span class="arrow">-></span></span> int</span></code></div><div class="spec-doc"><p>Number of currently active connections.</p></div></div><div class="odoc-spec"><div class="spec value anchored" id="val-add_decode_request_cb"><a href="#val-add_decode_request_cb" class="anchor"></a><code><span><span class="keyword">val</span> add_decode_request_cb :
|
||||||
<span><a href="#type-t">t</a> <span class="arrow">-></span></span>
|
<span><a href="#type-t">t</a> <span class="arrow">-></span></span>
|
||||||
<span><span>(<span><span>unit <a href="../Request/index.html#type-t">Request.t</a></span> <span class="arrow">-></span></span> <span><span>(<span>unit <a href="../Request/index.html#type-t">Request.t</a></span> * <span>(<span><a href="../IO/Input/class-type-t/index.html">IO.Input.t</a> <span class="arrow">-></span></span> <a href="../IO/Input/class-type-t/index.html">IO.Input.t</a>)</span>)</span> option</span>)</span> <span class="arrow">-></span></span>
|
<span><span>(<span><span>unit <a href="../Request/index.html#type-t">Request.t</a></span> <span class="arrow">-></span></span> <span><span>(<span>unit <a href="../Request/index.html#type-t">Request.t</a></span> * <span>(<span><a href="../IO/Input/class-type-t/index.html">IO.Input.t</a> <span class="arrow">-></span></span> <a href="../IO/Input/class-type-t/index.html">IO.Input.t</a>)</span>)</span> option</span>)</span> <span class="arrow">-></span></span>
|
||||||
unit</span></code></div><div class="spec-doc"><p>Add a callback for every request. The callback can provide a stream transformer and a new request (with modified headers, typically). A possible use is to handle decompression by looking for a <code>Transfer-Encoding</code> header and returning a stream transformer that decompresses on the fly.</p><ul class="at-tags"><li class="deprecated"><span class="at-tag">deprecated</span> <p>use <a href="#val-add_middleware"><code>add_middleware</code></a> instead</p></li></ul></div></div><div class="odoc-spec"><div class="spec value anchored" id="val-add_encode_response_cb"><a href="#val-add_encode_response_cb" class="anchor"></a><code><span><span class="keyword">val</span> add_encode_response_cb :
|
unit</span></code></div><div class="spec-doc"><p>Add a callback for every request. The callback can provide a stream transformer and a new request (with modified headers, typically). A possible use is to handle decompression by looking for a <code>Transfer-Encoding</code> header and returning a stream transformer that decompresses on the fly.</p><ul class="at-tags"><li class="deprecated"><span class="at-tag">deprecated</span> <p>use <a href="#val-add_middleware"><code>add_middleware</code></a> instead</p></li></ul></div></div><div class="odoc-spec"><div class="spec value anchored" id="val-add_encode_response_cb"><a href="#val-add_encode_response_cb" class="anchor"></a><code><span><span class="keyword">val</span> add_encode_response_cb :
|
||||||
|
|
@ -15,7 +16,7 @@
|
||||||
<span><span class="label">stage</span>:<span>[ `Encoding <span><span>| `Stage</span> of int</span> ]</span> <span class="arrow">-></span></span>
|
<span><span class="label">stage</span>:<span>[ `Encoding <span><span>| `Stage</span> of int</span> ]</span> <span class="arrow">-></span></span>
|
||||||
<span><a href="#type-t">t</a> <span class="arrow">-></span></span>
|
<span><a href="#type-t">t</a> <span class="arrow">-></span></span>
|
||||||
<span><a href="Middleware/index.html#type-t">Middleware.t</a> <span class="arrow">-></span></span>
|
<span><a href="Middleware/index.html#type-t">Middleware.t</a> <span class="arrow">-></span></span>
|
||||||
unit</span></code></div><div class="spec-doc"><p>Add a middleware to every request/response pair.</p><ul class="at-tags"><li class="parameter"><span class="at-tag">parameter</span> <span class="value">stage</span> <p>specify when middleware applies. Encoding comes first (outermost layer), then stages in increasing order.</p></li></ul><ul class="at-tags"><li class="raises"><span class="at-tag">raises</span> <code>Invalid_argument</code> <p>if stage is <code>`Stage n</code> where <code>n < 1</code></p></li></ul><ul class="at-tags"><li class="since"><span class="at-tag">since</span> 0.11</li></ul></div></div><h3 id="request-handlers"><a href="#request-handlers" class="anchor"></a>Request handlers</h3><div class="odoc-spec"><div class="spec value anchored" id="val-set_top_handler"><a href="#val-set_top_handler" class="anchor"></a><code><span><span class="keyword">val</span> set_top_handler : <span><a href="#type-t">t</a> <span class="arrow">-></span></span> <span><span>(<span><span><a href="../IO/Input/class-type-t/index.html">IO.Input.t</a> <a href="../Request/index.html#type-t">Request.t</a></span> <span class="arrow">-></span></span> <a href="../Response/index.html#type-t">Response.t</a>)</span> <span class="arrow">-></span></span> unit</span></code></div><div class="spec-doc"><p>Setup a handler called by default.</p><p>This handler is called with any request not accepted by any handler installed via <code>add_path_handler</code>. If no top handler is installed, unhandled paths will return a <code>404</code> not found</p><p>This used to take a <code>string Request.t</code> but it now takes a <code>byte_stream Request.t</code> since 0.14 . Use <a href="../Request/index.html#val-read_body_full"><code>Request.read_body_full</code></a> to read the body into a string if needed.</p></div></div><div class="odoc-spec"><div class="spec value anchored" id="val-add_route_handler"><a href="#val-add_route_handler" class="anchor"></a><code><span><span class="keyword">val</span> add_route_handler :
|
unit</span></code></div><div class="spec-doc"><p>Add a middleware to every request/response pair.</p><ul class="at-tags"><li class="parameter"><span class="at-tag">parameter</span> <span class="value">stage</span> <p>specify when middleware applies. Encoding comes first (outermost layer), then stages in increasing order.</p></li></ul><ul class="at-tags"><li class="raises"><span class="at-tag">raises</span> <code>Invalid_argument</code> <p>if stage is <code>`Stage n</code> where <code>n < 1</code></p></li></ul><ul class="at-tags"><li class="since"><span class="at-tag">since</span> 0.11</li></ul></div></div><div class="odoc-spec"><div class="spec value anchored" id="val-add_head_middleware"><a href="#val-add_head_middleware" class="anchor"></a><code><span><span class="keyword">val</span> add_head_middleware : <span><a href="#type-t">t</a> <span class="arrow">-></span></span> <span><a href="Head_middleware/index.html#type-t">Head_middleware.t</a> <span class="arrow">-></span></span> unit</span></code></div><div class="spec-doc"><p>Add a request-header only <a href="Head_middleware/index.html#type-t"><code>Head_middleware.t</code></a>. This is called on requests, to modify them, and returns a new request immediately.</p><ul class="at-tags"><li class="since"><span class="at-tag">since</span> NEXT_RELEASE</li></ul></div></div><h3 id="request-handlers"><a href="#request-handlers" class="anchor"></a>Request handlers</h3><div class="odoc-spec"><div class="spec value anchored" id="val-set_top_handler"><a href="#val-set_top_handler" class="anchor"></a><code><span><span class="keyword">val</span> set_top_handler : <span><a href="#type-t">t</a> <span class="arrow">-></span></span> <span><span>(<span><span><a href="../IO/Input/class-type-t/index.html">IO.Input.t</a> <a href="../Request/index.html#type-t">Request.t</a></span> <span class="arrow">-></span></span> <a href="../Response/index.html#type-t">Response.t</a>)</span> <span class="arrow">-></span></span> unit</span></code></div><div class="spec-doc"><p>Setup a handler called by default.</p><p>This handler is called with any request not accepted by any handler installed via <code>add_path_handler</code>. If no top handler is installed, unhandled paths will return a <code>404</code> not found</p><p>This used to take a <code>string Request.t</code> but it now takes a <code>byte_stream Request.t</code> since 0.14 . Use <a href="../Request/index.html#val-read_body_full"><code>Request.read_body_full</code></a> to read the body into a string if needed.</p></div></div><div class="odoc-spec"><div class="spec value anchored" id="val-add_route_handler"><a href="#val-add_route_handler" class="anchor"></a><code><span><span class="keyword">val</span> add_route_handler :
|
||||||
<span><span class="optlabel">?accept</span>:<span>(<span><span>unit <a href="../Request/index.html#type-t">Request.t</a></span> <span class="arrow">-></span></span> <span><span>(unit, <a href="../Response_code/index.html#type-t">Response_code.t</a> * string)</span> <a href="../../../ocaml/Stdlib/index.html#type-result">result</a></span>)</span> <span class="arrow">-></span></span>
|
<span><span class="optlabel">?accept</span>:<span>(<span><span>unit <a href="../Request/index.html#type-t">Request.t</a></span> <span class="arrow">-></span></span> <span><span>(unit, <a href="../Response_code/index.html#type-t">Response_code.t</a> * string)</span> <a href="../../../ocaml/Stdlib/index.html#type-result">result</a></span>)</span> <span class="arrow">-></span></span>
|
||||||
<span><span class="optlabel">?middlewares</span>:<span><a href="Middleware/index.html#type-t">Middleware.t</a> list</span> <span class="arrow">-></span></span>
|
<span><span class="optlabel">?middlewares</span>:<span><a href="Middleware/index.html#type-t">Middleware.t</a> list</span> <span class="arrow">-></span></span>
|
||||||
<span><span class="optlabel">?meth</span>:<a href="../Meth/index.html#type-t">Meth.t</a> <span class="arrow">-></span></span>
|
<span><span class="optlabel">?meth</span>:<a href="../Meth/index.html#type-t">Meth.t</a> <span class="arrow">-></span></span>
|
||||||
|
|
|
||||||
Loading…
Add table
Reference in a new issue