ocaml-containers/3.5/containers/CCFun/index.html
2021-08-04 16:53:20 -04:00

4 lines
No EOL
14 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>CCFun (containers.CCFun)</title><link rel="stylesheet" href="../../odoc.css"/><meta charset="utf-8"/><meta name="generator" content="odoc 1.5.3"/><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> &#x00BB; CCFun</nav><h1>Module <code>CCFun</code></h1><h2 id="basic-functions"><a href="#basic-functions" class="anchor"></a>Basic Functions</h2><nav class="toc"><ul><li><a href="#infix">Infix</a></li><li><a href="#monad">Monad</a></li></ul></nav></header><div><div class="spec include"><div class="doc"><details open="open"><summary><span class="def"><code><span class="keyword">include</span> <span class="keyword">module</span> <span class="keyword">type</span> <span class="keyword">of</span> <a href="../CCShimsFun_/index.html">CCShimsFun_</a></code></span></summary><div><div class="spec include"><div class="doc"><details open="open"><summary><span class="def"><code><span class="keyword">include</span> <span class="keyword">module</span> <span class="keyword">type</span> <span class="keyword">of</span> Stdlib.Fun</code></span></summary><dl><dt class="spec external" id="val-id"><a href="#val-id" class="anchor"></a><code><span class="keyword">val</span> id : <span class="type-var">'a</span> <span>&#45;&gt;</span> <span class="type-var">'a</span></code></dt></dl><dl><dt class="spec value" id="val-const"><a href="#val-const" class="anchor"></a><code><span class="keyword">val</span> const : <span class="type-var">'a</span> <span>&#45;&gt;</span> <span class="type-var">'b</span> <span>&#45;&gt;</span> <span class="type-var">'a</span></code></dt><dt class="spec value" id="val-flip"><a href="#val-flip" class="anchor"></a><code><span class="keyword">val</span> flip : <span>(<span class="type-var">'a</span> <span>&#45;&gt;</span> <span class="type-var">'b</span> <span>&#45;&gt;</span> <span class="type-var">'c</span>)</span> <span>&#45;&gt;</span> <span class="type-var">'b</span> <span>&#45;&gt;</span> <span class="type-var">'a</span> <span>&#45;&gt;</span> <span class="type-var">'c</span></code></dt><dt class="spec value" id="val-negate"><a href="#val-negate" class="anchor"></a><code><span class="keyword">val</span> negate : <span>(<span class="type-var">'a</span> <span>&#45;&gt;</span> bool)</span> <span>&#45;&gt;</span> <span class="type-var">'a</span> <span>&#45;&gt;</span> bool</code></dt><dt class="spec value" id="val-protect"><a href="#val-protect" class="anchor"></a><code><span class="keyword">val</span> protect : <span>finally:<span>(unit <span>&#45;&gt;</span> unit)</span></span> <span>&#45;&gt;</span> <span>(unit <span>&#45;&gt;</span> <span class="type-var">'a</span>)</span> <span>&#45;&gt;</span> <span class="type-var">'a</span></code></dt></dl><dl><dt class="spec exception" id="exception-Finally_raised"><a href="#exception-Finally_raised" class="anchor"></a><code><span class="keyword">exception</span> </code><code><span class="exception">Finally_raised</span> <span class="keyword">of</span> exn</code></dt></dl></details></div></div></div></details></div></div></div><dl><dt class="spec value" id="val-compose"><a href="#val-compose" class="anchor"></a><code><span class="keyword">val</span> compose : <span>(<span class="type-var">'a</span> <span>&#45;&gt;</span> <span class="type-var">'b</span>)</span> <span>&#45;&gt;</span> <span>(<span class="type-var">'b</span> <span>&#45;&gt;</span> <span class="type-var">'c</span>)</span> <span>&#45;&gt;</span> <span class="type-var">'a</span> <span>&#45;&gt;</span> <span class="type-var">'c</span></code></dt><dd><p><code>compose f g x</code> is <code>g (f x)</code>. Composition.</p></dd></dl><dl><dt class="spec value" id="val-compose_binop"><a href="#val-compose_binop" class="anchor"></a><code><span class="keyword">val</span> compose_binop : <span>(<span class="type-var">'a</span> <span>&#45;&gt;</span> <span class="type-var">'b</span>)</span> <span>&#45;&gt;</span> <span>(<span class="type-var">'b</span> <span>&#45;&gt;</span> <span class="type-var">'b</span> <span>&#45;&gt;</span> <span class="type-var">'c</span>)</span> <span>&#45;&gt;</span> <span class="type-var">'a</span> <span>&#45;&gt;</span> <span class="type-var">'a</span> <span>&#45;&gt;</span> <span class="type-var">'c</span></code></dt><dd><p><code>compose_binop f g</code> is <code>fun x y -&gt; g (f x) (f y)</code>. Example (partial order): <code>List.sort (compose_binop fst CCInt.compare) [1, true; 2, false; 1, false]</code>.</p><dl><dt>since</dt><dd>0.6</dd></dl></dd></dl><dl><dt class="spec value" id="val-curry"><a href="#val-curry" class="anchor"></a><code><span class="keyword">val</span> curry : <span>(<span>(<span class="type-var">'a</span> * <span class="type-var">'b</span>)</span> <span>&#45;&gt;</span> <span class="type-var">'c</span>)</span> <span>&#45;&gt;</span> <span class="type-var">'a</span> <span>&#45;&gt;</span> <span class="type-var">'b</span> <span>&#45;&gt;</span> <span class="type-var">'c</span></code></dt><dd><p><code>curry f x y</code> is <code>f (x,y)</code>. Convert a function which accepts a pair of arguments into a function which accepts two arguments.</p></dd></dl><dl><dt class="spec value" id="val-uncurry"><a href="#val-uncurry" class="anchor"></a><code><span class="keyword">val</span> uncurry : <span>(<span class="type-var">'a</span> <span>&#45;&gt;</span> <span class="type-var">'b</span> <span>&#45;&gt;</span> <span class="type-var">'c</span>)</span> <span>&#45;&gt;</span> <span>(<span class="type-var">'a</span> * <span class="type-var">'b</span>)</span> <span>&#45;&gt;</span> <span class="type-var">'c</span></code></dt><dd><p><code>uncurry f (x,y)</code> is <code>f x y</code>. Convert a function which accepts a two arguments into a function which accepts a pair of arguments.</p></dd></dl><dl><dt class="spec value" id="val-tap"><a href="#val-tap" class="anchor"></a><code><span class="keyword">val</span> tap : <span>(<span class="type-var">'a</span> <span>&#45;&gt;</span> <span class="type-var">_</span>)</span> <span>&#45;&gt;</span> <span class="type-var">'a</span> <span>&#45;&gt;</span> <span class="type-var">'a</span></code></dt><dd><p><code>tap f x</code> evaluates <code>f x</code>, discards it, then returns <code>x</code>. Useful in a pipeline, for instance:</p><pre><code class="ml">CCArray.(1 -- 10)
|&gt; tap CCArray.shuffle
|&gt; tap @@ CCArray.sort Stdlib.compare</code></pre></dd></dl><dl><dt class="spec value" id="val-lexicographic"><a href="#val-lexicographic" class="anchor"></a><code><span class="keyword">val</span> lexicographic : <span>(<span class="type-var">'a</span> <span>&#45;&gt;</span> <span class="type-var">'a</span> <span>&#45;&gt;</span> int)</span> <span>&#45;&gt;</span> <span>(<span class="type-var">'a</span> <span>&#45;&gt;</span> <span class="type-var">'a</span> <span>&#45;&gt;</span> int)</span> <span>&#45;&gt;</span> <span class="type-var">'a</span> <span>&#45;&gt;</span> <span class="type-var">'a</span> <span>&#45;&gt;</span> int</code></dt><dd><p>Lexicographic combination of comparison functions.</p></dd></dl><dl><dt class="spec value" id="val-finally"><a href="#val-finally" class="anchor"></a><code><span class="keyword">val</span> finally : <span>h:<span>(unit <span>&#45;&gt;</span> <span class="type-var">_</span>)</span></span> <span>&#45;&gt;</span> <span>f:<span>(unit <span>&#45;&gt;</span> <span class="type-var">'a</span>)</span></span> <span>&#45;&gt;</span> <span class="type-var">'a</span></code></dt><dd><p><code>finally ~h f</code> calls <code>f ()</code> and returns its result. If it raises, the same exception is raised; in <b>any</b> case, <code>h ()</code> is called after <code>f ()</code> terminates. If <code>h ()</code> raises an exception, then this exception will be passed on and any exception that may have been raised by <code>f ()</code> is lost.</p></dd></dl><dl><dt class="spec value" id="val-finally1"><a href="#val-finally1" class="anchor"></a><code><span class="keyword">val</span> finally1 : <span>h:<span>(unit <span>&#45;&gt;</span> <span class="type-var">_</span>)</span></span> <span>&#45;&gt;</span> <span>(<span class="type-var">'a</span> <span>&#45;&gt;</span> <span class="type-var">'b</span>)</span> <span>&#45;&gt;</span> <span class="type-var">'a</span> <span>&#45;&gt;</span> <span class="type-var">'b</span></code></dt><dd><p><code>finally1 ~h f x</code> is the same as <code>f x</code>, but after the computation, <code>h ()</code> is called whether <code>f x</code> rose an exception or not. If <code>h ()</code> raises an exception, then this exception will be passed on and any exception that may have been raised by <code>f ()</code> is lost.</p><dl><dt>since</dt><dd>0.16</dd></dl></dd></dl><dl><dt class="spec value" id="val-finally2"><a href="#val-finally2" class="anchor"></a><code><span class="keyword">val</span> finally2 : <span>h:<span>(unit <span>&#45;&gt;</span> <span class="type-var">_</span>)</span></span> <span>&#45;&gt;</span> <span>(<span class="type-var">'a</span> <span>&#45;&gt;</span> <span class="type-var">'b</span> <span>&#45;&gt;</span> <span class="type-var">'c</span>)</span> <span>&#45;&gt;</span> <span class="type-var">'a</span> <span>&#45;&gt;</span> <span class="type-var">'b</span> <span>&#45;&gt;</span> <span class="type-var">'c</span></code></dt><dd><p><code>finally2 ~h f x y</code> is the same as <code>f x y</code>, but after the computation, <code>h ()</code> is called whether <code>f x y</code> rose an exception or not. If <code>h ()</code> raises an exception, then this exception will be passed on and any exception that may have been raised by <code>f ()</code> is lost.</p><dl><dt>since</dt><dd>0.16</dd></dl></dd></dl><dl><dt class="spec value" id="val-opaque_identity"><a href="#val-opaque_identity" class="anchor"></a><code><span class="keyword">val</span> opaque_identity : <span class="type-var">'a</span> <span>&#45;&gt;</span> <span class="type-var">'a</span></code></dt><dd><p><code>opaque_identity x</code> is like <code>x</code>, but prevents Flambda from using <code>x</code>'s definition for optimizing it. (flambda is an optimization/inlining pass in OCaml &gt;= 4.03).</p><dl><dt>since</dt><dd>0.18</dd></dl></dd></dl><dl><dt class="spec value" id="val-iterate"><a href="#val-iterate" class="anchor"></a><code><span class="keyword">val</span> iterate : int <span>&#45;&gt;</span> <span>(<span class="type-var">'a</span> <span>&#45;&gt;</span> <span class="type-var">'a</span>)</span> <span>&#45;&gt;</span> <span class="type-var">'a</span> <span>&#45;&gt;</span> <span class="type-var">'a</span></code></dt><dd><p><code>iterate n f</code> is <code>f</code> iterated <code>n</code> times. That is to say, <code>iterate 0 f x</code> is <code>x</code>, <code>iterate 1 f x</code> is <code>f x</code>, <code>iterate 2 f x</code> is <code>f (f x)</code>, etc.</p><dl><dt>since</dt><dd>2.1</dd></dl></dd></dl><section><header><h3 id="infix"><a href="#infix" class="anchor"></a>Infix</h3><p>Infix operators.</p></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><div><div class="spec include"><div class="doc"><details open="open"><summary><span class="def"><code><span class="keyword">include</span> <span class="keyword">module</span> <span class="keyword">type</span> <span class="keyword">of</span> <a href="index.html#module-Infix">Infix</a></code></span></summary><dl><dt class="spec value" id="val-(|&gt;)"><a href="#val-(|&gt;)" class="anchor"></a><code><span class="keyword">val</span> (|&gt;) : <span class="type-var">'a</span> <span>&#45;&gt;</span> <span>(<span class="type-var">'a</span> <span>&#45;&gt;</span> <span class="type-var">'b</span>)</span> <span>&#45;&gt;</span> <span class="type-var">'b</span></code></dt><dd><p><code>x |&gt; f</code> is the same as <code>f x</code>. A 'pipe' operator.</p></dd></dl><dl><dt class="spec value" id="val-(@@)"><a href="#val-(@@)" class="anchor"></a><code><span class="keyword">val</span> (@@) : <span>(<span class="type-var">'a</span> <span>&#45;&gt;</span> <span class="type-var">'b</span>)</span> <span>&#45;&gt;</span> <span class="type-var">'a</span> <span>&#45;&gt;</span> <span class="type-var">'b</span></code></dt><dd><p><code>f @@ x</code> is the same as <code>f x</code>, but right-associative.</p><dl><dt>since</dt><dd>0.5</dd></dl></dd></dl><dl><dt class="spec value" id="val-(%&gt;)"><a href="#val-(%&gt;)" class="anchor"></a><code><span class="keyword">val</span> (%&gt;) : <span>(<span class="type-var">'a</span> <span>&#45;&gt;</span> <span class="type-var">'b</span>)</span> <span>&#45;&gt;</span> <span>(<span class="type-var">'b</span> <span>&#45;&gt;</span> <span class="type-var">'c</span>)</span> <span>&#45;&gt;</span> <span class="type-var">'a</span> <span>&#45;&gt;</span> <span class="type-var">'c</span></code></dt><dd><p><code>(f %&gt; g) x</code> or <code>(%&gt;) f g x</code> is <code>g (f x)</code>. Alias to <code>compose</code>.</p></dd></dl><dl><dt class="spec value" id="val-(%)"><a href="#val-(%)" class="anchor"></a><code><span class="keyword">val</span> (%) : <span>(<span class="type-var">'b</span> <span>&#45;&gt;</span> <span class="type-var">'c</span>)</span> <span>&#45;&gt;</span> <span>(<span class="type-var">'a</span> <span>&#45;&gt;</span> <span class="type-var">'b</span>)</span> <span>&#45;&gt;</span> <span class="type-var">'a</span> <span>&#45;&gt;</span> <span class="type-var">'c</span></code></dt><dd><p><code>(f % g) x</code> or <code>(%) f g x</code> is <code>f (g x)</code>. Mathematical composition.</p></dd></dl></details></div></div></div></section><section><header><h3 id="monad"><a href="#monad" class="anchor"></a>Monad</h3><p>Functions with a fixed domain are monads in their codomain.</p></header><div class="spec module" id="module-Monad"><a href="#module-Monad" class="anchor"></a><code><span class="keyword">module</span> <a href="Monad/index.html">Monad</a> : <span class="keyword">functor</span> (<a href="Monad/argument-1-X/index.html">X</a> : <span class="keyword">sig</span> ... <span class="keyword">end</span>) <span>&#45;&gt;</span> <span class="keyword">sig</span> ... <span class="keyword">end</span></code></div></section></div></body></html>