mirror of
https://github.com/c-cube/ocaml-containers.git
synced 2025-12-06 11:15:31 -05:00
4 lines
No EOL
14 KiB
HTML
4 lines
No EOL
14 KiB
HTML
<!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> » 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>-></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>-></span> <span class="type-var">'b</span> <span>-></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>-></span> <span class="type-var">'b</span> <span>-></span> <span class="type-var">'c</span>)</span> <span>-></span> <span class="type-var">'b</span> <span>-></span> <span class="type-var">'a</span> <span>-></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>-></span> bool)</span> <span>-></span> <span class="type-var">'a</span> <span>-></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>-></span> unit)</span></span> <span>-></span> <span>(unit <span>-></span> <span class="type-var">'a</span>)</span> <span>-></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>-></span> <span class="type-var">'b</span>)</span> <span>-></span> <span>(<span class="type-var">'b</span> <span>-></span> <span class="type-var">'c</span>)</span> <span>-></span> <span class="type-var">'a</span> <span>-></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>-></span> <span class="type-var">'b</span>)</span> <span>-></span> <span>(<span class="type-var">'b</span> <span>-></span> <span class="type-var">'b</span> <span>-></span> <span class="type-var">'c</span>)</span> <span>-></span> <span class="type-var">'a</span> <span>-></span> <span class="type-var">'a</span> <span>-></span> <span class="type-var">'c</span></code></dt><dd><p><code>compose_binop f g</code> is <code>fun x y -> 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>-></span> <span class="type-var">'c</span>)</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></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>-></span> <span class="type-var">'b</span> <span>-></span> <span class="type-var">'c</span>)</span> <span>-></span> <span>(<span class="type-var">'a</span> * <span class="type-var">'b</span>)</span> <span>-></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>-></span> <span class="type-var">_</span>)</span> <span>-></span> <span class="type-var">'a</span> <span>-></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)
|
||
|> tap CCArray.shuffle
|
||
|> 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>-></span> <span class="type-var">'a</span> <span>-></span> int)</span> <span>-></span> <span>(<span class="type-var">'a</span> <span>-></span> <span class="type-var">'a</span> <span>-></span> int)</span> <span>-></span> <span class="type-var">'a</span> <span>-></span> <span class="type-var">'a</span> <span>-></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>-></span> <span class="type-var">_</span>)</span></span> <span>-></span> <span>f:<span>(unit <span>-></span> <span class="type-var">'a</span>)</span></span> <span>-></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>-></span> <span class="type-var">_</span>)</span></span> <span>-></span> <span>(<span class="type-var">'a</span> <span>-></span> <span class="type-var">'b</span>)</span> <span>-></span> <span class="type-var">'a</span> <span>-></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>-></span> <span class="type-var">_</span>)</span></span> <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> <span class="type-var">'a</span> <span>-></span> <span class="type-var">'b</span> <span>-></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>-></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 >= 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>-></span> <span>(<span class="type-var">'a</span> <span>-></span> <span class="type-var">'a</span>)</span> <span>-></span> <span class="type-var">'a</span> <span>-></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-(|>)"><a href="#val-(|>)" class="anchor"></a><code><span class="keyword">val</span> (|>) : <span class="type-var">'a</span> <span>-></span> <span>(<span class="type-var">'a</span> <span>-></span> <span class="type-var">'b</span>)</span> <span>-></span> <span class="type-var">'b</span></code></dt><dd><p><code>x |> 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>-></span> <span class="type-var">'b</span>)</span> <span>-></span> <span class="type-var">'a</span> <span>-></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-(%>)"><a href="#val-(%>)" class="anchor"></a><code><span class="keyword">val</span> (%>) : <span>(<span class="type-var">'a</span> <span>-></span> <span class="type-var">'b</span>)</span> <span>-></span> <span>(<span class="type-var">'b</span> <span>-></span> <span class="type-var">'c</span>)</span> <span>-></span> <span class="type-var">'a</span> <span>-></span> <span class="type-var">'c</span></code></dt><dd><p><code>(f %> g) x</code> or <code>(%>) 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>-></span> <span class="type-var">'c</span>)</span> <span>-></span> <span>(<span class="type-var">'a</span> <span>-></span> <span class="type-var">'b</span>)</span> <span>-></span> <span class="type-var">'a</span> <span>-></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>-></span> <span class="keyword">sig</span> ... <span class="keyword">end</span></code></div></section></div></body></html> |