mirror of
https://github.com/c-cube/ocaml-containers.git
synced 2025-12-06 03:05:28 -05:00
26 lines
No EOL
36 KiB
HTML
26 lines
No EOL
36 KiB
HTML
<!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> — <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 "result" 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">‑></span> unit) <span class="keyword">‑></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">‑></span> <span class="type-var">'a</span> <span class="keyword">‑></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">‑></span> <span class="type-var">'a</span> <span class="keyword">‑></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">‑></span> <span class="type-var">'a</span> <span class="keyword">‑></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>Result</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">‑></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">‑></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">‑></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">‑></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">‑></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">‑></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-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">‑></span> (<span class="type-var">'a</span>, string) <a href="index.html#type-t">t</a> <span class="keyword">‑></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">‑></span> (<span class="type-var">'b</span>, string) <a href="index.html#type-t">t</a>) Pervasives.format4 <span class="keyword">‑></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 "message(number %d, foo: %B)" 42 true (Error "error)"</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">‑></span> <span class="type-var">'b</span>) <span class="keyword">‑></span> (<span class="type-var">'a</span>, <span class="type-var">'err</span>) <a href="index.html#type-t">t</a> <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>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">‑></span> <span class="type-var">'err2</span>) <span class="keyword">‑></span> (<span class="type-var">'a</span>, <span class="type-var">'err1</span>) <a href="index.html#type-t">t</a> <span class="keyword">‑></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">‑></span> <span class="type-var">'b</span>) <span class="keyword">‑></span> (<span class="type-var">'err1</span> <span class="keyword">‑></span> <span class="type-var">'err2</span>) <span class="keyword">‑></span> (<span class="type-var">'a</span>, <span class="type-var">'err1</span>) <a href="index.html#type-t">t</a> <span class="keyword">‑></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>Same as <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">‑></span> unit) <span class="keyword">‑></span> (<span class="type-var">'a</span>, <span class="type-var">_</span>) <a href="index.html#type-t">t</a> <span class="keyword">‑></span> unit</code></div><div class="doc"><p>Apply the function only in case of Ok</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">‑></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">‑></span> default:<span class="type-var">'a</span> <span class="keyword">‑></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">‑></span> <span class="type-var">'b</span>) <span class="keyword">‑></span> (<span class="type-var">'a</span>, <span class="type-var">'c</span>) <a href="index.html#type-t">t</a> <span class="keyword">‑></span> default:<span class="type-var">'b</span> <span class="keyword">‑></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">‑></span> ok:(<span class="type-var">'a</span> <span class="keyword">‑></span> <span class="type-var">'b</span>) <span class="keyword">‑></span> err:(<span class="type-var">'err</span> <span class="keyword">‑></span> <span class="type-var">'b</span>) <span class="keyword">‑></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">‑></span> (<span class="type-var">'b</span>, <span class="type-var">'err</span>) <a href="index.html#type-t">t</a>) <span class="keyword">‑></span> (<span class="type-var">'a</span>, <span class="type-var">'err</span>) <a href="index.html#type-t">t</a> <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"></div></div><div class="spec val" id="val-(>|=)"><a href="#val-(>|=)" class="anchor"></a><div class="def val"><code><span class="keyword">val </span>(>|=) : (<span class="type-var">'a</span>, <span class="type-var">'err</span>) <a href="index.html#type-t">t</a> <span class="keyword">‑></span> (<span class="type-var">'a</span> <span class="keyword">‑></span> <span class="type-var">'b</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"></div></div><div class="spec val" id="val-(>>=)"><a href="#val-(>>=)" class="anchor"></a><div class="def val"><code><span class="keyword">val </span>(>>=) : (<span class="type-var">'a</span>, <span class="type-var">'err</span>) <a href="index.html#type-t">t</a> <span class="keyword">‑></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>) <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"></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">‑></span> <span class="type-var">'a</span> <a href="index.html#type-equal">equal</a> <span class="keyword">‑></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">‑></span> <span class="type-var">'a</span> <a href="index.html#type-ord">ord</a> <span class="keyword">‑></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">‑></span> <span class="type-var">'b</span>) <span class="keyword">‑></span> error:(<span class="type-var">'err</span> <span class="keyword">‑></span> <span class="type-var">'b</span>) <span class="keyword">‑></span> (<span class="type-var">'a</span>, <span class="type-var">'err</span>) <a href="index.html#type-t">t</a> <span class="keyword">‑></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">‑></span> <span class="type-var">'b</span> <span class="keyword">‑></span> <span class="type-var">'a</span>) <span class="keyword">‑></span> <span class="type-var">'a</span> <span class="keyword">‑></span> (<span class="type-var">'b</span>, <span class="type-var">_</span>) <a href="index.html#type-t">t</a> <span class="keyword">‑></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">‑></span> bool</code></div><div class="doc"><p>Return true if Ok</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">‑></span> bool</code></div><div class="doc"><p>Return true if Error</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">‑></span> <span class="type-var">'a</span>) <span class="keyword">‑></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">‑></span> <span class="type-var">'a</span>) <span class="keyword">‑></span> (<span class="type-var">'a</span>, string) <a href="index.html#type-t">t</a></code></div><div class="doc"><p>Same as <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">‑></span> <span class="type-var">'a</span>) <span class="keyword">‑></span> (<span class="type-var">'a</span>, string) <a href="index.html#type-t">t</a></code></div><div class="doc"><p>Same as <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">‑></span> <span class="type-var">'b</span>) <span class="keyword">‑></span> <span class="type-var">'a</span> <span class="keyword">‑></span> (<span class="type-var">'b</span>, exn) <a href="index.html#type-t">t</a></code></div><div class="doc"><p>Same as <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">‑></span> <span class="type-var">'b</span> <span class="keyword">‑></span> <span class="type-var">'c</span>) <span class="keyword">‑></span> <span class="type-var">'a</span> <span class="keyword">‑></span> <span class="type-var">'b</span> <span class="keyword">‑></span> (<span class="type-var">'c</span>, exn) <a href="index.html#type-t">t</a></code></div><div class="doc"><p>Same as <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">‑></span> <span class="type-var">'b</span> <span class="keyword">‑></span> <span class="type-var">'c</span> <span class="keyword">‑></span> <span class="type-var">'d</span>) <span class="keyword">‑></span> <span class="type-var">'a</span> <span class="keyword">‑></span> <span class="type-var">'b</span> <span class="keyword">‑></span> <span class="type-var">'c</span> <span class="keyword">‑></span> (<span class="type-var">'d</span>, exn) <a href="index.html#type-t">t</a></code></div><div class="doc"><p>Same as <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">‑></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-(<*>)"><a href="#val-(<*>)" class="anchor"></a><div class="def val"><code><span class="keyword">val </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> <span class="keyword">‑></span> (<span class="type-var">'a</span>, <span class="type-var">'err</span>) <a href="index.html#type-t">t</a> <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">a <*> 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">‑></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">‑></span> (<span class="type-var">'b</span>, <span class="type-var">'err</span>) <a href="index.html#type-t">t</a> <span class="keyword">‑></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">‑></span> (<span class="type-var">'b</span>, <span class="type-var">'err</span>) <a href="index.html#type-t">t</a>) <span class="keyword">‑></span> <span class="type-var">'a</span> list <span class="keyword">‑></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">‑></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>) <span class="keyword">‑></span> <span class="type-var">'b</span> <span class="keyword">‑></span> <span class="type-var">'a</span> list <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"></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">‑></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>) <span class="keyword">‑></span> <span class="type-var">'b</span> <span class="keyword">‑></span> <span class="type-var">'a</span> <a href="index.html#type-sequence">sequence</a> <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"></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">‑></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">‑></span> (unit <span class="keyword">‑></span> (<span class="type-var">'a</span>, <span class="type-var">'err</span>) <a href="index.html#type-t">t</a>) <span class="keyword">‑></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>) -> <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">‑></span> <span class="type-var">'a</span> option</code></div><div class="doc"></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">‑></span> (<span class="type-var">'a</span>, string) <a href="index.html#type-t">t</a></code></div><div class="doc"></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">‑></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">‑></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">‑></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">‑></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">‑></span> <span class="type-var">'e</span> <a href="index.html#type-printer">printer</a> <span class="keyword">‑></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> |