moonpool/lwt/Lwt_sequence/index.html
2025-09-26 19:08:06 +00:00

2 lines
18 KiB
HTML
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. 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>Lwt_sequence (lwt.Lwt_sequence)</title><meta charset="utf-8"/><link rel="stylesheet" href="../../_odoc-theme/odoc.css"/><meta name="generator" content="odoc 3.1.0"/><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">Index</a> &#x00BB; <a href="../index.html">lwt</a> &#x00BB; Lwt_sequence</nav><header class="odoc-preamble"><h1>Module <code><span>Lwt_sequence</span></code></h1><p>Mutable sequence of elements (deprecated)</p></header><div class="odoc-tocs"><nav class="odoc-toc odoc-local-toc"><ul><li><a href="#operation-on-nodes">Operation on nodes</a></li><li><a href="#operations-on-sequence">Operations on sequence</a></li><li><a href="#sequence-iterators">Sequence iterators</a></li></ul></nav></div><div class="odoc-content"><p>A sequence is an object holding a list of elements which support the following operations:</p><ul><li>adding an element to the left or the right in time and space O(1)</li><li>taking an element from the left or the right in time and space O(1)</li><li>removing a previously added element from a sequence in time and space O(1)</li><li>removing an element while the sequence is being transversed.</li></ul><ul class="at-tags"><li class="deprecated"><span class="at-tag">deprecated</span> <p>This module should be an internal implementation detail of Lwt, and may be removed from the API at some point in the future. Use package <a href="https://github.com/mirage/lwt-dllist"><code>lwt-dllist</code></a> instead.</p></li></ul><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 t</span></span></code></div><div class="spec-doc"><p>Type of a sequence holding values of type <code>'a</code></p></div></div><div class="odoc-spec"><div class="spec type anchored" id="type-node"><a href="#type-node" class="anchor"></a><code><span><span class="keyword">type</span> <span>'a node</span></span></code></div><div class="spec-doc"><p>Type of a node holding one value of type <code>'a</code> in a sequence</p></div></div><h3 id="operation-on-nodes"><a href="#operation-on-nodes" class="anchor"></a>Operation on nodes</h3><div class="odoc-spec"><div class="spec value anchored" id="val-get"><a href="#val-get" class="anchor"></a><code><span><span class="keyword">val</span> get : <span><span><span class="type-var">'a</span> <a href="#type-node">node</a></span> <span class="arrow">&#45;&gt;</span></span> <span class="type-var">'a</span></span></code></div><div class="spec-doc"><p>Returns the contents of a node</p></div></div><div class="odoc-spec"><div class="spec value anchored" id="val-set"><a href="#val-set" class="anchor"></a><code><span><span class="keyword">val</span> set : <span><span><span class="type-var">'a</span> <a href="#type-node">node</a></span> <span class="arrow">&#45;&gt;</span></span> <span><span class="type-var">'a</span> <span class="arrow">&#45;&gt;</span></span> unit</span></code></div><div class="spec-doc"><p>Change the contents of a node</p></div></div><div class="odoc-spec"><div class="spec value anchored" id="val-remove"><a href="#val-remove" class="anchor"></a><code><span><span class="keyword">val</span> remove : <span><span><span class="type-var">'a</span> <a href="#type-node">node</a></span> <span class="arrow">&#45;&gt;</span></span> unit</span></code></div><div class="spec-doc"><p>Removes a node from the sequence it is part of. It does nothing if the node has already been removed.</p></div></div><h3 id="operations-on-sequence"><a href="#operations-on-sequence" class="anchor"></a>Operations on sequence</h3><div class="odoc-spec"><div class="spec value anchored" id="val-create"><a href="#val-create" class="anchor"></a><code><span><span class="keyword">val</span> create : <span>unit <span class="arrow">&#45;&gt;</span></span> <span><span class="type-var">'a</span> <a href="#type-t">t</a></span></span></code></div><div class="spec-doc"><p><code>create ()</code> creates a new empty sequence</p></div></div><div class="odoc-spec"><div class="spec value anchored" id="val-clear"><a href="#val-clear" class="anchor"></a><code><span><span class="keyword">val</span> clear : <span><span><span class="type-var">'a</span> <a href="#type-t">t</a></span> <span class="arrow">&#45;&gt;</span></span> unit</span></code></div><div class="spec-doc"><p>Removes all nodes from the given sequence. The nodes are not actually mutated to note their removal. Only the sequence's pointers are updated.</p></div></div><div class="odoc-spec"><div class="spec value anchored" id="val-is_empty"><a href="#val-is_empty" class="anchor"></a><code><span><span class="keyword">val</span> is_empty : <span><span><span class="type-var">'a</span> <a href="#type-t">t</a></span> <span class="arrow">&#45;&gt;</span></span> bool</span></code></div><div class="spec-doc"><p>Returns <code>true</code> iff the given sequence is empty</p></div></div><div class="odoc-spec"><div class="spec value anchored" id="val-length"><a href="#val-length" class="anchor"></a><code><span><span class="keyword">val</span> length : <span><span><span class="type-var">'a</span> <a href="#type-t">t</a></span> <span class="arrow">&#45;&gt;</span></span> int</span></code></div><div class="spec-doc"><p>Returns the number of elements in the given sequence. This is a O(n) operation where <code>n</code> is the number of elements in the sequence.</p></div></div><div class="odoc-spec"><div class="spec value anchored" id="val-add_l"><a href="#val-add_l" class="anchor"></a><code><span><span class="keyword">val</span> add_l : <span><span class="type-var">'a</span> <span class="arrow">&#45;&gt;</span></span> <span><span><span class="type-var">'a</span> <a href="#type-t">t</a></span> <span class="arrow">&#45;&gt;</span></span> <span><span class="type-var">'a</span> <a href="#type-node">node</a></span></span></code></div><div class="spec-doc"><p><code>add_l x s</code> adds <code>x</code> to the left of the sequence <code>s</code></p></div></div><div class="odoc-spec"><div class="spec value anchored" id="val-add_r"><a href="#val-add_r" class="anchor"></a><code><span><span class="keyword">val</span> add_r : <span><span class="type-var">'a</span> <span class="arrow">&#45;&gt;</span></span> <span><span><span class="type-var">'a</span> <a href="#type-t">t</a></span> <span class="arrow">&#45;&gt;</span></span> <span><span class="type-var">'a</span> <a href="#type-node">node</a></span></span></code></div><div class="spec-doc"><p><code>add_r x s</code> adds <code>x</code> to the right of the sequence <code>s</code></p></div></div><div class="odoc-spec"><div class="spec exception anchored" id="exception-Empty"><a href="#exception-Empty" class="anchor"></a><code><span><span class="keyword">exception</span> </span><span><span class="exception">Empty</span></span></code></div><div class="spec-doc"><p>Exception raised by <code>take_l</code> and <code>take_r</code> and when the sequence is empty</p></div></div><div class="odoc-spec"><div class="spec value anchored" id="val-take_l"><a href="#val-take_l" class="anchor"></a><code><span><span class="keyword">val</span> take_l : <span><span><span class="type-var">'a</span> <a href="#type-t">t</a></span> <span class="arrow">&#45;&gt;</span></span> <span class="type-var">'a</span></span></code></div><div class="spec-doc"><p><code>take_l x s</code> remove and returns the leftmost element of <code>s</code></p><ul class="at-tags"><li class="raises"><span class="at-tag">raises</span> <a href="#exception-Empty"><code>Empty</code></a> <p>if the sequence is empty</p></li></ul></div></div><div class="odoc-spec"><div class="spec value anchored" id="val-take_r"><a href="#val-take_r" class="anchor"></a><code><span><span class="keyword">val</span> take_r : <span><span><span class="type-var">'a</span> <a href="#type-t">t</a></span> <span class="arrow">&#45;&gt;</span></span> <span class="type-var">'a</span></span></code></div><div class="spec-doc"><p><code>take_r x s</code> remove and returns the rightmost element of <code>s</code></p><ul class="at-tags"><li class="raises"><span class="at-tag">raises</span> <a href="#exception-Empty"><code>Empty</code></a> <p>if the sequence is empty</p></li></ul></div></div><div class="odoc-spec"><div class="spec value anchored" id="val-take_opt_l"><a href="#val-take_opt_l" class="anchor"></a><code><span><span class="keyword">val</span> take_opt_l : <span><span><span class="type-var">'a</span> <a href="#type-t">t</a></span> <span class="arrow">&#45;&gt;</span></span> <span><span class="type-var">'a</span> option</span></span></code></div><div class="spec-doc"><p><code>take_opt_l x s</code> remove and returns <code>Some x</code> where <code>x</code> is the leftmost element of <code>s</code> or <code>None</code> if <code>s</code> is empty</p></div></div><div class="odoc-spec"><div class="spec value anchored" id="val-take_opt_r"><a href="#val-take_opt_r" class="anchor"></a><code><span><span class="keyword">val</span> take_opt_r : <span><span><span class="type-var">'a</span> <a href="#type-t">t</a></span> <span class="arrow">&#45;&gt;</span></span> <span><span class="type-var">'a</span> option</span></span></code></div><div class="spec-doc"><p><code>take_opt_r x s</code> remove and returns <code>Some x</code> where <code>x</code> is the rightmost element of <code>s</code> or <code>None</code> if <code>s</code> is empty</p></div></div><div class="odoc-spec"><div class="spec value anchored" id="val-transfer_l"><a href="#val-transfer_l" class="anchor"></a><code><span><span class="keyword">val</span> transfer_l : <span><span><span class="type-var">'a</span> <a href="#type-t">t</a></span> <span class="arrow">&#45;&gt;</span></span> <span><span><span class="type-var">'a</span> <a href="#type-t">t</a></span> <span class="arrow">&#45;&gt;</span></span> unit</span></code></div><div class="spec-doc"><p><code>transfer_l s1 s2</code> removes all elements of <code>s1</code> and add them at the left of <code>s2</code>. This operation runs in constant time and space.</p></div></div><div class="odoc-spec"><div class="spec value anchored" id="val-transfer_r"><a href="#val-transfer_r" class="anchor"></a><code><span><span class="keyword">val</span> transfer_r : <span><span><span class="type-var">'a</span> <a href="#type-t">t</a></span> <span class="arrow">&#45;&gt;</span></span> <span><span><span class="type-var">'a</span> <a href="#type-t">t</a></span> <span class="arrow">&#45;&gt;</span></span> unit</span></code></div><div class="spec-doc"><p><code>transfer_r s1 s2</code> removes all elements of <code>s1</code> and add them at the right of <code>s2</code>. This operation runs in constant time and space.</p></div></div><h3 id="sequence-iterators"><a href="#sequence-iterators" class="anchor"></a>Sequence iterators</h3><p>Note: it is OK to remove a node while traversing a sequence</p><div class="odoc-spec"><div class="spec value anchored" id="val-iter_l"><a href="#val-iter_l" class="anchor"></a><code><span><span class="keyword">val</span> iter_l : <span><span>(<span><span class="type-var">'a</span> <span class="arrow">&#45;&gt;</span></span> unit)</span> <span class="arrow">&#45;&gt;</span></span> <span><span><span class="type-var">'a</span> <a href="#type-t">t</a></span> <span class="arrow">&#45;&gt;</span></span> unit</span></code></div><div class="spec-doc"><p><code>iter_l f s</code> applies <code>f</code> on all elements of <code>s</code> starting from the left</p></div></div><div class="odoc-spec"><div class="spec value anchored" id="val-iter_r"><a href="#val-iter_r" class="anchor"></a><code><span><span class="keyword">val</span> iter_r : <span><span>(<span><span class="type-var">'a</span> <span class="arrow">&#45;&gt;</span></span> unit)</span> <span class="arrow">&#45;&gt;</span></span> <span><span><span class="type-var">'a</span> <a href="#type-t">t</a></span> <span class="arrow">&#45;&gt;</span></span> unit</span></code></div><div class="spec-doc"><p><code>iter_r f s</code> applies <code>f</code> on all elements of <code>s</code> starting from the right</p></div></div><div class="odoc-spec"><div class="spec value anchored" id="val-iter_node_l"><a href="#val-iter_node_l" class="anchor"></a><code><span><span class="keyword">val</span> iter_node_l : <span><span>(<span><span><span class="type-var">'a</span> <a href="#type-node">node</a></span> <span class="arrow">&#45;&gt;</span></span> unit)</span> <span class="arrow">&#45;&gt;</span></span> <span><span><span class="type-var">'a</span> <a href="#type-t">t</a></span> <span class="arrow">&#45;&gt;</span></span> unit</span></code></div><div class="spec-doc"><p><code>iter_node_l f s</code> applies <code>f</code> on all nodes of <code>s</code> starting from the left</p></div></div><div class="odoc-spec"><div class="spec value anchored" id="val-iter_node_r"><a href="#val-iter_node_r" class="anchor"></a><code><span><span class="keyword">val</span> iter_node_r : <span><span>(<span><span><span class="type-var">'a</span> <a href="#type-node">node</a></span> <span class="arrow">&#45;&gt;</span></span> unit)</span> <span class="arrow">&#45;&gt;</span></span> <span><span><span class="type-var">'a</span> <a href="#type-t">t</a></span> <span class="arrow">&#45;&gt;</span></span> unit</span></code></div><div class="spec-doc"><p><code>iter_node_r f s</code> applies <code>f</code> on all nodes of <code>s</code> starting from the right</p></div></div><div class="odoc-spec"><div class="spec value anchored" id="val-fold_l"><a href="#val-fold_l" class="anchor"></a><code><span><span class="keyword">val</span> fold_l : <span><span>(<span><span class="type-var">'a</span> <span class="arrow">&#45;&gt;</span></span> <span><span class="type-var">'b</span> <span class="arrow">&#45;&gt;</span></span> <span class="type-var">'b</span>)</span> <span class="arrow">&#45;&gt;</span></span> <span><span><span class="type-var">'a</span> <a href="#type-t">t</a></span> <span class="arrow">&#45;&gt;</span></span> <span><span class="type-var">'b</span> <span class="arrow">&#45;&gt;</span></span> <span class="type-var">'b</span></span></code></div><div class="spec-doc"><p><code>fold_l f s</code> is:</p><pre class="language-ocaml"><code> fold_l f s x = f en (... (f e2 (f e1 x)))</code></pre><p>where <code>e1</code>, <code>e2</code>, ..., <code>en</code> are the elements of <code>s</code></p></div></div><div class="odoc-spec"><div class="spec value anchored" id="val-fold_r"><a href="#val-fold_r" class="anchor"></a><code><span><span class="keyword">val</span> fold_r : <span><span>(<span><span class="type-var">'a</span> <span class="arrow">&#45;&gt;</span></span> <span><span class="type-var">'b</span> <span class="arrow">&#45;&gt;</span></span> <span class="type-var">'b</span>)</span> <span class="arrow">&#45;&gt;</span></span> <span><span><span class="type-var">'a</span> <a href="#type-t">t</a></span> <span class="arrow">&#45;&gt;</span></span> <span><span class="type-var">'b</span> <span class="arrow">&#45;&gt;</span></span> <span class="type-var">'b</span></span></code></div><div class="spec-doc"><p><code>fold_r f s</code> is:</p><pre class="language-ocaml"><code> fold_r f s x = f e1 (f e2 (... (f en x)))</code></pre><p>where <code>e1</code>, <code>e2</code>, ..., <code>en</code> are the elements of <code>s</code></p></div></div><div class="odoc-spec"><div class="spec value anchored" id="val-find_node_opt_l"><a href="#val-find_node_opt_l" class="anchor"></a><code><span><span class="keyword">val</span> find_node_opt_l : <span><span>(<span><span class="type-var">'a</span> <span class="arrow">&#45;&gt;</span></span> bool)</span> <span class="arrow">&#45;&gt;</span></span> <span><span><span class="type-var">'a</span> <a href="#type-t">t</a></span> <span class="arrow">&#45;&gt;</span></span> <span><span><span class="type-var">'a</span> <a href="#type-node">node</a></span> option</span></span></code></div><div class="spec-doc"><p><code>find_node_opt_l f s</code> returns <code>Some x</code>, where <code>x</code> is the first node of <code>s</code> starting from the left that satisfies <code>f</code> or <code>None</code> if none exists.</p></div></div><div class="odoc-spec"><div class="spec value anchored" id="val-find_node_opt_r"><a href="#val-find_node_opt_r" class="anchor"></a><code><span><span class="keyword">val</span> find_node_opt_r : <span><span>(<span><span class="type-var">'a</span> <span class="arrow">&#45;&gt;</span></span> bool)</span> <span class="arrow">&#45;&gt;</span></span> <span><span><span class="type-var">'a</span> <a href="#type-t">t</a></span> <span class="arrow">&#45;&gt;</span></span> <span><span><span class="type-var">'a</span> <a href="#type-node">node</a></span> option</span></span></code></div><div class="spec-doc"><p><code>find_node_opt_r f s</code> returns <code>Some x</code>, where <code>x</code> is the first node of <code>s</code> starting from the right that satisfies <code>f</code> or <code>None</code> if none exists.</p></div></div><div class="odoc-spec"><div class="spec value anchored" id="val-find_node_l"><a href="#val-find_node_l" class="anchor"></a><code><span><span class="keyword">val</span> find_node_l : <span><span>(<span><span class="type-var">'a</span> <span class="arrow">&#45;&gt;</span></span> bool)</span> <span class="arrow">&#45;&gt;</span></span> <span><span><span class="type-var">'a</span> <a href="#type-t">t</a></span> <span class="arrow">&#45;&gt;</span></span> <span><span class="type-var">'a</span> <a href="#type-node">node</a></span></span></code></div><div class="spec-doc"><p><code>find_node_l f s</code> returns the first node of <code>s</code> starting from the left that satisfies <code>f</code> or raises <code>Not_found</code> if none exists.</p></div></div><div class="odoc-spec"><div class="spec value anchored" id="val-find_node_r"><a href="#val-find_node_r" class="anchor"></a><code><span><span class="keyword">val</span> find_node_r : <span><span>(<span><span class="type-var">'a</span> <span class="arrow">&#45;&gt;</span></span> bool)</span> <span class="arrow">&#45;&gt;</span></span> <span><span><span class="type-var">'a</span> <a href="#type-t">t</a></span> <span class="arrow">&#45;&gt;</span></span> <span><span class="type-var">'a</span> <a href="#type-node">node</a></span></span></code></div><div class="spec-doc"><p><code>find_node_r f s</code> returns the first node of <code>s</code> starting from the right that satisfies <code>f</code> or raises <code>Not_found</code> if none exists.</p></div></div></div></body></html>