mirror of
https://github.com/c-cube/ocaml-containers.git
synced 2025-12-06 11:15:31 -05:00
4 lines
No EOL
11 KiB
HTML
4 lines
No EOL
11 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"/><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="#monad">Monad</a></li></ul></nav></header><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 class="type-var">'a</span> <span>-></span> <span class="type-var">'b</span>) <span>-></span> <span class="type-var">'b</span></code></dt><dd><p>A 'pipe' operator. <code>x |> f</code> is the same as <code>f x</code>.</p></dd></dl><dl><dt class="spec value" id="val-compose"><a href="#val-compose" class="anchor"></a><code><span class="keyword">val</span> compose : (<span class="type-var">'a</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 class="type-var">'a</span> <span>-></span> <span class="type-var">'c</span></code></dt><dd><p>Composition. <code>compose f g x</code> is <code>g (f x)</code>.</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 class="type-var">'a</span> <span>-></span> <span class="type-var">'b</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 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-(%>)"><a href="#val-(%>)" class="anchor"></a><code><span class="keyword">val</span> (%>) : (<span class="type-var">'a</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 class="type-var">'a</span> <span>-></span> <span class="type-var">'c</span></code></dt><dd><p>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 class="type-var">'a</span> <span>-></span> <span class="type-var">'b</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-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><dd><p>Identity function.</p></dd></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><dd><p>Produce a function that just returns its first argument. <code>const x y = x</code> for any <code>y</code>.</p></dd></dl><dl><dt class="spec value" id="val-flip"><a href="#val-flip" class="anchor"></a><code><span class="keyword">val</span> flip : (<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 class="type-var">'b</span> <span>-></span> <span class="type-var">'a</span> <span>-></span> <span class="type-var">'c</span></code></dt><dd><p>Reverse the order of arguments for a binary function.</p></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 class="type-var">'a</span> * <span class="type-var">'b</span>) <span>-></span> <span class="type-var">'c</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>Convert a function which accepts a pair of arguments into a function which accepts two arguments. <code>curry f x y</code> is <code>f (x,y)</code>.</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 class="type-var">'a</span> <span>-></span> <span class="type-var">'b</span> <span>-></span> <span class="type-var">'c</span>) <span>-></span> (<span class="type-var">'a</span> * <span class="type-var">'b</span>) <span>-></span> <span class="type-var">'c</span></code></dt><dd><p>Convert a function which accepts a two arguments into a function which accepts a pair of arguments. <code>uncurry f (x,y)</code> is <code>f x y</code>.</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 class="type-var">'a</span> <span>-></span> <span class="type-var">_</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 Pervasives.compare</code></pre></dd></dl><dl><dt class="spec value" id="val-(%)"><a href="#val-(%)" class="anchor"></a><code><span class="keyword">val</span> (%) : (<span class="type-var">'b</span> <span>-></span> <span class="type-var">'c</span>) <span>-></span> (<span class="type-var">'a</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><dd><p>Mathematical composition. <code>(%) f g x</code> is <code>f (g x)</code>.</p></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 class="type-var">'a</span> <span>-></span> <span class="type-var">'a</span> <span>-></span> int) <span>-></span> (<span class="type-var">'a</span> <span>-></span> <span class="type-var">'a</span> <span>-></span> int) <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 : h:(unit <span>-></span> <span class="type-var">_</span>) <span>-></span> f:(unit <span>-></span> <span class="type-var">'a</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.</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 : h:(unit <span>-></span> <span class="type-var">_</span>) <span>-></span> (<span class="type-var">'a</span> <span>-></span> <span class="type-var">'b</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.</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 : h:(unit <span>-></span> <span class="type-var">_</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 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.</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 class="type-var">'a</span> <span>-></span> <span class="type-var">'a</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="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> |