mirror of
https://github.com/c-cube/ocaml-containers.git
synced 2025-12-06 11:15:31 -05:00
2 lines
No EOL
34 KiB
HTML
2 lines
No EOL
34 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"/><script src="../../highlight.pack.js"></script><script>hljs.initHighlightingOnLoad();</script></head><body><div class="content"><header><nav><a href="../index.html">Up</a> – <a href="../index.html">containers</a> » CCResult</nav><h1>Module <code>CCResult</code></h1><h2 id="error-monad"><a href="#error-monad" class="anchor"></a>Error Monad</h2><p>Uses the new "result" type from OCaml 4.03.</p><dl><dt>since</dt><dd>0.16</dd></dl><nav class="toc"><ul><li><a href="#basics">Basics</a></li><li><a href="#wrappers">Wrappers</a></li><li><a href="#applicative">Applicative</a></li><li><a href="#infix">Infix</a></li><li><a href="#collections">Collections</a></li><li><a href="#misc">Misc</a></li><li><a href="#conversions">Conversions</a></li><li><a href="#io">IO</a></li></ul></nav></header><dl><dt class="spec type" id="type-sequence"><a href="#type-sequence" class="anchor"></a><code><span class="keyword">type </span>'a sequence</code><code><span class="keyword"> = </span>(<span class="type-var">'a</span> <span>-></span> unit) <span>-></span> unit</code></dt><dt class="spec type" id="type-equal"><a href="#type-equal" class="anchor"></a><code><span class="keyword">type </span>'a equal</code><code><span class="keyword"> = </span><span class="type-var">'a</span> <span>-></span> <span class="type-var">'a</span> <span>-></span> bool</code></dt><dt class="spec type" id="type-ord"><a href="#type-ord" class="anchor"></a><code><span class="keyword">type </span>'a ord</code><code><span class="keyword"> = </span><span class="type-var">'a</span> <span>-></span> <span class="type-var">'a</span> <span>-></span> int</code></dt><dt class="spec type" id="type-printer"><a href="#type-printer" class="anchor"></a><code><span class="keyword">type </span>'a printer</code><code><span class="keyword"> = </span>Format.formatter <span>-></span> <span class="type-var">'a</span> <span>-></span> unit</code></dt></dl><section><header><h2 id="basics"><a href="#basics" class="anchor"></a>Basics</h2></header><div><div class="spec include"><div class="doc"><dl><dt>since</dt><dd>1.5</dd></dl><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><dl><dt class="spec type" id="type-result"><a href="#type-result" class="anchor"></a><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></dt></dl></details></div></div></div><dl><dt class="spec type" id="type-t"><a href="#type-t" class="anchor"></a><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></dt></dl><dl><dt class="spec value" id="val-return"><a href="#val-return" class="anchor"></a><code><span class="keyword">val </span>return : <span class="type-var">'a</span> <span>-></span> (<span class="type-var">'a</span>, <span class="type-var">'err</span>) <a href="index.html#type-t">t</a></code></dt><dd><p>Successfully return a value.</p></dd></dl><dl><dt class="spec value" id="val-fail"><a href="#val-fail" class="anchor"></a><code><span class="keyword">val </span>fail : <span class="type-var">'err</span> <span>-></span> (<span class="type-var">'a</span>, <span class="type-var">'err</span>) <a href="index.html#type-t">t</a></code></dt><dd><p>Fail with an error.</p></dd></dl><dl><dt class="spec value" id="val-of_exn"><a href="#val-of_exn" class="anchor"></a><code><span class="keyword">val </span>of_exn : exn <span>-></span> (<span class="type-var">'a</span>, string) <a href="index.html#type-t">t</a></code></dt><dd><p><code>of_exn e</code> uses <code>Printexc</code> to print the exception as a string.</p></dd></dl><dl><dt class="spec value" id="val-of_exn_trace"><a href="#val-of_exn_trace" class="anchor"></a><code><span class="keyword">val </span>of_exn_trace : exn <span>-></span> (<span class="type-var">'a</span>, string) <a href="index.html#type-t">t</a></code></dt><dd><p><code>of_exn_trace e</code> is similar to <code>of_exn e</code>, but it adds the stacktrace to the error message.</p><p>Remember to call <code>Printexc.record_backtrace true</code> and compile with the debug flag for this to work.</p></dd></dl><dl><dt class="spec value" id="val-fail_printf"><a href="#val-fail_printf" class="anchor"></a><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>-></span> <span class="type-var">'a</span></code></dt><dd><p><code>fail_printf format</code> uses <code>format</code> to obtain an error message and then returns <code>Error msg</code>.</p></dd></dl><dl><dt class="spec value" id="val-fail_fprintf"><a href="#val-fail_fprintf" class="anchor"></a><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>-></span> <span class="type-var">'a</span></code></dt><dd><p><code>fail_fprintf format</code> uses <code>format</code> to obtain an error message and then returns <code>Error msg</code>.</p></dd></dl><dl><dt class="spec value" id="val-add_ctx"><a href="#val-add_ctx" class="anchor"></a><code><span class="keyword">val </span>add_ctx : string <span>-></span> (<span class="type-var">'a</span>, string) <a href="index.html#type-t">t</a> <span>-></span> (<span class="type-var">'a</span>, string) <a href="index.html#type-t">t</a></code></dt><dd><p><code>add_ctx msg</code> leaves <code>Ok x</code> untouched, but transforms <code>Error s</code> into <code>Error s'</code> where <code>s'</code> contains the additional context given by <code>msg</code>.</p><dl><dt>since</dt><dd>1.2</dd></dl></dd></dl><dl><dt class="spec value" id="val-add_ctxf"><a href="#val-add_ctxf" class="anchor"></a><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>-></span> (<span class="type-var">'b</span>, string) <a href="index.html#type-t">t</a>) Pervasives.format4 <span>-></span> <span class="type-var">'a</span></code></dt><dd><p><code>add_ctxf format_message</code> is similar to <a href="index.html#val-add_ctx"><code>add_ctx</code></a> but with <code>Format</code> for printing the message (eagerly). Example:</p><pre><code class="ml">add_ctxf "message(number %d, foo: %B)" 42 true (Error "error)"</code></pre><dl><dt>since</dt><dd>1.2</dd></dl></dd></dl><dl><dt class="spec value" id="val-map"><a href="#val-map" class="anchor"></a><code><span class="keyword">val </span>map : (<span class="type-var">'a</span> <span>-></span> <span class="type-var">'b</span>) <span>-></span> (<span class="type-var">'a</span>, <span class="type-var">'err</span>) <a href="index.html#type-t">t</a> <span>-></span> (<span class="type-var">'b</span>, <span class="type-var">'err</span>) <a href="index.html#type-t">t</a></code></dt><dd><p>Map on success.</p></dd></dl><dl><dt class="spec value" id="val-map_err"><a href="#val-map_err" class="anchor"></a><code><span class="keyword">val </span>map_err : (<span class="type-var">'err1</span> <span>-></span> <span class="type-var">'err2</span>) <span>-></span> (<span class="type-var">'a</span>, <span class="type-var">'err1</span>) <a href="index.html#type-t">t</a> <span>-></span> (<span class="type-var">'a</span>, <span class="type-var">'err2</span>) <a href="index.html#type-t">t</a></code></dt><dd><p>Map on the error variant.</p></dd></dl><dl><dt class="spec value" id="val-map2"><a href="#val-map2" class="anchor"></a><code><span class="keyword">val </span>map2 : (<span class="type-var">'a</span> <span>-></span> <span class="type-var">'b</span>) <span>-></span> (<span class="type-var">'err1</span> <span>-></span> <span class="type-var">'err2</span>) <span>-></span> (<span class="type-var">'a</span>, <span class="type-var">'err1</span>) <a href="index.html#type-t">t</a> <span>-></span> (<span class="type-var">'b</span>, <span class="type-var">'err2</span>) <a href="index.html#type-t">t</a></code></dt><dd><p>Like <a href="index.html#val-map"><code>map</code></a>, but also with a function that can transform the error message in case of failure.</p></dd></dl><dl><dt class="spec value" id="val-iter"><a href="#val-iter" class="anchor"></a><code><span class="keyword">val </span>iter : (<span class="type-var">'a</span> <span>-></span> unit) <span>-></span> (<span class="type-var">'a</span>, <span class="type-var">_</span>) <a href="index.html#type-t">t</a> <span>-></span> unit</code></dt><dd><p>Apply the function only in case of <code>Ok</code>.</p></dd></dl><dl><dt class="spec value" id="val-iter_err"><a href="#val-iter_err" class="anchor"></a><code><span class="keyword">val </span>iter_err : (<span class="type-var">'err</span> <span>-></span> unit) <span>-></span> (<span class="type-var">_</span>, <span class="type-var">'err</span>) <a href="index.html#type-t">t</a> <span>-></span> unit</code></dt><dd><p>Apply the function in case of <code>Error</code>.</p><dl><dt>since</dt><dd>2.4</dd></dl></dd></dl><dl><dt class="spec exception" id="exception-Get_error"><a href="#exception-Get_error" class="anchor"></a><code><span class="keyword">exception </span></code><code><span class="exception">Get_error</span></code></dt></dl><dl><dt class="spec value" id="val-get_exn"><a href="#val-get_exn" class="anchor"></a><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>-></span> <span class="type-var">'a</span></code></dt><dd><p>Extract the value <code>x</code> from <code>Ok x</code>, fails otherwise. You should be careful with this function, and favor other combinators whenever possible.</p><dl><dt>raises Get_error</dt><dd><p>if the value is an error.</p></dd></dl></dd></dl><dl><dt class="spec value" id="val-get_or"><a href="#val-get_or" class="anchor"></a><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>-></span> default:<span class="type-var">'a</span> <span>-></span> <span class="type-var">'a</span></code></dt><dd><p><code>get_or e ~default</code> returns <code>x</code> if <code>e = Ok x</code>, <code>default</code> otherwise.</p></dd></dl><dl><dt class="spec value" id="val-get_or_failwith"><a href="#val-get_or_failwith" class="anchor"></a><code><span class="keyword">val </span>get_or_failwith : (<span class="type-var">'a</span>, string) <a href="index.html#type-t">t</a> <span>-></span> <span class="type-var">'a</span></code></dt><dd><p><code>get_or_failwith e</code> returns <code>x</code> if <code>e = Ok x</code>, fails otherwise.</p><dl><dt>raises Failure</dt><dd><p>with <code>msg</code> if <code>e = Error msg</code>.</p></dd></dl><dl><dt>since</dt><dd>2.4</dd></dl></dd></dl><dl><dt class="spec value" id="val-map_or"><a href="#val-map_or" class="anchor"></a><code><span class="keyword">val </span>map_or : (<span class="type-var">'a</span> <span>-></span> <span class="type-var">'b</span>) <span>-></span> (<span class="type-var">'a</span>, <span class="type-var">'c</span>) <a href="index.html#type-t">t</a> <span>-></span> default:<span class="type-var">'b</span> <span>-></span> <span class="type-var">'b</span></code></dt><dd><p><code>map_or f e ~default</code> returns <code>f x</code> if <code>e = Ok x</code>, <code>default</code> otherwise.</p></dd></dl><dl><dt class="spec value" id="val-catch"><a href="#val-catch" class="anchor"></a><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>-></span> ok:(<span class="type-var">'a</span> <span>-></span> <span class="type-var">'b</span>) <span>-></span> err:(<span class="type-var">'err</span> <span>-></span> <span class="type-var">'b</span>) <span>-></span> <span class="type-var">'b</span></code></dt><dd><p><code>catch e ~ok ~err</code> calls either <code>ok</code> or <code>err</code> depending on the value of <code>e</code>.</p></dd></dl><dl><dt class="spec value" id="val-flat_map"><a href="#val-flat_map" class="anchor"></a><code><span class="keyword">val </span>flat_map : (<span class="type-var">'a</span> <span>-></span> (<span class="type-var">'b</span>, <span class="type-var">'err</span>) <a href="index.html#type-t">t</a>) <span>-></span> (<span class="type-var">'a</span>, <span class="type-var">'err</span>) <a href="index.html#type-t">t</a> <span>-></span> (<span class="type-var">'b</span>, <span class="type-var">'err</span>) <a href="index.html#type-t">t</a></code></dt><dt class="spec value" id="val-(>|=)"><a href="#val-(>|=)" class="anchor"></a><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>-></span> (<span class="type-var">'a</span> <span>-></span> <span class="type-var">'b</span>) <span>-></span> (<span class="type-var">'b</span>, <span class="type-var">'err</span>) <a href="index.html#type-t">t</a></code></dt><dt class="spec value" id="val-(>>=)"><a href="#val-(>>=)" class="anchor"></a><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>-></span> (<span class="type-var">'a</span> <span>-></span> (<span class="type-var">'b</span>, <span class="type-var">'err</span>) <a href="index.html#type-t">t</a>) <span>-></span> (<span class="type-var">'b</span>, <span class="type-var">'err</span>) <a href="index.html#type-t">t</a></code></dt><dd><p>Monadic composition. <code>e >>= f</code> proceeds as <code>f x</code> if <code>e</code> is <code>Ok x</code> or returns <code>e</code> if <code>e</code> is an <code>Error</code>.</p></dd></dl><dl><dt class="spec value" id="val-equal"><a href="#val-equal" class="anchor"></a><code><span class="keyword">val </span>equal : err:<span class="type-var">'err</span> <a href="index.html#type-equal">equal</a> <span>-></span> <span class="type-var">'a</span> <a href="index.html#type-equal">equal</a> <span>-></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></dt><dt class="spec value" id="val-compare"><a href="#val-compare" class="anchor"></a><code><span class="keyword">val </span>compare : err:<span class="type-var">'err</span> <a href="index.html#type-ord">ord</a> <span>-></span> <span class="type-var">'a</span> <a href="index.html#type-ord">ord</a> <span>-></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></dt><dt class="spec value" id="val-fold"><a href="#val-fold" class="anchor"></a><code><span class="keyword">val </span>fold : ok:(<span class="type-var">'a</span> <span>-></span> <span class="type-var">'b</span>) <span>-></span> error:(<span class="type-var">'err</span> <span>-></span> <span class="type-var">'b</span>) <span>-></span> (<span class="type-var">'a</span>, <span class="type-var">'err</span>) <a href="index.html#type-t">t</a> <span>-></span> <span class="type-var">'b</span></code></dt><dd><p><code>fold ~ok ~error e</code> opens <code>e</code> and, if <code>e = Ok x</code>, returns <code>ok x</code>, otherwise <code>e = Error s</code> and it returns <code>error s</code>.</p></dd></dl><dl><dt class="spec value" id="val-fold_ok"><a href="#val-fold_ok" class="anchor"></a><code><span class="keyword">val </span>fold_ok : (<span class="type-var">'a</span> <span>-></span> <span class="type-var">'b</span> <span>-></span> <span class="type-var">'a</span>) <span>-></span> <span class="type-var">'a</span> <span>-></span> (<span class="type-var">'b</span>, <span class="type-var">_</span>) <a href="index.html#type-t">t</a> <span>-></span> <span class="type-var">'a</span></code></dt><dd><p><code>fold_ok f acc r</code> will compute <code>f acc x</code> if <code>r=Ok x</code>, and return <code>acc</code> otherwise, as if the result were a mere option.</p><dl><dt>since</dt><dd>1.2</dd></dl></dd></dl><dl><dt class="spec value" id="val-is_ok"><a href="#val-is_ok" class="anchor"></a><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>-></span> bool</code></dt><dd><p>Return true if <code>Ok</code>.</p><dl><dt>since</dt><dd>1.0</dd></dl></dd></dl><dl><dt class="spec value" id="val-is_error"><a href="#val-is_error" class="anchor"></a><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>-></span> bool</code></dt><dd><p>Return true if <code>Error</code>.</p><dl><dt>since</dt><dd>1.0</dd></dl></dd></dl></section><section><header><h2 id="wrappers"><a href="#wrappers" class="anchor"></a>Wrappers</h2></header><dl><dt class="spec value" id="val-guard"><a href="#val-guard" class="anchor"></a><code><span class="keyword">val </span>guard : (unit <span>-></span> <span class="type-var">'a</span>) <span>-></span> (<span class="type-var">'a</span>, exn) <a href="index.html#type-t">t</a></code></dt><dd><p><code>guard f</code> runs <code>f ()</code> and returns its result wrapped in <code>Ok</code>. If <code>f ()</code> raises some exception <code>e</code>, then it fails with <code>Error e</code>.</p></dd></dl><dl><dt class="spec value" id="val-guard_str"><a href="#val-guard_str" class="anchor"></a><code><span class="keyword">val </span>guard_str : (unit <span>-></span> <span class="type-var">'a</span>) <span>-></span> (<span class="type-var">'a</span>, string) <a href="index.html#type-t">t</a></code></dt><dd><p>Like <a href="index.html#val-guard"><code>guard</code></a> but uses <a href="index.html#val-of_exn"><code>of_exn</code></a> to print the exception.</p></dd></dl><dl><dt class="spec value" id="val-guard_str_trace"><a href="#val-guard_str_trace" class="anchor"></a><code><span class="keyword">val </span>guard_str_trace : (unit <span>-></span> <span class="type-var">'a</span>) <span>-></span> (<span class="type-var">'a</span>, string) <a href="index.html#type-t">t</a></code></dt><dd><p>Like <a href="index.html#val-guard_str"><code>guard_str</code></a> but uses <a href="index.html#val-of_exn_trace"><code>of_exn_trace</code></a> instead of <a href="index.html#val-of_exn"><code>of_exn</code></a> so that the stack trace is printed.</p></dd></dl><dl><dt class="spec value" id="val-wrap1"><a href="#val-wrap1" class="anchor"></a><code><span class="keyword">val </span>wrap1 : (<span class="type-var">'a</span> <span>-></span> <span class="type-var">'b</span>) <span>-></span> <span class="type-var">'a</span> <span>-></span> (<span class="type-var">'b</span>, exn) <a href="index.html#type-t">t</a></code></dt><dd><p>Like <a href="index.html#val-guard"><code>guard</code></a> but gives the function one argument.</p></dd></dl><dl><dt class="spec value" id="val-wrap2"><a href="#val-wrap2" class="anchor"></a><code><span class="keyword">val </span>wrap2 : (<span class="type-var">'a</span> <span>-></span> <span class="type-var">'b</span> <span>-></span> <span class="type-var">'c</span>) <span>-></span> <span class="type-var">'a</span> <span>-></span> <span class="type-var">'b</span> <span>-></span> (<span class="type-var">'c</span>, exn) <a href="index.html#type-t">t</a></code></dt><dd><p>Like <a href="index.html#val-guard"><code>guard</code></a> but gives the function two arguments.</p></dd></dl><dl><dt class="spec value" id="val-wrap3"><a href="#val-wrap3" class="anchor"></a><code><span class="keyword">val </span>wrap3 : (<span class="type-var">'a</span> <span>-></span> <span class="type-var">'b</span> <span>-></span> <span class="type-var">'c</span> <span>-></span> <span class="type-var">'d</span>) <span>-></span> <span class="type-var">'a</span> <span>-></span> <span class="type-var">'b</span> <span>-></span> <span class="type-var">'c</span> <span>-></span> (<span class="type-var">'d</span>, exn) <a href="index.html#type-t">t</a></code></dt><dd><p>Like <a href="index.html#val-guard"><code>guard</code></a> but gives the function three arguments.</p></dd></dl></section><section><header><h2 id="applicative"><a href="#applicative" class="anchor"></a>Applicative</h2></header><dl><dt class="spec value" id="val-pure"><a href="#val-pure" class="anchor"></a><code><span class="keyword">val </span>pure : <span class="type-var">'a</span> <span>-></span> (<span class="type-var">'a</span>, <span class="type-var">'err</span>) <a href="index.html#type-t">t</a></code></dt><dd><p>Synonym of <a href="index.html#val-return"><code>return</code></a>.</p></dd></dl><dl><dt class="spec value" id="val-(<*>)"><a href="#val-(<*>)" class="anchor"></a><code><span class="keyword">val </span>(<*>) : (<span class="type-var">'a</span> <span>-></span> <span class="type-var">'b</span>, <span class="type-var">'err</span>) <a href="index.html#type-t">t</a> <span>-></span> (<span class="type-var">'a</span>, <span class="type-var">'err</span>) <a href="index.html#type-t">t</a> <span>-></span> (<span class="type-var">'b</span>, <span class="type-var">'err</span>) <a href="index.html#type-t">t</a></code></dt><dd><p><code>a <*> b</code> evaluates <code>a</code> and <code>b</code>, and, in case of success, returns <code>Ok (a b)</code>. Otherwise, it fails, and the error of <code>a</code> is chosen over the error of <code>b</code> if both fail.</p></dd></dl><dl><dt class="spec value" id="val-join"><a href="#val-join" class="anchor"></a><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>-></span> (<span class="type-var">'a</span>, <span class="type-var">'err</span>) <a href="index.html#type-t">t</a></code></dt><dd><p><code>join t</code>, in case of success, returns <code>Ok o</code> from <code>Ok (Ok o)</code>. Otherwise, it fails with <code>Error e</code> where <code>e</code> is the unwrapped error of <code>t</code>.</p></dd></dl><dl><dt class="spec value" id="val-both"><a href="#val-both" class="anchor"></a><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>-></span> (<span class="type-var">'b</span>, <span class="type-var">'err</span>) <a href="index.html#type-t">t</a> <span>-></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></dt><dd><p><code>both a b</code>, in case of success, returns <code>Ok (o, o')</code> with the ok values of <code>a</code> and <code>b</code>. Otherwise, it fails, and the error of <code>a</code> is chosen over the error of <code>b</code> if both fail.</p></dd></dl></section><section><header><h2 id="infix"><a href="#infix" class="anchor"></a>Infix</h2></header><div class="spec module" id="module-Infix"><a href="#module-Infix" class="anchor"></a><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></section><section><header><h2 id="collections"><a href="#collections" class="anchor"></a>Collections</h2></header><dl><dt class="spec value" id="val-map_l"><a href="#val-map_l" class="anchor"></a><code><span class="keyword">val </span>map_l : (<span class="type-var">'a</span> <span>-></span> (<span class="type-var">'b</span>, <span class="type-var">'err</span>) <a href="index.html#type-t">t</a>) <span>-></span> <span class="type-var">'a</span> list <span>-></span> (<span class="type-var">'b</span> list, <span class="type-var">'err</span>) <a href="index.html#type-t">t</a></code></dt><dd><p><code>map_l f [a1; ...; an]</code> applies the function <code>f</code> to <code>a1, ..., an</code> , and, in case of success for every element, returns the list of <code>Ok</code>-value. Otherwise, it fails and returns the first error encountered. Tail-recursive.</p></dd></dl><dl><dt class="spec value" id="val-fold_l"><a href="#val-fold_l" class="anchor"></a><code><span class="keyword">val </span>fold_l : (<span class="type-var">'b</span> <span>-></span> <span class="type-var">'a</span> <span>-></span> (<span class="type-var">'b</span>, <span class="type-var">'err</span>) <a href="index.html#type-t">t</a>) <span>-></span> <span class="type-var">'b</span> <span>-></span> <span class="type-var">'a</span> list <span>-></span> (<span class="type-var">'b</span>, <span class="type-var">'err</span>) <a href="index.html#type-t">t</a></code></dt><dt class="spec value" id="val-fold_seq"><a href="#val-fold_seq" class="anchor"></a><code><span class="keyword">val </span>fold_seq : (<span class="type-var">'b</span> <span>-></span> <span class="type-var">'a</span> <span>-></span> (<span class="type-var">'b</span>, <span class="type-var">'err</span>) <a href="index.html#type-t">t</a>) <span>-></span> <span class="type-var">'b</span> <span>-></span> <span class="type-var">'a</span> <a href="index.html#type-sequence">sequence</a> <span>-></span> (<span class="type-var">'b</span>, <span class="type-var">'err</span>) <a href="index.html#type-t">t</a></code></dt></dl></section><section><header><h2 id="misc"><a href="#misc" class="anchor"></a>Misc</h2></header><dl><dt class="spec value" id="val-choose"><a href="#val-choose" class="anchor"></a><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>-></span> (<span class="type-var">'a</span>, <span class="type-var">'err</span> list) <a href="index.html#type-t">t</a></code></dt><dd><p><code>choose l</code> selects a member of <code>l</code> that is a <code>Ok _</code> value, or returns <code>Error l</code> otherwise, where <code>l</code> is the list of errors.</p></dd></dl><dl><dt class="spec value" id="val-retry"><a href="#val-retry" class="anchor"></a><code><span class="keyword">val </span>retry : int <span>-></span> (unit <span>-></span> (<span class="type-var">'a</span>, <span class="type-var">'err</span>) <a href="index.html#type-t">t</a>) <span>-></span> (<span class="type-var">'a</span>, <span class="type-var">'err</span> list) <a href="index.html#type-t">t</a></code></dt><dd><p><code>retry n f</code> calls <code>f</code> at most <code>n</code> times, returning the first result of <code>f ()</code> that doesn't fail. If <code>f</code> fails <code>n</code> times, <code>retry n f</code> fails with the list of successive errors.</p></dd></dl><dl><dt class="spec module-type" id="module-type-MONAD"><a href="#module-type-MONAD" class="anchor"></a><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></dt><dd></dd></dl><div class="spec module" id="module-Traverse"><a href="#module-Traverse" class="anchor"></a><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>-></span> <span class="keyword">sig</span> ... <span class="keyword">end</span></code></div></section><section><header><h2 id="conversions"><a href="#conversions" class="anchor"></a>Conversions</h2></header><dl><dt class="spec value" id="val-to_opt"><a href="#val-to_opt" class="anchor"></a><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>-></span> <span class="type-var">'a</span> option</code></dt><dd><p>Convert a result to an option.</p></dd></dl><dl><dt class="spec value" id="val-of_opt"><a href="#val-of_opt" class="anchor"></a><code><span class="keyword">val </span>of_opt : <span class="type-var">'a</span> option <span>-></span> (<span class="type-var">'a</span>, string) <a href="index.html#type-t">t</a></code></dt><dd><p>Convert an option to a result.</p></dd></dl><dl><dt class="spec value" id="val-to_seq"><a href="#val-to_seq" class="anchor"></a><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>-></span> <span class="type-var">'a</span> <a href="index.html#type-sequence">sequence</a></code></dt></dl><dl><dt class="spec type" id="type-error"><a href="#type-error" class="anchor"></a><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></dt></dl><dl><dt class="spec value" id="val-of_err"><a href="#val-of_err" class="anchor"></a><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>-></span> (<span class="type-var">'a</span>, <span class="type-var">'b</span>) <a href="index.html#type-t">t</a></code></dt><dd><dl><dt>since</dt><dd>0.17</dd></dl></dd></dl><dl><dt class="spec value" id="val-to_err"><a href="#val-to_err" class="anchor"></a><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>-></span> (<span class="type-var">'a</span>, <span class="type-var">'b</span>) <a href="index.html#type-error">error</a></code></dt><dd><dl><dt>since</dt><dd>0.17</dd></dl></dd></dl></section><section><header><h2 id="io"><a href="#io" class="anchor"></a>IO</h2></header><dl><dt class="spec value" id="val-pp"><a href="#val-pp" class="anchor"></a><code><span class="keyword">val </span>pp : <span class="type-var">'a</span> <a href="index.html#type-printer">printer</a> <span>-></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></dt><dt class="spec value" id="val-pp'"><a href="#val-pp'" class="anchor"></a><code><span class="keyword">val </span>pp' : <span class="type-var">'a</span> <a href="index.html#type-printer">printer</a> <span>-></span> <span class="type-var">'e</span> <a href="index.html#type-printer">printer</a> <span>-></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></dt><dd><p>Printer that is generic on the error type.</p></dd></dl></section></div></body></html> |