mirror of
https://github.com/c-cube/ocaml-containers.git
synced 2025-12-06 11:15:31 -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>CCFun (containers.CCFun)</title><link rel="stylesheet" href="../../odoc.css"/><meta charset="utf-8"/><meta name="viewport" content="width=device-width,initial-scale=1.0"/><meta name="generator" content="doc-ock-html v1.0.0-1-g1fc9bf0"/></head><body><nav id="top"><a href="../index.html">Up</a> — <span class="package">package <a href="../index.html">containers</a></span></nav><header><h1><span class="keyword">Module</span> <span class="module-path">CCFun</span></h1></header><h2>Basic Functions</h2><div class="spec val" id="val-(|>)"><a href="#val-(|>)" class="anchor"></a><div class="def val"><code><span class="keyword">val </span>(|>) : <span class="type-var">'a</span> <span class="keyword">‑></span> (<span class="type-var">'a</span> <span class="keyword">‑></span> <span class="type-var">'b</span>) <span class="keyword">‑></span> <span class="type-var">'b</span></code></div><div class="doc"><p>A 'pipe' operator. <code class="code">x |> f</code> is the same as <code class="code">f x</code>.</p></div></div><div class="spec val" id="val-compose"><a href="#val-compose" class="anchor"></a><div class="def val"><code><span class="keyword">val </span>compose : (<span class="type-var">'a</span> <span class="keyword">‑></span> <span class="type-var">'b</span>) <span class="keyword">‑></span> (<span class="type-var">'b</span> <span class="keyword">‑></span> <span class="type-var">'c</span>) <span class="keyword">‑></span> <span class="type-var">'a</span> <span class="keyword">‑></span> <span class="type-var">'c</span></code></div><div class="doc"><p>Composition. <code class="code">compose f g x</code> is <code class="code">g (f x)</code>.</p></div></div><div class="spec val" id="val-compose_binop"><a href="#val-compose_binop" class="anchor"></a><div class="def val"><code><span class="keyword">val </span>compose_binop : (<span class="type-var">'a</span> <span class="keyword">‑></span> <span class="type-var">'b</span>) <span class="keyword">‑></span> (<span class="type-var">'b</span> <span class="keyword">‑></span> <span class="type-var">'b</span> <span class="keyword">‑></span> <span class="type-var">'c</span>) <span class="keyword">‑></span> <span class="type-var">'a</span> <span class="keyword">‑></span> <span class="type-var">'a</span> <span class="keyword">‑></span> <span class="type-var">'c</span></code></div><div class="doc"><p><code class="code">compose_binop f g</code> is <code class="code">fun x y -> g (f x) (f y)</code>.
|
|
Example (partial order):
|
|
<code class="code">List.sort (compose_binop fst CCInt.compare) [1, true; 2, false; 1, false]</code>.</p><ul class="at-tag"><li><span class="at-tag since">Since</span>: 0.6</li></ul></div></div><div class="spec val" id="val-(%>)"><a href="#val-(%>)" class="anchor"></a><div class="def val"><code><span class="keyword">val </span>(%>) : (<span class="type-var">'a</span> <span class="keyword">‑></span> <span class="type-var">'b</span>) <span class="keyword">‑></span> (<span class="type-var">'b</span> <span class="keyword">‑></span> <span class="type-var">'c</span>) <span class="keyword">‑></span> <span class="type-var">'a</span> <span class="keyword">‑></span> <span class="type-var">'c</span></code></div><div class="doc"><p>Alias to <code class="code">compose</code>.</p></div></div><div class="spec val" id="val-(@@)"><a href="#val-(@@)" class="anchor"></a><div class="def val"><code><span class="keyword">val </span>(@@) : (<span class="type-var">'a</span> <span class="keyword">‑></span> <span class="type-var">'b</span>) <span class="keyword">‑></span> <span class="type-var">'a</span> <span class="keyword">‑></span> <span class="type-var">'b</span></code></div><div class="doc"><p><code class="code">f @@ x</code> is the same as <code class="code">f x</code>, but right-associative.</p><ul class="at-tag"><li><span class="at-tag since">Since</span>: 0.5</li></ul></div></div><div class="spec val" id="val-id"><a href="#val-id" class="anchor"></a><div class="def val"><code><span class="keyword">val </span>id : <span class="type-var">'a</span> <span class="keyword">‑></span> <span class="type-var">'a</span></code></div><div class="doc"><p>Identity function.</p></div></div><div class="spec val" id="val-const"><a href="#val-const" class="anchor"></a><div class="def val"><code><span class="keyword">val </span>const : <span class="type-var">'a</span> <span class="keyword">‑></span> <span class="type-var">'b</span> <span class="keyword">‑></span> <span class="type-var">'a</span></code></div><div class="doc"><p>Produce a function that just returns its first argument.
|
|
<code class="code">const x y = x</code> for any <code class="code">y</code>.</p></div></div><div class="spec val" id="val-flip"><a href="#val-flip" class="anchor"></a><div class="def val"><code><span class="keyword">val </span>flip : (<span class="type-var">'a</span> <span class="keyword">‑></span> <span class="type-var">'b</span> <span class="keyword">‑></span> <span class="type-var">'c</span>) <span class="keyword">‑></span> <span class="type-var">'b</span> <span class="keyword">‑></span> <span class="type-var">'a</span> <span class="keyword">‑></span> <span class="type-var">'c</span></code></div><div class="doc"><p>Reverse the order of arguments for a binary function.</p></div></div><div class="spec val" id="val-curry"><a href="#val-curry" class="anchor"></a><div class="def val"><code><span class="keyword">val </span>curry : ((<span class="type-var">'a</span><span class="keyword"> * </span><span class="type-var">'b</span>) <span class="keyword">‑></span> <span class="type-var">'c</span>) <span class="keyword">‑></span> <span class="type-var">'a</span> <span class="keyword">‑></span> <span class="type-var">'b</span> <span class="keyword">‑></span> <span class="type-var">'c</span></code></div><div class="doc"><p>Convert a function which accepts a pair of arguments into a function which accepts two arguments.
|
|
<code class="code">curry f x y</code> is <code class="code">f (x,y)</code>.</p></div></div><div class="spec val" id="val-uncurry"><a href="#val-uncurry" class="anchor"></a><div class="def val"><code><span class="keyword">val </span>uncurry : (<span class="type-var">'a</span> <span class="keyword">‑></span> <span class="type-var">'b</span> <span class="keyword">‑></span> <span class="type-var">'c</span>) <span class="keyword">‑></span> (<span class="type-var">'a</span><span class="keyword"> * </span><span class="type-var">'b</span>) <span class="keyword">‑></span> <span class="type-var">'c</span></code></div><div class="doc"><p>Convert a function which accepts a two arguments into a function which accepts a pair of arguments.
|
|
<code class="code">uncurry f (x,y)</code> is <code class="code">f x y</code>.</p></div></div><div class="spec val" id="val-tap"><a href="#val-tap" class="anchor"></a><div class="def val"><code><span class="keyword">val </span>tap : (<span class="type-var">'a</span> <span class="keyword">‑></span> <span class="type-var">_</span>) <span class="keyword">‑></span> <span class="type-var">'a</span> <span class="keyword">‑></span> <span class="type-var">'a</span></code></div><div class="doc"><p><code class="code">tap f x</code> evaluates <code class="code">f x</code>, discards it, then returns <code class="code">x</code>. Useful
|
|
in a pipeline, for instance:
|
|
</p><pre><code class="code">CCArray.(1 -- 10)
|
|
|> tap CCArray.shuffle
|
|
|> tap @@ CCArray.sort Pervasives.compare</code></pre></div></div><div class="spec val" id="val-(%)"><a href="#val-(%)" class="anchor"></a><div class="def val"><code><span class="keyword">val </span>(%) : (<span class="type-var">'b</span> <span class="keyword">‑></span> <span class="type-var">'c</span>) <span class="keyword">‑></span> (<span class="type-var">'a</span> <span class="keyword">‑></span> <span class="type-var">'b</span>) <span class="keyword">‑></span> <span class="type-var">'a</span> <span class="keyword">‑></span> <span class="type-var">'c</span></code></div><div class="doc"><p>Mathematical composition. <code class="code">(%) f g x</code> is <code class="code">f (g x)</code>.</p></div></div><div class="spec val" id="val-lexicographic"><a href="#val-lexicographic" class="anchor"></a><div class="def val"><code><span class="keyword">val </span>lexicographic : (<span class="type-var">'a</span> <span class="keyword">‑></span> <span class="type-var">'a</span> <span class="keyword">‑></span> int) <span class="keyword">‑></span> (<span class="type-var">'a</span> <span class="keyword">‑></span> <span class="type-var">'a</span> <span class="keyword">‑></span> int) <span class="keyword">‑></span> <span class="type-var">'a</span> <span class="keyword">‑></span> <span class="type-var">'a</span> <span class="keyword">‑></span> int</code></div><div class="doc"><p>Lexicographic combination of comparison functions.</p></div></div><div class="spec val" id="val-finally"><a href="#val-finally" class="anchor"></a><div class="def val"><code><span class="keyword">val </span>finally : h:(unit <span class="keyword">‑></span> <span class="type-var">_</span>) <span class="keyword">‑></span> f:(unit <span class="keyword">‑></span> <span class="type-var">'a</span>) <span class="keyword">‑></span> <span class="type-var">'a</span></code></div><div class="doc"><p><code class="code">finally h f</code> calls <code class="code">f ()</code> and returns its result. If it raises, the
|
|
same exception is raised; in <b>any</b> case, <code class="code">h ()</code> is called after
|
|
<code class="code">f ()</code> terminates.</p></div></div><div class="spec val" id="val-finally1"><a href="#val-finally1" class="anchor"></a><div class="def val"><code><span class="keyword">val </span>finally1 : h:(unit <span class="keyword">‑></span> <span class="type-var">_</span>) <span class="keyword">‑></span> (<span class="type-var">'a</span> <span class="keyword">‑></span> <span class="type-var">'b</span>) <span class="keyword">‑></span> <span class="type-var">'a</span> <span class="keyword">‑></span> <span class="type-var">'b</span></code></div><div class="doc"><p><code class="code">finally1 ~h f x</code> is the same as <code class="code">f x</code>, but after the computation,
|
|
<code class="code">h ()</code> is called whether <code class="code">f x</code> rose an exception or not.</p><ul class="at-tag"><li><span class="at-tag since">Since</span>: 0.16</li></ul></div></div><div class="spec val" id="val-finally2"><a href="#val-finally2" class="anchor"></a><div class="def val"><code><span class="keyword">val </span>finally2 : h:(unit <span class="keyword">‑></span> <span class="type-var">_</span>) <span class="keyword">‑></span> (<span class="type-var">'a</span> <span class="keyword">‑></span> <span class="type-var">'b</span> <span class="keyword">‑></span> <span class="type-var">'c</span>) <span class="keyword">‑></span> <span class="type-var">'a</span> <span class="keyword">‑></span> <span class="type-var">'b</span> <span class="keyword">‑></span> <span class="type-var">'c</span></code></div><div class="doc"><p><code class="code">finally2 ~h f x y</code> is the same as <code class="code">f x y</code>, but after the computation,
|
|
<code class="code">h ()</code> is called whether <code class="code">f x y</code> rose an exception or not.</p><ul class="at-tag"><li><span class="at-tag since">Since</span>: 0.16</li></ul></div></div><div class="spec val" id="val-opaque_identity"><a href="#val-opaque_identity" class="anchor"></a><div class="def val"><code><span class="keyword">val </span>opaque_identity : <span class="type-var">'a</span> <span class="keyword">‑></span> <span class="type-var">'a</span></code></div><div class="doc"><p><code class="code">opaque_identity x</code> is like <code class="code">x</code>, but prevents Flambda from using <code class="code">x</code>'s
|
|
definition for optimizing it. (flambda is an optimization/inlining pass
|
|
in OCaml >= 4.03).</p><ul class="at-tag"><li><span class="at-tag since">Since</span>: 0.18</li></ul></div></div><h3>Monad</h3><p>Functions with a fixed domain are monads in their codomain.</p><div class="spec module" id="module-Monad"><a href="#module-Monad" class="anchor"></a><div class="def module"><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 class="keyword">sig</span> ... <span class="keyword">end</span></code></div><div class="doc"></div></div></body></html> |