mirror of
https://github.com/c-cube/ocaml-containers.git
synced 2025-12-06 03:05:28 -05:00
4 lines
No EOL
18 KiB
HTML
4 lines
No EOL
18 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 2.0.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">containers</a> » CCFun</nav><header class="odoc-preamble"><h1>Module <code><span>CCFun</span></code></h1></header><nav class="odoc-toc"><ul><li><a href="#basic-functions">Basic Functions</a><ul><li><a href="#infix">Infix</a></li><li><a href="#monad">Monad</a></li></ul></li></ul></nav><div class="odoc-content"><h2 id="basic-functions"><a href="#basic-functions" class="anchor"></a>Basic Functions</h2><div class="odoc-include"><details open="open"><summary class="spec include"><code><span><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></span></code></summary><div class="odoc-include"><details open="open"><summary class="spec include"><code><span><span class="keyword">include</span> <span class="keyword">module</span> <span class="keyword">type</span> <span class="keyword">of</span> <span class="xref-unresolved">Stdlib</span>.Fun</span></code></summary><div class="odoc-spec"><div class="spec value external" id="val-id" class="anchored"><a href="#val-id" class="anchor"></a><code><span><span class="keyword">val</span> id : <span><span class="type-var">'a</span> <span class="arrow">-></span></span> <span class="type-var">'a</span></span></code></div></div><div class="odoc-spec"><div class="spec value" id="val-const" class="anchored"><a href="#val-const" class="anchor"></a><code><span><span class="keyword">val</span> const : <span><span class="type-var">'a</span> <span class="arrow">-></span></span> <span><span class="type-var">'b</span> <span class="arrow">-></span></span> <span class="type-var">'a</span></span></code></div></div><div class="odoc-spec"><div class="spec value" id="val-flip" class="anchored"><a href="#val-flip" class="anchor"></a><code><span><span class="keyword">val</span> flip : <span><span>(<span><span class="type-var">'a</span> <span class="arrow">-></span></span> <span><span class="type-var">'b</span> <span class="arrow">-></span></span> <span class="type-var">'c</span>)</span> <span class="arrow">-></span></span> <span><span class="type-var">'b</span> <span class="arrow">-></span></span> <span><span class="type-var">'a</span> <span class="arrow">-></span></span> <span class="type-var">'c</span></span></code></div></div><div class="odoc-spec"><div class="spec value" id="val-negate" class="anchored"><a href="#val-negate" class="anchor"></a><code><span><span class="keyword">val</span> negate : <span><span>(<span><span class="type-var">'a</span> <span class="arrow">-></span></span> bool)</span> <span class="arrow">-></span></span> <span><span class="type-var">'a</span> <span class="arrow">-></span></span> bool</span></code></div></div><div class="odoc-spec"><div class="spec value" id="val-protect" class="anchored"><a href="#val-protect" class="anchor"></a><code><span><span class="keyword">val</span> protect : <span>finally:<span>(<span>unit <span class="arrow">-></span></span> unit)</span> <span class="arrow">-></span></span> <span><span>(<span>unit <span class="arrow">-></span></span> <span class="type-var">'a</span>)</span> <span class="arrow">-></span></span> <span class="type-var">'a</span></span></code></div></div><div class="odoc-spec"><div class="spec exception" id="exception-Finally_raised" class="anchored"><a href="#exception-Finally_raised" class="anchor"></a><code><span><span class="keyword">exception</span> </span><span><span class="exception">Finally_raised</span> <span class="keyword">of</span> exn</span></code></div></div></details></div></details></div><div class="odoc-spec"><div class="spec value" id="val-compose" class="anchored"><a href="#val-compose" class="anchor"></a><code><span><span class="keyword">val</span> compose : <span><span>(<span><span class="type-var">'a</span> <span class="arrow">-></span></span> <span class="type-var">'b</span>)</span> <span class="arrow">-></span></span> <span><span>(<span><span class="type-var">'b</span> <span class="arrow">-></span></span> <span class="type-var">'c</span>)</span> <span class="arrow">-></span></span> <span><span class="type-var">'a</span> <span class="arrow">-></span></span> <span class="type-var">'c</span></span></code></div><div class="spec-doc"><p><code>compose f g x</code> is <code>g (f x)</code>. Composition.</p></div></div><div class="odoc-spec"><div class="spec value" id="val-compose_binop" class="anchored"><a href="#val-compose_binop" class="anchor"></a><code><span><span class="keyword">val</span> compose_binop : <span><span>(<span><span class="type-var">'a</span> <span class="arrow">-></span></span> <span class="type-var">'b</span>)</span> <span class="arrow">-></span></span> <span><span>(<span><span class="type-var">'b</span> <span class="arrow">-></span></span> <span><span class="type-var">'b</span> <span class="arrow">-></span></span> <span class="type-var">'c</span>)</span> <span class="arrow">-></span></span> <span><span class="type-var">'a</span> <span class="arrow">-></span></span> <span><span class="type-var">'a</span> <span class="arrow">-></span></span> <span class="type-var">'c</span></span></code></div><div class="spec-doc"><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><ul class="at-tags"><li class="since"><span class="at-tag">since</span> 0.6</li></ul></div></div><div class="odoc-spec"><div class="spec value" id="val-curry" class="anchored"><a href="#val-curry" class="anchor"></a><code><span><span class="keyword">val</span> curry : <span><span>(<span><span>(<span class="type-var">'a</span> * <span class="type-var">'b</span>)</span> <span class="arrow">-></span></span> <span class="type-var">'c</span>)</span> <span class="arrow">-></span></span> <span><span class="type-var">'a</span> <span class="arrow">-></span></span> <span><span class="type-var">'b</span> <span class="arrow">-></span></span> <span class="type-var">'c</span></span></code></div><div class="spec-doc"><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></div></div><div class="odoc-spec"><div class="spec value" id="val-uncurry" class="anchored"><a href="#val-uncurry" class="anchor"></a><code><span><span class="keyword">val</span> uncurry : <span><span>(<span><span class="type-var">'a</span> <span class="arrow">-></span></span> <span><span class="type-var">'b</span> <span class="arrow">-></span></span> <span class="type-var">'c</span>)</span> <span class="arrow">-></span></span> <span><span>(<span class="type-var">'a</span> * <span class="type-var">'b</span>)</span> <span class="arrow">-></span></span> <span class="type-var">'c</span></span></code></div><div class="spec-doc"><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></div></div><div class="odoc-spec"><div class="spec value" id="val-tap" class="anchored"><a href="#val-tap" class="anchor"></a><code><span><span class="keyword">val</span> tap : <span><span>(<span><span class="type-var">'a</span> <span class="arrow">-></span></span> <span class="type-var">_</span>)</span> <span class="arrow">-></span></span> <span><span class="type-var">'a</span> <span class="arrow">-></span></span> <span class="type-var">'a</span></span></code></div><div class="spec-doc"><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>CCArray.(1 -- 10)
|
||
|> tap CCArray.shuffle
|
||
|> tap @@ CCArray.sort Stdlib.compare</code></pre></div></div><div class="odoc-spec"><div class="spec value" id="val-lexicographic" class="anchored"><a href="#val-lexicographic" class="anchor"></a><code><span><span class="keyword">val</span> lexicographic : <span><span>(<span><span class="type-var">'a</span> <span class="arrow">-></span></span> <span><span class="type-var">'a</span> <span class="arrow">-></span></span> int)</span> <span class="arrow">-></span></span> <span><span>(<span><span class="type-var">'a</span> <span class="arrow">-></span></span> <span><span class="type-var">'a</span> <span class="arrow">-></span></span> int)</span> <span class="arrow">-></span></span> <span><span class="type-var">'a</span> <span class="arrow">-></span></span> <span><span class="type-var">'a</span> <span class="arrow">-></span></span> int</span></code></div><div class="spec-doc"><p>Lexicographic combination of comparison functions.</p></div></div><div class="odoc-spec"><div class="spec value" id="val-finally" class="anchored"><a href="#val-finally" class="anchor"></a><code><span><span class="keyword">val</span> finally : <span>h:<span>(<span>unit <span class="arrow">-></span></span> <span class="type-var">_</span>)</span> <span class="arrow">-></span></span> <span>f:<span>(<span>unit <span class="arrow">-></span></span> <span class="type-var">'a</span>)</span> <span class="arrow">-></span></span> <span class="type-var">'a</span></span></code></div><div class="spec-doc"><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></div></div><div class="odoc-spec"><div class="spec value" id="val-finally1" class="anchored"><a href="#val-finally1" class="anchor"></a><code><span><span class="keyword">val</span> finally1 : <span>h:<span>(<span>unit <span class="arrow">-></span></span> <span class="type-var">_</span>)</span> <span class="arrow">-></span></span> <span><span>(<span><span class="type-var">'a</span> <span class="arrow">-></span></span> <span class="type-var">'b</span>)</span> <span class="arrow">-></span></span> <span><span class="type-var">'a</span> <span class="arrow">-></span></span> <span class="type-var">'b</span></span></code></div><div class="spec-doc"><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><ul class="at-tags"><li class="since"><span class="at-tag">since</span> 0.16</li></ul></div></div><div class="odoc-spec"><div class="spec value" id="val-finally2" class="anchored"><a href="#val-finally2" class="anchor"></a><code><span><span class="keyword">val</span> finally2 : <span>h:<span>(<span>unit <span class="arrow">-></span></span> <span class="type-var">_</span>)</span> <span class="arrow">-></span></span> <span><span>(<span><span class="type-var">'a</span> <span class="arrow">-></span></span> <span><span class="type-var">'b</span> <span class="arrow">-></span></span> <span class="type-var">'c</span>)</span> <span class="arrow">-></span></span> <span><span class="type-var">'a</span> <span class="arrow">-></span></span> <span><span class="type-var">'b</span> <span class="arrow">-></span></span> <span class="type-var">'c</span></span></code></div><div class="spec-doc"><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><ul class="at-tags"><li class="since"><span class="at-tag">since</span> 0.16</li></ul></div></div><div class="odoc-spec"><div class="spec value" id="val-opaque_identity" class="anchored"><a href="#val-opaque_identity" class="anchor"></a><code><span><span class="keyword">val</span> opaque_identity : <span><span class="type-var">'a</span> <span class="arrow">-></span></span> <span class="type-var">'a</span></span></code></div><div class="spec-doc"><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><ul class="at-tags"><li class="since"><span class="at-tag">since</span> 0.18</li></ul></div></div><div class="odoc-spec"><div class="spec value" id="val-iterate" class="anchored"><a href="#val-iterate" class="anchor"></a><code><span><span class="keyword">val</span> iterate : <span>int <span class="arrow">-></span></span> <span><span>(<span><span class="type-var">'a</span> <span class="arrow">-></span></span> <span class="type-var">'a</span>)</span> <span class="arrow">-></span></span> <span><span class="type-var">'a</span> <span class="arrow">-></span></span> <span class="type-var">'a</span></span></code></div><div class="spec-doc"><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><ul class="at-tags"><li class="since"><span class="at-tag">since</span> 2.1</li></ul></div></div><h3 id="infix"><a href="#infix" class="anchor"></a>Infix</h3><p>Infix operators.</p><div class="odoc-spec"><div class="spec module" id="module-Infix" class="anchored"><a href="#module-Infix" class="anchor"></a><code><span><span class="keyword">module</span> </span><span><a href="Infix/index.html">Infix</a></span><span> : <span class="keyword">sig</span> ... <span class="keyword">end</span></span></code></div></div><div class="odoc-include"><details open="open"><summary class="spec include"><code><span><span class="keyword">include</span> <span class="keyword">module</span> <span class="keyword">type</span> <span class="keyword">of</span> <a href="Infix/index.html">Infix</a></span></code></summary><div class="odoc-spec"><div class="spec value" id="val-(|>)" class="anchored"><a href="#val-(|>)" class="anchor"></a><code><span><span class="keyword">val</span> (|>) : <span><span class="type-var">'a</span> <span class="arrow">-></span></span> <span><span>(<span><span class="type-var">'a</span> <span class="arrow">-></span></span> <span class="type-var">'b</span>)</span> <span class="arrow">-></span></span> <span class="type-var">'b</span></span></code></div><div class="spec-doc"><p><code>x |> f</code> is the same as <code>f x</code>. A 'pipe' operator.</p></div></div><div class="odoc-spec"><div class="spec value" id="val-(@@)" class="anchored"><a href="#val-(@@)" class="anchor"></a><code><span><span class="keyword">val</span> (@@) : <span><span>(<span><span class="type-var">'a</span> <span class="arrow">-></span></span> <span class="type-var">'b</span>)</span> <span class="arrow">-></span></span> <span><span class="type-var">'a</span> <span class="arrow">-></span></span> <span class="type-var">'b</span></span></code></div><div class="spec-doc"><p><code>f @@ x</code> is the same as <code>f x</code>, but right-associative.</p><ul class="at-tags"><li class="since"><span class="at-tag">since</span> 0.5</li></ul></div></div><div class="odoc-spec"><div class="spec value" id="val-(%>)" class="anchored"><a href="#val-(%>)" class="anchor"></a><code><span><span class="keyword">val</span> (%>) : <span><span>(<span><span class="type-var">'a</span> <span class="arrow">-></span></span> <span class="type-var">'b</span>)</span> <span class="arrow">-></span></span> <span><span>(<span><span class="type-var">'b</span> <span class="arrow">-></span></span> <span class="type-var">'c</span>)</span> <span class="arrow">-></span></span> <span><span class="type-var">'a</span> <span class="arrow">-></span></span> <span class="type-var">'c</span></span></code></div><div class="spec-doc"><p><code>(f %> g) x</code> or <code>(%>) f g x</code> is <code>g (f x)</code>. Alias to <code>compose</code>.</p></div></div><div class="odoc-spec"><div class="spec value" id="val-(%)" class="anchored"><a href="#val-(%)" class="anchor"></a><code><span><span class="keyword">val</span> (%) : <span><span>(<span><span class="type-var">'b</span> <span class="arrow">-></span></span> <span class="type-var">'c</span>)</span> <span class="arrow">-></span></span> <span><span>(<span><span class="type-var">'a</span> <span class="arrow">-></span></span> <span class="type-var">'b</span>)</span> <span class="arrow">-></span></span> <span><span class="type-var">'a</span> <span class="arrow">-></span></span> <span class="type-var">'c</span></span></code></div><div class="spec-doc"><p><code>(f % g) x</code> or <code>(%) f g x</code> is <code>f (g x)</code>. Mathematical composition.</p></div></div></details></div><h3 id="monad"><a href="#monad" class="anchor"></a>Monad</h3><p>Functions with a fixed domain are monads in their codomain.</p><div class="odoc-spec"><div class="spec module" id="module-Monad" class="anchored"><a href="#module-Monad" class="anchor"></a><code><span><span class="keyword">module</span> </span><span><a href="Monad/index.html">Monad</a></span><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></span></code></div></div></div></body></html> |