mirror of
https://github.com/c-cube/moonpool.git
synced 2025-12-17 08:06:43 -05:00
17 lines
No EOL
13 KiB
HTML
17 lines
No EOL
13 KiB
HTML
<!DOCTYPE html>
|
||
<html xmlns="http://www.w3.org/1999/xhtml"><head><title>Either (ocaml.Stdlib.Either)</title><link rel="stylesheet" href="../../../_odoc-theme/odoc.css"/><meta charset="utf-8"/><meta name="generator" content="odoc 2.2.1"/><meta name="viewport" content="width=device-width,initial-scale=1.0"/><script src="../../../highlight.pack.js"></script><script>hljs.initHighlightingOnLoad();</script></head><body class="odoc"><nav class="odoc-nav"><a href="../index.html">Up</a> – <a href="../../index.html">ocaml</a> » <a href="../index.html">Stdlib</a> » Either</nav><header class="odoc-preamble"><h1>Module <code><span>Stdlib.Either</span></code></h1><p>Either type.</p><p>Either is the simplest and most generic sum/variant type: a value of <code>('a, 'b) Either.t</code> is either a <code>Left (v : 'a)</code> or a <code>Right (v : 'b)</code>.</p><p>It is a natural choice in the API of generic functions where values could fall in two different cases, possibly at different types, without assigning a specific meaning to what each case should be.</p><p>For example:</p><pre class="language-ocaml"><code>List.partition_map:
|
||
('a -> ('b, 'c) Either.t) -> 'a list -> 'b list * 'c list</code></pre><p>If you are looking for a parametrized type where one alternative means success and the other means failure, you should use the more specific type <a href="../Result/index.html#type-t"><code>Result.t</code></a>.</p><ul class="at-tags"><li class="since"><span class="at-tag">since</span> 4.12</li></ul></header><div class="odoc-content"><div class="odoc-spec"><div class="spec type anchored" id="type-t"><a href="#type-t" class="anchor"></a><code><span><span class="keyword">type</span> <span>('a, 'b) t</span></span><span> = </span></code><ol><li id="type-t.Left" class="def variant constructor anchored"><a href="#type-t.Left" class="anchor"></a><code><span>| </span><span><span class="constructor">Left</span> <span class="keyword">of</span> <span class="type-var">'a</span></span></code></li><li id="type-t.Right" class="def variant constructor anchored"><a href="#type-t.Right" class="anchor"></a><code><span>| </span><span><span class="constructor">Right</span> <span class="keyword">of</span> <span class="type-var">'b</span></span></code></li></ol></div><div class="spec-doc"><p>A value of <code>('a, 'b) Either.t</code> contains either a value of <code>'a</code> or a value of <code>'b</code></p></div></div><div class="odoc-spec"><div class="spec value anchored" id="val-left"><a href="#val-left" class="anchor"></a><code><span><span class="keyword">val</span> left : <span><span class="type-var">'a</span> <span class="arrow">-></span></span> <span><span>(<span class="type-var">'a</span>, <span class="type-var">'b</span>)</span> <a href="#type-t">t</a></span></span></code></div><div class="spec-doc"><p><code>left v</code> is <code>Left v</code>.</p></div></div><div class="odoc-spec"><div class="spec value anchored" id="val-right"><a href="#val-right" class="anchor"></a><code><span><span class="keyword">val</span> right : <span><span class="type-var">'b</span> <span class="arrow">-></span></span> <span><span>(<span class="type-var">'a</span>, <span class="type-var">'b</span>)</span> <a href="#type-t">t</a></span></span></code></div><div class="spec-doc"><p><code>right v</code> is <code>Right v</code>.</p></div></div><div class="odoc-spec"><div class="spec value anchored" id="val-is_left"><a href="#val-is_left" class="anchor"></a><code><span><span class="keyword">val</span> is_left : <span><span><span>(<span class="type-var">'a</span>, <span class="type-var">'b</span>)</span> <a href="#type-t">t</a></span> <span class="arrow">-></span></span> bool</span></code></div><div class="spec-doc"><p><code>is_left (Left v)</code> is <code>true</code>, <code>is_left (Right v)</code> is <code>false</code>.</p></div></div><div class="odoc-spec"><div class="spec value anchored" id="val-is_right"><a href="#val-is_right" class="anchor"></a><code><span><span class="keyword">val</span> is_right : <span><span><span>(<span class="type-var">'a</span>, <span class="type-var">'b</span>)</span> <a href="#type-t">t</a></span> <span class="arrow">-></span></span> bool</span></code></div><div class="spec-doc"><p><code>is_right (Left v)</code> is <code>false</code>, <code>is_right (Right v)</code> is <code>true</code>.</p></div></div><div class="odoc-spec"><div class="spec value anchored" id="val-find_left"><a href="#val-find_left" class="anchor"></a><code><span><span class="keyword">val</span> find_left : <span><span><span>(<span class="type-var">'a</span>, <span class="type-var">'b</span>)</span> <a href="#type-t">t</a></span> <span class="arrow">-></span></span> <span><span class="type-var">'a</span> option</span></span></code></div><div class="spec-doc"><p><code>find_left (Left v)</code> is <code>Some v</code>, <code>find_left (Right _)</code> is <code>None</code></p></div></div><div class="odoc-spec"><div class="spec value anchored" id="val-find_right"><a href="#val-find_right" class="anchor"></a><code><span><span class="keyword">val</span> find_right : <span><span><span>(<span class="type-var">'a</span>, <span class="type-var">'b</span>)</span> <a href="#type-t">t</a></span> <span class="arrow">-></span></span> <span><span class="type-var">'b</span> option</span></span></code></div><div class="spec-doc"><p><code>find_right (Right v)</code> is <code>Some v</code>, <code>find_right (Left _)</code> is <code>None</code></p></div></div><div class="odoc-spec"><div class="spec value anchored" id="val-map_left"><a href="#val-map_left" class="anchor"></a><code><span><span class="keyword">val</span> map_left : <span><span>(<span><span class="type-var">'a1</span> <span class="arrow">-></span></span> <span class="type-var">'a2</span>)</span> <span class="arrow">-></span></span> <span><span><span>(<span class="type-var">'a1</span>, <span class="type-var">'b</span>)</span> <a href="#type-t">t</a></span> <span class="arrow">-></span></span> <span><span>(<span class="type-var">'a2</span>, <span class="type-var">'b</span>)</span> <a href="#type-t">t</a></span></span></code></div><div class="spec-doc"><p><code>map_left f e</code> is <code>Left (f v)</code> if <code>e</code> is <code>Left v</code> and <code>e</code> if <code>e</code> is <code>Right _</code>.</p></div></div><div class="odoc-spec"><div class="spec value anchored" id="val-map_right"><a href="#val-map_right" class="anchor"></a><code><span><span class="keyword">val</span> map_right : <span><span>(<span><span class="type-var">'b1</span> <span class="arrow">-></span></span> <span class="type-var">'b2</span>)</span> <span class="arrow">-></span></span> <span><span><span>(<span class="type-var">'a</span>, <span class="type-var">'b1</span>)</span> <a href="#type-t">t</a></span> <span class="arrow">-></span></span> <span><span>(<span class="type-var">'a</span>, <span class="type-var">'b2</span>)</span> <a href="#type-t">t</a></span></span></code></div><div class="spec-doc"><p><code>map_right f e</code> is <code>Right (f v)</code> if <code>e</code> is <code>Right v</code> and <code>e</code> if <code>e</code> is <code>Left _</code>.</p></div></div><div class="odoc-spec"><div class="spec value anchored" id="val-map"><a href="#val-map" class="anchor"></a><code><span><span class="keyword">val</span> map :
|
||
<span>left:<span>(<span><span class="type-var">'a1</span> <span class="arrow">-></span></span> <span class="type-var">'a2</span>)</span> <span class="arrow">-></span></span>
|
||
<span>right:<span>(<span><span class="type-var">'b1</span> <span class="arrow">-></span></span> <span class="type-var">'b2</span>)</span> <span class="arrow">-></span></span>
|
||
<span><span><span>(<span class="type-var">'a1</span>, <span class="type-var">'b1</span>)</span> <a href="#type-t">t</a></span> <span class="arrow">-></span></span>
|
||
<span><span>(<span class="type-var">'a2</span>, <span class="type-var">'b2</span>)</span> <a href="#type-t">t</a></span></span></code></div><div class="spec-doc"><p><code>map ~left ~right (Left v)</code> is <code>Left (left v)</code>, <code>map ~left ~right (Right v)</code> is <code>Right (right v)</code>.</p></div></div><div class="odoc-spec"><div class="spec value anchored" id="val-fold"><a href="#val-fold" class="anchor"></a><code><span><span class="keyword">val</span> fold : <span>left:<span>(<span><span class="type-var">'a</span> <span class="arrow">-></span></span> <span class="type-var">'c</span>)</span> <span class="arrow">-></span></span> <span>right:<span>(<span><span class="type-var">'b</span> <span class="arrow">-></span></span> <span class="type-var">'c</span>)</span> <span class="arrow">-></span></span> <span><span><span>(<span class="type-var">'a</span>, <span class="type-var">'b</span>)</span> <a href="#type-t">t</a></span> <span class="arrow">-></span></span> <span class="type-var">'c</span></span></code></div><div class="spec-doc"><p><code>fold ~left ~right (Left v)</code> is <code>left v</code>, and <code>fold ~left ~right (Right v)</code> is <code>right v</code>.</p></div></div><div class="odoc-spec"><div class="spec value anchored" id="val-iter"><a href="#val-iter" class="anchor"></a><code><span><span class="keyword">val</span> iter : <span>left:<span>(<span><span class="type-var">'a</span> <span class="arrow">-></span></span> unit)</span> <span class="arrow">-></span></span> <span>right:<span>(<span><span class="type-var">'b</span> <span class="arrow">-></span></span> unit)</span> <span class="arrow">-></span></span> <span><span><span>(<span class="type-var">'a</span>, <span class="type-var">'b</span>)</span> <a href="#type-t">t</a></span> <span class="arrow">-></span></span> unit</span></code></div><div class="spec-doc"><p><code>iter ~left ~right (Left v)</code> is <code>left v</code>, and <code>iter ~left ~right (Right v)</code> is <code>right v</code>.</p></div></div><div class="odoc-spec"><div class="spec value anchored" id="val-for_all"><a href="#val-for_all" class="anchor"></a><code><span><span class="keyword">val</span> for_all : <span>left:<span>(<span><span class="type-var">'a</span> <span class="arrow">-></span></span> bool)</span> <span class="arrow">-></span></span> <span>right:<span>(<span><span class="type-var">'b</span> <span class="arrow">-></span></span> bool)</span> <span class="arrow">-></span></span> <span><span><span>(<span class="type-var">'a</span>, <span class="type-var">'b</span>)</span> <a href="#type-t">t</a></span> <span class="arrow">-></span></span> bool</span></code></div><div class="spec-doc"><p><code>for_all ~left ~right (Left v)</code> is <code>left v</code>, and <code>for_all ~left ~right (Right v)</code> is <code>right v</code>.</p></div></div><div class="odoc-spec"><div class="spec value anchored" id="val-equal"><a href="#val-equal" class="anchor"></a><code><span><span class="keyword">val</span> equal :
|
||
<span>left:<span>(<span><span class="type-var">'a</span> <span class="arrow">-></span></span> <span><span class="type-var">'a</span> <span class="arrow">-></span></span> bool)</span> <span class="arrow">-></span></span>
|
||
<span>right:<span>(<span><span class="type-var">'b</span> <span class="arrow">-></span></span> <span><span class="type-var">'b</span> <span class="arrow">-></span></span> bool)</span> <span class="arrow">-></span></span>
|
||
<span><span><span>(<span class="type-var">'a</span>, <span class="type-var">'b</span>)</span> <a href="#type-t">t</a></span> <span class="arrow">-></span></span>
|
||
<span><span><span>(<span class="type-var">'a</span>, <span class="type-var">'b</span>)</span> <a href="#type-t">t</a></span> <span class="arrow">-></span></span>
|
||
bool</span></code></div><div class="spec-doc"><p><code>equal ~left ~right e0 e1</code> tests equality of <code>e0</code> and <code>e1</code> using <code>left</code> and <code>right</code> to respectively compare values wrapped by <code>Left _</code> and <code>Right _</code>.</p></div></div><div class="odoc-spec"><div class="spec value anchored" id="val-compare"><a href="#val-compare" class="anchor"></a><code><span><span class="keyword">val</span> compare :
|
||
<span>left:<span>(<span><span class="type-var">'a</span> <span class="arrow">-></span></span> <span><span class="type-var">'a</span> <span class="arrow">-></span></span> int)</span> <span class="arrow">-></span></span>
|
||
<span>right:<span>(<span><span class="type-var">'b</span> <span class="arrow">-></span></span> <span><span class="type-var">'b</span> <span class="arrow">-></span></span> int)</span> <span class="arrow">-></span></span>
|
||
<span><span><span>(<span class="type-var">'a</span>, <span class="type-var">'b</span>)</span> <a href="#type-t">t</a></span> <span class="arrow">-></span></span>
|
||
<span><span><span>(<span class="type-var">'a</span>, <span class="type-var">'b</span>)</span> <a href="#type-t">t</a></span> <span class="arrow">-></span></span>
|
||
int</span></code></div><div class="spec-doc"><p><code>compare ~left ~right e0 e1</code> totally orders <code>e0</code> and <code>e1</code> using <code>left</code> and <code>right</code> to respectively compare values wrapped by <code>Left _ </code> and <code>Right _</code>. <code>Left _</code> values are smaller than <code>Right _</code> values.</p></div></div></div></body></html> |