ocaml-containers/dev/containers/CCRandom/index.html
2022-12-22 22:16:34 +00:00

17 lines
No EOL
29 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>CCRandom (containers.CCRandom)</title><link rel="stylesheet" href="../../odoc.css"/><meta charset="utf-8"/><meta name="generator" content="odoc 2.2.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> &#x00BB; CCRandom</nav><header class="odoc-preamble"><h1>Module <code><span>CCRandom</span></code></h1><p>Random Generators</p></header><nav class="odoc-toc"><ul><li><a href="#applicative">Applicative</a></li><li><a href="#run-a-generator">Run a generator</a></li></ul></nav><div class="odoc-content"><div class="odoc-include"><div class="spec-doc"><p><a href="https://caml.inria.fr/pub/docs/manual-ocaml/libref/Random.html">Documentation for the standard Random module</a></p></div><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="keyword">struct</span> <span class="keyword">include</span> <span class="xref-unresolved">Stdlib</span>.Random <span class="keyword">end</span></span></code></summary><div class="odoc-spec"><div class="spec value anchored" id="val-init"><a href="#val-init" class="anchor"></a><code><span><span class="keyword">val</span> init : <span>int <span class="arrow">&#45;&gt;</span></span> unit</span></code></div></div><div class="odoc-spec"><div class="spec value anchored" id="val-full_init"><a href="#val-full_init" class="anchor"></a><code><span><span class="keyword">val</span> full_init : <span><span>int array</span> <span class="arrow">&#45;&gt;</span></span> unit</span></code></div></div><div class="odoc-spec"><div class="spec value anchored" id="val-self_init"><a href="#val-self_init" class="anchor"></a><code><span><span class="keyword">val</span> self_init : <span>unit <span class="arrow">&#45;&gt;</span></span> unit</span></code></div></div><div class="odoc-spec"><div class="spec value anchored" id="val-bits"><a href="#val-bits" class="anchor"></a><code><span><span class="keyword">val</span> bits : <span>unit <span class="arrow">&#45;&gt;</span></span> int</span></code></div></div><div class="odoc-spec"><div class="spec value anchored" id="val-full_int"><a href="#val-full_int" class="anchor"></a><code><span><span class="keyword">val</span> full_int : <span>int <span class="arrow">&#45;&gt;</span></span> int</span></code></div></div><div class="odoc-spec"><div class="spec value anchored" id="val-int32"><a href="#val-int32" class="anchor"></a><code><span><span class="keyword">val</span> int32 : <span><span class="xref-unresolved">Stdlib</span>.Int32.t <span class="arrow">&#45;&gt;</span></span> <span class="xref-unresolved">Stdlib</span>.Int32.t</span></code></div></div><div class="odoc-spec"><div class="spec value anchored" id="val-nativeint"><a href="#val-nativeint" class="anchor"></a><code><span><span class="keyword">val</span> nativeint : <span><span class="xref-unresolved">Stdlib</span>.Nativeint.t <span class="arrow">&#45;&gt;</span></span> <span class="xref-unresolved">Stdlib</span>.Nativeint.t</span></code></div></div><div class="odoc-spec"><div class="spec value anchored" id="val-int64"><a href="#val-int64" class="anchor"></a><code><span><span class="keyword">val</span> int64 : <span><span class="xref-unresolved">Stdlib</span>.Int64.t <span class="arrow">&#45;&gt;</span></span> <span class="xref-unresolved">Stdlib</span>.Int64.t</span></code></div></div><div class="odoc-spec"><div class="spec value anchored" id="val-bool"><a href="#val-bool" class="anchor"></a><code><span><span class="keyword">val</span> bool : <span>unit <span class="arrow">&#45;&gt;</span></span> bool</span></code></div></div><div class="odoc-spec"><div class="spec value anchored" id="val-bits32"><a href="#val-bits32" class="anchor"></a><code><span><span class="keyword">val</span> bits32 : <span>unit <span class="arrow">&#45;&gt;</span></span> <span class="xref-unresolved">Stdlib</span>.Int32.t</span></code></div></div><div class="odoc-spec"><div class="spec value anchored" id="val-bits64"><a href="#val-bits64" class="anchor"></a><code><span><span class="keyword">val</span> bits64 : <span>unit <span class="arrow">&#45;&gt;</span></span> <span class="xref-unresolved">Stdlib</span>.Int64.t</span></code></div></div><div class="odoc-spec"><div class="spec value anchored" id="val-nativebits"><a href="#val-nativebits" class="anchor"></a><code><span><span class="keyword">val</span> nativebits : <span>unit <span class="arrow">&#45;&gt;</span></span> <span class="xref-unresolved">Stdlib</span>.Nativeint.t</span></code></div></div><div class="odoc-spec"><div class="spec module anchored" id="module-State"><a href="#module-State" class="anchor"></a><code><span><span class="keyword">module</span> State</span><span> : <span class="keyword">sig</span> ... <span class="keyword">end</span></span></code></div></div><div class="odoc-spec"><div class="spec value anchored" id="val-get_state"><a href="#val-get_state" class="anchor"></a><code><span><span class="keyword">val</span> get_state : <span>unit <span class="arrow">&#45;&gt;</span></span> <span class="xref-unresolved">State</span>.t</span></code></div></div><div class="odoc-spec"><div class="spec value anchored" id="val-set_state"><a href="#val-set_state" class="anchor"></a><code><span><span class="keyword">val</span> set_state : <span><span class="xref-unresolved">State</span>.t <span class="arrow">&#45;&gt;</span></span> unit</span></code></div></div></details></div><div class="odoc-spec"><div class="spec type anchored" id="type-state"><a href="#type-state" class="anchor"></a><code><span><span class="keyword">type</span> state</span><span> = <span class="xref-unresolved">Stdlib</span>.Random.State.t</span></code></div></div><div class="odoc-spec"><div class="spec type anchored" id="type-t"><a href="#type-t" class="anchor"></a><code><span><span class="keyword">type</span> <span>'a t</span></span><span> = <span><a href="#type-state">state</a> <span class="arrow">&#45;&gt;</span></span> <span class="type-var">'a</span></span></code></div><div class="spec-doc"><p>Random generator for values of type <code>'a</code>.</p></div></div><div class="odoc-spec"><div class="spec type anchored" id="type-random_gen"><a href="#type-random_gen" class="anchor"></a><code><span><span class="keyword">type</span> <span>'a random_gen</span></span><span> = <span><span class="type-var">'a</span> <a href="#type-t">t</a></span></span></code></div></div><div class="odoc-spec"><div class="spec value anchored" id="val-return"><a href="#val-return" class="anchor"></a><code><span><span class="keyword">val</span> return : <span><span class="type-var">'a</span> <span class="arrow">&#45;&gt;</span></span> <span><span class="type-var">'a</span> <a href="#type-t">t</a></span></span></code></div><div class="spec-doc"><p><code>return x</code> is the generator that always returns <code>x</code>. Example: <code>let random_int = return 4 (* fair dice roll *)</code>.</p></div></div><div class="odoc-spec"><div class="spec value anchored" id="val-flat_map"><a href="#val-flat_map" class="anchor"></a><code><span><span class="keyword">val</span> flat_map : <span><span>(<span><span class="type-var">'a</span> <span class="arrow">&#45;&gt;</span></span> <span><span class="type-var">'b</span> <a href="#type-t">t</a></span>)</span> <span class="arrow">&#45;&gt;</span></span> <span><span><span class="type-var">'a</span> <a href="#type-t">t</a></span> <span class="arrow">&#45;&gt;</span></span> <span><span class="type-var">'b</span> <a href="#type-t">t</a></span></span></code></div><div class="spec-doc"><p><code>flat_map f g st</code> is <code>f (g st) st</code>.</p></div></div><div class="odoc-spec"><div class="spec value anchored" id="val-(&gt;&gt;=)"><a href="#val-(&gt;&gt;=)" class="anchor"></a><code><span><span class="keyword">val</span> (&gt;&gt;=) : <span><span><span class="type-var">'a</span> <a href="#type-t">t</a></span> <span class="arrow">&#45;&gt;</span></span> <span><span>(<span><span class="type-var">'a</span> <span class="arrow">&#45;&gt;</span></span> <span><span class="type-var">'b</span> <a href="#type-t">t</a></span>)</span> <span class="arrow">&#45;&gt;</span></span> <span><span class="type-var">'b</span> <a href="#type-t">t</a></span></span></code></div><div class="spec-doc"><p>Monadic <code>bind</code>.</p></div></div><div class="odoc-spec"><div class="spec value anchored" id="val-map"><a href="#val-map" class="anchor"></a><code><span><span class="keyword">val</span> map : <span><span>(<span><span class="type-var">'a</span> <span class="arrow">&#45;&gt;</span></span> <span class="type-var">'b</span>)</span> <span class="arrow">&#45;&gt;</span></span> <span><span><span class="type-var">'a</span> <a href="#type-t">t</a></span> <span class="arrow">&#45;&gt;</span></span> <span><span class="type-var">'b</span> <a href="#type-t">t</a></span></span></code></div><div class="spec-doc"><p><code>map f g st</code> is <code>f (g st)</code>.</p></div></div><div class="odoc-spec"><div class="spec value anchored" id="val-(&gt;|=)"><a href="#val-(&gt;|=)" class="anchor"></a><code><span><span class="keyword">val</span> (&gt;|=) : <span><span><span class="type-var">'a</span> <a href="#type-t">t</a></span> <span class="arrow">&#45;&gt;</span></span> <span><span>(<span><span class="type-var">'a</span> <span class="arrow">&#45;&gt;</span></span> <span class="type-var">'b</span>)</span> <span class="arrow">&#45;&gt;</span></span> <span><span class="type-var">'b</span> <a href="#type-t">t</a></span></span></code></div></div><div class="odoc-spec"><div class="spec value anchored" id="val-delay"><a href="#val-delay" class="anchor"></a><code><span><span class="keyword">val</span> delay : <span><span>(<span>unit <span class="arrow">&#45;&gt;</span></span> <span><span class="type-var">'a</span> <a href="#type-t">t</a></span>)</span> <span class="arrow">&#45;&gt;</span></span> <span><span class="type-var">'a</span> <a href="#type-t">t</a></span></span></code></div><div class="spec-doc"><p>Delay evaluation. Useful for side-effectful generators that need some code to run for every call. Example:</p><pre class="language-ocaml"><code>let gensym = let r = ref 0 in fun () -&gt; incr r; !r ;;
delay (fun () -&gt;
let name = gensym() in
small_int &gt;&gt;= fun i -&gt; return (name,i)
)</code></pre><ul class="at-tags"><li class="since"><span class="at-tag">since</span> 0.4</li></ul></div></div><div class="odoc-spec"><div class="spec value anchored" id="val-choose"><a href="#val-choose" class="anchor"></a><code><span><span class="keyword">val</span> choose : <span><span><span><span class="type-var">'a</span> <a href="#type-t">t</a></span> list</span> <span class="arrow">&#45;&gt;</span></span> <span><span><span class="type-var">'a</span> option</span> <a href="#type-t">t</a></span></span></code></div><div class="spec-doc"><p>Choose a generator within the list.</p></div></div><div class="odoc-spec"><div class="spec value anchored" id="val-choose_exn"><a href="#val-choose_exn" class="anchor"></a><code><span><span class="keyword">val</span> choose_exn : <span><span><span><span class="type-var">'a</span> <a href="#type-t">t</a></span> list</span> <span class="arrow">&#45;&gt;</span></span> <span><span class="type-var">'a</span> <a href="#type-t">t</a></span></span></code></div><div class="spec-doc"><p>Like <a href="#val-choose"><code>choose</code></a> but without option.</p><ul class="at-tags"><li class="raises"><span class="at-tag">raises</span> <span class="value">Invalid_argument</span> <p>if the list is empty.</p></li></ul></div></div><div class="odoc-spec"><div class="spec value anchored" id="val-choose_array"><a href="#val-choose_array" class="anchor"></a><code><span><span class="keyword">val</span> choose_array : <span><span><span><span class="type-var">'a</span> <a href="#type-t">t</a></span> array</span> <span class="arrow">&#45;&gt;</span></span> <span><span><span class="type-var">'a</span> option</span> <a href="#type-t">t</a></span></span></code></div><div class="spec-doc"><p>Choose a generator within the array.</p></div></div><div class="odoc-spec"><div class="spec value anchored" id="val-choose_return"><a href="#val-choose_return" class="anchor"></a><code><span><span class="keyword">val</span> choose_return : <span><span><span class="type-var">'a</span> list</span> <span class="arrow">&#45;&gt;</span></span> <span><span class="type-var">'a</span> <a href="#type-t">t</a></span></span></code></div><div class="spec-doc"><p>Choose among the list.</p><ul class="at-tags"><li class="raises"><span class="at-tag">raises</span> <span class="value">Invalid_argument</span> <p>if the list is empty.</p></li></ul></div></div><div class="odoc-spec"><div class="spec value anchored" id="val-replicate"><a href="#val-replicate" class="anchor"></a><code><span><span class="keyword">val</span> replicate : <span>int <span class="arrow">&#45;&gt;</span></span> <span><span><span class="type-var">'a</span> <a href="#type-t">t</a></span> <span class="arrow">&#45;&gt;</span></span> <span><span><span class="type-var">'a</span> list</span> <a href="#type-t">t</a></span></span></code></div><div class="spec-doc"><p><code>replicate n g</code> makes a list of <code>n</code> elements which are all generated randomly using <code>g</code>.</p></div></div><div class="odoc-spec"><div class="spec value anchored" id="val-sample_without_duplicates"><a href="#val-sample_without_duplicates" class="anchor"></a><code><span><span class="keyword">val</span> sample_without_duplicates :
<span>cmp:<span>(<span><span class="type-var">'a</span> <span class="arrow">&#45;&gt;</span></span> <span><span class="type-var">'a</span> <span class="arrow">&#45;&gt;</span></span> int)</span> <span class="arrow">&#45;&gt;</span></span>
<span>int <span class="arrow">&#45;&gt;</span></span>
<span><span><span class="type-var">'a</span> <a href="#type-t">t</a></span> <span class="arrow">&#45;&gt;</span></span>
<span><span><span class="type-var">'a</span> list</span> <a href="#type-t">t</a></span></span></code></div><div class="spec-doc"><p><code>sample_without_replacement n g</code> makes a list of <code>n</code> elements which are all generated randomly using <code>g</code> with the added constraint that none of the generated random values are equal.</p><ul class="at-tags"><li class="raises"><span class="at-tag">raises</span> <span class="value">Invalid_argument</span> <p>if <code>n &lt;= 0</code>.</p></li></ul><ul class="at-tags"><li class="since"><span class="at-tag">since</span> 2.4</li></ul></div></div><div class="odoc-spec"><div class="spec value anchored" id="val-list_seq"><a href="#val-list_seq" class="anchor"></a><code><span><span class="keyword">val</span> list_seq : <span><span><span><span class="type-var">'a</span> <a href="#type-t">t</a></span> list</span> <span class="arrow">&#45;&gt;</span></span> <span><span><span class="type-var">'a</span> list</span> <a href="#type-t">t</a></span></span></code></div><div class="spec-doc"><p>Build random lists from lists of random generators.</p><ul class="at-tags"><li class="since"><span class="at-tag">since</span> 0.4</li></ul></div></div><div class="odoc-spec"><div class="spec exception anchored" id="exception-Pick_from_empty"><a href="#exception-Pick_from_empty" class="anchor"></a><code><span><span class="keyword">exception</span> </span><span><span class="exception">Pick_from_empty</span></span></code></div><div class="spec-doc"><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 anchored" id="val-pick_list"><a href="#val-pick_list" class="anchor"></a><code><span><span class="keyword">val</span> pick_list : <span><span><span class="type-var">'a</span> list</span> <span class="arrow">&#45;&gt;</span></span> <span><span class="type-var">'a</span> <a href="#type-t">t</a></span></span></code></div><div class="spec-doc"><p>Pick an element at random from the list.</p><ul class="at-tags"><li class="raises"><span class="at-tag">raises</span> <span class="value">Pick_from_empty</span> <p>if the list is empty.</p></li></ul><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 anchored" id="val-pick_array"><a href="#val-pick_array" class="anchor"></a><code><span><span class="keyword">val</span> pick_array : <span><span><span class="type-var">'a</span> array</span> <span class="arrow">&#45;&gt;</span></span> <span><span class="type-var">'a</span> <a href="#type-t">t</a></span></span></code></div><div class="spec-doc"><p>Pick an element at random from the array.</p><ul class="at-tags"><li class="raises"><span class="at-tag">raises</span> <span class="value">Pick_from_empty</span> <p>if the array is empty.</p></li></ul><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 anchored" id="val-small_int"><a href="#val-small_int" class="anchor"></a><code><span><span class="keyword">val</span> small_int : <span>int <a href="#type-t">t</a></span></span></code></div><div class="spec-doc"><p>A small int (100).</p></div></div><div class="odoc-spec"><div class="spec value anchored" id="val-int"><a href="#val-int" class="anchor"></a><code><span><span class="keyword">val</span> int : <span>int <span class="arrow">&#45;&gt;</span></span> <span>int <a href="#type-t">t</a></span></span></code></div><div class="spec-doc"><p>Random int within the given range.</p></div></div><div class="odoc-spec"><div class="spec value anchored" id="val-int_range"><a href="#val-int_range" class="anchor"></a><code><span><span class="keyword">val</span> int_range : <span>int <span class="arrow">&#45;&gt;</span></span> <span>int <span class="arrow">&#45;&gt;</span></span> <span>int <a href="#type-t">t</a></span></span></code></div><div class="spec-doc"><p>Inclusive range.</p></div></div><div class="odoc-spec"><div class="spec value anchored" id="val-small_float"><a href="#val-small_float" class="anchor"></a><code><span><span class="keyword">val</span> small_float : <span>float <a href="#type-t">t</a></span></span></code></div><div class="spec-doc"><p>A reasonably small float (100.0).</p><ul class="at-tags"><li class="since"><span class="at-tag">since</span> 0.6.1</li></ul></div></div><div class="odoc-spec"><div class="spec value anchored" id="val-float"><a href="#val-float" class="anchor"></a><code><span><span class="keyword">val</span> float : <span>float <span class="arrow">&#45;&gt;</span></span> <span>float <a href="#type-t">t</a></span></span></code></div><div class="spec-doc"><p>Random float within the given range.</p><ul class="at-tags"><li class="since"><span class="at-tag">since</span> 0.6.1</li></ul></div></div><div class="odoc-spec"><div class="spec value anchored" id="val-float_range"><a href="#val-float_range" class="anchor"></a><code><span><span class="keyword">val</span> float_range : <span>float <span class="arrow">&#45;&gt;</span></span> <span>float <span class="arrow">&#45;&gt;</span></span> <span>float <a href="#type-t">t</a></span></span></code></div><div class="spec-doc"><p>Inclusive range. <code>float_range a b</code> assumes <code>a &lt; b</code>.</p><ul class="at-tags"><li class="since"><span class="at-tag">since</span> 0.6.1</li></ul></div></div><div class="odoc-spec"><div class="spec value anchored" id="val-split"><a href="#val-split" class="anchor"></a><code><span><span class="keyword">val</span> split : <span>int <span class="arrow">&#45;&gt;</span></span> <span><span><span>(int * int)</span> option</span> <a href="#type-t">t</a></span></span></code></div><div class="spec-doc"><p>Split a positive value <code>n</code> into <code>n1,n2</code> where <code>n = n1 + n2</code>.</p><ul class="at-tags"><li class="returns"><span class="at-tag">returns</span> <p><code>None</code> if the value is too small.</p></li></ul></div></div><div class="odoc-spec"><div class="spec value anchored" id="val-split_list"><a href="#val-split_list" class="anchor"></a><code><span><span class="keyword">val</span> split_list : <span>int <span class="arrow">&#45;&gt;</span></span> <span>len:int <span class="arrow">&#45;&gt;</span></span> <span><span><span>int list</span> option</span> <a href="#type-t">t</a></span></span></code></div><div class="spec-doc"><p>Split a value <code>n</code> into a list of values whose sum is <code>n</code> and whose length is <code>length</code>. The list is never empty and does not contain <code>0</code>.</p><ul class="at-tags"><li class="raises"><span class="at-tag">raises</span> <span class="value">Invalid_argument</span> <p>if <code>len &lt;= 1</code>.</p></li></ul><ul class="at-tags"><li class="returns"><span class="at-tag">returns</span> <p><code>None</code> if the value is too small.</p></li></ul></div></div><div class="odoc-spec"><div class="spec value anchored" id="val-retry"><a href="#val-retry" class="anchor"></a><code><span><span class="keyword">val</span> retry : <span>?max:int <span class="arrow">&#45;&gt;</span></span> <span><span><span><span class="type-var">'a</span> option</span> <a href="#type-t">t</a></span> <span class="arrow">&#45;&gt;</span></span> <span><span><span class="type-var">'a</span> option</span> <a href="#type-t">t</a></span></span></code></div><div class="spec-doc"><p><code>retry g</code> calls <code>g</code> until it returns some value, or until the maximum number of retries was reached. If <code>g</code> fails, then it counts for one iteration, and the generator retries.</p><ul class="at-tags"><li class="parameter"><span class="at-tag">parameter</span> <span class="value">max:</span> <p>maximum number of retries. Default <code>10</code>.</p></li></ul></div></div><div class="odoc-spec"><div class="spec value anchored" id="val-try_successively"><a href="#val-try_successively" class="anchor"></a><code><span><span class="keyword">val</span> try_successively : <span><span><span><span><span class="type-var">'a</span> option</span> <a href="#type-t">t</a></span> list</span> <span class="arrow">&#45;&gt;</span></span> <span><span><span class="type-var">'a</span> option</span> <a href="#type-t">t</a></span></span></code></div><div class="spec-doc"><p><code>try_successively l</code> tries each generator of <code>l</code>, one after the other. If some generator succeeds its result is returned, else the next generator is tried.</p></div></div><div class="odoc-spec"><div class="spec value anchored" id="val-(&lt;?&gt;)"><a href="#val-(&lt;?&gt;)" class="anchor"></a><code><span><span class="keyword">val</span> (&lt;?&gt;) : <span><span><span><span class="type-var">'a</span> option</span> <a href="#type-t">t</a></span> <span class="arrow">&#45;&gt;</span></span> <span><span><span><span class="type-var">'a</span> option</span> <a href="#type-t">t</a></span> <span class="arrow">&#45;&gt;</span></span> <span><span><span class="type-var">'a</span> option</span> <a href="#type-t">t</a></span></span></code></div><div class="spec-doc"><p><code>a &lt;?&gt; b</code> is a choice operator. It first tries <code>a</code>, and returns its result if successful. If <code>a</code> fails, then <code>b</code> is returned.</p></div></div><div class="odoc-spec"><div class="spec value anchored" id="val-fix"><a href="#val-fix" class="anchor"></a><code><span><span class="keyword">val</span> fix :
<span>?sub1:<span><span>(<span><span><span class="type-var">'a</span> <a href="#type-t">t</a></span> <span class="arrow">&#45;&gt;</span></span> <span><span class="type-var">'a</span> <a href="#type-t">t</a></span>)</span> list</span> <span class="arrow">&#45;&gt;</span></span>
<span>?sub2:<span><span>(<span><span><span class="type-var">'a</span> <a href="#type-t">t</a></span> <span class="arrow">&#45;&gt;</span></span> <span><span><span class="type-var">'a</span> <a href="#type-t">t</a></span> <span class="arrow">&#45;&gt;</span></span> <span><span class="type-var">'a</span> <a href="#type-t">t</a></span>)</span> list</span> <span class="arrow">&#45;&gt;</span></span>
<span>?subn:<span><span>(<span>int <a href="#type-t">t</a></span> * <span>(<span><span><span><span class="type-var">'a</span> list</span> <a href="#type-t">t</a></span> <span class="arrow">&#45;&gt;</span></span> <span><span class="type-var">'a</span> <a href="#type-t">t</a></span>)</span>)</span> list</span> <span class="arrow">&#45;&gt;</span></span>
<span>base:<span><span class="type-var">'a</span> <a href="#type-t">t</a></span> <span class="arrow">&#45;&gt;</span></span>
<span><span>int <a href="#type-t">t</a></span> <span class="arrow">&#45;&gt;</span></span>
<span><span class="type-var">'a</span> <a href="#type-t">t</a></span></span></code></div><div class="spec-doc"><p>Recursion combinators, for building recursive values. The integer generator is used to provide fuel. The <code>sub_</code> generators should use their arguments only once!</p><ul class="at-tags"><li class="parameter"><span class="at-tag">parameter</span> <span class="value">sub1</span> <p>cases that recurse on one value.</p></li></ul><ul class="at-tags"><li class="parameter"><span class="at-tag">parameter</span> <span class="value">sub2</span> <p>cases that use the recursive gen twice.</p></li></ul><ul class="at-tags"><li class="parameter"><span class="at-tag">parameter</span> <span class="value">subn</span> <p>cases that use a list of recursive cases.</p></li></ul></div></div><h5 id="applicative"><a href="#applicative" class="anchor"></a>Applicative</h5><div class="odoc-spec"><div class="spec value anchored" id="val-pure"><a href="#val-pure" class="anchor"></a><code><span><span class="keyword">val</span> pure : <span><span class="type-var">'a</span> <span class="arrow">&#45;&gt;</span></span> <span><span class="type-var">'a</span> <a href="#type-t">t</a></span></span></code></div></div><div class="odoc-spec"><div class="spec value anchored" id="val-(&lt;*&gt;)"><a href="#val-(&lt;*&gt;)" class="anchor"></a><code><span><span class="keyword">val</span> (&lt;*&gt;) : <span><span><span>(<span><span class="type-var">'a</span> <span class="arrow">&#45;&gt;</span></span> <span class="type-var">'b</span>)</span> <a href="#type-t">t</a></span> <span class="arrow">&#45;&gt;</span></span> <span><span><span class="type-var">'a</span> <a href="#type-t">t</a></span> <span class="arrow">&#45;&gt;</span></span> <span><span class="type-var">'b</span> <a href="#type-t">t</a></span></span></code></div></div><div class="spec-doc"><p>Let operators on OCaml &gt;= 4.08.0, nothing otherwise</p><ul class="at-tags"><li class="since"><span class="at-tag">since</span> 2.8</li></ul></div><div class="odoc-spec"><div class="spec value anchored" id="val-let+"><a href="#val-let+" class="anchor"></a><code><span><span class="keyword">val</span> let+ : <span><span><span class="type-var">'a</span> <a href="#type-t">t</a></span> <span class="arrow">&#45;&gt;</span></span> <span><span>(<span><span class="type-var">'a</span> <span class="arrow">&#45;&gt;</span></span> <span class="type-var">'b</span>)</span> <span class="arrow">&#45;&gt;</span></span> <span><span class="type-var">'b</span> <a href="#type-t">t</a></span></span></code></div></div><div class="odoc-spec"><div class="spec value anchored" id="val-and+"><a href="#val-and+" class="anchor"></a><code><span><span class="keyword">val</span> and+ : <span><span><span class="type-var">'a</span> <a href="#type-t">t</a></span> <span class="arrow">&#45;&gt;</span></span> <span><span><span class="type-var">'b</span> <a href="#type-t">t</a></span> <span class="arrow">&#45;&gt;</span></span> <span><span>(<span class="type-var">'a</span> * <span class="type-var">'b</span>)</span> <a href="#type-t">t</a></span></span></code></div></div><div class="odoc-spec"><div class="spec value anchored" id="val-let*"><a href="#val-let*" class="anchor"></a><code><span><span class="keyword">val</span> let* : <span><span><span class="type-var">'a</span> <a href="#type-t">t</a></span> <span class="arrow">&#45;&gt;</span></span> <span><span>(<span><span class="type-var">'a</span> <span class="arrow">&#45;&gt;</span></span> <span><span class="type-var">'b</span> <a href="#type-t">t</a></span>)</span> <span class="arrow">&#45;&gt;</span></span> <span><span class="type-var">'b</span> <a href="#type-t">t</a></span></span></code></div></div><div class="odoc-spec"><div class="spec value anchored" id="val-and*"><a href="#val-and*" class="anchor"></a><code><span><span class="keyword">val</span> and* : <span><span><span class="type-var">'a</span> <a href="#type-t">t</a></span> <span class="arrow">&#45;&gt;</span></span> <span><span><span class="type-var">'b</span> <a href="#type-t">t</a></span> <span class="arrow">&#45;&gt;</span></span> <span><span>(<span class="type-var">'a</span> * <span class="type-var">'b</span>)</span> <a href="#type-t">t</a></span></span></code></div></div><h5 id="run-a-generator"><a href="#run-a-generator" class="anchor"></a>Run a generator</h5><div class="odoc-spec"><div class="spec value anchored" id="val-run"><a href="#val-run" class="anchor"></a><code><span><span class="keyword">val</span> run : <span>?st:<a href="#type-state">state</a> <span class="arrow">&#45;&gt;</span></span> <span><span><span class="type-var">'a</span> <a href="#type-t">t</a></span> <span class="arrow">&#45;&gt;</span></span> <span class="type-var">'a</span></span></code></div><div class="spec-doc"><p>Using a random state (possibly the one in argument) run a generator.</p></div></div></div></body></html>