ocaml-containers/2.3/containers/CCResult/index.html
2018-08-06 11:54:50 -05:00

28 lines
No EOL
37 KiB
HTML
Raw Permalink Blame History

This file contains invisible Unicode characters

This file contains invisible Unicode characters that are indistinguishable to humans but may be processed differently by a computer. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

<!DOCTYPE html>
<html xmlns="http://www.w3.org/1999/xhtml"><head><title>CCResult (containers.CCResult)</title><link rel="stylesheet" href="../../odoc.css"/><meta charset="utf-8"/><meta name="viewport" content="width=device-width,initial-scale=1.0"/><meta name="generator" content="doc-ock-html v1.0.0-1-g1fc9bf0"/></head><body><nav id="top"><a href="../index.html">Up</a> &mdash; <span class="package">package <a href="../index.html">containers</a></span></nav><header><h1><span class="keyword">Module</span> <span class="module-path">CCResult</span></h1></header><h2>Error Monad</h2><p>Uses the new &quot;result&quot; type from OCaml 4.03.</p><ul class="at-tag"><li><span class="at-tag since">Since</span>: 0.16</li></ul><div class="spec type" id="type-sequence"><a href="#type-sequence" class="anchor"></a><div class="def type"><code><span class="keyword">type </span>'a sequence</code><code><span class="keyword"> = </span>(<span class="type-var">'a</span> <span class="keyword">&#8209;&gt;</span> unit) <span class="keyword">&#8209;&gt;</span> unit</code><code></code></div><div class="doc"></div></div><div class="spec type" id="type-equal"><a href="#type-equal" class="anchor"></a><div class="def type"><code><span class="keyword">type </span>'a equal</code><code><span class="keyword"> = </span><span class="type-var">'a</span> <span class="keyword">&#8209;&gt;</span> <span class="type-var">'a</span> <span class="keyword">&#8209;&gt;</span> bool</code><code></code></div><div class="doc"></div></div><div class="spec type" id="type-ord"><a href="#type-ord" class="anchor"></a><div class="def type"><code><span class="keyword">type </span>'a ord</code><code><span class="keyword"> = </span><span class="type-var">'a</span> <span class="keyword">&#8209;&gt;</span> <span class="type-var">'a</span> <span class="keyword">&#8209;&gt;</span> int</code><code></code></div><div class="doc"></div></div><div class="spec type" id="type-printer"><a href="#type-printer" class="anchor"></a><div class="def type"><code><span class="keyword">type </span>'a printer</code><code><span class="keyword"> = </span>Format.formatter <span class="keyword">&#8209;&gt;</span> <span class="type-var">'a</span> <span class="keyword">&#8209;&gt;</span> unit</code><code></code></div><div class="doc"></div></div><h3>Basics</h3><div class="spec include"><div class="doc"><ul class="at-tag"><li><span class="at-tag since">Since</span>: 1.5</li></ul></div><details open="open"><summary><span class="def"><code><span class="keyword">include </span><span class="keyword">module type of </span><span class="keyword">sig</span> ... <span class="keyword">end</span></code></span></summary><div class="spec type" id="type-result"><a href="#type-result" class="anchor"></a><div class="def type"><code><span class="keyword">type </span>('a, 'b) result</code><code><span class="keyword"> = </span>(<span class="type-var">'a</span>, <span class="type-var">'b</span>) Pervasives.result</code><code><span class="keyword"> = </span></code><table class="variant"><tr id="type-result.Ok" class="anchored"><td class="def constructor"><a href="#type-result.Ok" class="anchor"></a><code><span class="keyword">| </span></code><code><span class="constructor">Ok</span><span class="keyword"> of </span><span class="type-var">'a</span></code></td></tr><tr id="type-result.Error" class="anchored"><td class="def constructor"><a href="#type-result.Error" class="anchor"></a><code><span class="keyword">| </span></code><code><span class="constructor">Error</span><span class="keyword"> of </span><span class="type-var">'b</span></code></td></tr></table><code></code></div><div class="doc"></div></div></details></div><div class="spec type" id="type-t"><a href="#type-t" class="anchor"></a><div class="def type"><code><span class="keyword">type </span>(+'good, +'bad) t</code><code><span class="keyword"> = </span>(<span class="type-var">'good</span>, <span class="type-var">'bad</span>) Result.result</code><code><span class="keyword"> = </span></code><table class="variant"><tr id="type-t.Ok" class="anchored"><td class="def constructor"><a href="#type-t.Ok" class="anchor"></a><code><span class="keyword">| </span></code><code><span class="constructor">Ok</span><span class="keyword"> of </span><span class="type-var">'good</span></code></td></tr><tr id="type-t.Error" class="anchored"><td class="def constructor"><a href="#type-t.Error" class="anchor"></a><code><span class="keyword">| </span></code><code><span class="constructor">Error</span><span class="keyword"> of </span><span class="type-var">'bad</span></code></td></tr></table><code></code></div><div class="doc"></div></div><div class="spec val" id="val-return"><a href="#val-return" class="anchor"></a><div class="def val"><code><span class="keyword">val </span>return : <span class="type-var">'a</span> <span class="keyword">&#8209;&gt;</span> (<span class="type-var">'a</span>, <span class="type-var">'err</span>) <a href="index.html#type-t">t</a></code></div><div class="doc"><p>Successfully return a value.</p></div></div><div class="spec val" id="val-fail"><a href="#val-fail" class="anchor"></a><div class="def val"><code><span class="keyword">val </span>fail : <span class="type-var">'err</span> <span class="keyword">&#8209;&gt;</span> (<span class="type-var">'a</span>, <span class="type-var">'err</span>) <a href="index.html#type-t">t</a></code></div><div class="doc"><p>Fail with an error.</p></div></div><div class="spec val" id="val-of_exn"><a href="#val-of_exn" class="anchor"></a><div class="def val"><code><span class="keyword">val </span>of_exn : exn <span class="keyword">&#8209;&gt;</span> (<span class="type-var">'a</span>, string) <a href="index.html#type-t">t</a></code></div><div class="doc"><p><code class="code">of_exn e</code> uses Printexc to print the exception as a string.</p></div></div><div class="spec val" id="val-of_exn_trace"><a href="#val-of_exn_trace" class="anchor"></a><div class="def val"><code><span class="keyword">val </span>of_exn_trace : exn <span class="keyword">&#8209;&gt;</span> (<span class="type-var">'a</span>, string) <a href="index.html#type-t">t</a></code></div><div class="doc"><p><code class="code">of_exn_trace e</code> is similar to <code class="code">of_exn e</code>, but it adds the stacktrace
to the error message.</p><p>Remember to call <code class="code">Printexc.record_backtrace true</code> and compile with the
debug flag for this to work.</p></div></div><div class="spec val" id="val-fail_printf"><a href="#val-fail_printf" class="anchor"></a><div class="def val"><code><span class="keyword">val </span>fail_printf : (<span class="type-var">'a</span>, Buffer.t, unit, (<span class="type-var">'b</span>, string) <a href="index.html#type-t">t</a>) Pervasives.format4 <span class="keyword">&#8209;&gt;</span> <span class="type-var">'a</span></code></div><div class="doc"><p><code class="code">fail_printf format</code> uses <code class="code">format</code> to obtain an error message
and then returns <code class="code">Error msg</code>.</p></div></div><div class="spec val" id="val-fail_fprintf"><a href="#val-fail_fprintf" class="anchor"></a><div class="def val"><code><span class="keyword">val </span>fail_fprintf : (<span class="type-var">'a</span>, Format.formatter, unit, (<span class="type-var">'b</span>, string) <a href="index.html#type-t">t</a>) Pervasives.format4 <span class="keyword">&#8209;&gt;</span> <span class="type-var">'a</span></code></div><div class="doc"><p><code class="code">fail_fprintf format</code> uses <code class="code">format</code> to obtain an error message
and then returns <code class="code">Error msg</code>.</p></div></div><div class="spec val" id="val-add_ctx"><a href="#val-add_ctx" class="anchor"></a><div class="def val"><code><span class="keyword">val </span>add_ctx : string <span class="keyword">&#8209;&gt;</span> (<span class="type-var">'a</span>, string) <a href="index.html#type-t">t</a> <span class="keyword">&#8209;&gt;</span> (<span class="type-var">'a</span>, string) <a href="index.html#type-t">t</a></code></div><div class="doc"><p><code class="code">add_ctx msg</code> leaves <code class="code">Ok x</code> untouched, but transforms
<code class="code">Error s</code> into <code class="code">Error s'</code> where <code class="code">s'</code> contains the additional
context given by <code class="code">msg</code>.</p><ul class="at-tag"><li><span class="at-tag since">Since</span>: 1.2</li></ul></div></div><div class="spec val" id="val-add_ctxf"><a href="#val-add_ctxf" class="anchor"></a><div class="def val"><code><span class="keyword">val </span>add_ctxf : (<span class="type-var">'a</span>, Format.formatter, unit, (<span class="type-var">'b</span>, string) <a href="index.html#type-t">t</a> <span class="keyword">&#8209;&gt;</span> (<span class="type-var">'b</span>, string) <a href="index.html#type-t">t</a>) Pervasives.format4 <span class="keyword">&#8209;&gt;</span> <span class="type-var">'a</span></code></div><div class="doc"><p><code class="code">add_ctxf format_message</code> is similar to <a href="index.html#val-add_ctx">add_ctx</a> but with
Format for printing the message (eagerly).
Example:
</p><pre><code class="code"> add_ctxf &quot;message(number %d, foo: %B)&quot; 42 true (Error &quot;error)&quot;</code></pre><ul class="at-tag"><li><span class="at-tag since">Since</span>: 1.2</li></ul></div></div><div class="spec val" id="val-map"><a href="#val-map" class="anchor"></a><div class="def val"><code><span class="keyword">val </span>map : (<span class="type-var">'a</span> <span class="keyword">&#8209;&gt;</span> <span class="type-var">'b</span>) <span class="keyword">&#8209;&gt;</span> (<span class="type-var">'a</span>, <span class="type-var">'err</span>) <a href="index.html#type-t">t</a> <span class="keyword">&#8209;&gt;</span> (<span class="type-var">'b</span>, <span class="type-var">'err</span>) <a href="index.html#type-t">t</a></code></div><div class="doc"><p>Map on success.</p></div></div><div class="spec val" id="val-map_err"><a href="#val-map_err" class="anchor"></a><div class="def val"><code><span class="keyword">val </span>map_err : (<span class="type-var">'err1</span> <span class="keyword">&#8209;&gt;</span> <span class="type-var">'err2</span>) <span class="keyword">&#8209;&gt;</span> (<span class="type-var">'a</span>, <span class="type-var">'err1</span>) <a href="index.html#type-t">t</a> <span class="keyword">&#8209;&gt;</span> (<span class="type-var">'a</span>, <span class="type-var">'err2</span>) <a href="index.html#type-t">t</a></code></div><div class="doc"><p>Map on the error variant.</p></div></div><div class="spec val" id="val-map2"><a href="#val-map2" class="anchor"></a><div class="def val"><code><span class="keyword">val </span>map2 : (<span class="type-var">'a</span> <span class="keyword">&#8209;&gt;</span> <span class="type-var">'b</span>) <span class="keyword">&#8209;&gt;</span> (<span class="type-var">'err1</span> <span class="keyword">&#8209;&gt;</span> <span class="type-var">'err2</span>) <span class="keyword">&#8209;&gt;</span> (<span class="type-var">'a</span>, <span class="type-var">'err1</span>) <a href="index.html#type-t">t</a> <span class="keyword">&#8209;&gt;</span> (<span class="type-var">'b</span>, <span class="type-var">'err2</span>) <a href="index.html#type-t">t</a></code></div><div class="doc"><p>Like <a href="index.html#val-map">map</a>, but also with a function that can transform
the error message in case of failure.</p></div></div><div class="spec val" id="val-iter"><a href="#val-iter" class="anchor"></a><div class="def val"><code><span class="keyword">val </span>iter : (<span class="type-var">'a</span> <span class="keyword">&#8209;&gt;</span> unit) <span class="keyword">&#8209;&gt;</span> (<span class="type-var">'a</span>, <span class="type-var">_</span>) <a href="index.html#type-t">t</a> <span class="keyword">&#8209;&gt;</span> unit</code></div><div class="doc"><p>Apply the function only in case of <code class="code">Ok</code>.</p></div></div><div class="spec exception" id="exception-Get_error"><a href="#exception-Get_error" class="anchor"></a><div class="def exception"><code><span class="keyword">exception </span></code><code><span class="exception">Get_error</span></code></div><div class="doc"></div></div><div class="spec val" id="val-get_exn"><a href="#val-get_exn" class="anchor"></a><div class="def val"><code><span class="keyword">val </span>get_exn : (<span class="type-var">'a</span>, <span class="type-var">_</span>) <a href="index.html#type-t">t</a> <span class="keyword">&#8209;&gt;</span> <span class="type-var">'a</span></code></div><div class="doc"><p>Extract the value <code class="code">x</code> from <code class="code">Ok x</code>, fails otherwise.
You should be careful with this function, and favor other combinators
whenever possible.</p><ul class="at-tag"><li><span class="at-tag raise">Raises</span> <span class="module-path">Get_error</span>: if the value is an error.</li></ul></div></div><div class="spec val" id="val-get_or"><a href="#val-get_or" class="anchor"></a><div class="def val"><code><span class="keyword">val </span>get_or : (<span class="type-var">'a</span>, <span class="type-var">_</span>) <a href="index.html#type-t">t</a> <span class="keyword">&#8209;&gt;</span> default:<span class="type-var">'a</span> <span class="keyword">&#8209;&gt;</span> <span class="type-var">'a</span></code></div><div class="doc"><p><code class="code">get_or e ~default</code> returns <code class="code">x</code> if <code class="code">e = Ok x</code>, <code class="code">default</code> otherwise.</p></div></div><div class="spec val" id="val-map_or"><a href="#val-map_or" class="anchor"></a><div class="def val"><code><span class="keyword">val </span>map_or : (<span class="type-var">'a</span> <span class="keyword">&#8209;&gt;</span> <span class="type-var">'b</span>) <span class="keyword">&#8209;&gt;</span> (<span class="type-var">'a</span>, <span class="type-var">'c</span>) <a href="index.html#type-t">t</a> <span class="keyword">&#8209;&gt;</span> default:<span class="type-var">'b</span> <span class="keyword">&#8209;&gt;</span> <span class="type-var">'b</span></code></div><div class="doc"><p><code class="code">map_or f e ~default</code> returns <code class="code">f x</code> if <code class="code">e = Ok x</code>, <code class="code">default</code> otherwise.</p></div></div><div class="spec val" id="val-catch"><a href="#val-catch" class="anchor"></a><div class="def val"><code><span class="keyword">val </span>catch : (<span class="type-var">'a</span>, <span class="type-var">'err</span>) <a href="index.html#type-t">t</a> <span class="keyword">&#8209;&gt;</span> ok:(<span class="type-var">'a</span> <span class="keyword">&#8209;&gt;</span> <span class="type-var">'b</span>) <span class="keyword">&#8209;&gt;</span> err:(<span class="type-var">'err</span> <span class="keyword">&#8209;&gt;</span> <span class="type-var">'b</span>) <span class="keyword">&#8209;&gt;</span> <span class="type-var">'b</span></code></div><div class="doc"><p><code class="code">catch e ~ok ~err</code> calls either <code class="code">ok</code> or <code class="code">err</code> depending on
the value of <code class="code">e</code>.</p></div></div><div class="spec val" id="val-flat_map"><a href="#val-flat_map" class="anchor"></a><div class="def val"><code><span class="keyword">val </span>flat_map : (<span class="type-var">'a</span> <span class="keyword">&#8209;&gt;</span> (<span class="type-var">'b</span>, <span class="type-var">'err</span>) <a href="index.html#type-t">t</a>) <span class="keyword">&#8209;&gt;</span> (<span class="type-var">'a</span>, <span class="type-var">'err</span>) <a href="index.html#type-t">t</a> <span class="keyword">&#8209;&gt;</span> (<span class="type-var">'b</span>, <span class="type-var">'err</span>) <a href="index.html#type-t">t</a></code></div><div class="doc"></div></div><div class="spec val" id="val-(&gt;|=)"><a href="#val-(&gt;|=)" class="anchor"></a><div class="def val"><code><span class="keyword">val </span>(&gt;|=) : (<span class="type-var">'a</span>, <span class="type-var">'err</span>) <a href="index.html#type-t">t</a> <span class="keyword">&#8209;&gt;</span> (<span class="type-var">'a</span> <span class="keyword">&#8209;&gt;</span> <span class="type-var">'b</span>) <span class="keyword">&#8209;&gt;</span> (<span class="type-var">'b</span>, <span class="type-var">'err</span>) <a href="index.html#type-t">t</a></code></div><div class="doc"></div></div><div class="spec val" id="val-(&gt;&gt;=)"><a href="#val-(&gt;&gt;=)" class="anchor"></a><div class="def val"><code><span class="keyword">val </span>(&gt;&gt;=) : (<span class="type-var">'a</span>, <span class="type-var">'err</span>) <a href="index.html#type-t">t</a> <span class="keyword">&#8209;&gt;</span> (<span class="type-var">'a</span> <span class="keyword">&#8209;&gt;</span> (<span class="type-var">'b</span>, <span class="type-var">'err</span>) <a href="index.html#type-t">t</a>) <span class="keyword">&#8209;&gt;</span> (<span class="type-var">'b</span>, <span class="type-var">'err</span>) <a href="index.html#type-t">t</a></code></div><div class="doc"><p>Monadic composition. <code class="code">e &gt;&gt;= f</code> proceeds as <code class="code">f x</code> if <code class="code">e</code> is <code class="code">Ok x</code>
or returns <code class="code">e</code> if <code class="code">e</code> is an <code class="code">Error</code>.</p></div></div><div class="spec val" id="val-equal"><a href="#val-equal" class="anchor"></a><div class="def val"><code><span class="keyword">val </span>equal : err:<span class="type-var">'err</span> <a href="index.html#type-equal">equal</a> <span class="keyword">&#8209;&gt;</span> <span class="type-var">'a</span> <a href="index.html#type-equal">equal</a> <span class="keyword">&#8209;&gt;</span> (<span class="type-var">'a</span>, <span class="type-var">'err</span>) <a href="index.html#type-t">t</a> <a href="index.html#type-equal">equal</a></code></div><div class="doc"></div></div><div class="spec val" id="val-compare"><a href="#val-compare" class="anchor"></a><div class="def val"><code><span class="keyword">val </span>compare : err:<span class="type-var">'err</span> <a href="index.html#type-ord">ord</a> <span class="keyword">&#8209;&gt;</span> <span class="type-var">'a</span> <a href="index.html#type-ord">ord</a> <span class="keyword">&#8209;&gt;</span> (<span class="type-var">'a</span>, <span class="type-var">'err</span>) <a href="index.html#type-t">t</a> <a href="index.html#type-ord">ord</a></code></div><div class="doc"></div></div><div class="spec val" id="val-fold"><a href="#val-fold" class="anchor"></a><div class="def val"><code><span class="keyword">val </span>fold : ok:(<span class="type-var">'a</span> <span class="keyword">&#8209;&gt;</span> <span class="type-var">'b</span>) <span class="keyword">&#8209;&gt;</span> error:(<span class="type-var">'err</span> <span class="keyword">&#8209;&gt;</span> <span class="type-var">'b</span>) <span class="keyword">&#8209;&gt;</span> (<span class="type-var">'a</span>, <span class="type-var">'err</span>) <a href="index.html#type-t">t</a> <span class="keyword">&#8209;&gt;</span> <span class="type-var">'b</span></code></div><div class="doc"><p><code class="code">fold ~ok ~error e</code> opens <code class="code">e</code> and, if <code class="code">e = Ok x</code>, returns
<code class="code">ok x</code>, otherwise <code class="code">e = Error s</code> and it returns <code class="code">error s</code>.</p></div></div><div class="spec val" id="val-fold_ok"><a href="#val-fold_ok" class="anchor"></a><div class="def val"><code><span class="keyword">val </span>fold_ok : (<span class="type-var">'a</span> <span class="keyword">&#8209;&gt;</span> <span class="type-var">'b</span> <span class="keyword">&#8209;&gt;</span> <span class="type-var">'a</span>) <span class="keyword">&#8209;&gt;</span> <span class="type-var">'a</span> <span class="keyword">&#8209;&gt;</span> (<span class="type-var">'b</span>, <span class="type-var">_</span>) <a href="index.html#type-t">t</a> <span class="keyword">&#8209;&gt;</span> <span class="type-var">'a</span></code></div><div class="doc"><p><code class="code">fold_ok f acc r</code> will compute <code class="code">f acc x</code> if <code class="code">r=Ok x</code>,
and return <code class="code">acc</code> otherwise, as if the result were a mere option.</p><ul class="at-tag"><li><span class="at-tag since">Since</span>: 1.2</li></ul></div></div><div class="spec val" id="val-is_ok"><a href="#val-is_ok" class="anchor"></a><div class="def val"><code><span class="keyword">val </span>is_ok : (<span class="type-var">'a</span>, <span class="type-var">'err</span>) <a href="index.html#type-t">t</a> <span class="keyword">&#8209;&gt;</span> bool</code></div><div class="doc"><p>Return true if <code class="code">Ok</code>.</p><ul class="at-tag"><li><span class="at-tag since">Since</span>: 1.0</li></ul></div></div><div class="spec val" id="val-is_error"><a href="#val-is_error" class="anchor"></a><div class="def val"><code><span class="keyword">val </span>is_error : (<span class="type-var">'a</span>, <span class="type-var">'err</span>) <a href="index.html#type-t">t</a> <span class="keyword">&#8209;&gt;</span> bool</code></div><div class="doc"><p>Return true if <code class="code">Error</code>.</p><ul class="at-tag"><li><span class="at-tag since">Since</span>: 1.0</li></ul></div></div><h3>Wrappers</h3><div class="spec val" id="val-guard"><a href="#val-guard" class="anchor"></a><div class="def val"><code><span class="keyword">val </span>guard : (unit <span class="keyword">&#8209;&gt;</span> <span class="type-var">'a</span>) <span class="keyword">&#8209;&gt;</span> (<span class="type-var">'a</span>, exn) <a href="index.html#type-t">t</a></code></div><div class="doc"><p><code class="code">guard f</code> runs <code class="code">f ()</code> and returns its result wrapped in <code class="code">Ok</code>. If
<code class="code">f ()</code> raises some exception <code class="code">e</code>, then it fails with <code class="code">Error e</code>.</p></div></div><div class="spec val" id="val-guard_str"><a href="#val-guard_str" class="anchor"></a><div class="def val"><code><span class="keyword">val </span>guard_str : (unit <span class="keyword">&#8209;&gt;</span> <span class="type-var">'a</span>) <span class="keyword">&#8209;&gt;</span> (<span class="type-var">'a</span>, string) <a href="index.html#type-t">t</a></code></div><div class="doc"><p>Like <a href="index.html#val-guard">guard</a> but uses <a href="index.html#val-of_exn">of_exn</a> to print the exception.</p></div></div><div class="spec val" id="val-guard_str_trace"><a href="#val-guard_str_trace" class="anchor"></a><div class="def val"><code><span class="keyword">val </span>guard_str_trace : (unit <span class="keyword">&#8209;&gt;</span> <span class="type-var">'a</span>) <span class="keyword">&#8209;&gt;</span> (<span class="type-var">'a</span>, string) <a href="index.html#type-t">t</a></code></div><div class="doc"><p>Like <a href="index.html#val-guard_str">guard_str</a> but uses <a href="index.html#val-of_exn_trace">of_exn_trace</a> instead of <a href="index.html#val-of_exn">of_exn</a> so
that the stack trace is printed.</p></div></div><div class="spec val" id="val-wrap1"><a href="#val-wrap1" class="anchor"></a><div class="def val"><code><span class="keyword">val </span>wrap1 : (<span class="type-var">'a</span> <span class="keyword">&#8209;&gt;</span> <span class="type-var">'b</span>) <span class="keyword">&#8209;&gt;</span> <span class="type-var">'a</span> <span class="keyword">&#8209;&gt;</span> (<span class="type-var">'b</span>, exn) <a href="index.html#type-t">t</a></code></div><div class="doc"><p>Like <a href="index.html#val-guard">guard</a> but gives the function one argument.</p></div></div><div class="spec val" id="val-wrap2"><a href="#val-wrap2" class="anchor"></a><div class="def val"><code><span class="keyword">val </span>wrap2 : (<span class="type-var">'a</span> <span class="keyword">&#8209;&gt;</span> <span class="type-var">'b</span> <span class="keyword">&#8209;&gt;</span> <span class="type-var">'c</span>) <span class="keyword">&#8209;&gt;</span> <span class="type-var">'a</span> <span class="keyword">&#8209;&gt;</span> <span class="type-var">'b</span> <span class="keyword">&#8209;&gt;</span> (<span class="type-var">'c</span>, exn) <a href="index.html#type-t">t</a></code></div><div class="doc"><p>Like <a href="index.html#val-guard">guard</a> but gives the function two arguments.</p></div></div><div class="spec val" id="val-wrap3"><a href="#val-wrap3" class="anchor"></a><div class="def val"><code><span class="keyword">val </span>wrap3 : (<span class="type-var">'a</span> <span class="keyword">&#8209;&gt;</span> <span class="type-var">'b</span> <span class="keyword">&#8209;&gt;</span> <span class="type-var">'c</span> <span class="keyword">&#8209;&gt;</span> <span class="type-var">'d</span>) <span class="keyword">&#8209;&gt;</span> <span class="type-var">'a</span> <span class="keyword">&#8209;&gt;</span> <span class="type-var">'b</span> <span class="keyword">&#8209;&gt;</span> <span class="type-var">'c</span> <span class="keyword">&#8209;&gt;</span> (<span class="type-var">'d</span>, exn) <a href="index.html#type-t">t</a></code></div><div class="doc"><p>Like <a href="index.html#val-guard">guard</a> but gives the function three arguments.</p></div></div><h3>Applicative</h3><div class="spec val" id="val-pure"><a href="#val-pure" class="anchor"></a><div class="def val"><code><span class="keyword">val </span>pure : <span class="type-var">'a</span> <span class="keyword">&#8209;&gt;</span> (<span class="type-var">'a</span>, <span class="type-var">'err</span>) <a href="index.html#type-t">t</a></code></div><div class="doc"><p>Synonym of <a href="index.html#val-return">return</a>.</p></div></div><div class="spec val" id="val-(&lt;*&gt;)"><a href="#val-(&lt;*&gt;)" class="anchor"></a><div class="def val"><code><span class="keyword">val </span>(&lt;*&gt;) : (<span class="type-var">'a</span> <span class="keyword">&#8209;&gt;</span> <span class="type-var">'b</span>, <span class="type-var">'err</span>) <a href="index.html#type-t">t</a> <span class="keyword">&#8209;&gt;</span> (<span class="type-var">'a</span>, <span class="type-var">'err</span>) <a href="index.html#type-t">t</a> <span class="keyword">&#8209;&gt;</span> (<span class="type-var">'b</span>, <span class="type-var">'err</span>) <a href="index.html#type-t">t</a></code></div><div class="doc"><p><code class="code">a &lt;*&gt; b</code> evaluates <code class="code">a</code> and <code class="code">b</code>, and, in case of success, returns
<code class="code">Ok (a b)</code>. Otherwise, it fails, and the error of <code class="code">a</code> is chosen
over the error of <code class="code">b</code> if both fail.</p></div></div><div class="spec val" id="val-join"><a href="#val-join" class="anchor"></a><div class="def val"><code><span class="keyword">val </span>join : ((<span class="type-var">'a</span>, <span class="type-var">'err</span>) <a href="index.html#type-t">t</a>, <span class="type-var">'err</span>) <a href="index.html#type-t">t</a> <span class="keyword">&#8209;&gt;</span> (<span class="type-var">'a</span>, <span class="type-var">'err</span>) <a href="index.html#type-t">t</a></code></div><div class="doc"><p><code class="code">join t</code>, in case of success, returns <code class="code">Ok o</code> from <code class="code">Ok (Ok o)</code>. Otherwise,
it fails with <code class="code">Error e</code> where <code class="code">e</code> is the unwrapped error of <code class="code">t</code>.</p></div></div><div class="spec val" id="val-both"><a href="#val-both" class="anchor"></a><div class="def val"><code><span class="keyword">val </span>both : (<span class="type-var">'a</span>, <span class="type-var">'err</span>) <a href="index.html#type-t">t</a> <span class="keyword">&#8209;&gt;</span> (<span class="type-var">'b</span>, <span class="type-var">'err</span>) <a href="index.html#type-t">t</a> <span class="keyword">&#8209;&gt;</span> (<span class="type-var">'a</span><span class="keyword"> * </span><span class="type-var">'b</span>, <span class="type-var">'err</span>) <a href="index.html#type-t">t</a></code></div><div class="doc"><p><code class="code">both a b</code>, in case of success, returns <code class="code">Ok (o, o')</code> with the ok values
of <code class="code">a</code> and <code class="code">b</code>. Otherwise, it fails, and the error of <code class="code">a</code> is chosen over the
error of <code class="code">b</code> if both fail.</p></div></div><h3>Infix</h3><div class="spec module" id="module-Infix"><a href="#module-Infix" class="anchor"></a><div class="def module"><code><span class="keyword">module </span><a href="Infix/index.html">Infix</a> : <span class="keyword">sig</span> ... <span class="keyword">end</span></code></div><div class="doc"></div></div><h3>Collections</h3><div class="spec val" id="val-map_l"><a href="#val-map_l" class="anchor"></a><div class="def val"><code><span class="keyword">val </span>map_l : (<span class="type-var">'a</span> <span class="keyword">&#8209;&gt;</span> (<span class="type-var">'b</span>, <span class="type-var">'err</span>) <a href="index.html#type-t">t</a>) <span class="keyword">&#8209;&gt;</span> <span class="type-var">'a</span> list <span class="keyword">&#8209;&gt;</span> (<span class="type-var">'b</span> list, <span class="type-var">'err</span>) <a href="index.html#type-t">t</a></code></div><div class="doc"></div></div><div class="spec val" id="val-fold_l"><a href="#val-fold_l" class="anchor"></a><div class="def val"><code><span class="keyword">val </span>fold_l : (<span class="type-var">'b</span> <span class="keyword">&#8209;&gt;</span> <span class="type-var">'a</span> <span class="keyword">&#8209;&gt;</span> (<span class="type-var">'b</span>, <span class="type-var">'err</span>) <a href="index.html#type-t">t</a>) <span class="keyword">&#8209;&gt;</span> <span class="type-var">'b</span> <span class="keyword">&#8209;&gt;</span> <span class="type-var">'a</span> list <span class="keyword">&#8209;&gt;</span> (<span class="type-var">'b</span>, <span class="type-var">'err</span>) <a href="index.html#type-t">t</a></code></div><div class="doc"></div></div><div class="spec val" id="val-fold_seq"><a href="#val-fold_seq" class="anchor"></a><div class="def val"><code><span class="keyword">val </span>fold_seq : (<span class="type-var">'b</span> <span class="keyword">&#8209;&gt;</span> <span class="type-var">'a</span> <span class="keyword">&#8209;&gt;</span> (<span class="type-var">'b</span>, <span class="type-var">'err</span>) <a href="index.html#type-t">t</a>) <span class="keyword">&#8209;&gt;</span> <span class="type-var">'b</span> <span class="keyword">&#8209;&gt;</span> <span class="type-var">'a</span> <a href="index.html#type-sequence">sequence</a> <span class="keyword">&#8209;&gt;</span> (<span class="type-var">'b</span>, <span class="type-var">'err</span>) <a href="index.html#type-t">t</a></code></div><div class="doc"></div></div><h3>Misc</h3><div class="spec val" id="val-choose"><a href="#val-choose" class="anchor"></a><div class="def val"><code><span class="keyword">val </span>choose : (<span class="type-var">'a</span>, <span class="type-var">'err</span>) <a href="index.html#type-t">t</a> list <span class="keyword">&#8209;&gt;</span> (<span class="type-var">'a</span>, <span class="type-var">'err</span> list) <a href="index.html#type-t">t</a></code></div><div class="doc"><p><code class="code">choose l</code> selects a member of <code class="code">l</code> that is a <code class="code">Ok _</code> value,
or returns <code class="code">Error l</code> otherwise, where <code class="code">l</code> is the list of errors.</p></div></div><div class="spec val" id="val-retry"><a href="#val-retry" class="anchor"></a><div class="def val"><code><span class="keyword">val </span>retry : int <span class="keyword">&#8209;&gt;</span> (unit <span class="keyword">&#8209;&gt;</span> (<span class="type-var">'a</span>, <span class="type-var">'err</span>) <a href="index.html#type-t">t</a>) <span class="keyword">&#8209;&gt;</span> (<span class="type-var">'a</span>, <span class="type-var">'err</span> list) <a href="index.html#type-t">t</a></code></div><div class="doc"><p><code class="code">retry n f</code> calls <code class="code">f</code> at most <code class="code">n</code> times, returning the first result
of <code class="code">f ()</code> that doesn't fail. If <code class="code">f</code> fails <code class="code">n</code> times, <code class="code">retry n f</code> fails
with the list of successive errors.</p></div></div><div class="spec module-type" id="module-type-MONAD"><a href="#module-type-MONAD" class="anchor"></a><div class="def module-type"><code><span class="keyword">module type </span><a href="module-type-MONAD/index.html">MONAD</a> : <span class="keyword">sig</span> ... <span class="keyword">end</span></code></div><div class="doc"><h3>Monadic Operations</h3></div></div><div class="spec module" id="module-Traverse"><a href="#module-Traverse" class="anchor"></a><div class="def module"><code><span class="keyword">module </span><a href="Traverse/index.html">Traverse</a> : <span class="keyword">functor</span> (<a href="Traverse/argument-1-M/index.html">M</a> : <a href="index.html#module-type-MONAD">MONAD</a>) -&gt; <span class="keyword">sig</span> ... <span class="keyword">end</span></code></div><div class="doc"></div></div><h3>Conversions</h3><div class="spec val" id="val-to_opt"><a href="#val-to_opt" class="anchor"></a><div class="def val"><code><span class="keyword">val </span>to_opt : (<span class="type-var">'a</span>, <span class="type-var">_</span>) <a href="index.html#type-t">t</a> <span class="keyword">&#8209;&gt;</span> <span class="type-var">'a</span> option</code></div><div class="doc"><p>Convert a result to an option.</p></div></div><div class="spec val" id="val-of_opt"><a href="#val-of_opt" class="anchor"></a><div class="def val"><code><span class="keyword">val </span>of_opt : <span class="type-var">'a</span> option <span class="keyword">&#8209;&gt;</span> (<span class="type-var">'a</span>, string) <a href="index.html#type-t">t</a></code></div><div class="doc"><p>Convert an option to a result.</p></div></div><div class="spec val" id="val-to_seq"><a href="#val-to_seq" class="anchor"></a><div class="def val"><code><span class="keyword">val </span>to_seq : (<span class="type-var">'a</span>, <span class="type-var">_</span>) <a href="index.html#type-t">t</a> <span class="keyword">&#8209;&gt;</span> <span class="type-var">'a</span> <a href="index.html#type-sequence">sequence</a></code></div><div class="doc"></div></div><div class="spec type" id="type-error"><a href="#type-error" class="anchor"></a><div class="def type"><code><span class="keyword">type </span>('a, 'b) error</code><span class="keyword"> = </span><code>[ </code><table class="variant"><tr id="type-error.Ok" class="anchored"><td class="def constructor"><a href="#type-error.Ok" class="anchor"></a><code><span class="keyword">| </span></code><code>`Ok<span class="keyword"> of </span><span class="type-var">'a</span></code></td></tr><tr id="type-error.Error" class="anchored"><td class="def constructor"><a href="#type-error.Error" class="anchor"></a><code><span class="keyword">| </span></code><code>`Error<span class="keyword"> of </span><span class="type-var">'b</span></code></td></tr></table><code> ]</code><code></code></div><div class="doc"></div></div><div class="spec val" id="val-of_err"><a href="#val-of_err" class="anchor"></a><div class="def val"><code><span class="keyword">val </span>of_err : (<span class="type-var">'a</span>, <span class="type-var">'b</span>) <a href="index.html#type-error">error</a> <span class="keyword">&#8209;&gt;</span> (<span class="type-var">'a</span>, <span class="type-var">'b</span>) <a href="index.html#type-t">t</a></code></div><div class="doc"><ul class="at-tag"><li><span class="at-tag since">Since</span>: 0.17</li></ul></div></div><div class="spec val" id="val-to_err"><a href="#val-to_err" class="anchor"></a><div class="def val"><code><span class="keyword">val </span>to_err : (<span class="type-var">'a</span>, <span class="type-var">'b</span>) <a href="index.html#type-t">t</a> <span class="keyword">&#8209;&gt;</span> (<span class="type-var">'a</span>, <span class="type-var">'b</span>) <a href="index.html#type-error">error</a></code></div><div class="doc"><ul class="at-tag"><li><span class="at-tag since">Since</span>: 0.17</li></ul></div></div><h3>IO</h3><div class="spec val" id="val-pp"><a href="#val-pp" class="anchor"></a><div class="def val"><code><span class="keyword">val </span>pp : <span class="type-var">'a</span> <a href="index.html#type-printer">printer</a> <span class="keyword">&#8209;&gt;</span> (<span class="type-var">'a</span>, string) <a href="index.html#type-t">t</a> <a href="index.html#type-printer">printer</a></code></div><div class="doc"></div></div><div class="spec val" id="val-pp'"><a href="#val-pp'" class="anchor"></a><div class="def val"><code><span class="keyword">val </span>pp' : <span class="type-var">'a</span> <a href="index.html#type-printer">printer</a> <span class="keyword">&#8209;&gt;</span> <span class="type-var">'e</span> <a href="index.html#type-printer">printer</a> <span class="keyword">&#8209;&gt;</span> (<span class="type-var">'a</span>, <span class="type-var">'e</span>) <a href="index.html#type-t">t</a> <a href="index.html#type-printer">printer</a></code></div><div class="doc"><p>Printer that is generic on the error type.</p></div></div></body></html>