diff options
author | Stephane Glondu <steph@glondu.net> | 2013-04-10 10:30:15 +0200 |
---|---|---|
committer | Stephane Glondu <steph@glondu.net> | 2013-04-10 10:30:15 +0200 |
commit | ea22025182ae4e40d673d0576d0a16c93fb9ec94 (patch) | |
tree | 08f98bd5e9e4bea905769438d15b517d5ee0d257 | |
parent | de0725683976890da81355762e290cfbf448eb69 (diff) | |
parent | 714ae237d944fe3b532e53888b2f3ef7ceb6c407 (diff) |
Merge tag 'upstream/0.9.4'
Upstream version 0.9.4
43 files changed, 2281 insertions, 1725 deletions
@@ -1,3 +1,9 @@ +v0.9.4 2012-08-05 Lausanne +-------------------------- + +- OASIS 0.3.0 support. + + v0.9.3 2012-03-17 La Forclaz (VS) --------------------------------- @@ -1,6 +1,6 @@ ------------------------------------------------------------------------------- React - Declarative events and signals for OCaml - Release 0.9.3 + Release 0.9.4 ------------------------------------------------------------------------------- React is an OCaml module for functional reactive programming (FRP). It @@ -34,7 +34,7 @@ use the sources the way you want. For example if you use `ocamlbuild` you can issue the following commands from the root directory of your project : - ln -s /path/to/react-0.9.3/src react + ln -s /path/to/react-0.9.4/src react echo "<react> : include" >> _tags @@ -1,6 +1,6 @@ OASISFormat: 0.3 Name: react -Version: 0.9.3 +Version: 0.9.4 Synopsis: Declarative events and signals for OCaml Authors: Daniel Bünzli <daniel.buenzli at erratique.ch> Copyrights: (c) 2009-2012 Daniel C. Bünzli @@ -1,5 +1,5 @@ # OASIS_START -# DO NOT EDIT (digest: 6ba567c91fd285f0e12200b94c89b214) +# DO NOT EDIT (digest: 3c0d04860d57a46187f9c6a24d463425) # Ignore VCS directories, you can use the same kind of rule outside # OASIS_START/STOP if you want to exclude directories that contains # useless stuff for the build process @@ -14,7 +14,7 @@ "_darcs": -traverse "_darcs": not_hygienic # Library react -"src": include +"src/react.cmxs": use_react # Executable clock <test/clock.{native,byte}>: use_react <test/clock.{native,byte}>: pkg_unix diff --git a/doc/React.E.html b/doc/React.E.html index f4be887..970206c 100644 --- a/doc/React.E.html +++ b/doc/React.E.html @@ -17,11 +17,10 @@ <title>React.E</title> </head> <body> -<div class="navbar"> <a href="React.html">Up</a> - <a href="React.S.html">Next</a> +<div class="navbar"> <a class="up" href="React.html" title="React">Up</a> + <a class="post" href="React.S.html" title="React.S">Next</a> </div> -<center><h1>Module <a href="type_React.E.html">React.E</a></h1></center> -<br> +<h1>Module <a href="type_React.E.html">React.E</a></h1> <pre><span class="keyword">module</span> E: <code class="code"><span class="keyword">sig</span></code> <a href="React.E.html">..</a> <code class="code"><span class="keyword">end</span></code></pre>Event combinators. <p> @@ -111,7 +110,7 @@ A never occuring event. For all t, [<code class="code">never</code>]<sub class=" </ul> <br> </div> -<pre><span id="VALstamp"><span class="keyword">val</span> stamp</span> : <code class="type">'a <a href="React.html#TYPEevent">React.event</a> -> 'b -> 'b <a href="React.html#TYPEevent">React.event</a></code></pre><div class="info"> +<pre><span id="VALstamp"><span class="keyword">val</span> stamp</span> : <code class="type">'b <a href="React.html#TYPEevent">React.event</a> -> 'a -> 'a <a href="React.html#TYPEevent">React.event</a></code></pre><div class="info"> <code class="code">stamp e v</code> is <code class="code">map (<span class="keyword">fun</span> _ <span class="keywordsign">-></span> v) e</code>.<br> </div> <pre><span id="VALfilter"><span class="keyword">val</span> filter</span> : <code class="type">('a -> bool) -> 'a <a href="React.html#TYPEevent">React.event</a> -> 'a <a href="React.html#TYPEevent">React.event</a></code></pre><div class="info"> @@ -163,7 +162,7 @@ A never occuring event. For all t, [<code class="code">never</code>]<sub class=" </ul> <br> </div> -<pre><span id="VALdismiss"><span class="keyword">val</span> dismiss</span> : <code class="type">'a <a href="React.html#TYPEevent">React.event</a> -> 'b <a href="React.html#TYPEevent">React.event</a> -> 'b <a href="React.html#TYPEevent">React.event</a></code></pre><div class="info"> +<pre><span id="VALdismiss"><span class="keyword">val</span> dismiss</span> : <code class="type">'b <a href="React.html#TYPEevent">React.event</a> -> 'a <a href="React.html#TYPEevent">React.event</a> -> 'a <a href="React.html#TYPEevent">React.event</a></code></pre><div class="info"> <code class="code">dismiss c e</code> is the occurences of <code class="code">e</code> except the ones when <code class="code">c</code> occurs. <ul> <li>[<code class="code">dimiss c e</code>]<sub class="subscript">t</sub> <code class="code">= <span class="constructor">Some</span> v</code> diff --git a/doc/React.S.Bool.html b/doc/React.S.Bool.html index d05005f..2d15c95 100644 --- a/doc/React.S.Bool.html +++ b/doc/React.S.Bool.html @@ -13,10 +13,9 @@ <link title="React" rel="Chapter" href="React.html"><title>React.S.Bool</title> </head> <body> -<div class="navbar"> <a href="React.S.html">Up</a> - <a href="React.S.Int.html">Next</a> +<div class="navbar"> <a class="up" href="React.S.html" title="React.S">Up</a> + <a class="post" href="React.S.Int.html" title="React.S.Int">Next</a> </div> -<center><h1>Module <a href="type_React.S.Bool.html">React.S.Bool</a></h1></center> -<br> +<h1>Module <a href="type_React.S.Bool.html">React.S.Bool</a></h1> <pre><span class="keyword">module</span> Bool: <code class="code"><span class="keyword">sig</span></code> <a href="React.S.Bool.html">..</a> <code class="code"><span class="keyword">end</span></code></pre><hr width="100%"> <pre><span id="VALnot"><span class="keyword">val</span> not</span> : <code class="type">bool <a href="React.html#TYPEsignal">React.signal</a> -> bool <a href="React.html#TYPEsignal">React.signal</a></code></pre><pre><span id="VAL(&&)"><span class="keyword">val</span> (&&)</span> : <code class="type">bool <a href="React.html#TYPEsignal">React.signal</a> -> bool <a href="React.html#TYPEsignal">React.signal</a> -> bool <a href="React.html#TYPEsignal">React.signal</a></code></pre><pre><span id="VAL(||)"><span class="keyword">val</span> (||)</span> : <code class="type">bool <a href="React.html#TYPEsignal">React.signal</a> -> bool <a href="React.html#TYPEsignal">React.signal</a> -> bool <a href="React.html#TYPEsignal">React.signal</a></code></pre></body></html>
\ No newline at end of file diff --git a/doc/React.S.Compare.html b/doc/React.S.Compare.html index 98d74fe..ef49348 100644 --- a/doc/React.S.Compare.html +++ b/doc/React.S.Compare.html @@ -14,11 +14,10 @@ <link title="React" rel="Chapter" href="React.html"><title>React.S.Compare</title> </head> <body> -<div class="navbar"><a href="React.S.Pair.html">Previous</a> - <a href="React.S.html">Up</a> - <a href="React.S.Make.html">Next</a> +<div class="navbar"><a class="pre" href="React.S.Pair.html" title="React.S.Pair">Previous</a> + <a class="up" href="React.S.html" title="React.S">Up</a> + <a class="post" href="React.S.Make.html" title="React.S.Make">Next</a> </div> -<center><h1>Module <a href="type_React.S.Compare.html">React.S.Compare</a></h1></center> -<br> +<h1>Module <a href="type_React.S.Compare.html">React.S.Compare</a></h1> <pre><span class="keyword">module</span> Compare: <code class="code"><span class="keyword">sig</span></code> <a href="React.S.Compare.html">..</a> <code class="code"><span class="keyword">end</span></code></pre><hr width="100%"> <pre><span id="VAL(=)"><span class="keyword">val</span> (=)</span> : <code class="type">'a <a href="React.html#TYPEsignal">React.signal</a> -> 'a <a href="React.html#TYPEsignal">React.signal</a> -> bool <a href="React.html#TYPEsignal">React.signal</a></code></pre><pre><span id="VAL(<>)"><span class="keyword">val</span> (<>)</span> : <code class="type">'a <a href="React.html#TYPEsignal">React.signal</a> -> 'a <a href="React.html#TYPEsignal">React.signal</a> -> bool <a href="React.html#TYPEsignal">React.signal</a></code></pre><pre><span id="VAL(<)"><span class="keyword">val</span> (<)</span> : <code class="type">'a <a href="React.html#TYPEsignal">React.signal</a> -> 'a <a href="React.html#TYPEsignal">React.signal</a> -> bool <a href="React.html#TYPEsignal">React.signal</a></code></pre><pre><span id="VAL(>)"><span class="keyword">val</span> (>)</span> : <code class="type">'a <a href="React.html#TYPEsignal">React.signal</a> -> 'a <a href="React.html#TYPEsignal">React.signal</a> -> bool <a href="React.html#TYPEsignal">React.signal</a></code></pre><pre><span id="VAL(<=)"><span class="keyword">val</span> (<=)</span> : <code class="type">'a <a href="React.html#TYPEsignal">React.signal</a> -> 'a <a href="React.html#TYPEsignal">React.signal</a> -> bool <a href="React.html#TYPEsignal">React.signal</a></code></pre><pre><span id="VAL(>=)"><span class="keyword">val</span> (>=)</span> : <code class="type">'a <a href="React.html#TYPEsignal">React.signal</a> -> 'a <a href="React.html#TYPEsignal">React.signal</a> -> bool <a href="React.html#TYPEsignal">React.signal</a></code></pre><pre><span id="VALcompare"><span class="keyword">val</span> compare</span> : <code class="type">'a <a href="React.html#TYPEsignal">React.signal</a> -> 'a <a href="React.html#TYPEsignal">React.signal</a> -> int <a href="React.html#TYPEsignal">React.signal</a></code></pre><pre><span id="VAL(==)"><span class="keyword">val</span> (==)</span> : <code class="type">'a <a href="React.html#TYPEsignal">React.signal</a> -> 'a <a href="React.html#TYPEsignal">React.signal</a> -> bool <a href="React.html#TYPEsignal">React.signal</a></code></pre><pre><span id="VAL(!=)"><span class="keyword">val</span> (!=)</span> : <code class="type">'a <a href="React.html#TYPEsignal">React.signal</a> -> 'a <a href="React.html#TYPEsignal">React.signal</a> -> bool <a href="React.html#TYPEsignal">React.signal</a></code></pre></body></html>
\ No newline at end of file diff --git a/doc/React.S.EqType.html b/doc/React.S.EqType.html index 43dd3a2..711c850 100644 --- a/doc/React.S.EqType.html +++ b/doc/React.S.EqType.html @@ -13,11 +13,10 @@ <link title="React" rel="Chapter" href="React.html"><title>React.S.EqType</title> </head> <body> -<div class="navbar"> <a href="React.S.html">Up</a> - <a href="React.S.S.html">Next</a> +<div class="navbar"> <a class="up" href="React.S.html" title="React.S">Up</a> + <a class="post" href="React.S.S.html" title="React.S.S">Next</a> </div> -<center><h1>Module type <a href="type_React.S.EqType.html">React.S.EqType</a></h1></center> -<br> +<h1>Module type <a href="type_React.S.EqType.html">React.S.EqType</a></h1> <pre><span class="keyword">module type</span> EqType = <code class="code"><span class="keyword">sig</span></code> <a href="React.S.EqType.html">..</a> <code class="code"><span class="keyword">end</span></code></pre>Input signature of <a href="React.S.Make.html"><code class="code"><span class="constructor">React</span>.<span class="constructor">S</span>.<span class="constructor">Make</span></code></a><br> <hr width="100%"> <pre><span id="TYPEt"><span class="keyword">type</span> <code class="type">'a</code> t</span> </pre> diff --git a/doc/React.S.Float.html b/doc/React.S.Float.html index da32c48..5719849 100644 --- a/doc/React.S.Float.html +++ b/doc/React.S.Float.html @@ -14,11 +14,10 @@ <link title="React" rel="Chapter" href="React.html"><title>React.S.Float</title> </head> <body> -<div class="navbar"><a href="React.S.Int.html">Previous</a> - <a href="React.S.html">Up</a> - <a href="React.S.Pair.html">Next</a> +<div class="navbar"><a class="pre" href="React.S.Int.html" title="React.S.Int">Previous</a> + <a class="up" href="React.S.html" title="React.S">Up</a> + <a class="post" href="React.S.Pair.html" title="React.S.Pair">Next</a> </div> -<center><h1>Module <a href="type_React.S.Float.html">React.S.Float</a></h1></center> -<br> +<h1>Module <a href="type_React.S.Float.html">React.S.Float</a></h1> <pre><span class="keyword">module</span> Float: <code class="code"><span class="keyword">sig</span></code> <a href="React.S.Float.html">..</a> <code class="code"><span class="keyword">end</span></code></pre><hr width="100%"> <pre><span id="VAL(~-.)"><span class="keyword">val</span> (~-.)</span> : <code class="type">float <a href="React.html#TYPEsignal">React.signal</a> -> float <a href="React.html#TYPEsignal">React.signal</a></code></pre><pre><span id="VAL(+.)"><span class="keyword">val</span> (+.)</span> : <code class="type">float <a href="React.html#TYPEsignal">React.signal</a> -> float <a href="React.html#TYPEsignal">React.signal</a> -> float <a href="React.html#TYPEsignal">React.signal</a></code></pre><pre><span id="VAL(-.)"><span class="keyword">val</span> (-.)</span> : <code class="type">float <a href="React.html#TYPEsignal">React.signal</a> -> float <a href="React.html#TYPEsignal">React.signal</a> -> float <a href="React.html#TYPEsignal">React.signal</a></code></pre><pre><span id="VAL( *. )"><span class="keyword">val</span> ( *. )</span> : <code class="type">float <a href="React.html#TYPEsignal">React.signal</a> -> float <a href="React.html#TYPEsignal">React.signal</a> -> float <a href="React.html#TYPEsignal">React.signal</a></code></pre><pre><span id="VAL(/.)"><span class="keyword">val</span> (/.)</span> : <code class="type">float <a href="React.html#TYPEsignal">React.signal</a> -> float <a href="React.html#TYPEsignal">React.signal</a> -> float <a href="React.html#TYPEsignal">React.signal</a></code></pre><pre><span id="VAL( ** )"><span class="keyword">val</span> ( ** )</span> : <code class="type">float <a href="React.html#TYPEsignal">React.signal</a> -> float <a href="React.html#TYPEsignal">React.signal</a> -> float <a href="React.html#TYPEsignal">React.signal</a></code></pre><pre><span id="VALsqrt"><span class="keyword">val</span> sqrt</span> : <code class="type">float <a href="React.html#TYPEsignal">React.signal</a> -> float <a href="React.html#TYPEsignal">React.signal</a></code></pre><pre><span id="VALexp"><span class="keyword">val</span> exp</span> : <code class="type">float <a href="React.html#TYPEsignal">React.signal</a> -> float <a href="React.html#TYPEsignal">React.signal</a></code></pre><pre><span id="VALlog"><span class="keyword">val</span> log</span> : <code class="type">float <a href="React.html#TYPEsignal">React.signal</a> -> float <a href="React.html#TYPEsignal">React.signal</a></code></pre><pre><span id="VALlog10"><span class="keyword">val</span> log10</span> : <code class="type">float <a href="React.html#TYPEsignal">React.signal</a> -> float <a href="React.html#TYPEsignal">React.signal</a></code></pre><pre><span id="VALcos"><span class="keyword">val</span> cos</span> : <code class="type">float <a href="React.html#TYPEsignal">React.signal</a> -> float <a href="React.html#TYPEsignal">React.signal</a></code></pre><pre><span id="VALsin"><span class="keyword">val</span> sin</span> : <code class="type">float <a href="React.html#TYPEsignal">React.signal</a> -> float <a href="React.html#TYPEsignal">React.signal</a></code></pre><pre><span id="VALtan"><span class="keyword">val</span> tan</span> : <code class="type">float <a href="React.html#TYPEsignal">React.signal</a> -> float <a href="React.html#TYPEsignal">React.signal</a></code></pre><pre><span id="VALacos"><span class="keyword">val</span> acos</span> : <code class="type">float <a href="React.html#TYPEsignal">React.signal</a> -> float <a href="React.html#TYPEsignal">React.signal</a></code></pre><pre><span id="VALasin"><span class="keyword">val</span> asin</span> : <code class="type">float <a href="React.html#TYPEsignal">React.signal</a> -> float <a href="React.html#TYPEsignal">React.signal</a></code></pre><pre><span id="VALatan"><span class="keyword">val</span> atan</span> : <code class="type">float <a href="React.html#TYPEsignal">React.signal</a> -> float <a href="React.html#TYPEsignal">React.signal</a></code></pre><pre><span id="VALatan2"><span class="keyword">val</span> atan2</span> : <code class="type">float <a href="React.html#TYPEsignal">React.signal</a> -> float <a href="React.html#TYPEsignal">React.signal</a> -> float <a href="React.html#TYPEsignal">React.signal</a></code></pre><pre><span id="VALcosh"><span class="keyword">val</span> cosh</span> : <code class="type">float <a href="React.html#TYPEsignal">React.signal</a> -> float <a href="React.html#TYPEsignal">React.signal</a></code></pre><pre><span id="VALsinh"><span class="keyword">val</span> sinh</span> : <code class="type">float <a href="React.html#TYPEsignal">React.signal</a> -> float <a href="React.html#TYPEsignal">React.signal</a></code></pre><pre><span id="VALtanh"><span class="keyword">val</span> tanh</span> : <code class="type">float <a href="React.html#TYPEsignal">React.signal</a> -> float <a href="React.html#TYPEsignal">React.signal</a></code></pre><pre><span id="VALceil"><span class="keyword">val</span> ceil</span> : <code class="type">float <a href="React.html#TYPEsignal">React.signal</a> -> float <a href="React.html#TYPEsignal">React.signal</a></code></pre><pre><span id="VALfloor"><span class="keyword">val</span> floor</span> : <code class="type">float <a href="React.html#TYPEsignal">React.signal</a> -> float <a href="React.html#TYPEsignal">React.signal</a></code></pre><pre><span id="VALabs_float"><span class="keyword">val</span> abs_float</span> : <code class="type">float <a href="React.html#TYPEsignal">React.signal</a> -> float <a href="React.html#TYPEsignal">React.signal</a></code></pre><pre><span id="VALmod_float"><span class="keyword">val</span> mod_float</span> : <code class="type">float <a href="React.html#TYPEsignal">React.signal</a> -> float <a href="React.html#TYPEsignal">React.signal</a> -> float <a href="React.html#TYPEsignal">React.signal</a></code></pre><pre><span id="VALfrexp"><span class="keyword">val</span> frexp</span> : <code class="type">float <a href="React.html#TYPEsignal">React.signal</a> -> (float * int) <a href="React.html#TYPEsignal">React.signal</a></code></pre><pre><span id="VALldexp"><span class="keyword">val</span> ldexp</span> : <code class="type">float <a href="React.html#TYPEsignal">React.signal</a> -> int <a href="React.html#TYPEsignal">React.signal</a> -> float <a href="React.html#TYPEsignal">React.signal</a></code></pre><pre><span id="VALmodf"><span class="keyword">val</span> modf</span> : <code class="type">float <a href="React.html#TYPEsignal">React.signal</a> -> (float * float) <a href="React.html#TYPEsignal">React.signal</a></code></pre><pre><span id="VALfloat"><span class="keyword">val</span> float</span> : <code class="type">int <a href="React.html#TYPEsignal">React.signal</a> -> float <a href="React.html#TYPEsignal">React.signal</a></code></pre><pre><span id="VALfloat_of_int"><span class="keyword">val</span> float_of_int</span> : <code class="type">int <a href="React.html#TYPEsignal">React.signal</a> -> float <a href="React.html#TYPEsignal">React.signal</a></code></pre><pre><span id="VALtruncate"><span class="keyword">val</span> truncate</span> : <code class="type">float <a href="React.html#TYPEsignal">React.signal</a> -> int <a href="React.html#TYPEsignal">React.signal</a></code></pre><pre><span id="VALint_of_float"><span class="keyword">val</span> int_of_float</span> : <code class="type">float <a href="React.html#TYPEsignal">React.signal</a> -> int <a href="React.html#TYPEsignal">React.signal</a></code></pre><pre><span id="VALinfinity"><span class="keyword">val</span> infinity</span> : <code class="type">float <a href="React.html#TYPEsignal">React.signal</a></code></pre><pre><span id="VALneg_infinity"><span class="keyword">val</span> neg_infinity</span> : <code class="type">float <a href="React.html#TYPEsignal">React.signal</a></code></pre><pre><span id="VALnan"><span class="keyword">val</span> nan</span> : <code class="type">float <a href="React.html#TYPEsignal">React.signal</a></code></pre><pre><span id="VALmax_float"><span class="keyword">val</span> max_float</span> : <code class="type">float <a href="React.html#TYPEsignal">React.signal</a></code></pre><pre><span id="VALmin_float"><span class="keyword">val</span> min_float</span> : <code class="type">float <a href="React.html#TYPEsignal">React.signal</a></code></pre><pre><span id="VALepsilon_float"><span class="keyword">val</span> epsilon_float</span> : <code class="type">float <a href="React.html#TYPEsignal">React.signal</a></code></pre><pre><span id="VALclassify_float"><span class="keyword">val</span> classify_float</span> : <code class="type">float <a href="React.html#TYPEsignal">React.signal</a> -> Pervasives.fpclass <a href="React.html#TYPEsignal">React.signal</a></code></pre></body></html>
\ No newline at end of file diff --git a/doc/React.S.Int.html b/doc/React.S.Int.html index b291c15..be6c82a 100644 --- a/doc/React.S.Int.html +++ b/doc/React.S.Int.html @@ -14,11 +14,10 @@ <link title="React" rel="Chapter" href="React.html"><title>React.S.Int</title> </head> <body> -<div class="navbar"><a href="React.S.Bool.html">Previous</a> - <a href="React.S.html">Up</a> - <a href="React.S.Float.html">Next</a> +<div class="navbar"><a class="pre" href="React.S.Bool.html" title="React.S.Bool">Previous</a> + <a class="up" href="React.S.html" title="React.S">Up</a> + <a class="post" href="React.S.Float.html" title="React.S.Float">Next</a> </div> -<center><h1>Module <a href="type_React.S.Int.html">React.S.Int</a></h1></center> -<br> +<h1>Module <a href="type_React.S.Int.html">React.S.Int</a></h1> <pre><span class="keyword">module</span> Int: <code class="code"><span class="keyword">sig</span></code> <a href="React.S.Int.html">..</a> <code class="code"><span class="keyword">end</span></code></pre><hr width="100%"> <pre><span id="VAL(~-)"><span class="keyword">val</span> (~-)</span> : <code class="type">int <a href="React.html#TYPEsignal">React.signal</a> -> int <a href="React.html#TYPEsignal">React.signal</a></code></pre><pre><span id="VALsucc"><span class="keyword">val</span> succ</span> : <code class="type">int <a href="React.html#TYPEsignal">React.signal</a> -> int <a href="React.html#TYPEsignal">React.signal</a></code></pre><pre><span id="VALpred"><span class="keyword">val</span> pred</span> : <code class="type">int <a href="React.html#TYPEsignal">React.signal</a> -> int <a href="React.html#TYPEsignal">React.signal</a></code></pre><pre><span id="VAL(+)"><span class="keyword">val</span> (+)</span> : <code class="type">int <a href="React.html#TYPEsignal">React.signal</a> -> int <a href="React.html#TYPEsignal">React.signal</a> -> int <a href="React.html#TYPEsignal">React.signal</a></code></pre><pre><span id="VAL(-)"><span class="keyword">val</span> (-)</span> : <code class="type">int <a href="React.html#TYPEsignal">React.signal</a> -> int <a href="React.html#TYPEsignal">React.signal</a> -> int <a href="React.html#TYPEsignal">React.signal</a></code></pre><pre><span id="VAL( * )"><span class="keyword">val</span> ( * )</span> : <code class="type">int <a href="React.html#TYPEsignal">React.signal</a> -> int <a href="React.html#TYPEsignal">React.signal</a> -> int <a href="React.html#TYPEsignal">React.signal</a></code></pre><pre><span id="VAL(mod)"><span class="keyword">val</span> (mod)</span> : <code class="type">int <a href="React.html#TYPEsignal">React.signal</a> -> int <a href="React.html#TYPEsignal">React.signal</a> -> int <a href="React.html#TYPEsignal">React.signal</a></code></pre><pre><span id="VALabs"><span class="keyword">val</span> abs</span> : <code class="type">int <a href="React.html#TYPEsignal">React.signal</a> -> int <a href="React.html#TYPEsignal">React.signal</a></code></pre><pre><span id="VALmax_int"><span class="keyword">val</span> max_int</span> : <code class="type">int <a href="React.html#TYPEsignal">React.signal</a></code></pre><pre><span id="VALmin_int"><span class="keyword">val</span> min_int</span> : <code class="type">int <a href="React.html#TYPEsignal">React.signal</a></code></pre><pre><span id="VAL(land)"><span class="keyword">val</span> (land)</span> : <code class="type">int <a href="React.html#TYPEsignal">React.signal</a> -> int <a href="React.html#TYPEsignal">React.signal</a> -> int <a href="React.html#TYPEsignal">React.signal</a></code></pre><pre><span id="VAL(lor)"><span class="keyword">val</span> (lor)</span> : <code class="type">int <a href="React.html#TYPEsignal">React.signal</a> -> int <a href="React.html#TYPEsignal">React.signal</a> -> int <a href="React.html#TYPEsignal">React.signal</a></code></pre><pre><span id="VAL(lxor)"><span class="keyword">val</span> (lxor)</span> : <code class="type">int <a href="React.html#TYPEsignal">React.signal</a> -> int <a href="React.html#TYPEsignal">React.signal</a> -> int <a href="React.html#TYPEsignal">React.signal</a></code></pre><pre><span id="VALlnot"><span class="keyword">val</span> lnot</span> : <code class="type">int <a href="React.html#TYPEsignal">React.signal</a> -> int <a href="React.html#TYPEsignal">React.signal</a></code></pre><pre><span id="VAL(lsl)"><span class="keyword">val</span> (lsl)</span> : <code class="type">int <a href="React.html#TYPEsignal">React.signal</a> -> int <a href="React.html#TYPEsignal">React.signal</a> -> int <a href="React.html#TYPEsignal">React.signal</a></code></pre><pre><span id="VAL(lsr)"><span class="keyword">val</span> (lsr)</span> : <code class="type">int <a href="React.html#TYPEsignal">React.signal</a> -> int <a href="React.html#TYPEsignal">React.signal</a> -> int <a href="React.html#TYPEsignal">React.signal</a></code></pre><pre><span id="VAL(asr)"><span class="keyword">val</span> (asr)</span> : <code class="type">int <a href="React.html#TYPEsignal">React.signal</a> -> int <a href="React.html#TYPEsignal">React.signal</a> -> int <a href="React.html#TYPEsignal">React.signal</a></code></pre></body></html>
\ No newline at end of file diff --git a/doc/React.S.Make.html b/doc/React.S.Make.html index 3b72937..64f776b 100644 --- a/doc/React.S.Make.html +++ b/doc/React.S.Make.html @@ -14,12 +14,11 @@ <link title="React" rel="Chapter" href="React.html"><title>React.S.Make</title> </head> <body> -<div class="navbar"><a href="React.S.Compare.html">Previous</a> - <a href="React.S.html">Up</a> - <a href="React.S.Special.html">Next</a> +<div class="navbar"><a class="pre" href="React.S.Compare.html" title="React.S.Compare">Previous</a> + <a class="up" href="React.S.html" title="React.S">Up</a> + <a class="post" href="React.S.Special.html" title="React.S.Special">Next</a> </div> -<center><h1>Functor <a href="type_React.S.Make.html">React.S.Make</a></h1></center> -<br> +<h1>Functor <a href="type_React.S.Make.html">React.S.Make</a></h1> <pre><span class="keyword">module</span> Make: <div class="sig_block"><code class="code"><span class="keyword">functor</span> (</code><code class="code"><span class="constructor">Eq</span></code><code class="code"> : </code><code class="type"><a href="React.S.EqType.html">EqType</a></code><code class="code">) <span class="keywordsign">-></span> </code><code class="type"><a href="React.S.S.html">S</a></code><code class="type"> with type 'a v = 'a Eq.t</code></div></pre>Functor specializing the combinators for the given signal value type<br> <table border="0" cellpadding="3" width="100%"> <tr> @@ -38,4 +37,4 @@ <hr width="100%"> <pre><span id="TYPEv"><span class="keyword">type</span> <code class="type">'a</code> v</span> </pre> -<pre><span id="VALcreate"><span class="keyword">val</span> create</span> : <code class="type">'a <a href="React.S.S.html#TYPEv">v</a> -> 'a <a href="React.S.S.html#TYPEv">v</a> <a href="React.html#TYPEsignal">React.signal</a> * ('a <a href="React.S.S.html#TYPEv">v</a> -> unit)</code></pre><pre><span id="VALequal"><span class="keyword">val</span> equal</span> : <code class="type">'a <a href="React.S.S.html#TYPEv">v</a> <a href="React.html#TYPEsignal">React.signal</a> -> 'a <a href="React.S.S.html#TYPEv">v</a> <a href="React.html#TYPEsignal">React.signal</a> -> bool</code></pre><pre><span id="VALhold"><span class="keyword">val</span> hold</span> : <code class="type">'a <a href="React.S.S.html#TYPEv">v</a> -> 'a <a href="React.S.S.html#TYPEv">v</a> <a href="React.html#TYPEevent">React.event</a> -> 'a <a href="React.S.S.html#TYPEv">v</a> <a href="React.html#TYPEsignal">React.signal</a></code></pre><pre><span id="VALapp"><span class="keyword">val</span> app</span> : <code class="type">('a -> 'b <a href="React.S.S.html#TYPEv">v</a>) <a href="React.html#TYPEsignal">React.signal</a> -><br> 'a <a href="React.html#TYPEsignal">React.signal</a> -> 'b <a href="React.S.S.html#TYPEv">v</a> <a href="React.html#TYPEsignal">React.signal</a></code></pre><pre><span id="VALmap"><span class="keyword">val</span> map</span> : <code class="type">('a -> 'b <a href="React.S.S.html#TYPEv">v</a>) -> 'a <a href="React.html#TYPEsignal">React.signal</a> -> 'b <a href="React.S.S.html#TYPEv">v</a> <a href="React.html#TYPEsignal">React.signal</a></code></pre><pre><span id="VALfilter"><span class="keyword">val</span> filter</span> : <code class="type">('a <a href="React.S.S.html#TYPEv">v</a> -> bool) -><br> 'a <a href="React.S.S.html#TYPEv">v</a> -> 'a <a href="React.S.S.html#TYPEv">v</a> <a href="React.html#TYPEsignal">React.signal</a> -> 'a <a href="React.S.S.html#TYPEv">v</a> <a href="React.html#TYPEsignal">React.signal</a></code></pre><pre><span id="VALfmap"><span class="keyword">val</span> fmap</span> : <code class="type">('a -> 'b <a href="React.S.S.html#TYPEv">v</a> option) -><br> 'b <a href="React.S.S.html#TYPEv">v</a> -> 'a <a href="React.html#TYPEsignal">React.signal</a> -> 'b <a href="React.S.S.html#TYPEv">v</a> <a href="React.html#TYPEsignal">React.signal</a></code></pre><pre><span id="VALwhen_"><span class="keyword">val</span> when_</span> : <code class="type">bool <a href="React.html#TYPEsignal">React.signal</a> -><br> 'a <a href="React.S.S.html#TYPEv">v</a> -> 'a <a href="React.S.S.html#TYPEv">v</a> <a href="React.html#TYPEsignal">React.signal</a> -> 'a <a href="React.S.S.html#TYPEv">v</a> <a href="React.html#TYPEsignal">React.signal</a></code></pre><pre><span id="VALdismiss"><span class="keyword">val</span> dismiss</span> : <code class="type">'a <a href="React.html#TYPEevent">React.event</a> -><br> 'b <a href="React.S.S.html#TYPEv">v</a> -> 'b <a href="React.S.S.html#TYPEv">v</a> <a href="React.html#TYPEsignal">React.signal</a> -> 'b <a href="React.S.S.html#TYPEv">v</a> <a href="React.html#TYPEsignal">React.signal</a></code></pre><pre><span id="VALaccum"><span class="keyword">val</span> accum</span> : <code class="type">('a <a href="React.S.S.html#TYPEv">v</a> -> 'a <a href="React.S.S.html#TYPEv">v</a>) <a href="React.html#TYPEevent">React.event</a> -><br> 'a <a href="React.S.S.html#TYPEv">v</a> -> 'a <a href="React.S.S.html#TYPEv">v</a> <a href="React.html#TYPEsignal">React.signal</a></code></pre><pre><span id="VALfold"><span class="keyword">val</span> fold</span> : <code class="type">('a <a href="React.S.S.html#TYPEv">v</a> -> 'b -> 'a <a href="React.S.S.html#TYPEv">v</a>) -><br> 'a <a href="React.S.S.html#TYPEv">v</a> -> 'b <a href="React.html#TYPEevent">React.event</a> -> 'a <a href="React.S.S.html#TYPEv">v</a> <a href="React.html#TYPEsignal">React.signal</a></code></pre><pre><span id="VALmerge"><span class="keyword">val</span> merge</span> : <code class="type">('a <a href="React.S.S.html#TYPEv">v</a> -> 'b -> 'a <a href="React.S.S.html#TYPEv">v</a>) -><br> 'a <a href="React.S.S.html#TYPEv">v</a> -> 'b <a href="React.html#TYPEsignal">React.signal</a> list -> 'a <a href="React.S.S.html#TYPEv">v</a> <a href="React.html#TYPEsignal">React.signal</a></code></pre><pre><span id="VALswitch"><span class="keyword">val</span> switch</span> : <code class="type">'a <a href="React.S.S.html#TYPEv">v</a> <a href="React.html#TYPEsignal">React.signal</a> -><br> 'a <a href="React.S.S.html#TYPEv">v</a> <a href="React.html#TYPEsignal">React.signal</a> <a href="React.html#TYPEevent">React.event</a> -> 'a <a href="React.S.S.html#TYPEv">v</a> <a href="React.html#TYPEsignal">React.signal</a></code></pre><pre><span id="VALfix"><span class="keyword">val</span> fix</span> : <code class="type">'a <a href="React.S.S.html#TYPEv">v</a> -><br> ('a <a href="React.S.S.html#TYPEv">v</a> <a href="React.html#TYPEsignal">React.signal</a> -> 'a <a href="React.S.S.html#TYPEv">v</a> <a href="React.html#TYPEsignal">React.signal</a> * 'b) -> 'b</code></pre><pre><span id="VALl1"><span class="keyword">val</span> l1</span> : <code class="type">('a -> 'b <a href="React.S.S.html#TYPEv">v</a>) -> 'a <a href="React.html#TYPEsignal">React.signal</a> -> 'b <a href="React.S.S.html#TYPEv">v</a> <a href="React.html#TYPEsignal">React.signal</a></code></pre><pre><span id="VALl2"><span class="keyword">val</span> l2</span> : <code class="type">('a -> 'b -> 'c <a href="React.S.S.html#TYPEv">v</a>) -><br> 'a <a href="React.html#TYPEsignal">React.signal</a> -> 'b <a href="React.html#TYPEsignal">React.signal</a> -> 'c <a href="React.S.S.html#TYPEv">v</a> <a href="React.html#TYPEsignal">React.signal</a></code></pre><pre><span id="VALl3"><span class="keyword">val</span> l3</span> : <code class="type">('a -> 'b -> 'c -> 'd <a href="React.S.S.html#TYPEv">v</a>) -><br> 'a <a href="React.html#TYPEsignal">React.signal</a> -><br> 'b <a href="React.html#TYPEsignal">React.signal</a> -> 'c <a href="React.html#TYPEsignal">React.signal</a> -> 'd <a href="React.S.S.html#TYPEv">v</a> <a href="React.html#TYPEsignal">React.signal</a></code></pre><pre><span id="VALl4"><span class="keyword">val</span> l4</span> : <code class="type">('a -> 'b -> 'c -> 'd -> 'e <a href="React.S.S.html#TYPEv">v</a>) -><br> 'a <a href="React.html#TYPEsignal">React.signal</a> -><br> 'b <a href="React.html#TYPEsignal">React.signal</a> -><br> 'c <a href="React.html#TYPEsignal">React.signal</a> -> 'd <a href="React.html#TYPEsignal">React.signal</a> -> 'e <a href="React.S.S.html#TYPEv">v</a> <a href="React.html#TYPEsignal">React.signal</a></code></pre><pre><span id="VALl5"><span class="keyword">val</span> l5</span> : <code class="type">('a -> 'b -> 'c -> 'd -> 'e -> 'f <a href="React.S.S.html#TYPEv">v</a>) -><br> 'a <a href="React.html#TYPEsignal">React.signal</a> -><br> 'b <a href="React.html#TYPEsignal">React.signal</a> -><br> 'c <a href="React.html#TYPEsignal">React.signal</a> -><br> 'd <a href="React.html#TYPEsignal">React.signal</a> -> 'e <a href="React.html#TYPEsignal">React.signal</a> -> 'f <a href="React.S.S.html#TYPEv">v</a> <a href="React.html#TYPEsignal">React.signal</a></code></pre><pre><span id="VALl6"><span class="keyword">val</span> l6</span> : <code class="type">('a -> 'b -> 'c -> 'd -> 'e -> 'f -> 'g <a href="React.S.S.html#TYPEv">v</a>) -><br> 'a <a href="React.html#TYPEsignal">React.signal</a> -><br> 'b <a href="React.html#TYPEsignal">React.signal</a> -><br> 'c <a href="React.html#TYPEsignal">React.signal</a> -><br> 'd <a href="React.html#TYPEsignal">React.signal</a> -><br> 'e <a href="React.html#TYPEsignal">React.signal</a> -> 'f <a href="React.html#TYPEsignal">React.signal</a> -> 'g <a href="React.S.S.html#TYPEv">v</a> <a href="React.html#TYPEsignal">React.signal</a></code></pre></body></html>
\ No newline at end of file +<pre><span id="VALcreate"><span class="keyword">val</span> create</span> : <code class="type">'a <a href="React.S.S.html#TYPEv">v</a> -> 'a <a href="React.S.S.html#TYPEv">v</a> <a href="React.html#TYPEsignal">React.signal</a> * ('a <a href="React.S.S.html#TYPEv">v</a> -> unit)</code></pre><pre><span id="VALequal"><span class="keyword">val</span> equal</span> : <code class="type">'a <a href="React.S.S.html#TYPEv">v</a> <a href="React.html#TYPEsignal">React.signal</a> -> 'a <a href="React.S.S.html#TYPEv">v</a> <a href="React.html#TYPEsignal">React.signal</a> -> bool</code></pre><pre><span id="VALhold"><span class="keyword">val</span> hold</span> : <code class="type">'a <a href="React.S.S.html#TYPEv">v</a> -> 'a <a href="React.S.S.html#TYPEv">v</a> <a href="React.html#TYPEevent">React.event</a> -> 'a <a href="React.S.S.html#TYPEv">v</a> <a href="React.html#TYPEsignal">React.signal</a></code></pre><pre><span id="VALapp"><span class="keyword">val</span> app</span> : <code class="type">('a -> 'b <a href="React.S.S.html#TYPEv">v</a>) <a href="React.html#TYPEsignal">React.signal</a> -><br> 'a <a href="React.html#TYPEsignal">React.signal</a> -> 'b <a href="React.S.S.html#TYPEv">v</a> <a href="React.html#TYPEsignal">React.signal</a></code></pre><pre><span id="VALmap"><span class="keyword">val</span> map</span> : <code class="type">('a -> 'b <a href="React.S.S.html#TYPEv">v</a>) -> 'a <a href="React.html#TYPEsignal">React.signal</a> -> 'b <a href="React.S.S.html#TYPEv">v</a> <a href="React.html#TYPEsignal">React.signal</a></code></pre><pre><span id="VALfilter"><span class="keyword">val</span> filter</span> : <code class="type">('a <a href="React.S.S.html#TYPEv">v</a> -> bool) -><br> 'a <a href="React.S.S.html#TYPEv">v</a> -> 'a <a href="React.S.S.html#TYPEv">v</a> <a href="React.html#TYPEsignal">React.signal</a> -> 'a <a href="React.S.S.html#TYPEv">v</a> <a href="React.html#TYPEsignal">React.signal</a></code></pre><pre><span id="VALfmap"><span class="keyword">val</span> fmap</span> : <code class="type">('a -> 'b <a href="React.S.S.html#TYPEv">v</a> option) -><br> 'b <a href="React.S.S.html#TYPEv">v</a> -> 'a <a href="React.html#TYPEsignal">React.signal</a> -> 'b <a href="React.S.S.html#TYPEv">v</a> <a href="React.html#TYPEsignal">React.signal</a></code></pre><pre><span id="VALwhen_"><span class="keyword">val</span> when_</span> : <code class="type">bool <a href="React.html#TYPEsignal">React.signal</a> -><br> 'a <a href="React.S.S.html#TYPEv">v</a> -> 'a <a href="React.S.S.html#TYPEv">v</a> <a href="React.html#TYPEsignal">React.signal</a> -> 'a <a href="React.S.S.html#TYPEv">v</a> <a href="React.html#TYPEsignal">React.signal</a></code></pre><pre><span id="VALdismiss"><span class="keyword">val</span> dismiss</span> : <code class="type">'b <a href="React.html#TYPEevent">React.event</a> -><br> 'a <a href="React.S.S.html#TYPEv">v</a> -> 'a <a href="React.S.S.html#TYPEv">v</a> <a href="React.html#TYPEsignal">React.signal</a> -> 'a <a href="React.S.S.html#TYPEv">v</a> <a href="React.html#TYPEsignal">React.signal</a></code></pre><pre><span id="VALaccum"><span class="keyword">val</span> accum</span> : <code class="type">('a <a href="React.S.S.html#TYPEv">v</a> -> 'a <a href="React.S.S.html#TYPEv">v</a>) <a href="React.html#TYPEevent">React.event</a> -><br> 'a <a href="React.S.S.html#TYPEv">v</a> -> 'a <a href="React.S.S.html#TYPEv">v</a> <a href="React.html#TYPEsignal">React.signal</a></code></pre><pre><span id="VALfold"><span class="keyword">val</span> fold</span> : <code class="type">('a <a href="React.S.S.html#TYPEv">v</a> -> 'b -> 'a <a href="React.S.S.html#TYPEv">v</a>) -><br> 'a <a href="React.S.S.html#TYPEv">v</a> -> 'b <a href="React.html#TYPEevent">React.event</a> -> 'a <a href="React.S.S.html#TYPEv">v</a> <a href="React.html#TYPEsignal">React.signal</a></code></pre><pre><span id="VALmerge"><span class="keyword">val</span> merge</span> : <code class="type">('a <a href="React.S.S.html#TYPEv">v</a> -> 'b -> 'a <a href="React.S.S.html#TYPEv">v</a>) -><br> 'a <a href="React.S.S.html#TYPEv">v</a> -> 'b <a href="React.html#TYPEsignal">React.signal</a> list -> 'a <a href="React.S.S.html#TYPEv">v</a> <a href="React.html#TYPEsignal">React.signal</a></code></pre><pre><span id="VALswitch"><span class="keyword">val</span> switch</span> : <code class="type">'a <a href="React.S.S.html#TYPEv">v</a> <a href="React.html#TYPEsignal">React.signal</a> -><br> 'a <a href="React.S.S.html#TYPEv">v</a> <a href="React.html#TYPEsignal">React.signal</a> <a href="React.html#TYPEevent">React.event</a> -> 'a <a href="React.S.S.html#TYPEv">v</a> <a href="React.html#TYPEsignal">React.signal</a></code></pre><pre><span id="VALfix"><span class="keyword">val</span> fix</span> : <code class="type">'a <a href="React.S.S.html#TYPEv">v</a> -><br> ('a <a href="React.S.S.html#TYPEv">v</a> <a href="React.html#TYPEsignal">React.signal</a> -> 'a <a href="React.S.S.html#TYPEv">v</a> <a href="React.html#TYPEsignal">React.signal</a> * 'b) -> 'b</code></pre><pre><span id="VALl1"><span class="keyword">val</span> l1</span> : <code class="type">('a -> 'b <a href="React.S.S.html#TYPEv">v</a>) -> 'a <a href="React.html#TYPEsignal">React.signal</a> -> 'b <a href="React.S.S.html#TYPEv">v</a> <a href="React.html#TYPEsignal">React.signal</a></code></pre><pre><span id="VALl2"><span class="keyword">val</span> l2</span> : <code class="type">('a -> 'b -> 'c <a href="React.S.S.html#TYPEv">v</a>) -><br> 'a <a href="React.html#TYPEsignal">React.signal</a> -> 'b <a href="React.html#TYPEsignal">React.signal</a> -> 'c <a href="React.S.S.html#TYPEv">v</a> <a href="React.html#TYPEsignal">React.signal</a></code></pre><pre><span id="VALl3"><span class="keyword">val</span> l3</span> : <code class="type">('a -> 'b -> 'c -> 'd <a href="React.S.S.html#TYPEv">v</a>) -><br> 'a <a href="React.html#TYPEsignal">React.signal</a> -><br> 'b <a href="React.html#TYPEsignal">React.signal</a> -> 'c <a href="React.html#TYPEsignal">React.signal</a> -> 'd <a href="React.S.S.html#TYPEv">v</a> <a href="React.html#TYPEsignal">React.signal</a></code></pre><pre><span id="VALl4"><span class="keyword">val</span> l4</span> : <code class="type">('a -> 'b -> 'c -> 'd -> 'e <a href="React.S.S.html#TYPEv">v</a>) -><br> 'a <a href="React.html#TYPEsignal">React.signal</a> -><br> 'b <a href="React.html#TYPEsignal">React.signal</a> -><br> 'c <a href="React.html#TYPEsignal">React.signal</a> -> 'd <a href="React.html#TYPEsignal">React.signal</a> -> 'e <a href="React.S.S.html#TYPEv">v</a> <a href="React.html#TYPEsignal">React.signal</a></code></pre><pre><span id="VALl5"><span class="keyword">val</span> l5</span> : <code class="type">('a -> 'b -> 'c -> 'd -> 'e -> 'f <a href="React.S.S.html#TYPEv">v</a>) -><br> 'a <a href="React.html#TYPEsignal">React.signal</a> -><br> 'b <a href="React.html#TYPEsignal">React.signal</a> -><br> 'c <a href="React.html#TYPEsignal">React.signal</a> -><br> 'd <a href="React.html#TYPEsignal">React.signal</a> -> 'e <a href="React.html#TYPEsignal">React.signal</a> -> 'f <a href="React.S.S.html#TYPEv">v</a> <a href="React.html#TYPEsignal">React.signal</a></code></pre><pre><span id="VALl6"><span class="keyword">val</span> l6</span> : <code class="type">('a -> 'b -> 'c -> 'd -> 'e -> 'f -> 'g <a href="React.S.S.html#TYPEv">v</a>) -><br> 'a <a href="React.html#TYPEsignal">React.signal</a> -><br> 'b <a href="React.html#TYPEsignal">React.signal</a> -><br> 'c <a href="React.html#TYPEsignal">React.signal</a> -><br> 'd <a href="React.html#TYPEsignal">React.signal</a> -><br> 'e <a href="React.html#TYPEsignal">React.signal</a> -> 'f <a href="React.html#TYPEsignal">React.signal</a> -> 'g <a href="React.S.S.html#TYPEv">v</a> <a href="React.html#TYPEsignal">React.signal</a></code></pre></body></html>
\ No newline at end of file diff --git a/doc/React.S.Pair.html b/doc/React.S.Pair.html index 4caeb74..4b6087f 100644 --- a/doc/React.S.Pair.html +++ b/doc/React.S.Pair.html @@ -14,11 +14,10 @@ <link title="React" rel="Chapter" href="React.html"><title>React.S.Pair</title> </head> <body> -<div class="navbar"><a href="React.S.Float.html">Previous</a> - <a href="React.S.html">Up</a> - <a href="React.S.Compare.html">Next</a> +<div class="navbar"><a class="pre" href="React.S.Float.html" title="React.S.Float">Previous</a> + <a class="up" href="React.S.html" title="React.S">Up</a> + <a class="post" href="React.S.Compare.html" title="React.S.Compare">Next</a> </div> -<center><h1>Module <a href="type_React.S.Pair.html">React.S.Pair</a></h1></center> -<br> +<h1>Module <a href="type_React.S.Pair.html">React.S.Pair</a></h1> <pre><span class="keyword">module</span> Pair: <code class="code"><span class="keyword">sig</span></code> <a href="React.S.Pair.html">..</a> <code class="code"><span class="keyword">end</span></code></pre><hr width="100%"> <pre><span id="VALpair"><span class="keyword">val</span> pair</span> : <code class="type">?eq:('a * 'b -> 'a * 'b -> bool) -><br> 'a <a href="React.html#TYPEsignal">React.signal</a> -> 'b <a href="React.html#TYPEsignal">React.signal</a> -> ('a * 'b) <a href="React.html#TYPEsignal">React.signal</a></code></pre><pre><span id="VALfst"><span class="keyword">val</span> fst</span> : <code class="type">?eq:('a -> 'a -> bool) -> ('a * 'b) <a href="React.html#TYPEsignal">React.signal</a> -> 'a <a href="React.html#TYPEsignal">React.signal</a></code></pre><pre><span id="VALsnd"><span class="keyword">val</span> snd</span> : <code class="type">?eq:('a -> 'a -> bool) -> ('b * 'a) <a href="React.html#TYPEsignal">React.signal</a> -> 'a <a href="React.html#TYPEsignal">React.signal</a></code></pre></body></html>
\ No newline at end of file diff --git a/doc/React.S.S.html b/doc/React.S.S.html index f0e5d06..0cd5c24 100644 --- a/doc/React.S.S.html +++ b/doc/React.S.S.html @@ -13,13 +13,12 @@ <link title="React" rel="Chapter" href="React.html"><title>React.S.S</title> </head> <body> -<div class="navbar"><a href="React.S.EqType.html">Previous</a> - <a href="React.S.html">Up</a> +<div class="navbar"><a class="pre" href="React.S.EqType.html" title="React.S.EqType">Previous</a> + <a class="up" href="React.S.html" title="React.S">Up</a> </div> -<center><h1>Module type <a href="type_React.S.S.html">React.S.S</a></h1></center> -<br> +<h1>Module type <a href="type_React.S.S.html">React.S.S</a></h1> <pre><span class="keyword">module type</span> S = <code class="code"><span class="keyword">sig</span></code> <a href="React.S.S.html">..</a> <code class="code"><span class="keyword">end</span></code></pre>Output signature of <a href="React.S.Make.html"><code class="code"><span class="constructor">React</span>.<span class="constructor">S</span>.<span class="constructor">Make</span></code></a><br> <hr width="100%"> <pre><span id="TYPEv"><span class="keyword">type</span> <code class="type">'a</code> v</span> </pre> -<pre><span id="VALcreate"><span class="keyword">val</span> create</span> : <code class="type">'a <a href="React.S.S.html#TYPEv">v</a> -> 'a <a href="React.S.S.html#TYPEv">v</a> <a href="React.html#TYPEsignal">React.signal</a> * ('a <a href="React.S.S.html#TYPEv">v</a> -> unit)</code></pre><pre><span id="VALequal"><span class="keyword">val</span> equal</span> : <code class="type">'a <a href="React.S.S.html#TYPEv">v</a> <a href="React.html#TYPEsignal">React.signal</a> -> 'a <a href="React.S.S.html#TYPEv">v</a> <a href="React.html#TYPEsignal">React.signal</a> -> bool</code></pre><pre><span id="VALhold"><span class="keyword">val</span> hold</span> : <code class="type">'a <a href="React.S.S.html#TYPEv">v</a> -> 'a <a href="React.S.S.html#TYPEv">v</a> <a href="React.html#TYPEevent">React.event</a> -> 'a <a href="React.S.S.html#TYPEv">v</a> <a href="React.html#TYPEsignal">React.signal</a></code></pre><pre><span id="VALapp"><span class="keyword">val</span> app</span> : <code class="type">('a -> 'b <a href="React.S.S.html#TYPEv">v</a>) <a href="React.html#TYPEsignal">React.signal</a> -><br> 'a <a href="React.html#TYPEsignal">React.signal</a> -> 'b <a href="React.S.S.html#TYPEv">v</a> <a href="React.html#TYPEsignal">React.signal</a></code></pre><pre><span id="VALmap"><span class="keyword">val</span> map</span> : <code class="type">('a -> 'b <a href="React.S.S.html#TYPEv">v</a>) -> 'a <a href="React.html#TYPEsignal">React.signal</a> -> 'b <a href="React.S.S.html#TYPEv">v</a> <a href="React.html#TYPEsignal">React.signal</a></code></pre><pre><span id="VALfilter"><span class="keyword">val</span> filter</span> : <code class="type">('a <a href="React.S.S.html#TYPEv">v</a> -> bool) -><br> 'a <a href="React.S.S.html#TYPEv">v</a> -> 'a <a href="React.S.S.html#TYPEv">v</a> <a href="React.html#TYPEsignal">React.signal</a> -> 'a <a href="React.S.S.html#TYPEv">v</a> <a href="React.html#TYPEsignal">React.signal</a></code></pre><pre><span id="VALfmap"><span class="keyword">val</span> fmap</span> : <code class="type">('a -> 'b <a href="React.S.S.html#TYPEv">v</a> option) -><br> 'b <a href="React.S.S.html#TYPEv">v</a> -> 'a <a href="React.html#TYPEsignal">React.signal</a> -> 'b <a href="React.S.S.html#TYPEv">v</a> <a href="React.html#TYPEsignal">React.signal</a></code></pre><pre><span id="VALwhen_"><span class="keyword">val</span> when_</span> : <code class="type">bool <a href="React.html#TYPEsignal">React.signal</a> -><br> 'a <a href="React.S.S.html#TYPEv">v</a> -> 'a <a href="React.S.S.html#TYPEv">v</a> <a href="React.html#TYPEsignal">React.signal</a> -> 'a <a href="React.S.S.html#TYPEv">v</a> <a href="React.html#TYPEsignal">React.signal</a></code></pre><pre><span id="VALdismiss"><span class="keyword">val</span> dismiss</span> : <code class="type">'a <a href="React.html#TYPEevent">React.event</a> -><br> 'b <a href="React.S.S.html#TYPEv">v</a> -> 'b <a href="React.S.S.html#TYPEv">v</a> <a href="React.html#TYPEsignal">React.signal</a> -> 'b <a href="React.S.S.html#TYPEv">v</a> <a href="React.html#TYPEsignal">React.signal</a></code></pre><pre><span id="VALaccum"><span class="keyword">val</span> accum</span> : <code class="type">('a <a href="React.S.S.html#TYPEv">v</a> -> 'a <a href="React.S.S.html#TYPEv">v</a>) <a href="React.html#TYPEevent">React.event</a> -><br> 'a <a href="React.S.S.html#TYPEv">v</a> -> 'a <a href="React.S.S.html#TYPEv">v</a> <a href="React.html#TYPEsignal">React.signal</a></code></pre><pre><span id="VALfold"><span class="keyword">val</span> fold</span> : <code class="type">('a <a href="React.S.S.html#TYPEv">v</a> -> 'b -> 'a <a href="React.S.S.html#TYPEv">v</a>) -><br> 'a <a href="React.S.S.html#TYPEv">v</a> -> 'b <a href="React.html#TYPEevent">React.event</a> -> 'a <a href="React.S.S.html#TYPEv">v</a> <a href="React.html#TYPEsignal">React.signal</a></code></pre><pre><span id="VALmerge"><span class="keyword">val</span> merge</span> : <code class="type">('a <a href="React.S.S.html#TYPEv">v</a> -> 'b -> 'a <a href="React.S.S.html#TYPEv">v</a>) -><br> 'a <a href="React.S.S.html#TYPEv">v</a> -> 'b <a href="React.html#TYPEsignal">React.signal</a> list -> 'a <a href="React.S.S.html#TYPEv">v</a> <a href="React.html#TYPEsignal">React.signal</a></code></pre><pre><span id="VALswitch"><span class="keyword">val</span> switch</span> : <code class="type">'a <a href="React.S.S.html#TYPEv">v</a> <a href="React.html#TYPEsignal">React.signal</a> -><br> 'a <a href="React.S.S.html#TYPEv">v</a> <a href="React.html#TYPEsignal">React.signal</a> <a href="React.html#TYPEevent">React.event</a> -> 'a <a href="React.S.S.html#TYPEv">v</a> <a href="React.html#TYPEsignal">React.signal</a></code></pre><pre><span id="VALfix"><span class="keyword">val</span> fix</span> : <code class="type">'a <a href="React.S.S.html#TYPEv">v</a> -><br> ('a <a href="React.S.S.html#TYPEv">v</a> <a href="React.html#TYPEsignal">React.signal</a> -> 'a <a href="React.S.S.html#TYPEv">v</a> <a href="React.html#TYPEsignal">React.signal</a> * 'b) -> 'b</code></pre><pre><span id="VALl1"><span class="keyword">val</span> l1</span> : <code class="type">('a -> 'b <a href="React.S.S.html#TYPEv">v</a>) -> 'a <a href="React.html#TYPEsignal">React.signal</a> -> 'b <a href="React.S.S.html#TYPEv">v</a> <a href="React.html#TYPEsignal">React.signal</a></code></pre><pre><span id="VALl2"><span class="keyword">val</span> l2</span> : <code class="type">('a -> 'b -> 'c <a href="React.S.S.html#TYPEv">v</a>) -><br> 'a <a href="React.html#TYPEsignal">React.signal</a> -> 'b <a href="React.html#TYPEsignal">React.signal</a> -> 'c <a href="React.S.S.html#TYPEv">v</a> <a href="React.html#TYPEsignal">React.signal</a></code></pre><pre><span id="VALl3"><span class="keyword">val</span> l3</span> : <code class="type">('a -> 'b -> 'c -> 'd <a href="React.S.S.html#TYPEv">v</a>) -><br> 'a <a href="React.html#TYPEsignal">React.signal</a> -><br> 'b <a href="React.html#TYPEsignal">React.signal</a> -> 'c <a href="React.html#TYPEsignal">React.signal</a> -> 'd <a href="React.S.S.html#TYPEv">v</a> <a href="React.html#TYPEsignal">React.signal</a></code></pre><pre><span id="VALl4"><span class="keyword">val</span> l4</span> : <code class="type">('a -> 'b -> 'c -> 'd -> 'e <a href="React.S.S.html#TYPEv">v</a>) -><br> 'a <a href="React.html#TYPEsignal">React.signal</a> -><br> 'b <a href="React.html#TYPEsignal">React.signal</a> -><br> 'c <a href="React.html#TYPEsignal">React.signal</a> -> 'd <a href="React.html#TYPEsignal">React.signal</a> -> 'e <a href="React.S.S.html#TYPEv">v</a> <a href="React.html#TYPEsignal">React.signal</a></code></pre><pre><span id="VALl5"><span class="keyword">val</span> l5</span> : <code class="type">('a -> 'b -> 'c -> 'd -> 'e -> 'f <a href="React.S.S.html#TYPEv">v</a>) -><br> 'a <a href="React.html#TYPEsignal">React.signal</a> -><br> 'b <a href="React.html#TYPEsignal">React.signal</a> -><br> 'c <a href="React.html#TYPEsignal">React.signal</a> -><br> 'd <a href="React.html#TYPEsignal">React.signal</a> -> 'e <a href="React.html#TYPEsignal">React.signal</a> -> 'f <a href="React.S.S.html#TYPEv">v</a> <a href="React.html#TYPEsignal">React.signal</a></code></pre><pre><span id="VALl6"><span class="keyword">val</span> l6</span> : <code class="type">('a -> 'b -> 'c -> 'd -> 'e -> 'f -> 'g <a href="React.S.S.html#TYPEv">v</a>) -><br> 'a <a href="React.html#TYPEsignal">React.signal</a> -><br> 'b <a href="React.html#TYPEsignal">React.signal</a> -><br> 'c <a href="React.html#TYPEsignal">React.signal</a> -><br> 'd <a href="React.html#TYPEsignal">React.signal</a> -><br> 'e <a href="React.html#TYPEsignal">React.signal</a> -> 'f <a href="React.html#TYPEsignal">React.signal</a> -> 'g <a href="React.S.S.html#TYPEv">v</a> <a href="React.html#TYPEsignal">React.signal</a></code></pre></body></html>
\ No newline at end of file +<pre><span id="VALcreate"><span class="keyword">val</span> create</span> : <code class="type">'a <a href="React.S.S.html#TYPEv">v</a> -> 'a <a href="React.S.S.html#TYPEv">v</a> <a href="React.html#TYPEsignal">React.signal</a> * ('a <a href="React.S.S.html#TYPEv">v</a> -> unit)</code></pre><pre><span id="VALequal"><span class="keyword">val</span> equal</span> : <code class="type">'a <a href="React.S.S.html#TYPEv">v</a> <a href="React.html#TYPEsignal">React.signal</a> -> 'a <a href="React.S.S.html#TYPEv">v</a> <a href="React.html#TYPEsignal">React.signal</a> -> bool</code></pre><pre><span id="VALhold"><span class="keyword">val</span> hold</span> : <code class="type">'a <a href="React.S.S.html#TYPEv">v</a> -> 'a <a href="React.S.S.html#TYPEv">v</a> <a href="React.html#TYPEevent">React.event</a> -> 'a <a href="React.S.S.html#TYPEv">v</a> <a href="React.html#TYPEsignal">React.signal</a></code></pre><pre><span id="VALapp"><span class="keyword">val</span> app</span> : <code class="type">('a -> 'b <a href="React.S.S.html#TYPEv">v</a>) <a href="React.html#TYPEsignal">React.signal</a> -><br> 'a <a href="React.html#TYPEsignal">React.signal</a> -> 'b <a href="React.S.S.html#TYPEv">v</a> <a href="React.html#TYPEsignal">React.signal</a></code></pre><pre><span id="VALmap"><span class="keyword">val</span> map</span> : <code class="type">('a -> 'b <a href="React.S.S.html#TYPEv">v</a>) -> 'a <a href="React.html#TYPEsignal">React.signal</a> -> 'b <a href="React.S.S.html#TYPEv">v</a> <a href="React.html#TYPEsignal">React.signal</a></code></pre><pre><span id="VALfilter"><span class="keyword">val</span> filter</span> : <code class="type">('a <a href="React.S.S.html#TYPEv">v</a> -> bool) -><br> 'a <a href="React.S.S.html#TYPEv">v</a> -> 'a <a href="React.S.S.html#TYPEv">v</a> <a href="React.html#TYPEsignal">React.signal</a> -> 'a <a href="React.S.S.html#TYPEv">v</a> <a href="React.html#TYPEsignal">React.signal</a></code></pre><pre><span id="VALfmap"><span class="keyword">val</span> fmap</span> : <code class="type">('a -> 'b <a href="React.S.S.html#TYPEv">v</a> option) -><br> 'b <a href="React.S.S.html#TYPEv">v</a> -> 'a <a href="React.html#TYPEsignal">React.signal</a> -> 'b <a href="React.S.S.html#TYPEv">v</a> <a href="React.html#TYPEsignal">React.signal</a></code></pre><pre><span id="VALwhen_"><span class="keyword">val</span> when_</span> : <code class="type">bool <a href="React.html#TYPEsignal">React.signal</a> -><br> 'a <a href="React.S.S.html#TYPEv">v</a> -> 'a <a href="React.S.S.html#TYPEv">v</a> <a href="React.html#TYPEsignal">React.signal</a> -> 'a <a href="React.S.S.html#TYPEv">v</a> <a href="React.html#TYPEsignal">React.signal</a></code></pre><pre><span id="VALdismiss"><span class="keyword">val</span> dismiss</span> : <code class="type">'b <a href="React.html#TYPEevent">React.event</a> -><br> 'a <a href="React.S.S.html#TYPEv">v</a> -> 'a <a href="React.S.S.html#TYPEv">v</a> <a href="React.html#TYPEsignal">React.signal</a> -> 'a <a href="React.S.S.html#TYPEv">v</a> <a href="React.html#TYPEsignal">React.signal</a></code></pre><pre><span id="VALaccum"><span class="keyword">val</span> accum</span> : <code class="type">('a <a href="React.S.S.html#TYPEv">v</a> -> 'a <a href="React.S.S.html#TYPEv">v</a>) <a href="React.html#TYPEevent">React.event</a> -><br> 'a <a href="React.S.S.html#TYPEv">v</a> -> 'a <a href="React.S.S.html#TYPEv">v</a> <a href="React.html#TYPEsignal">React.signal</a></code></pre><pre><span id="VALfold"><span class="keyword">val</span> fold</span> : <code class="type">('a <a href="React.S.S.html#TYPEv">v</a> -> 'b -> 'a <a href="React.S.S.html#TYPEv">v</a>) -><br> 'a <a href="React.S.S.html#TYPEv">v</a> -> 'b <a href="React.html#TYPEevent">React.event</a> -> 'a <a href="React.S.S.html#TYPEv">v</a> <a href="React.html#TYPEsignal">React.signal</a></code></pre><pre><span id="VALmerge"><span class="keyword">val</span> merge</span> : <code class="type">('a <a href="React.S.S.html#TYPEv">v</a> -> 'b -> 'a <a href="React.S.S.html#TYPEv">v</a>) -><br> 'a <a href="React.S.S.html#TYPEv">v</a> -> 'b <a href="React.html#TYPEsignal">React.signal</a> list -> 'a <a href="React.S.S.html#TYPEv">v</a> <a href="React.html#TYPEsignal">React.signal</a></code></pre><pre><span id="VALswitch"><span class="keyword">val</span> switch</span> : <code class="type">'a <a href="React.S.S.html#TYPEv">v</a> <a href="React.html#TYPEsignal">React.signal</a> -><br> 'a <a href="React.S.S.html#TYPEv">v</a> <a href="React.html#TYPEsignal">React.signal</a> <a href="React.html#TYPEevent">React.event</a> -> 'a <a href="React.S.S.html#TYPEv">v</a> <a href="React.html#TYPEsignal">React.signal</a></code></pre><pre><span id="VALfix"><span class="keyword">val</span> fix</span> : <code class="type">'a <a href="React.S.S.html#TYPEv">v</a> -><br> ('a <a href="React.S.S.html#TYPEv">v</a> <a href="React.html#TYPEsignal">React.signal</a> -> 'a <a href="React.S.S.html#TYPEv">v</a> <a href="React.html#TYPEsignal">React.signal</a> * 'b) -> 'b</code></pre><pre><span id="VALl1"><span class="keyword">val</span> l1</span> : <code class="type">('a -> 'b <a href="React.S.S.html#TYPEv">v</a>) -> 'a <a href="React.html#TYPEsignal">React.signal</a> -> 'b <a href="React.S.S.html#TYPEv">v</a> <a href="React.html#TYPEsignal">React.signal</a></code></pre><pre><span id="VALl2"><span class="keyword">val</span> l2</span> : <code class="type">('a -> 'b -> 'c <a href="React.S.S.html#TYPEv">v</a>) -><br> 'a <a href="React.html#TYPEsignal">React.signal</a> -> 'b <a href="React.html#TYPEsignal">React.signal</a> -> 'c <a href="React.S.S.html#TYPEv">v</a> <a href="React.html#TYPEsignal">React.signal</a></code></pre><pre><span id="VALl3"><span class="keyword">val</span> l3</span> : <code class="type">('a -> 'b -> 'c -> 'd <a href="React.S.S.html#TYPEv">v</a>) -><br> 'a <a href="React.html#TYPEsignal">React.signal</a> -><br> 'b <a href="React.html#TYPEsignal">React.signal</a> -> 'c <a href="React.html#TYPEsignal">React.signal</a> -> 'd <a href="React.S.S.html#TYPEv">v</a> <a href="React.html#TYPEsignal">React.signal</a></code></pre><pre><span id="VALl4"><span class="keyword">val</span> l4</span> : <code class="type">('a -> 'b -> 'c -> 'd -> 'e <a href="React.S.S.html#TYPEv">v</a>) -><br> 'a <a href="React.html#TYPEsignal">React.signal</a> -><br> 'b <a href="React.html#TYPEsignal">React.signal</a> -><br> 'c <a href="React.html#TYPEsignal">React.signal</a> -> 'd <a href="React.html#TYPEsignal">React.signal</a> -> 'e <a href="React.S.S.html#TYPEv">v</a> <a href="React.html#TYPEsignal">React.signal</a></code></pre><pre><span id="VALl5"><span class="keyword">val</span> l5</span> : <code class="type">('a -> 'b -> 'c -> 'd -> 'e -> 'f <a href="React.S.S.html#TYPEv">v</a>) -><br> 'a <a href="React.html#TYPEsignal">React.signal</a> -><br> 'b <a href="React.html#TYPEsignal">React.signal</a> -><br> 'c <a href="React.html#TYPEsignal">React.signal</a> -><br> 'd <a href="React.html#TYPEsignal">React.signal</a> -> 'e <a href="React.html#TYPEsignal">React.signal</a> -> 'f <a href="React.S.S.html#TYPEv">v</a> <a href="React.html#TYPEsignal">React.signal</a></code></pre><pre><span id="VALl6"><span class="keyword">val</span> l6</span> : <code class="type">('a -> 'b -> 'c -> 'd -> 'e -> 'f -> 'g <a href="React.S.S.html#TYPEv">v</a>) -><br> 'a <a href="React.html#TYPEsignal">React.signal</a> -><br> 'b <a href="React.html#TYPEsignal">React.signal</a> -><br> 'c <a href="React.html#TYPEsignal">React.signal</a> -><br> 'd <a href="React.html#TYPEsignal">React.signal</a> -><br> 'e <a href="React.html#TYPEsignal">React.signal</a> -> 'f <a href="React.html#TYPEsignal">React.signal</a> -> 'g <a href="React.S.S.html#TYPEv">v</a> <a href="React.html#TYPEsignal">React.signal</a></code></pre></body></html>
\ No newline at end of file diff --git a/doc/React.S.Special.Sb.html b/doc/React.S.Special.Sb.html index db2808f..396ace6 100644 --- a/doc/React.S.Special.Sb.html +++ b/doc/React.S.Special.Sb.html @@ -13,13 +13,12 @@ <link title="React" rel="Chapter" href="React.html"><title>React.S.Special.Sb</title> </head> <body> -<div class="navbar"> <a href="React.S.Special.html">Up</a> - <a href="React.S.Special.Si.html">Next</a> +<div class="navbar"> <a class="up" href="React.S.Special.html" title="React.S.Special">Up</a> + <a class="post" href="React.S.Special.Si.html" title="React.S.Special.Si">Next</a> </div> -<center><h1>Module <a href="type_React.S.Special.Sb.html">React.S.Special.Sb</a></h1></center> -<br> +<h1>Module <a href="type_React.S.Special.Sb.html">React.S.Special.Sb</a></h1> <pre><span class="keyword">module</span> Sb: <code class="type"><a href="React.S.S.html">React.S.S</a></code><code class="type"> with type 'a v = bool</code></pre>Specialization for booleans.<br> <hr width="100%"> <pre><span id="TYPEv"><span class="keyword">type</span> <code class="type">'a</code> v</span> </pre> -<pre><span id="VALcreate"><span class="keyword">val</span> create</span> : <code class="type">'a <a href="React.S.S.html#TYPEv">v</a> -> 'a <a href="React.S.S.html#TYPEv">v</a> <a href="React.html#TYPEsignal">React.signal</a> * ('a <a href="React.S.S.html#TYPEv">v</a> -> unit)</code></pre><pre><span id="VALequal"><span class="keyword">val</span> equal</span> : <code class="type">'a <a href="React.S.S.html#TYPEv">v</a> <a href="React.html#TYPEsignal">React.signal</a> -> 'a <a href="React.S.S.html#TYPEv">v</a> <a href="React.html#TYPEsignal">React.signal</a> -> bool</code></pre><pre><span id="VALhold"><span class="keyword">val</span> hold</span> : <code class="type">'a <a href="React.S.S.html#TYPEv">v</a> -> 'a <a href="React.S.S.html#TYPEv">v</a> <a href="React.html#TYPEevent">React.event</a> -> 'a <a href="React.S.S.html#TYPEv">v</a> <a href="React.html#TYPEsignal">React.signal</a></code></pre><pre><span id="VALapp"><span class="keyword">val</span> app</span> : <code class="type">('a -> 'b <a href="React.S.S.html#TYPEv">v</a>) <a href="React.html#TYPEsignal">React.signal</a> -><br> 'a <a href="React.html#TYPEsignal">React.signal</a> -> 'b <a href="React.S.S.html#TYPEv">v</a> <a href="React.html#TYPEsignal">React.signal</a></code></pre><pre><span id="VALmap"><span class="keyword">val</span> map</span> : <code class="type">('a -> 'b <a href="React.S.S.html#TYPEv">v</a>) -> 'a <a href="React.html#TYPEsignal">React.signal</a> -> 'b <a href="React.S.S.html#TYPEv">v</a> <a href="React.html#TYPEsignal">React.signal</a></code></pre><pre><span id="VALfilter"><span class="keyword">val</span> filter</span> : <code class="type">('a <a href="React.S.S.html#TYPEv">v</a> -> bool) -><br> 'a <a href="React.S.S.html#TYPEv">v</a> -> 'a <a href="React.S.S.html#TYPEv">v</a> <a href="React.html#TYPEsignal">React.signal</a> -> 'a <a href="React.S.S.html#TYPEv">v</a> <a href="React.html#TYPEsignal">React.signal</a></code></pre><pre><span id="VALfmap"><span class="keyword">val</span> fmap</span> : <code class="type">('a -> 'b <a href="React.S.S.html#TYPEv">v</a> option) -><br> 'b <a href="React.S.S.html#TYPEv">v</a> -> 'a <a href="React.html#TYPEsignal">React.signal</a> -> 'b <a href="React.S.S.html#TYPEv">v</a> <a href="React.html#TYPEsignal">React.signal</a></code></pre><pre><span id="VALwhen_"><span class="keyword">val</span> when_</span> : <code class="type">bool <a href="React.html#TYPEsignal">React.signal</a> -><br> 'a <a href="React.S.S.html#TYPEv">v</a> -> 'a <a href="React.S.S.html#TYPEv">v</a> <a href="React.html#TYPEsignal">React.signal</a> -> 'a <a href="React.S.S.html#TYPEv">v</a> <a href="React.html#TYPEsignal">React.signal</a></code></pre><pre><span id="VALdismiss"><span class="keyword">val</span> dismiss</span> : <code class="type">'a <a href="React.html#TYPEevent">React.event</a> -><br> 'b <a href="React.S.S.html#TYPEv">v</a> -> 'b <a href="React.S.S.html#TYPEv">v</a> <a href="React.html#TYPEsignal">React.signal</a> -> 'b <a href="React.S.S.html#TYPEv">v</a> <a href="React.html#TYPEsignal">React.signal</a></code></pre><pre><span id="VALaccum"><span class="keyword">val</span> accum</span> : <code class="type">('a <a href="React.S.S.html#TYPEv">v</a> -> 'a <a href="React.S.S.html#TYPEv">v</a>) <a href="React.html#TYPEevent">React.event</a> -><br> 'a <a href="React.S.S.html#TYPEv">v</a> -> 'a <a href="React.S.S.html#TYPEv">v</a> <a href="React.html#TYPEsignal">React.signal</a></code></pre><pre><span id="VALfold"><span class="keyword">val</span> fold</span> : <code class="type">('a <a href="React.S.S.html#TYPEv">v</a> -> 'b -> 'a <a href="React.S.S.html#TYPEv">v</a>) -><br> 'a <a href="React.S.S.html#TYPEv">v</a> -> 'b <a href="React.html#TYPEevent">React.event</a> -> 'a <a href="React.S.S.html#TYPEv">v</a> <a href="React.html#TYPEsignal">React.signal</a></code></pre><pre><span id="VALmerge"><span class="keyword">val</span> merge</span> : <code class="type">('a <a href="React.S.S.html#TYPEv">v</a> -> 'b -> 'a <a href="React.S.S.html#TYPEv">v</a>) -><br> 'a <a href="React.S.S.html#TYPEv">v</a> -> 'b <a href="React.html#TYPEsignal">React.signal</a> list -> 'a <a href="React.S.S.html#TYPEv">v</a> <a href="React.html#TYPEsignal">React.signal</a></code></pre><pre><span id="VALswitch"><span class="keyword">val</span> switch</span> : <code class="type">'a <a href="React.S.S.html#TYPEv">v</a> <a href="React.html#TYPEsignal">React.signal</a> -><br> 'a <a href="React.S.S.html#TYPEv">v</a> <a href="React.html#TYPEsignal">React.signal</a> <a href="React.html#TYPEevent">React.event</a> -> 'a <a href="React.S.S.html#TYPEv">v</a> <a href="React.html#TYPEsignal">React.signal</a></code></pre><pre><span id="VALfix"><span class="keyword">val</span> fix</span> : <code class="type">'a <a href="React.S.S.html#TYPEv">v</a> -><br> ('a <a href="React.S.S.html#TYPEv">v</a> <a href="React.html#TYPEsignal">React.signal</a> -> 'a <a href="React.S.S.html#TYPEv">v</a> <a href="React.html#TYPEsignal">React.signal</a> * 'b) -> 'b</code></pre><pre><span id="VALl1"><span class="keyword">val</span> l1</span> : <code class="type">('a -> 'b <a href="React.S.S.html#TYPEv">v</a>) -> 'a <a href="React.html#TYPEsignal">React.signal</a> -> 'b <a href="React.S.S.html#TYPEv">v</a> <a href="React.html#TYPEsignal">React.signal</a></code></pre><pre><span id="VALl2"><span class="keyword">val</span> l2</span> : <code class="type">('a -> 'b -> 'c <a href="React.S.S.html#TYPEv">v</a>) -><br> 'a <a href="React.html#TYPEsignal">React.signal</a> -> 'b <a href="React.html#TYPEsignal">React.signal</a> -> 'c <a href="React.S.S.html#TYPEv">v</a> <a href="React.html#TYPEsignal">React.signal</a></code></pre><pre><span id="VALl3"><span class="keyword">val</span> l3</span> : <code class="type">('a -> 'b -> 'c -> 'd <a href="React.S.S.html#TYPEv">v</a>) -><br> 'a <a href="React.html#TYPEsignal">React.signal</a> -><br> 'b <a href="React.html#TYPEsignal">React.signal</a> -> 'c <a href="React.html#TYPEsignal">React.signal</a> -> 'd <a href="React.S.S.html#TYPEv">v</a> <a href="React.html#TYPEsignal">React.signal</a></code></pre><pre><span id="VALl4"><span class="keyword">val</span> l4</span> : <code class="type">('a -> 'b -> 'c -> 'd -> 'e <a href="React.S.S.html#TYPEv">v</a>) -><br> 'a <a href="React.html#TYPEsignal">React.signal</a> -><br> 'b <a href="React.html#TYPEsignal">React.signal</a> -><br> 'c <a href="React.html#TYPEsignal">React.signal</a> -> 'd <a href="React.html#TYPEsignal">React.signal</a> -> 'e <a href="React.S.S.html#TYPEv">v</a> <a href="React.html#TYPEsignal">React.signal</a></code></pre><pre><span id="VALl5"><span class="keyword">val</span> l5</span> : <code class="type">('a -> 'b -> 'c -> 'd -> 'e -> 'f <a href="React.S.S.html#TYPEv">v</a>) -><br> 'a <a href="React.html#TYPEsignal">React.signal</a> -><br> 'b <a href="React.html#TYPEsignal">React.signal</a> -><br> 'c <a href="React.html#TYPEsignal">React.signal</a> -><br> 'd <a href="React.html#TYPEsignal">React.signal</a> -> 'e <a href="React.html#TYPEsignal">React.signal</a> -> 'f <a href="React.S.S.html#TYPEv">v</a> <a href="React.html#TYPEsignal">React.signal</a></code></pre><pre><span id="VALl6"><span class="keyword">val</span> l6</span> : <code class="type">('a -> 'b -> 'c -> 'd -> 'e -> 'f -> 'g <a href="React.S.S.html#TYPEv">v</a>) -><br> 'a <a href="React.html#TYPEsignal">React.signal</a> -><br> 'b <a href="React.html#TYPEsignal">React.signal</a> -><br> 'c <a href="React.html#TYPEsignal">React.signal</a> -><br> 'd <a href="React.html#TYPEsignal">React.signal</a> -><br> 'e <a href="React.html#TYPEsignal">React.signal</a> -> 'f <a href="React.html#TYPEsignal">React.signal</a> -> 'g <a href="React.S.S.html#TYPEv">v</a> <a href="React.html#TYPEsignal">React.signal</a></code></pre></body></html>
\ No newline at end of file +<pre><span id="VALcreate"><span class="keyword">val</span> create</span> : <code class="type">'a <a href="React.S.S.html#TYPEv">v</a> -> 'a <a href="React.S.S.html#TYPEv">v</a> <a href="React.html#TYPEsignal">React.signal</a> * ('a <a href="React.S.S.html#TYPEv">v</a> -> unit)</code></pre><pre><span id="VALequal"><span class="keyword">val</span> equal</span> : <code class="type">'a <a href="React.S.S.html#TYPEv">v</a> <a href="React.html#TYPEsignal">React.signal</a> -> 'a <a href="React.S.S.html#TYPEv">v</a> <a href="React.html#TYPEsignal">React.signal</a> -> bool</code></pre><pre><span id="VALhold"><span class="keyword">val</span> hold</span> : <code class="type">'a <a href="React.S.S.html#TYPEv">v</a> -> 'a <a href="React.S.S.html#TYPEv">v</a> <a href="React.html#TYPEevent">React.event</a> -> 'a <a href="React.S.S.html#TYPEv">v</a> <a href="React.html#TYPEsignal">React.signal</a></code></pre><pre><span id="VALapp"><span class="keyword">val</span> app</span> : <code class="type">('a -> 'b <a href="React.S.S.html#TYPEv">v</a>) <a href="React.html#TYPEsignal">React.signal</a> -><br> 'a <a href="React.html#TYPEsignal">React.signal</a> -> 'b <a href="React.S.S.html#TYPEv">v</a> <a href="React.html#TYPEsignal">React.signal</a></code></pre><pre><span id="VALmap"><span class="keyword">val</span> map</span> : <code class="type">('a -> 'b <a href="React.S.S.html#TYPEv">v</a>) -> 'a <a href="React.html#TYPEsignal">React.signal</a> -> 'b <a href="React.S.S.html#TYPEv">v</a> <a href="React.html#TYPEsignal">React.signal</a></code></pre><pre><span id="VALfilter"><span class="keyword">val</span> filter</span> : <code class="type">('a <a href="React.S.S.html#TYPEv">v</a> -> bool) -><br> 'a <a href="React.S.S.html#TYPEv">v</a> -> 'a <a href="React.S.S.html#TYPEv">v</a> <a href="React.html#TYPEsignal">React.signal</a> -> 'a <a href="React.S.S.html#TYPEv">v</a> <a href="React.html#TYPEsignal">React.signal</a></code></pre><pre><span id="VALfmap"><span class="keyword">val</span> fmap</span> : <code class="type">('a -> 'b <a href="React.S.S.html#TYPEv">v</a> option) -><br> 'b <a href="React.S.S.html#TYPEv">v</a> -> 'a <a href="React.html#TYPEsignal">React.signal</a> -> 'b <a href="React.S.S.html#TYPEv">v</a> <a href="React.html#TYPEsignal">React.signal</a></code></pre><pre><span id="VALwhen_"><span class="keyword">val</span> when_</span> : <code class="type">bool <a href="React.html#TYPEsignal">React.signal</a> -><br> 'a <a href="React.S.S.html#TYPEv">v</a> -> 'a <a href="React.S.S.html#TYPEv">v</a> <a href="React.html#TYPEsignal">React.signal</a> -> 'a <a href="React.S.S.html#TYPEv">v</a> <a href="React.html#TYPEsignal">React.signal</a></code></pre><pre><span id="VALdismiss"><span class="keyword">val</span> dismiss</span> : <code class="type">'b <a href="React.html#TYPEevent">React.event</a> -><br> 'a <a href="React.S.S.html#TYPEv">v</a> -> 'a <a href="React.S.S.html#TYPEv">v</a> <a href="React.html#TYPEsignal">React.signal</a> -> 'a <a href="React.S.S.html#TYPEv">v</a> <a href="React.html#TYPEsignal">React.signal</a></code></pre><pre><span id="VALaccum"><span class="keyword">val</span> accum</span> : <code class="type">('a <a href="React.S.S.html#TYPEv">v</a> -> 'a <a href="React.S.S.html#TYPEv">v</a>) <a href="React.html#TYPEevent">React.event</a> -><br> 'a <a href="React.S.S.html#TYPEv">v</a> -> 'a <a href="React.S.S.html#TYPEv">v</a> <a href="React.html#TYPEsignal">React.signal</a></code></pre><pre><span id="VALfold"><span class="keyword">val</span> fold</span> : <code class="type">('a <a href="React.S.S.html#TYPEv">v</a> -> 'b -> 'a <a href="React.S.S.html#TYPEv">v</a>) -><br> 'a <a href="React.S.S.html#TYPEv">v</a> -> 'b <a href="React.html#TYPEevent">React.event</a> -> 'a <a href="React.S.S.html#TYPEv">v</a> <a href="React.html#TYPEsignal">React.signal</a></code></pre><pre><span id="VALmerge"><span class="keyword">val</span> merge</span> : <code class="type">('a <a href="React.S.S.html#TYPEv">v</a> -> 'b -> 'a <a href="React.S.S.html#TYPEv">v</a>) -><br> 'a <a href="React.S.S.html#TYPEv">v</a> -> 'b <a href="React.html#TYPEsignal">React.signal</a> list -> 'a <a href="React.S.S.html#TYPEv">v</a> <a href="React.html#TYPEsignal">React.signal</a></code></pre><pre><span id="VALswitch"><span class="keyword">val</span> switch</span> : <code class="type">'a <a href="React.S.S.html#TYPEv">v</a> <a href="React.html#TYPEsignal">React.signal</a> -><br> 'a <a href="React.S.S.html#TYPEv">v</a> <a href="React.html#TYPEsignal">React.signal</a> <a href="React.html#TYPEevent">React.event</a> -> 'a <a href="React.S.S.html#TYPEv">v</a> <a href="React.html#TYPEsignal">React.signal</a></code></pre><pre><span id="VALfix"><span class="keyword">val</span> fix</span> : <code class="type">'a <a href="React.S.S.html#TYPEv">v</a> -><br> ('a <a href="React.S.S.html#TYPEv">v</a> <a href="React.html#TYPEsignal">React.signal</a> -> 'a <a href="React.S.S.html#TYPEv">v</a> <a href="React.html#TYPEsignal">React.signal</a> * 'b) -> 'b</code></pre><pre><span id="VALl1"><span class="keyword">val</span> l1</span> : <code class="type">('a -> 'b <a href="React.S.S.html#TYPEv">v</a>) -> 'a <a href="React.html#TYPEsignal">React.signal</a> -> 'b <a href="React.S.S.html#TYPEv">v</a> <a href="React.html#TYPEsignal">React.signal</a></code></pre><pre><span id="VALl2"><span class="keyword">val</span> l2</span> : <code class="type">('a -> 'b -> 'c <a href="React.S.S.html#TYPEv">v</a>) -><br> 'a <a href="React.html#TYPEsignal">React.signal</a> -> 'b <a href="React.html#TYPEsignal">React.signal</a> -> 'c <a href="React.S.S.html#TYPEv">v</a> <a href="React.html#TYPEsignal">React.signal</a></code></pre><pre><span id="VALl3"><span class="keyword">val</span> l3</span> : <code class="type">('a -> 'b -> 'c -> 'd <a href="React.S.S.html#TYPEv">v</a>) -><br> 'a <a href="React.html#TYPEsignal">React.signal</a> -><br> 'b <a href="React.html#TYPEsignal">React.signal</a> -> 'c <a href="React.html#TYPEsignal">React.signal</a> -> 'd <a href="React.S.S.html#TYPEv">v</a> <a href="React.html#TYPEsignal">React.signal</a></code></pre><pre><span id="VALl4"><span class="keyword">val</span> l4</span> : <code class="type">('a -> 'b -> 'c -> 'd -> 'e <a href="React.S.S.html#TYPEv">v</a>) -><br> 'a <a href="React.html#TYPEsignal">React.signal</a> -><br> 'b <a href="React.html#TYPEsignal">React.signal</a> -><br> 'c <a href="React.html#TYPEsignal">React.signal</a> -> 'd <a href="React.html#TYPEsignal">React.signal</a> -> 'e <a href="React.S.S.html#TYPEv">v</a> <a href="React.html#TYPEsignal">React.signal</a></code></pre><pre><span id="VALl5"><span class="keyword">val</span> l5</span> : <code class="type">('a -> 'b -> 'c -> 'd -> 'e -> 'f <a href="React.S.S.html#TYPEv">v</a>) -><br> 'a <a href="React.html#TYPEsignal">React.signal</a> -><br> 'b <a href="React.html#TYPEsignal">React.signal</a> -><br> 'c <a href="React.html#TYPEsignal">React.signal</a> -><br> 'd <a href="React.html#TYPEsignal">React.signal</a> -> 'e <a href="React.html#TYPEsignal">React.signal</a> -> 'f <a href="React.S.S.html#TYPEv">v</a> <a href="React.html#TYPEsignal">React.signal</a></code></pre><pre><span id="VALl6"><span class="keyword">val</span> l6</span> : <code class="type">('a -> 'b -> 'c -> 'd -> 'e -> 'f -> 'g <a href="React.S.S.html#TYPEv">v</a>) -><br> 'a <a href="React.html#TYPEsignal">React.signal</a> -><br> 'b <a href="React.html#TYPEsignal">React.signal</a> -><br> 'c <a href="React.html#TYPEsignal">React.signal</a> -><br> 'd <a href="React.html#TYPEsignal">React.signal</a> -><br> 'e <a href="React.html#TYPEsignal">React.signal</a> -> 'f <a href="React.html#TYPEsignal">React.signal</a> -> 'g <a href="React.S.S.html#TYPEv">v</a> <a href="React.html#TYPEsignal">React.signal</a></code></pre></body></html>
\ No newline at end of file diff --git a/doc/React.S.Special.Sf.html b/doc/React.S.Special.Sf.html index 28c421c..c5408c5 100644 --- a/doc/React.S.Special.Sf.html +++ b/doc/React.S.Special.Sf.html @@ -13,13 +13,12 @@ <link title="React" rel="Chapter" href="React.html"><title>React.S.Special.Sf</title> </head> <body> -<div class="navbar"><a href="React.S.Special.Si.html">Previous</a> - <a href="React.S.Special.html">Up</a> +<div class="navbar"><a class="pre" href="React.S.Special.Si.html" title="React.S.Special.Si">Previous</a> + <a class="up" href="React.S.Special.html" title="React.S.Special">Up</a> </div> -<center><h1>Module <a href="type_React.S.Special.Sf.html">React.S.Special.Sf</a></h1></center> -<br> +<h1>Module <a href="type_React.S.Special.Sf.html">React.S.Special.Sf</a></h1> <pre><span class="keyword">module</span> Sf: <code class="type"><a href="React.S.S.html">React.S.S</a></code><code class="type"> with type 'a v = float</code></pre>Specialization for floats.<br> <hr width="100%"> <pre><span id="TYPEv"><span class="keyword">type</span> <code class="type">'a</code> v</span> </pre> -<pre><span id="VALcreate"><span class="keyword">val</span> create</span> : <code class="type">'a <a href="React.S.S.html#TYPEv">v</a> -> 'a <a href="React.S.S.html#TYPEv">v</a> <a href="React.html#TYPEsignal">React.signal</a> * ('a <a href="React.S.S.html#TYPEv">v</a> -> unit)</code></pre><pre><span id="VALequal"><span class="keyword">val</span> equal</span> : <code class="type">'a <a href="React.S.S.html#TYPEv">v</a> <a href="React.html#TYPEsignal">React.signal</a> -> 'a <a href="React.S.S.html#TYPEv">v</a> <a href="React.html#TYPEsignal">React.signal</a> -> bool</code></pre><pre><span id="VALhold"><span class="keyword">val</span> hold</span> : <code class="type">'a <a href="React.S.S.html#TYPEv">v</a> -> 'a <a href="React.S.S.html#TYPEv">v</a> <a href="React.html#TYPEevent">React.event</a> -> 'a <a href="React.S.S.html#TYPEv">v</a> <a href="React.html#TYPEsignal">React.signal</a></code></pre><pre><span id="VALapp"><span class="keyword">val</span> app</span> : <code class="type">('a -> 'b <a href="React.S.S.html#TYPEv">v</a>) <a href="React.html#TYPEsignal">React.signal</a> -><br> 'a <a href="React.html#TYPEsignal">React.signal</a> -> 'b <a href="React.S.S.html#TYPEv">v</a> <a href="React.html#TYPEsignal">React.signal</a></code></pre><pre><span id="VALmap"><span class="keyword">val</span> map</span> : <code class="type">('a -> 'b <a href="React.S.S.html#TYPEv">v</a>) -> 'a <a href="React.html#TYPEsignal">React.signal</a> -> 'b <a href="React.S.S.html#TYPEv">v</a> <a href="React.html#TYPEsignal">React.signal</a></code></pre><pre><span id="VALfilter"><span class="keyword">val</span> filter</span> : <code class="type">('a <a href="React.S.S.html#TYPEv">v</a> -> bool) -><br> 'a <a href="React.S.S.html#TYPEv">v</a> -> 'a <a href="React.S.S.html#TYPEv">v</a> <a href="React.html#TYPEsignal">React.signal</a> -> 'a <a href="React.S.S.html#TYPEv">v</a> <a href="React.html#TYPEsignal">React.signal</a></code></pre><pre><span id="VALfmap"><span class="keyword">val</span> fmap</span> : <code class="type">('a -> 'b <a href="React.S.S.html#TYPEv">v</a> option) -><br> 'b <a href="React.S.S.html#TYPEv">v</a> -> 'a <a href="React.html#TYPEsignal">React.signal</a> -> 'b <a href="React.S.S.html#TYPEv">v</a> <a href="React.html#TYPEsignal">React.signal</a></code></pre><pre><span id="VALwhen_"><span class="keyword">val</span> when_</span> : <code class="type">bool <a href="React.html#TYPEsignal">React.signal</a> -><br> 'a <a href="React.S.S.html#TYPEv">v</a> -> 'a <a href="React.S.S.html#TYPEv">v</a> <a href="React.html#TYPEsignal">React.signal</a> -> 'a <a href="React.S.S.html#TYPEv">v</a> <a href="React.html#TYPEsignal">React.signal</a></code></pre><pre><span id="VALdismiss"><span class="keyword">val</span> dismiss</span> : <code class="type">'a <a href="React.html#TYPEevent">React.event</a> -><br> 'b <a href="React.S.S.html#TYPEv">v</a> -> 'b <a href="React.S.S.html#TYPEv">v</a> <a href="React.html#TYPEsignal">React.signal</a> -> 'b <a href="React.S.S.html#TYPEv">v</a> <a href="React.html#TYPEsignal">React.signal</a></code></pre><pre><span id="VALaccum"><span class="keyword">val</span> accum</span> : <code class="type">('a <a href="React.S.S.html#TYPEv">v</a> -> 'a <a href="React.S.S.html#TYPEv">v</a>) <a href="React.html#TYPEevent">React.event</a> -><br> 'a <a href="React.S.S.html#TYPEv">v</a> -> 'a <a href="React.S.S.html#TYPEv">v</a> <a href="React.html#TYPEsignal">React.signal</a></code></pre><pre><span id="VALfold"><span class="keyword">val</span> fold</span> : <code class="type">('a <a href="React.S.S.html#TYPEv">v</a> -> 'b -> 'a <a href="React.S.S.html#TYPEv">v</a>) -><br> 'a <a href="React.S.S.html#TYPEv">v</a> -> 'b <a href="React.html#TYPEevent">React.event</a> -> 'a <a href="React.S.S.html#TYPEv">v</a> <a href="React.html#TYPEsignal">React.signal</a></code></pre><pre><span id="VALmerge"><span class="keyword">val</span> merge</span> : <code class="type">('a <a href="React.S.S.html#TYPEv">v</a> -> 'b -> 'a <a href="React.S.S.html#TYPEv">v</a>) -><br> 'a <a href="React.S.S.html#TYPEv">v</a> -> 'b <a href="React.html#TYPEsignal">React.signal</a> list -> 'a <a href="React.S.S.html#TYPEv">v</a> <a href="React.html#TYPEsignal">React.signal</a></code></pre><pre><span id="VALswitch"><span class="keyword">val</span> switch</span> : <code class="type">'a <a href="React.S.S.html#TYPEv">v</a> <a href="React.html#TYPEsignal">React.signal</a> -><br> 'a <a href="React.S.S.html#TYPEv">v</a> <a href="React.html#TYPEsignal">React.signal</a> <a href="React.html#TYPEevent">React.event</a> -> 'a <a href="React.S.S.html#TYPEv">v</a> <a href="React.html#TYPEsignal">React.signal</a></code></pre><pre><span id="VALfix"><span class="keyword">val</span> fix</span> : <code class="type">'a <a href="React.S.S.html#TYPEv">v</a> -><br> ('a <a href="React.S.S.html#TYPEv">v</a> <a href="React.html#TYPEsignal">React.signal</a> -> 'a <a href="React.S.S.html#TYPEv">v</a> <a href="React.html#TYPEsignal">React.signal</a> * 'b) -> 'b</code></pre><pre><span id="VALl1"><span class="keyword">val</span> l1</span> : <code class="type">('a -> 'b <a href="React.S.S.html#TYPEv">v</a>) -> 'a <a href="React.html#TYPEsignal">React.signal</a> -> 'b <a href="React.S.S.html#TYPEv">v</a> <a href="React.html#TYPEsignal">React.signal</a></code></pre><pre><span id="VALl2"><span class="keyword">val</span> l2</span> : <code class="type">('a -> 'b -> 'c <a href="React.S.S.html#TYPEv">v</a>) -><br> 'a <a href="React.html#TYPEsignal">React.signal</a> -> 'b <a href="React.html#TYPEsignal">React.signal</a> -> 'c <a href="React.S.S.html#TYPEv">v</a> <a href="React.html#TYPEsignal">React.signal</a></code></pre><pre><span id="VALl3"><span class="keyword">val</span> l3</span> : <code class="type">('a -> 'b -> 'c -> 'd <a href="React.S.S.html#TYPEv">v</a>) -><br> 'a <a href="React.html#TYPEsignal">React.signal</a> -><br> 'b <a href="React.html#TYPEsignal">React.signal</a> -> 'c <a href="React.html#TYPEsignal">React.signal</a> -> 'd <a href="React.S.S.html#TYPEv">v</a> <a href="React.html#TYPEsignal">React.signal</a></code></pre><pre><span id="VALl4"><span class="keyword">val</span> l4</span> : <code class="type">('a -> 'b -> 'c -> 'd -> 'e <a href="React.S.S.html#TYPEv">v</a>) -><br> 'a <a href="React.html#TYPEsignal">React.signal</a> -><br> 'b <a href="React.html#TYPEsignal">React.signal</a> -><br> 'c <a href="React.html#TYPEsignal">React.signal</a> -> 'd <a href="React.html#TYPEsignal">React.signal</a> -> 'e <a href="React.S.S.html#TYPEv">v</a> <a href="React.html#TYPEsignal">React.signal</a></code></pre><pre><span id="VALl5"><span class="keyword">val</span> l5</span> : <code class="type">('a -> 'b -> 'c -> 'd -> 'e -> 'f <a href="React.S.S.html#TYPEv">v</a>) -><br> 'a <a href="React.html#TYPEsignal">React.signal</a> -><br> 'b <a href="React.html#TYPEsignal">React.signal</a> -><br> 'c <a href="React.html#TYPEsignal">React.signal</a> -><br> 'd <a href="React.html#TYPEsignal">React.signal</a> -> 'e <a href="React.html#TYPEsignal">React.signal</a> -> 'f <a href="React.S.S.html#TYPEv">v</a> <a href="React.html#TYPEsignal">React.signal</a></code></pre><pre><span id="VALl6"><span class="keyword">val</span> l6</span> : <code class="type">('a -> 'b -> 'c -> 'd -> 'e -> 'f -> 'g <a href="React.S.S.html#TYPEv">v</a>) -><br> 'a <a href="React.html#TYPEsignal">React.signal</a> -><br> 'b <a href="React.html#TYPEsignal">React.signal</a> -><br> 'c <a href="React.html#TYPEsignal">React.signal</a> -><br> 'd <a href="React.html#TYPEsignal">React.signal</a> -><br> 'e <a href="React.html#TYPEsignal">React.signal</a> -> 'f <a href="React.html#TYPEsignal">React.signal</a> -> 'g <a href="React.S.S.html#TYPEv">v</a> <a href="React.html#TYPEsignal">React.signal</a></code></pre></body></html>
\ No newline at end of file +<pre><span id="VALcreate"><span class="keyword">val</span> create</span> : <code class="type">'a <a href="React.S.S.html#TYPEv">v</a> -> 'a <a href="React.S.S.html#TYPEv">v</a> <a href="React.html#TYPEsignal">React.signal</a> * ('a <a href="React.S.S.html#TYPEv">v</a> -> unit)</code></pre><pre><span id="VALequal"><span class="keyword">val</span> equal</span> : <code class="type">'a <a href="React.S.S.html#TYPEv">v</a> <a href="React.html#TYPEsignal">React.signal</a> -> 'a <a href="React.S.S.html#TYPEv">v</a> <a href="React.html#TYPEsignal">React.signal</a> -> bool</code></pre><pre><span id="VALhold"><span class="keyword">val</span> hold</span> : <code class="type">'a <a href="React.S.S.html#TYPEv">v</a> -> 'a <a href="React.S.S.html#TYPEv">v</a> <a href="React.html#TYPEevent">React.event</a> -> 'a <a href="React.S.S.html#TYPEv">v</a> <a href="React.html#TYPEsignal">React.signal</a></code></pre><pre><span id="VALapp"><span class="keyword">val</span> app</span> : <code class="type">('a -> 'b <a href="React.S.S.html#TYPEv">v</a>) <a href="React.html#TYPEsignal">React.signal</a> -><br> 'a <a href="React.html#TYPEsignal">React.signal</a> -> 'b <a href="React.S.S.html#TYPEv">v</a> <a href="React.html#TYPEsignal">React.signal</a></code></pre><pre><span id="VALmap"><span class="keyword">val</span> map</span> : <code class="type">('a -> 'b <a href="React.S.S.html#TYPEv">v</a>) -> 'a <a href="React.html#TYPEsignal">React.signal</a> -> 'b <a href="React.S.S.html#TYPEv">v</a> <a href="React.html#TYPEsignal">React.signal</a></code></pre><pre><span id="VALfilter"><span class="keyword">val</span> filter</span> : <code class="type">('a <a href="React.S.S.html#TYPEv">v</a> -> bool) -><br> 'a <a href="React.S.S.html#TYPEv">v</a> -> 'a <a href="React.S.S.html#TYPEv">v</a> <a href="React.html#TYPEsignal">React.signal</a> -> 'a <a href="React.S.S.html#TYPEv">v</a> <a href="React.html#TYPEsignal">React.signal</a></code></pre><pre><span id="VALfmap"><span class="keyword">val</span> fmap</span> : <code class="type">('a -> 'b <a href="React.S.S.html#TYPEv">v</a> option) -><br> 'b <a href="React.S.S.html#TYPEv">v</a> -> 'a <a href="React.html#TYPEsignal">React.signal</a> -> 'b <a href="React.S.S.html#TYPEv">v</a> <a href="React.html#TYPEsignal">React.signal</a></code></pre><pre><span id="VALwhen_"><span class="keyword">val</span> when_</span> : <code class="type">bool <a href="React.html#TYPEsignal">React.signal</a> -><br> 'a <a href="React.S.S.html#TYPEv">v</a> -> 'a <a href="React.S.S.html#TYPEv">v</a> <a href="React.html#TYPEsignal">React.signal</a> -> 'a <a href="React.S.S.html#TYPEv">v</a> <a href="React.html#TYPEsignal">React.signal</a></code></pre><pre><span id="VALdismiss"><span class="keyword">val</span> dismiss</span> : <code class="type">'b <a href="React.html#TYPEevent">React.event</a> -><br> 'a <a href="React.S.S.html#TYPEv">v</a> -> 'a <a href="React.S.S.html#TYPEv">v</a> <a href="React.html#TYPEsignal">React.signal</a> -> 'a <a href="React.S.S.html#TYPEv">v</a> <a href="React.html#TYPEsignal">React.signal</a></code></pre><pre><span id="VALaccum"><span class="keyword">val</span> accum</span> : <code class="type">('a <a href="React.S.S.html#TYPEv">v</a> -> 'a <a href="React.S.S.html#TYPEv">v</a>) <a href="React.html#TYPEevent">React.event</a> -><br> 'a <a href="React.S.S.html#TYPEv">v</a> -> 'a <a href="React.S.S.html#TYPEv">v</a> <a href="React.html#TYPEsignal">React.signal</a></code></pre><pre><span id="VALfold"><span class="keyword">val</span> fold</span> : <code class="type">('a <a href="React.S.S.html#TYPEv">v</a> -> 'b -> 'a <a href="React.S.S.html#TYPEv">v</a>) -><br> 'a <a href="React.S.S.html#TYPEv">v</a> -> 'b <a href="React.html#TYPEevent">React.event</a> -> 'a <a href="React.S.S.html#TYPEv">v</a> <a href="React.html#TYPEsignal">React.signal</a></code></pre><pre><span id="VALmerge"><span class="keyword">val</span> merge</span> : <code class="type">('a <a href="React.S.S.html#TYPEv">v</a> -> 'b -> 'a <a href="React.S.S.html#TYPEv">v</a>) -><br> 'a <a href="React.S.S.html#TYPEv">v</a> -> 'b <a href="React.html#TYPEsignal">React.signal</a> list -> 'a <a href="React.S.S.html#TYPEv">v</a> <a href="React.html#TYPEsignal">React.signal</a></code></pre><pre><span id="VALswitch"><span class="keyword">val</span> switch</span> : <code class="type">'a <a href="React.S.S.html#TYPEv">v</a> <a href="React.html#TYPEsignal">React.signal</a> -><br> 'a <a href="React.S.S.html#TYPEv">v</a> <a href="React.html#TYPEsignal">React.signal</a> <a href="React.html#TYPEevent">React.event</a> -> 'a <a href="React.S.S.html#TYPEv">v</a> <a href="React.html#TYPEsignal">React.signal</a></code></pre><pre><span id="VALfix"><span class="keyword">val</span> fix</span> : <code class="type">'a <a href="React.S.S.html#TYPEv">v</a> -><br> ('a <a href="React.S.S.html#TYPEv">v</a> <a href="React.html#TYPEsignal">React.signal</a> -> 'a <a href="React.S.S.html#TYPEv">v</a> <a href="React.html#TYPEsignal">React.signal</a> * 'b) -> 'b</code></pre><pre><span id="VALl1"><span class="keyword">val</span> l1</span> : <code class="type">('a -> 'b <a href="React.S.S.html#TYPEv">v</a>) -> 'a <a href="React.html#TYPEsignal">React.signal</a> -> 'b <a href="React.S.S.html#TYPEv">v</a> <a href="React.html#TYPEsignal">React.signal</a></code></pre><pre><span id="VALl2"><span class="keyword">val</span> l2</span> : <code class="type">('a -> 'b -> 'c <a href="React.S.S.html#TYPEv">v</a>) -><br> 'a <a href="React.html#TYPEsignal">React.signal</a> -> 'b <a href="React.html#TYPEsignal">React.signal</a> -> 'c <a href="React.S.S.html#TYPEv">v</a> <a href="React.html#TYPEsignal">React.signal</a></code></pre><pre><span id="VALl3"><span class="keyword">val</span> l3</span> : <code class="type">('a -> 'b -> 'c -> 'd <a href="React.S.S.html#TYPEv">v</a>) -><br> 'a <a href="React.html#TYPEsignal">React.signal</a> -><br> 'b <a href="React.html#TYPEsignal">React.signal</a> -> 'c <a href="React.html#TYPEsignal">React.signal</a> -> 'd <a href="React.S.S.html#TYPEv">v</a> <a href="React.html#TYPEsignal">React.signal</a></code></pre><pre><span id="VALl4"><span class="keyword">val</span> l4</span> : <code class="type">('a -> 'b -> 'c -> 'd -> 'e <a href="React.S.S.html#TYPEv">v</a>) -><br> 'a <a href="React.html#TYPEsignal">React.signal</a> -><br> 'b <a href="React.html#TYPEsignal">React.signal</a> -><br> 'c <a href="React.html#TYPEsignal">React.signal</a> -> 'd <a href="React.html#TYPEsignal">React.signal</a> -> 'e <a href="React.S.S.html#TYPEv">v</a> <a href="React.html#TYPEsignal">React.signal</a></code></pre><pre><span id="VALl5"><span class="keyword">val</span> l5</span> : <code class="type">('a -> 'b -> 'c -> 'd -> 'e -> 'f <a href="React.S.S.html#TYPEv">v</a>) -><br> 'a <a href="React.html#TYPEsignal">React.signal</a> -><br> 'b <a href="React.html#TYPEsignal">React.signal</a> -><br> 'c <a href="React.html#TYPEsignal">React.signal</a> -><br> 'd <a href="React.html#TYPEsignal">React.signal</a> -> 'e <a href="React.html#TYPEsignal">React.signal</a> -> 'f <a href="React.S.S.html#TYPEv">v</a> <a href="React.html#TYPEsignal">React.signal</a></code></pre><pre><span id="VALl6"><span class="keyword">val</span> l6</span> : <code class="type">('a -> 'b -> 'c -> 'd -> 'e -> 'f -> 'g <a href="React.S.S.html#TYPEv">v</a>) -><br> 'a <a href="React.html#TYPEsignal">React.signal</a> -><br> 'b <a href="React.html#TYPEsignal">React.signal</a> -><br> 'c <a href="React.html#TYPEsignal">React.signal</a> -><br> 'd <a href="React.html#TYPEsignal">React.signal</a> -><br> 'e <a href="React.html#TYPEsignal">React.signal</a> -> 'f <a href="React.html#TYPEsignal">React.signal</a> -> 'g <a href="React.S.S.html#TYPEv">v</a> <a href="React.html#TYPEsignal">React.signal</a></code></pre></body></html>
\ No newline at end of file diff --git a/doc/React.S.Special.Si.html b/doc/React.S.Special.Si.html index eec92e9..3382be1 100644 --- a/doc/React.S.Special.Si.html +++ b/doc/React.S.Special.Si.html @@ -14,14 +14,13 @@ <link title="React" rel="Chapter" href="React.html"><title>React.S.Special.Si</title> </head> <body> -<div class="navbar"><a href="React.S.Special.Sb.html">Previous</a> - <a href="React.S.Special.html">Up</a> - <a href="React.S.Special.Sf.html">Next</a> +<div class="navbar"><a class="pre" href="React.S.Special.Sb.html" title="React.S.Special.Sb">Previous</a> + <a class="up" href="React.S.Special.html" title="React.S.Special">Up</a> + <a class="post" href="React.S.Special.Sf.html" title="React.S.Special.Sf">Next</a> </div> -<center><h1>Module <a href="type_React.S.Special.Si.html">React.S.Special.Si</a></h1></center> -<br> +<h1>Module <a href="type_React.S.Special.Si.html">React.S.Special.Si</a></h1> <pre><span class="keyword">module</span> Si: <code class="type"><a href="React.S.S.html">React.S.S</a></code><code class="type"> with type 'a v = int</code></pre>Specialization for integers.<br> <hr width="100%"> <pre><span id="TYPEv"><span class="keyword">type</span> <code class="type">'a</code> v</span> </pre> -<pre><span id="VALcreate"><span class="keyword">val</span> create</span> : <code class="type">'a <a href="React.S.S.html#TYPEv">v</a> -> 'a <a href="React.S.S.html#TYPEv">v</a> <a href="React.html#TYPEsignal">React.signal</a> * ('a <a href="React.S.S.html#TYPEv">v</a> -> unit)</code></pre><pre><span id="VALequal"><span class="keyword">val</span> equal</span> : <code class="type">'a <a href="React.S.S.html#TYPEv">v</a> <a href="React.html#TYPEsignal">React.signal</a> -> 'a <a href="React.S.S.html#TYPEv">v</a> <a href="React.html#TYPEsignal">React.signal</a> -> bool</code></pre><pre><span id="VALhold"><span class="keyword">val</span> hold</span> : <code class="type">'a <a href="React.S.S.html#TYPEv">v</a> -> 'a <a href="React.S.S.html#TYPEv">v</a> <a href="React.html#TYPEevent">React.event</a> -> 'a <a href="React.S.S.html#TYPEv">v</a> <a href="React.html#TYPEsignal">React.signal</a></code></pre><pre><span id="VALapp"><span class="keyword">val</span> app</span> : <code class="type">('a -> 'b <a href="React.S.S.html#TYPEv">v</a>) <a href="React.html#TYPEsignal">React.signal</a> -><br> 'a <a href="React.html#TYPEsignal">React.signal</a> -> 'b <a href="React.S.S.html#TYPEv">v</a> <a href="React.html#TYPEsignal">React.signal</a></code></pre><pre><span id="VALmap"><span class="keyword">val</span> map</span> : <code class="type">('a -> 'b <a href="React.S.S.html#TYPEv">v</a>) -> 'a <a href="React.html#TYPEsignal">React.signal</a> -> 'b <a href="React.S.S.html#TYPEv">v</a> <a href="React.html#TYPEsignal">React.signal</a></code></pre><pre><span id="VALfilter"><span class="keyword">val</span> filter</span> : <code class="type">('a <a href="React.S.S.html#TYPEv">v</a> -> bool) -><br> 'a <a href="React.S.S.html#TYPEv">v</a> -> 'a <a href="React.S.S.html#TYPEv">v</a> <a href="React.html#TYPEsignal">React.signal</a> -> 'a <a href="React.S.S.html#TYPEv">v</a> <a href="React.html#TYPEsignal">React.signal</a></code></pre><pre><span id="VALfmap"><span class="keyword">val</span> fmap</span> : <code class="type">('a -> 'b <a href="React.S.S.html#TYPEv">v</a> option) -><br> 'b <a href="React.S.S.html#TYPEv">v</a> -> 'a <a href="React.html#TYPEsignal">React.signal</a> -> 'b <a href="React.S.S.html#TYPEv">v</a> <a href="React.html#TYPEsignal">React.signal</a></code></pre><pre><span id="VALwhen_"><span class="keyword">val</span> when_</span> : <code class="type">bool <a href="React.html#TYPEsignal">React.signal</a> -><br> 'a <a href="React.S.S.html#TYPEv">v</a> -> 'a <a href="React.S.S.html#TYPEv">v</a> <a href="React.html#TYPEsignal">React.signal</a> -> 'a <a href="React.S.S.html#TYPEv">v</a> <a href="React.html#TYPEsignal">React.signal</a></code></pre><pre><span id="VALdismiss"><span class="keyword">val</span> dismiss</span> : <code class="type">'a <a href="React.html#TYPEevent">React.event</a> -><br> 'b <a href="React.S.S.html#TYPEv">v</a> -> 'b <a href="React.S.S.html#TYPEv">v</a> <a href="React.html#TYPEsignal">React.signal</a> -> 'b <a href="React.S.S.html#TYPEv">v</a> <a href="React.html#TYPEsignal">React.signal</a></code></pre><pre><span id="VALaccum"><span class="keyword">val</span> accum</span> : <code class="type">('a <a href="React.S.S.html#TYPEv">v</a> -> 'a <a href="React.S.S.html#TYPEv">v</a>) <a href="React.html#TYPEevent">React.event</a> -><br> 'a <a href="React.S.S.html#TYPEv">v</a> -> 'a <a href="React.S.S.html#TYPEv">v</a> <a href="React.html#TYPEsignal">React.signal</a></code></pre><pre><span id="VALfold"><span class="keyword">val</span> fold</span> : <code class="type">('a <a href="React.S.S.html#TYPEv">v</a> -> 'b -> 'a <a href="React.S.S.html#TYPEv">v</a>) -><br> 'a <a href="React.S.S.html#TYPEv">v</a> -> 'b <a href="React.html#TYPEevent">React.event</a> -> 'a <a href="React.S.S.html#TYPEv">v</a> <a href="React.html#TYPEsignal">React.signal</a></code></pre><pre><span id="VALmerge"><span class="keyword">val</span> merge</span> : <code class="type">('a <a href="React.S.S.html#TYPEv">v</a> -> 'b -> 'a <a href="React.S.S.html#TYPEv">v</a>) -><br> 'a <a href="React.S.S.html#TYPEv">v</a> -> 'b <a href="React.html#TYPEsignal">React.signal</a> list -> 'a <a href="React.S.S.html#TYPEv">v</a> <a href="React.html#TYPEsignal">React.signal</a></code></pre><pre><span id="VALswitch"><span class="keyword">val</span> switch</span> : <code class="type">'a <a href="React.S.S.html#TYPEv">v</a> <a href="React.html#TYPEsignal">React.signal</a> -><br> 'a <a href="React.S.S.html#TYPEv">v</a> <a href="React.html#TYPEsignal">React.signal</a> <a href="React.html#TYPEevent">React.event</a> -> 'a <a href="React.S.S.html#TYPEv">v</a> <a href="React.html#TYPEsignal">React.signal</a></code></pre><pre><span id="VALfix"><span class="keyword">val</span> fix</span> : <code class="type">'a <a href="React.S.S.html#TYPEv">v</a> -><br> ('a <a href="React.S.S.html#TYPEv">v</a> <a href="React.html#TYPEsignal">React.signal</a> -> 'a <a href="React.S.S.html#TYPEv">v</a> <a href="React.html#TYPEsignal">React.signal</a> * 'b) -> 'b</code></pre><pre><span id="VALl1"><span class="keyword">val</span> l1</span> : <code class="type">('a -> 'b <a href="React.S.S.html#TYPEv">v</a>) -> 'a <a href="React.html#TYPEsignal">React.signal</a> -> 'b <a href="React.S.S.html#TYPEv">v</a> <a href="React.html#TYPEsignal">React.signal</a></code></pre><pre><span id="VALl2"><span class="keyword">val</span> l2</span> : <code class="type">('a -> 'b -> 'c <a href="React.S.S.html#TYPEv">v</a>) -><br> 'a <a href="React.html#TYPEsignal">React.signal</a> -> 'b <a href="React.html#TYPEsignal">React.signal</a> -> 'c <a href="React.S.S.html#TYPEv">v</a> <a href="React.html#TYPEsignal">React.signal</a></code></pre><pre><span id="VALl3"><span class="keyword">val</span> l3</span> : <code class="type">('a -> 'b -> 'c -> 'd <a href="React.S.S.html#TYPEv">v</a>) -><br> 'a <a href="React.html#TYPEsignal">React.signal</a> -><br> 'b <a href="React.html#TYPEsignal">React.signal</a> -> 'c <a href="React.html#TYPEsignal">React.signal</a> -> 'd <a href="React.S.S.html#TYPEv">v</a> <a href="React.html#TYPEsignal">React.signal</a></code></pre><pre><span id="VALl4"><span class="keyword">val</span> l4</span> : <code class="type">('a -> 'b -> 'c -> 'd -> 'e <a href="React.S.S.html#TYPEv">v</a>) -><br> 'a <a href="React.html#TYPEsignal">React.signal</a> -><br> 'b <a href="React.html#TYPEsignal">React.signal</a> -><br> 'c <a href="React.html#TYPEsignal">React.signal</a> -> 'd <a href="React.html#TYPEsignal">React.signal</a> -> 'e <a href="React.S.S.html#TYPEv">v</a> <a href="React.html#TYPEsignal">React.signal</a></code></pre><pre><span id="VALl5"><span class="keyword">val</span> l5</span> : <code class="type">('a -> 'b -> 'c -> 'd -> 'e -> 'f <a href="React.S.S.html#TYPEv">v</a>) -><br> 'a <a href="React.html#TYPEsignal">React.signal</a> -><br> 'b <a href="React.html#TYPEsignal">React.signal</a> -><br> 'c <a href="React.html#TYPEsignal">React.signal</a> -><br> 'd <a href="React.html#TYPEsignal">React.signal</a> -> 'e <a href="React.html#TYPEsignal">React.signal</a> -> 'f <a href="React.S.S.html#TYPEv">v</a> <a href="React.html#TYPEsignal">React.signal</a></code></pre><pre><span id="VALl6"><span class="keyword">val</span> l6</span> : <code class="type">('a -> 'b -> 'c -> 'd -> 'e -> 'f -> 'g <a href="React.S.S.html#TYPEv">v</a>) -><br> 'a <a href="React.html#TYPEsignal">React.signal</a> -><br> 'b <a href="React.html#TYPEsignal">React.signal</a> -><br> 'c <a href="React.html#TYPEsignal">React.signal</a> -><br> 'd <a href="React.html#TYPEsignal">React.signal</a> -><br> 'e <a href="React.html#TYPEsignal">React.signal</a> -> 'f <a href="React.html#TYPEsignal">React.signal</a> -> 'g <a href="React.S.S.html#TYPEv">v</a> <a href="React.html#TYPEsignal">React.signal</a></code></pre></body></html>
\ No newline at end of file +<pre><span id="VALcreate"><span class="keyword">val</span> create</span> : <code class="type">'a <a href="React.S.S.html#TYPEv">v</a> -> 'a <a href="React.S.S.html#TYPEv">v</a> <a href="React.html#TYPEsignal">React.signal</a> * ('a <a href="React.S.S.html#TYPEv">v</a> -> unit)</code></pre><pre><span id="VALequal"><span class="keyword">val</span> equal</span> : <code class="type">'a <a href="React.S.S.html#TYPEv">v</a> <a href="React.html#TYPEsignal">React.signal</a> -> 'a <a href="React.S.S.html#TYPEv">v</a> <a href="React.html#TYPEsignal">React.signal</a> -> bool</code></pre><pre><span id="VALhold"><span class="keyword">val</span> hold</span> : <code class="type">'a <a href="React.S.S.html#TYPEv">v</a> -> 'a <a href="React.S.S.html#TYPEv">v</a> <a href="React.html#TYPEevent">React.event</a> -> 'a <a href="React.S.S.html#TYPEv">v</a> <a href="React.html#TYPEsignal">React.signal</a></code></pre><pre><span id="VALapp"><span class="keyword">val</span> app</span> : <code class="type">('a -> 'b <a href="React.S.S.html#TYPEv">v</a>) <a href="React.html#TYPEsignal">React.signal</a> -><br> 'a <a href="React.html#TYPEsignal">React.signal</a> -> 'b <a href="React.S.S.html#TYPEv">v</a> <a href="React.html#TYPEsignal">React.signal</a></code></pre><pre><span id="VALmap"><span class="keyword">val</span> map</span> : <code class="type">('a -> 'b <a href="React.S.S.html#TYPEv">v</a>) -> 'a <a href="React.html#TYPEsignal">React.signal</a> -> 'b <a href="React.S.S.html#TYPEv">v</a> <a href="React.html#TYPEsignal">React.signal</a></code></pre><pre><span id="VALfilter"><span class="keyword">val</span> filter</span> : <code class="type">('a <a href="React.S.S.html#TYPEv">v</a> -> bool) -><br> 'a <a href="React.S.S.html#TYPEv">v</a> -> 'a <a href="React.S.S.html#TYPEv">v</a> <a href="React.html#TYPEsignal">React.signal</a> -> 'a <a href="React.S.S.html#TYPEv">v</a> <a href="React.html#TYPEsignal">React.signal</a></code></pre><pre><span id="VALfmap"><span class="keyword">val</span> fmap</span> : <code class="type">('a -> 'b <a href="React.S.S.html#TYPEv">v</a> option) -><br> 'b <a href="React.S.S.html#TYPEv">v</a> -> 'a <a href="React.html#TYPEsignal">React.signal</a> -> 'b <a href="React.S.S.html#TYPEv">v</a> <a href="React.html#TYPEsignal">React.signal</a></code></pre><pre><span id="VALwhen_"><span class="keyword">val</span> when_</span> : <code class="type">bool <a href="React.html#TYPEsignal">React.signal</a> -><br> 'a <a href="React.S.S.html#TYPEv">v</a> -> 'a <a href="React.S.S.html#TYPEv">v</a> <a href="React.html#TYPEsignal">React.signal</a> -> 'a <a href="React.S.S.html#TYPEv">v</a> <a href="React.html#TYPEsignal">React.signal</a></code></pre><pre><span id="VALdismiss"><span class="keyword">val</span> dismiss</span> : <code class="type">'b <a href="React.html#TYPEevent">React.event</a> -><br> 'a <a href="React.S.S.html#TYPEv">v</a> -> 'a <a href="React.S.S.html#TYPEv">v</a> <a href="React.html#TYPEsignal">React.signal</a> -> 'a <a href="React.S.S.html#TYPEv">v</a> <a href="React.html#TYPEsignal">React.signal</a></code></pre><pre><span id="VALaccum"><span class="keyword">val</span> accum</span> : <code class="type">('a <a href="React.S.S.html#TYPEv">v</a> -> 'a <a href="React.S.S.html#TYPEv">v</a>) <a href="React.html#TYPEevent">React.event</a> -><br> 'a <a href="React.S.S.html#TYPEv">v</a> -> 'a <a href="React.S.S.html#TYPEv">v</a> <a href="React.html#TYPEsignal">React.signal</a></code></pre><pre><span id="VALfold"><span class="keyword">val</span> fold</span> : <code class="type">('a <a href="React.S.S.html#TYPEv">v</a> -> 'b -> 'a <a href="React.S.S.html#TYPEv">v</a>) -><br> 'a <a href="React.S.S.html#TYPEv">v</a> -> 'b <a href="React.html#TYPEevent">React.event</a> -> 'a <a href="React.S.S.html#TYPEv">v</a> <a href="React.html#TYPEsignal">React.signal</a></code></pre><pre><span id="VALmerge"><span class="keyword">val</span> merge</span> : <code class="type">('a <a href="React.S.S.html#TYPEv">v</a> -> 'b -> 'a <a href="React.S.S.html#TYPEv">v</a>) -><br> 'a <a href="React.S.S.html#TYPEv">v</a> -> 'b <a href="React.html#TYPEsignal">React.signal</a> list -> 'a <a href="React.S.S.html#TYPEv">v</a> <a href="React.html#TYPEsignal">React.signal</a></code></pre><pre><span id="VALswitch"><span class="keyword">val</span> switch</span> : <code class="type">'a <a href="React.S.S.html#TYPEv">v</a> <a href="React.html#TYPEsignal">React.signal</a> -><br> 'a <a href="React.S.S.html#TYPEv">v</a> <a href="React.html#TYPEsignal">React.signal</a> <a href="React.html#TYPEevent">React.event</a> -> 'a <a href="React.S.S.html#TYPEv">v</a> <a href="React.html#TYPEsignal">React.signal</a></code></pre><pre><span id="VALfix"><span class="keyword">val</span> fix</span> : <code class="type">'a <a href="React.S.S.html#TYPEv">v</a> -><br> ('a <a href="React.S.S.html#TYPEv">v</a> <a href="React.html#TYPEsignal">React.signal</a> -> 'a <a href="React.S.S.html#TYPEv">v</a> <a href="React.html#TYPEsignal">React.signal</a> * 'b) -> 'b</code></pre><pre><span id="VALl1"><span class="keyword">val</span> l1</span> : <code class="type">('a -> 'b <a href="React.S.S.html#TYPEv">v</a>) -> 'a <a href="React.html#TYPEsignal">React.signal</a> -> 'b <a href="React.S.S.html#TYPEv">v</a> <a href="React.html#TYPEsignal">React.signal</a></code></pre><pre><span id="VALl2"><span class="keyword">val</span> l2</span> : <code class="type">('a -> 'b -> 'c <a href="React.S.S.html#TYPEv">v</a>) -><br> 'a <a href="React.html#TYPEsignal">React.signal</a> -> 'b <a href="React.html#TYPEsignal">React.signal</a> -> 'c <a href="React.S.S.html#TYPEv">v</a> <a href="React.html#TYPEsignal">React.signal</a></code></pre><pre><span id="VALl3"><span class="keyword">val</span> l3</span> : <code class="type">('a -> 'b -> 'c -> 'd <a href="React.S.S.html#TYPEv">v</a>) -><br> 'a <a href="React.html#TYPEsignal">React.signal</a> -><br> 'b <a href="React.html#TYPEsignal">React.signal</a> -> 'c <a href="React.html#TYPEsignal">React.signal</a> -> 'd <a href="React.S.S.html#TYPEv">v</a> <a href="React.html#TYPEsignal">React.signal</a></code></pre><pre><span id="VALl4"><span class="keyword">val</span> l4</span> : <code class="type">('a -> 'b -> 'c -> 'd -> 'e <a href="React.S.S.html#TYPEv">v</a>) -><br> 'a <a href="React.html#TYPEsignal">React.signal</a> -><br> 'b <a href="React.html#TYPEsignal">React.signal</a> -><br> 'c <a href="React.html#TYPEsignal">React.signal</a> -> 'd <a href="React.html#TYPEsignal">React.signal</a> -> 'e <a href="React.S.S.html#TYPEv">v</a> <a href="React.html#TYPEsignal">React.signal</a></code></pre><pre><span id="VALl5"><span class="keyword">val</span> l5</span> : <code class="type">('a -> 'b -> 'c -> 'd -> 'e -> 'f <a href="React.S.S.html#TYPEv">v</a>) -><br> 'a <a href="React.html#TYPEsignal">React.signal</a> -><br> 'b <a href="React.html#TYPEsignal">React.signal</a> -><br> 'c <a href="React.html#TYPEsignal">React.signal</a> -><br> 'd <a href="React.html#TYPEsignal">React.signal</a> -> 'e <a href="React.html#TYPEsignal">React.signal</a> -> 'f <a href="React.S.S.html#TYPEv">v</a> <a href="React.html#TYPEsignal">React.signal</a></code></pre><pre><span id="VALl6"><span class="keyword">val</span> l6</span> : <code class="type">('a -> 'b -> 'c -> 'd -> 'e -> 'f -> 'g <a href="React.S.S.html#TYPEv">v</a>) -><br> 'a <a href="React.html#TYPEsignal">React.signal</a> -><br> 'b <a href="React.html#TYPEsignal">React.signal</a> -><br> 'c <a href="React.html#TYPEsignal">React.signal</a> -><br> 'd <a href="React.html#TYPEsignal">React.signal</a> -><br> 'e <a href="React.html#TYPEsignal">React.signal</a> -> 'f <a href="React.html#TYPEsignal">React.signal</a> -> 'g <a href="React.S.S.html#TYPEv">v</a> <a href="React.html#TYPEsignal">React.signal</a></code></pre></body></html>
\ No newline at end of file diff --git a/doc/React.S.Special.html b/doc/React.S.Special.html index 81ef735..9406313 100644 --- a/doc/React.S.Special.html +++ b/doc/React.S.Special.html @@ -13,11 +13,10 @@ <link title="React" rel="Chapter" href="React.html"><title>React.S.Special</title> </head> <body> -<div class="navbar"><a href="React.S.Make.html">Previous</a> - <a href="React.S.html">Up</a> +<div class="navbar"><a class="pre" href="React.S.Make.html" title="React.S.Make">Previous</a> + <a class="up" href="React.S.html" title="React.S">Up</a> </div> -<center><h1>Module <a href="type_React.S.Special.html">React.S.Special</a></h1></center> -<br> +<h1>Module <a href="type_React.S.Special.html">React.S.Special</a></h1> <pre><span class="keyword">module</span> Special: <code class="code"><span class="keyword">sig</span></code> <a href="React.S.Special.html">..</a> <code class="code"><span class="keyword">end</span></code></pre>Specialization for booleans, integers and floats. <p> diff --git a/doc/React.S.html b/doc/React.S.html index a3cb661..6fecff7 100644 --- a/doc/React.S.html +++ b/doc/React.S.html @@ -20,11 +20,10 @@ <title>React.S</title> </head> <body> -<div class="navbar"><a href="React.E.html">Previous</a> - <a href="React.html">Up</a> +<div class="navbar"><a class="pre" href="React.E.html" title="React.E">Previous</a> + <a class="up" href="React.html" title="React">Up</a> </div> -<center><h1>Module <a href="type_React.S.html">React.S</a></h1></center> -<br> +<h1>Module <a href="type_React.S.html">React.S</a></h1> <pre><span class="keyword">module</span> S: <code class="code"><span class="keyword">sig</span></code> <a href="React.S.html">..</a> <code class="code"><span class="keyword">end</span></code></pre>Signal combinators. <p> @@ -100,12 +99,12 @@ The type for signals of type <code class="code"><span class="keywordsign">'</spa </div> <br> <span id="tr"><h1>Transforming and filtering</h1></span><br> -<pre><span id="VALapp"><span class="keyword">val</span> app</span> : <code class="type">?eq:('a -> 'a -> bool) -><br> ('b -> 'a) <a href="React.html#TYPEsignal">React.signal</a> -> 'b <a href="React.html#TYPEsignal">React.signal</a> -> 'a <a href="React.html#TYPEsignal">React.signal</a></code></pre><div class="info"> +<pre><span id="VALapp"><span class="keyword">val</span> app</span> : <code class="type">?eq:('b -> 'b -> bool) -><br> ('a -> 'b) <a href="React.html#TYPEsignal">React.signal</a> -> 'a <a href="React.html#TYPEsignal">React.signal</a> -> 'b <a href="React.html#TYPEsignal">React.signal</a></code></pre><div class="info"> <code class="code">app sf s</code> holds the value of <code class="code">sf</code> applied to the value of <code class="code">s</code>, [<code class="code">app sf s</code>]<sub class="subscript">t</sub> <code class="code">=</code> [<code class="code">sf</code>]<sub class="subscript">t</sub> [<code class="code">s</code>]<sub class="subscript">t</sub>.<br> </div> -<pre><span id="VALmap"><span class="keyword">val</span> map</span> : <code class="type">?eq:('a -> 'a -> bool) -> ('b -> 'a) -> 'b <a href="React.html#TYPEsignal">React.signal</a> -> 'a <a href="React.html#TYPEsignal">React.signal</a></code></pre><div class="info"> +<pre><span id="VALmap"><span class="keyword">val</span> map</span> : <code class="type">?eq:('b -> 'b -> bool) -> ('a -> 'b) -> 'a <a href="React.html#TYPEsignal">React.signal</a> -> 'b <a href="React.html#TYPEsignal">React.signal</a></code></pre><div class="info"> <code class="code">map f s</code> is <code class="code">s</code> transformed by <code class="code">f</code>, [<code class="code">map f s</code>]<sub class="subscript">t</sub> = <code class="code">f</code> [<code class="code">s</code>]<sub class="subscript">t</sub>.<br> </div> <pre><span id="VALfilter"><span class="keyword">val</span> filter</span> : <code class="type">?eq:('a -> 'a -> bool) -><br> ('a -> bool) -> 'a -> 'a <a href="React.html#TYPEsignal">React.signal</a> -> 'a <a href="React.html#TYPEsignal">React.signal</a></code></pre><div class="info"> @@ -120,7 +119,7 @@ The type for signals of type <code class="code"><span class="keywordsign">'</spa </ul> <br> </div> -<pre><span id="VALfmap"><span class="keyword">val</span> fmap</span> : <code class="type">?eq:('a -> 'a -> bool) -><br> ('b -> 'a option) -> 'a -> 'b <a href="React.html#TYPEsignal">React.signal</a> -> 'a <a href="React.html#TYPEsignal">React.signal</a></code></pre><div class="info"> +<pre><span id="VALfmap"><span class="keyword">val</span> fmap</span> : <code class="type">?eq:('b -> 'b -> bool) -><br> ('a -> 'b option) -> 'b -> 'a <a href="React.html#TYPEsignal">React.signal</a> -> 'b <a href="React.html#TYPEsignal">React.signal</a></code></pre><div class="info"> <code class="code">fmap fm i s</code> is <code class="code">s</code> filtered and mapped by <code class="code">fm</code>. <ul> <li>[<code class="code">fmap fm i s</code>]<sub class="subscript">t</sub> <code class="code">=</code> v if <code class="code">fm</code> [<code class="code">s</code>]<sub class="subscript">t</sub><code class="code"> = <span class="constructor">Some</span> v</code>.</li> @@ -146,7 +145,7 @@ The type for signals of type <code class="code"><span class="keywordsign">'</spa <pre><span id="VALchanges"><span class="keyword">val</span> changes</span> : <code class="type">'a <a href="React.html#TYPEsignal">React.signal</a> -> 'a <a href="React.html#TYPEevent">React.event</a></code></pre><div class="info"> <code class="code">changes s</code> is <code class="code">diff (<span class="keyword">fun</span> v _ <span class="keywordsign">-></span> v) s</code>.<br> </div> -<pre><span id="VALsample"><span class="keyword">val</span> sample</span> : <code class="type">('a -> 'b -> 'c) -> 'a <a href="React.html#TYPEevent">React.event</a> -> 'b <a href="React.html#TYPEsignal">React.signal</a> -> 'c <a href="React.html#TYPEevent">React.event</a></code></pre><div class="info"> +<pre><span id="VALsample"><span class="keyword">val</span> sample</span> : <code class="type">('b -> 'a -> 'c) -> 'b <a href="React.html#TYPEevent">React.event</a> -> 'a <a href="React.html#TYPEsignal">React.signal</a> -> 'c <a href="React.html#TYPEevent">React.event</a></code></pre><div class="info"> <code class="code">sample f e s</code> samples <code class="code">s</code> at <code class="code">e</code>'s occurrences. <ul> <li>[<code class="code">sample f e s</code>]<sub class="subscript">t</sub> <code class="code">= <span class="constructor">Some</span> (f ev sv)</code> if [<code class="code">e</code>]<sub class="subscript">t</sub> <code class="code">= <span class="constructor">Some</span> ev</code> @@ -258,7 +257,7 @@ The type for signals of type <code class="code"><span class="keywordsign">'</spa <p> [<code class="code">ln f a1</code> ... <code class="code">an</code>]<sub class="subscript">t</sub> = f [<code class="code">a1</code>]<sub class="subscript">t</sub> ... [<code class="code">an</code>]<sub class="subscript">t</sub><br> -<pre><span id="VALl1"><span class="keyword">val</span> l1</span> : <code class="type">?eq:('a -> 'a -> bool) -> ('b -> 'a) -> 'b <a href="React.html#TYPEsignal">React.signal</a> -> 'a <a href="React.html#TYPEsignal">React.signal</a></code></pre><pre><span id="VALl2"><span class="keyword">val</span> l2</span> : <code class="type">?eq:('a -> 'a -> bool) -><br> ('b -> 'c -> 'a) -> 'b <a href="React.html#TYPEsignal">React.signal</a> -> 'c <a href="React.html#TYPEsignal">React.signal</a> -> 'a <a href="React.html#TYPEsignal">React.signal</a></code></pre><pre><span id="VALl3"><span class="keyword">val</span> l3</span> : <code class="type">?eq:('a -> 'a -> bool) -><br> ('b -> 'c -> 'd -> 'a) -><br> 'b <a href="React.html#TYPEsignal">React.signal</a> -> 'c <a href="React.html#TYPEsignal">React.signal</a> -> 'd <a href="React.html#TYPEsignal">React.signal</a> -> 'a <a href="React.html#TYPEsignal">React.signal</a></code></pre><pre><span id="VALl4"><span class="keyword">val</span> l4</span> : <code class="type">?eq:('a -> 'a -> bool) -><br> ('b -> 'c -> 'd -> 'e -> 'a) -><br> 'b <a href="React.html#TYPEsignal">React.signal</a> -><br> 'c <a href="React.html#TYPEsignal">React.signal</a> -> 'd <a href="React.html#TYPEsignal">React.signal</a> -> 'e <a href="React.html#TYPEsignal">React.signal</a> -> 'a <a href="React.html#TYPEsignal">React.signal</a></code></pre><pre><span id="VALl5"><span class="keyword">val</span> l5</span> : <code class="type">?eq:('a -> 'a -> bool) -><br> ('b -> 'c -> 'd -> 'e -> 'f -> 'a) -><br> 'b <a href="React.html#TYPEsignal">React.signal</a> -><br> 'c <a href="React.html#TYPEsignal">React.signal</a> -><br> 'd <a href="React.html#TYPEsignal">React.signal</a> -> 'e <a href="React.html#TYPEsignal">React.signal</a> -> 'f <a href="React.html#TYPEsignal">React.signal</a> -> 'a <a href="React.html#TYPEsignal">React.signal</a></code></pre><pre><span id="VALl6"><span class="keyword">val</span> l6</span> : <code class="type">?eq:('a -> 'a -> bool) -><br> ('b -> 'c -> 'd -> 'e -> 'f -> 'g -> 'a) -><br> 'b <a href="React.html#TYPEsignal">React.signal</a> -><br> 'c <a href="React.html#TYPEsignal">React.signal</a> -><br> 'd <a href="React.html#TYPEsignal">React.signal</a> -><br> 'e <a href="React.html#TYPEsignal">React.signal</a> -> 'f <a href="React.html#TYPEsignal">React.signal</a> -> 'g <a href="React.html#TYPEsignal">React.signal</a> -> 'a <a href="React.html#TYPEsignal">React.signal</a></code></pre><br> +<pre><span id="VALl1"><span class="keyword">val</span> l1</span> : <code class="type">?eq:('b -> 'b -> bool) -> ('a -> 'b) -> 'a <a href="React.html#TYPEsignal">React.signal</a> -> 'b <a href="React.html#TYPEsignal">React.signal</a></code></pre><pre><span id="VALl2"><span class="keyword">val</span> l2</span> : <code class="type">?eq:('c -> 'c -> bool) -><br> ('a -> 'b -> 'c) -> 'a <a href="React.html#TYPEsignal">React.signal</a> -> 'b <a href="React.html#TYPEsignal">React.signal</a> -> 'c <a href="React.html#TYPEsignal">React.signal</a></code></pre><pre><span id="VALl3"><span class="keyword">val</span> l3</span> : <code class="type">?eq:('d -> 'd -> bool) -><br> ('a -> 'b -> 'c -> 'd) -><br> 'a <a href="React.html#TYPEsignal">React.signal</a> -> 'b <a href="React.html#TYPEsignal">React.signal</a> -> 'c <a href="React.html#TYPEsignal">React.signal</a> -> 'd <a href="React.html#TYPEsignal">React.signal</a></code></pre><pre><span id="VALl4"><span class="keyword">val</span> l4</span> : <code class="type">?eq:('e -> 'e -> bool) -><br> ('a -> 'b -> 'c -> 'd -> 'e) -><br> 'a <a href="React.html#TYPEsignal">React.signal</a> -><br> 'b <a href="React.html#TYPEsignal">React.signal</a> -> 'c <a href="React.html#TYPEsignal">React.signal</a> -> 'd <a href="React.html#TYPEsignal">React.signal</a> -> 'e <a href="React.html#TYPEsignal">React.signal</a></code></pre><pre><span id="VALl5"><span class="keyword">val</span> l5</span> : <code class="type">?eq:('f -> 'f -> bool) -><br> ('a -> 'b -> 'c -> 'd -> 'e -> 'f) -><br> 'a <a href="React.html#TYPEsignal">React.signal</a> -><br> 'b <a href="React.html#TYPEsignal">React.signal</a> -><br> 'c <a href="React.html#TYPEsignal">React.signal</a> -> 'd <a href="React.html#TYPEsignal">React.signal</a> -> 'e <a href="React.html#TYPEsignal">React.signal</a> -> 'f <a href="React.html#TYPEsignal">React.signal</a></code></pre><pre><span id="VALl6"><span class="keyword">val</span> l6</span> : <code class="type">?eq:('g -> 'g -> bool) -><br> ('a -> 'b -> 'c -> 'd -> 'e -> 'f -> 'g) -><br> 'a <a href="React.html#TYPEsignal">React.signal</a> -><br> 'b <a href="React.html#TYPEsignal">React.signal</a> -><br> 'c <a href="React.html#TYPEsignal">React.signal</a> -><br> 'd <a href="React.html#TYPEsignal">React.signal</a> -> 'e <a href="React.html#TYPEsignal">React.signal</a> -> 'f <a href="React.html#TYPEsignal">React.signal</a> -> 'g <a href="React.html#TYPEsignal">React.signal</a></code></pre><br> The following modules lift some of <code class="code"><span class="constructor">Pervasives</span></code> functions and operators.<br> <pre><span class="keyword">module</span> <a href="React.S.Bool.html">Bool</a>: <code class="code"><span class="keyword">sig</span></code> <a href="React.S.Bool.html">..</a> <code class="code"><span class="keyword">end</span></code></pre><pre><span class="keyword">module</span> <a href="React.S.Int.html">Int</a>: <code class="code"><span class="keyword">sig</span></code> <a href="React.S.Int.html">..</a> <code class="code"><span class="keyword">end</span></code></pre><pre><span class="keyword">module</span> <a href="React.S.Float.html">Float</a>: <code class="code"><span class="keyword">sig</span></code> <a href="React.S.Float.html">..</a> <code class="code"><span class="keyword">end</span></code></pre><pre><span class="keyword">module</span> <a href="React.S.Pair.html">Pair</a>: <code class="code"><span class="keyword">sig</span></code> <a href="React.S.Pair.html">..</a> <code class="code"><span class="keyword">end</span></code></pre><pre><span class="keyword">module</span> <a href="React.S.Compare.html">Compare</a>: <code class="code"><span class="keyword">sig</span></code> <a href="React.S.Compare.html">..</a> <code class="code"><span class="keyword">end</span></code></pre><br> diff --git a/doc/React.html b/doc/React.html index 025cbdd..7c0de63 100644 --- a/doc/React.html +++ b/doc/React.html @@ -25,10 +25,9 @@ <title>React</title> </head> <body> -<div class="navbar"> <a href="index.html">Up</a> +<div class="navbar"> <a class="up" href="index.html" title="Index">Up</a> </div> -<center><h1>Module <a href="type_React.html">React</a></h1></center> -<br> +<h1>Module <a href="type_React.html">React</a></h1> <pre><span class="keyword">module</span> React: <code class="code"><span class="keyword">sig</span></code> <a href="React.html">..</a> <code class="code"><span class="keyword">end</span></code></pre>Declarative events and signals. <p> @@ -44,7 +43,7 @@ types and modules in your scope. <p> - <em>Release 0.9.3 - Daniel Bünzli <daniel.buenzli at erratique.ch> </em><br> + <em>Release 0.9.4 - Daniel Bünzli <daniel.buenzli at erratique.ch> </em><br> <hr width="100%"> <br> <span id="1_Interface"><h1>Interface</h1></span><br> @@ -151,11 +150,11 @@ Signal combinators. occurrence for the event at the time it is called. The following code creates a primitive integer event <code class="code">x</code> and generates three occurrences with value <code class="code">1</code>, <code class="code">2</code>, <code class="code">3</code>. Those occurrences are printed - on stdout by the effectful event <code class="code">pr_x</code>. <pre></pre><code class="code"><span class="keyword">open</span> <span class="constructor">React</span>;;<br> + on stdout by the effectful event <code class="code">pr_x</code>. <code class="code"><span class="keyword">open</span> <span class="constructor">React</span>;;<br> <br> <span class="keyword">let</span> x, send_x = <span class="constructor">E</span>.create ()<br> <span class="keyword">let</span> pr_x = <span class="constructor">E</span>.map print_int x<br> -<span class="keyword">let</span> () = <span class="constructor">List</span>.iter send_x [1; 2; 3]</code><pre></pre> +<span class="keyword">let</span> () = <span class="constructor">List</span>.iter send_x [1; 2; 3]</code> Primitive signals are created with <a href="React.S.html#VALcreate"><code class="code"><span class="constructor">React</span>.<span class="constructor">S</span>.create</code></a>. This function returns a new signal and an update function that sets the signal's value at the time it is called. The following code creates an @@ -165,11 +164,11 @@ Signal combinators. the signal's value are printed, hence the program prints <code class="code">123</code>, not <code class="code">1223</code>. See the discussion on <a href="#sideeffects">side effects</a> for more details. -<pre></pre><code class="code"><span class="keyword">open</span> <span class="constructor">React</span>;;<br> +<code class="code"><span class="keyword">open</span> <span class="constructor">React</span>;;<br> <br> <span class="keyword">let</span> x, set_x = <span class="constructor">S</span>.create 1<br> <span class="keyword">let</span> pr_x = <span class="constructor">S</span>.map print_int x<br> -<span class="keyword">let</span> () = <span class="constructor">List</span>.iter set_x [2; 2; 3]</code><pre></pre> +<span class="keyword">let</span> () = <span class="constructor">List</span>.iter set_x [2; 2; 3]</code> The <a href="#clock">clock</a> example shows how a realtime time flow can be defined. <p> @@ -196,13 +195,13 @@ Signal combinators. Below updates to <code class="code">x</code> and <code class="code">y</code> must be serialized, but z can be updated concurently to both <code class="code">x</code> and <code class="code">y</code>. -<pre></pre><code class="code"><span class="keyword">open</span> <span class="constructor">React</span>;;<br> +<code class="code"><span class="keyword">open</span> <span class="constructor">React</span>;;<br> <br> <span class="keyword">let</span> x, set_x = <span class="constructor">S</span>.create 0<br> <span class="keyword">let</span> y, send_y = <span class="constructor">E</span>.create ()<br> <span class="keyword">let</span> z, set_z = <span class="constructor">S</span>.create 0<br> <span class="keyword">let</span> max_xy = <span class="constructor">S</span>.l2 (<span class="keyword">fun</span> x y <span class="keywordsign">-></span> <span class="keyword">if</span> x > y <span class="keyword">then</span> x <span class="keyword">else</span> y) x (<span class="constructor">S</span>.hold 0 y)<br> -<span class="keyword">let</span> succ_z = <span class="constructor">S</span>.map succ z</code><pre></pre> +<span class="keyword">let</span> succ_z = <span class="constructor">S</span>.map succ z</code> <span id="simultaneity"><h2>Simultaneous events</h2></span> <p> @@ -220,10 +219,10 @@ Signal combinators. In the code below <code class="code">w</code>, <code class="code">x</code> and <code class="code">y</code> will have simultaneous occurrences while <code class="code">z</code> will never have simultaneous occurrences with them. -<pre></pre><code class="code"><span class="keyword">let</span> w, send_w = <span class="constructor">E</span>.create ()<br> +<code class="code"><span class="keyword">let</span> w, send_w = <span class="constructor">E</span>.create ()<br> <span class="keyword">let</span> x = <span class="constructor">E</span>.map succ w<br> <span class="keyword">let</span> y = <span class="constructor">E</span>.map succ x<br> -<span class="keyword">let</span> z, send_z = <span class="constructor">E</span>.create ()</code><pre></pre> +<span class="keyword">let</span> z, send_z = <span class="constructor">E</span>.create ()</code> <span id="sideeffects"><h2>Side effects</h2></span> <p> @@ -241,9 +240,9 @@ Signal combinators. It is important to keep references on effectful events and signals. Otherwise they may be reclaimed by the garbage collector. The following program prints only a <code class="code">1</code>. -<pre></pre><code class="code"><span class="keyword">let</span> x, set_x = <span class="constructor">S</span>.create 1<br> +<code class="code"><span class="keyword">let</span> x, set_x = <span class="constructor">S</span>.create 1<br> <span class="keyword">let</span> () = ignore (<span class="constructor">S</span>.map print_int x)<br> -<span class="keyword">let</span> () = <span class="constructor">Gc</span>.full_major (); <span class="constructor">List</span>.iter set_x [2; 2; 3]</code><pre></pre> +<span class="keyword">let</span> () = <span class="constructor">Gc</span>.full_major (); <span class="constructor">List</span>.iter set_x [2; 2; 3]</code> <span id="lifting"><h2>Lifting</h2></span> <p> @@ -253,27 +252,27 @@ Signal combinators. but this involves the inefficient creation of n-1 intermediary closure signals. The fixed arity <a href="React.S.html#lifting">lifting functions</a> are more efficient. For example : -<pre></pre><code class="code"><span class="keyword">let</span> f x y = x <span class="keyword">mod</span> y<br> +<code class="code"><span class="keyword">let</span> f x y = x <span class="keyword">mod</span> y<br> <span class="keyword">let</span> fl x y = <span class="constructor">S</span>.app (<span class="constructor">S</span>.app ~eq:(==) (<span class="constructor">S</span>.const f) x) y <span class="comment">(* inefficient *)</span><br> <span class="keyword">let</span> fl' x y = <span class="constructor">S</span>.l2 f x y <span class="comment">(* efficient *)</span><br> -</code><pre></pre> +</code> Besides, some of <code class="code"><span class="constructor">Pervasives</span></code>'s functions and operators are already lifted and availables in submodules of <a href="React.S.html"><code class="code"><span class="constructor">React</span>.<span class="constructor">S</span></code></a>. They can be be opened in specific scopes. For example if you are dealing with float signals you can open <a href="React.S.Float.html"><code class="code"><span class="constructor">React</span>.<span class="constructor">S</span>.<span class="constructor">Float</span></code></a>. -<pre></pre><code class="code"><span class="keyword">open</span> <span class="constructor">React</span> <br> +<code class="code"><span class="keyword">open</span> <span class="constructor">React</span> <br> <span class="keyword">open</span> <span class="constructor">React</span>.<span class="constructor">S</span>.<span class="constructor">Float</span> <br> <br> <span class="keyword">let</span> f t = sqrt t *. sin t <span class="comment">(* f is defined on float signals *)</span><br> ...<br> <span class="keyword">open</span> <span class="constructor">Pervasives</span> <span class="comment">(* back to pervasives floats *)</span><br> -</code><pre></pre> +</code> If you are using OCaml 3.12 or later you can also use the <code class="code"><span class="keyword">let</span> <span class="keyword">open</span></code> construct -<pre></pre><code class="code"><span class="keyword">let</span> <span class="keyword">open</span> <span class="constructor">React</span>.<span class="constructor">S</span>.<span class="constructor">Float</span> <span class="keyword">in</span> <br> +<code class="code"><span class="keyword">let</span> <span class="keyword">open</span> <span class="constructor">React</span>.<span class="constructor">S</span>.<span class="constructor">Float</span> <span class="keyword">in</span> <br> <span class="keyword">let</span> f t = sqrt t *. sin t <span class="keyword">in</span> <span class="comment">(* f is defined on float signals *)</span><br> ...<br> -</code><pre></pre> +</code> <p> <span id="recursion"><h2>Mutual and self reference</h2></span> @@ -296,7 +295,7 @@ Signal combinators. In the example below <code class="code">history s</code> returns a signal whose value is the history of <code class="code">s</code> as a list. -<pre></pre><code class="code"><span class="keyword">let</span> history ?(eq = ( = )) s = <br> +<code class="code"><span class="keyword">let</span> history ?(eq = ( = )) s = <br> <span class="keyword">let</span> push v = <span class="keyword">function</span> <br> <span class="keywordsign">|</span> [] <span class="keywordsign">-></span> [ v ] <br> <span class="keywordsign">|</span> v' :: _ <span class="keyword">as</span> l <span class="keyword">when</span> eq v v' <span class="keywordsign">-></span> l<br> @@ -306,7 +305,7 @@ Signal combinators. <span class="keyword">let</span> h' = <span class="constructor">S</span>.l2 push s h <span class="keyword">in</span> <br> h', h'<br> <span class="keyword">in</span><br> - <span class="constructor">S</span>.fix [] define</code><pre></pre> + <span class="constructor">S</span>.fix [] define</code> When a program has infinitesimally delayed values a <a href="#primitives">primitive</a> may trigger more than one update cycle. For example if a signal <code class="code">s</code> is infinitesimally delayed, then @@ -316,7 +315,7 @@ Signal combinators. signal (or event) and its infinitesimally delayed counterpart must be well-founded otherwise this may trigger an infinite number of update cycles, like in the following examples. -<pre></pre><code class="code"><span class="keyword">let</span> start, send_start = <span class="constructor">E</span>.create ()<br> +<code class="code"><span class="keyword">let</span> start, send_start = <span class="constructor">E</span>.create ()<br> <span class="keyword">let</span> diverge = <br> <span class="keyword">let</span> define e = <br> <span class="keyword">let</span> e' = <span class="constructor">E</span>.select [e; start] <span class="keyword">in</span> <br> @@ -331,7 +330,7 @@ Signal combinators. <span class="keyword">let</span> s' = <span class="constructor">S</span>.<span class="constructor">Int</span>.succ s <span class="keyword">in</span><br> s', s'<br> <span class="keyword">in</span><br> - <span class="constructor">S</span>.fix 0 define</code><pre></pre> + <span class="constructor">S</span>.fix 0 define</code> For technical reasons, delayed events and signals (those given to fixing functions) are not allowed to directly depend on each other. Fixed point combinators will raise <code class="code"><span class="constructor">Invalid_argument</span></code> if @@ -351,7 +350,7 @@ Signal combinators. along with an <a href="http://www.ecma-international.org/publications/standards/Ecma-048.htm">ANSI escape sequence</a> to control the cursor position. -<pre></pre><code class="code"><span class="keyword">let</span> pr_time t = <br> +<code class="code"><span class="keyword">let</span> pr_time t = <br> <span class="keyword">let</span> tm = <span class="constructor">Unix</span>.localtime t <span class="keyword">in</span><br> <span class="constructor">Printf</span>.printf <span class="string">"\x1B[8D%02d:%02d:%02d%!"</span> <br> tm.<span class="constructor">Unix</span>.tm_hour tm.<span class="constructor">Unix</span>.tm_min tm.<span class="constructor">Unix</span>.tm_sec<br> @@ -367,5 +366,5 @@ Signal combinators. <br> <span class="keyword">let</span> printer = <span class="constructor">E</span>.map pr_time seconds<br> <br> -<span class="keyword">let</span> () = run ()</code><pre></pre><br> +<span class="keyword">let</span> () = run ()</code><br> </body></html>
\ No newline at end of file diff --git a/doc/index.html b/doc/index.html index ff0333d..1f9094f 100644 --- a/doc/index.html +++ b/doc/index.html @@ -11,14 +11,16 @@ <link title="React" rel="Chapter" href="React.html"><title></title> </head> <body> -<center><h1></h1></center> -<a href="index_types.html">Index of types</a><br> -<a href="index_values.html">Index of values</a><br> -<a href="index_modules.html">Index of modules</a><br> -<a href="index_module_types.html">Index of module types</a><br> +<h1></h1> +<ul class="indexlist"> +<li><a href="index_types.html">Index of types</a></li> +<li><a href="index_values.html">Index of values</a></li> +<li><a href="index_modules.html">Index of modules</a></li> +<li><a href="index_module_types.html">Index of module types</a></li> +</ul> <br/><br> <table class="indextable"> -<tr><td><a href="React.html">React</a></td><td><div class="info"> +<tr><td class="module"><a href="React.html">React</a></td><td><div class="info"> Declarative events and signals. </div> </td></tr> diff --git a/doc/index_attributes.html b/doc/index_attributes.html index 7683e5e..cac9135 100644 --- a/doc/index_attributes.html +++ b/doc/index_attributes.html @@ -10,8 +10,10 @@ <link title="React" rel="Chapter" href="React.html"><title>Index of class attributes</title> </head> <body> -<center><h1>Index of class attributes</h1></center> +<div class="navbar"> <a class="up" href="index.html" title="Index">Up</a> + </div> +<h1>Index of class attributes</h1> <table> -</table><br> +</table> </body> </html>
\ No newline at end of file diff --git a/doc/index_class_types.html b/doc/index_class_types.html index 5ec5248..a138038 100644 --- a/doc/index_class_types.html +++ b/doc/index_class_types.html @@ -10,8 +10,10 @@ <link title="React" rel="Chapter" href="React.html"><title>Index of class types</title> </head> <body> -<center><h1>Index of class types</h1></center> +<div class="navbar"> <a class="up" href="index.html" title="Index">Up</a> + </div> +<h1>Index of class types</h1> <table> -</table><br> +</table> </body> </html>
\ No newline at end of file diff --git a/doc/index_classes.html b/doc/index_classes.html index 650bc53..5b9f199 100644 --- a/doc/index_classes.html +++ b/doc/index_classes.html @@ -10,8 +10,10 @@ <link title="React" rel="Chapter" href="React.html"><title>Index of classes</title> </head> <body> -<center><h1>Index of classes</h1></center> +<div class="navbar"> <a class="up" href="index.html" title="Index">Up</a> + </div> +<h1>Index of classes</h1> <table> -</table><br> +</table> </body> </html>
\ No newline at end of file diff --git a/doc/index_exceptions.html b/doc/index_exceptions.html index 6391694..8fe35d4 100644 --- a/doc/index_exceptions.html +++ b/doc/index_exceptions.html @@ -10,8 +10,10 @@ <link title="React" rel="Chapter" href="React.html"><title>Index of exceptions</title> </head> <body> -<center><h1>Index of exceptions</h1></center> +<div class="navbar"> <a class="up" href="index.html" title="Index">Up</a> + </div> +<h1>Index of exceptions</h1> <table> -</table><br> +</table> </body> </html>
\ No newline at end of file diff --git a/doc/index_methods.html b/doc/index_methods.html index 51aa15e..fc6ffa5 100644 --- a/doc/index_methods.html +++ b/doc/index_methods.html @@ -10,8 +10,10 @@ <link title="React" rel="Chapter" href="React.html"><title>Index of class methods</title> </head> <body> -<center><h1>Index of class methods</h1></center> +<div class="navbar"> <a class="up" href="index.html" title="Index">Up</a> + </div> +<h1>Index of class methods</h1> <table> -</table><br> +</table> </body> </html>
\ No newline at end of file diff --git a/doc/index_module_types.html b/doc/index_module_types.html index 178cc8d..c64195b 100644 --- a/doc/index_module_types.html +++ b/doc/index_module_types.html @@ -10,7 +10,9 @@ <link title="React" rel="Chapter" href="React.html"><title>Index of module types</title> </head> <body> -<center><h1>Index of module types</h1></center> +<div class="navbar"> <a class="up" href="index.html" title="Index">Up</a> + </div> +<h1>Index of module types</h1> <table> <tr><td align="left"><br>E</td></tr> <tr><td><a href="React.S.EqType.html">EqType</a> [<a href="React.S.html">React.S</a>]</td> @@ -24,6 +26,6 @@ Input signature of <a href="React.S.Make.html"><code class="code"><span class="c Output signature of <a href="React.S.Make.html"><code class="code"><span class="constructor">React</span>.<span class="constructor">S</span>.<span class="constructor">Make</span></code></a> </div> </td></tr> -</table><br> +</table> </body> </html>
\ No newline at end of file diff --git a/doc/index_modules.html b/doc/index_modules.html index 0935142..6c3c139 100644 --- a/doc/index_modules.html +++ b/doc/index_modules.html @@ -10,7 +10,9 @@ <link title="React" rel="Chapter" href="React.html"><title>Index of modules</title> </head> <body> -<center><h1>Index of modules</h1></center> +<div class="navbar"> <a class="up" href="index.html" title="Index">Up</a> + </div> +<h1>Index of modules</h1> <table> <tr><td align="left"><br>B</td></tr> <tr><td><a href="React.S.Bool.html">Bool</a> [<a href="React.S.html">React.S</a>]</td> @@ -71,6 +73,6 @@ Specialization for integers. Specialization for booleans, integers and floats. </div> </td></tr> -</table><br> +</table> </body> </html>
\ No newline at end of file diff --git a/doc/index_types.html b/doc/index_types.html index 4390849..598f800 100644 --- a/doc/index_types.html +++ b/doc/index_types.html @@ -10,7 +10,9 @@ <link title="React" rel="Chapter" href="React.html"><title>Index of types</title> </head> <body> -<center><h1>Index of types</h1></center> +<div class="navbar"> <a class="up" href="index.html" title="Index">Up</a> + </div> +<h1>Index of types</h1> <table> <tr><td align="left"><br>E</td></tr> <tr><td><a href="React.html#TYPEevent">event</a> [<a href="React.html">React</a>]</td> @@ -40,6 +42,6 @@ The type for events with occurrences of type <code class="code"><span class="key <tr><td align="left"><br>V</td></tr> <tr><td><a href="React.S.S.html#TYPEv">v</a> [<a href="React.S.S.html">React.S.S</a>]</td> <td></td></tr> -</table><br> +</table> </body> </html>
\ No newline at end of file diff --git a/doc/index_values.html b/doc/index_values.html index 5395f41..5770955 100644 --- a/doc/index_values.html +++ b/doc/index_values.html @@ -10,7 +10,9 @@ <link title="React" rel="Chapter" href="React.html"><title>Index of values</title> </head> <body> -<center><h1>Index of values</h1></center> +<div class="navbar"> <a class="up" href="index.html" title="Index">Up</a> + </div> +<h1>Index of values</h1> <table> <tr><td align="left"><br></td></tr> <tr><td><a href="React.S.Int.html#VAL( * )">( * )</a> [<a href="React.S.Int.html">React.S.Int</a>]</td> @@ -478,6 +480,6 @@ A never occuring event. <code class="code">when_ c e</code> is the occurrences of <code class="code">e</code> when <code class="code">c</code> is <code class="code"><span class="keyword">true</span></code>. </div> </td></tr> -</table><br> +</table> </body> </html>
\ No newline at end of file diff --git a/doc/type_React.E.html b/doc/type_React.E.html index ede419c..3b3d6b7 100644 --- a/doc/type_React.E.html +++ b/doc/type_React.E.html @@ -23,13 +23,13 @@ <span class="keyword">val</span> drop_once : <span class="keywordsign">'</span>a <span class="constructor">React</span>.event <span class="keywordsign">-></span> <span class="keywordsign">'</span>a <span class="constructor">React</span>.event<br> <span class="keyword">val</span> app : (<span class="keywordsign">'</span>a <span class="keywordsign">-></span> <span class="keywordsign">'</span>b) <span class="constructor">React</span>.event <span class="keywordsign">-></span> <span class="keywordsign">'</span>a <span class="constructor">React</span>.event <span class="keywordsign">-></span> <span class="keywordsign">'</span>b <span class="constructor">React</span>.event<br> <span class="keyword">val</span> map : (<span class="keywordsign">'</span>a <span class="keywordsign">-></span> <span class="keywordsign">'</span>b) <span class="keywordsign">-></span> <span class="keywordsign">'</span>a <span class="constructor">React</span>.event <span class="keywordsign">-></span> <span class="keywordsign">'</span>b <span class="constructor">React</span>.event<br> - <span class="keyword">val</span> stamp : <span class="keywordsign">'</span>a <span class="constructor">React</span>.event <span class="keywordsign">-></span> <span class="keywordsign">'</span>b <span class="keywordsign">-></span> <span class="keywordsign">'</span>b <span class="constructor">React</span>.event<br> + <span class="keyword">val</span> stamp : <span class="keywordsign">'</span>b <span class="constructor">React</span>.event <span class="keywordsign">-></span> <span class="keywordsign">'</span>a <span class="keywordsign">-></span> <span class="keywordsign">'</span>a <span class="constructor">React</span>.event<br> <span class="keyword">val</span> filter : (<span class="keywordsign">'</span>a <span class="keywordsign">-></span> bool) <span class="keywordsign">-></span> <span class="keywordsign">'</span>a <span class="constructor">React</span>.event <span class="keywordsign">-></span> <span class="keywordsign">'</span>a <span class="constructor">React</span>.event<br> <span class="keyword">val</span> fmap : (<span class="keywordsign">'</span>a <span class="keywordsign">-></span> <span class="keywordsign">'</span>b option) <span class="keywordsign">-></span> <span class="keywordsign">'</span>a <span class="constructor">React</span>.event <span class="keywordsign">-></span> <span class="keywordsign">'</span>b <span class="constructor">React</span>.event<br> <span class="keyword">val</span> diff : (<span class="keywordsign">'</span>a <span class="keywordsign">-></span> <span class="keywordsign">'</span>a <span class="keywordsign">-></span> <span class="keywordsign">'</span>b) <span class="keywordsign">-></span> <span class="keywordsign">'</span>a <span class="constructor">React</span>.event <span class="keywordsign">-></span> <span class="keywordsign">'</span>b <span class="constructor">React</span>.event<br> <span class="keyword">val</span> changes : ?eq:(<span class="keywordsign">'</span>a <span class="keywordsign">-></span> <span class="keywordsign">'</span>a <span class="keywordsign">-></span> bool) <span class="keywordsign">-></span> <span class="keywordsign">'</span>a <span class="constructor">React</span>.event <span class="keywordsign">-></span> <span class="keywordsign">'</span>a <span class="constructor">React</span>.event<br> <span class="keyword">val</span> when_ : bool <span class="constructor">React</span>.signal <span class="keywordsign">-></span> <span class="keywordsign">'</span>a <span class="constructor">React</span>.event <span class="keywordsign">-></span> <span class="keywordsign">'</span>a <span class="constructor">React</span>.event<br> - <span class="keyword">val</span> dismiss : <span class="keywordsign">'</span>a <span class="constructor">React</span>.event <span class="keywordsign">-></span> <span class="keywordsign">'</span>b <span class="constructor">React</span>.event <span class="keywordsign">-></span> <span class="keywordsign">'</span>b <span class="constructor">React</span>.event<br> + <span class="keyword">val</span> dismiss : <span class="keywordsign">'</span>b <span class="constructor">React</span>.event <span class="keywordsign">-></span> <span class="keywordsign">'</span>a <span class="constructor">React</span>.event <span class="keywordsign">-></span> <span class="keywordsign">'</span>a <span class="constructor">React</span>.event<br> <span class="keyword">val</span> until : <span class="keywordsign">'</span>a <span class="constructor">React</span>.event <span class="keywordsign">-></span> <span class="keywordsign">'</span>b <span class="constructor">React</span>.event <span class="keywordsign">-></span> <span class="keywordsign">'</span>b <span class="constructor">React</span>.event<br> <span class="keyword">val</span> accum : (<span class="keywordsign">'</span>a <span class="keywordsign">-></span> <span class="keywordsign">'</span>a) <span class="constructor">React</span>.event <span class="keywordsign">-></span> <span class="keywordsign">'</span>a <span class="keywordsign">-></span> <span class="keywordsign">'</span>a <span class="constructor">React</span>.event<br> <span class="keyword">val</span> fold : (<span class="keywordsign">'</span>a <span class="keywordsign">-></span> <span class="keywordsign">'</span>b <span class="keywordsign">-></span> <span class="keywordsign">'</span>a) <span class="keywordsign">-></span> <span class="keywordsign">'</span>a <span class="keywordsign">-></span> <span class="keywordsign">'</span>b <span class="constructor">React</span>.event <span class="keywordsign">-></span> <span class="keywordsign">'</span>a <span class="constructor">React</span>.event<br> diff --git a/doc/type_React.S.Make.html b/doc/type_React.S.Make.html index b687eea..6acd092 100644 --- a/doc/type_React.S.Make.html +++ b/doc/type_React.S.Make.html @@ -20,7 +20,7 @@ <span class="keyword">val</span> filter : (<span class="keywordsign">'</span>a v <span class="keywordsign">-></span> bool) <span class="keywordsign">-></span> <span class="keywordsign">'</span>a v <span class="keywordsign">-></span> <span class="keywordsign">'</span>a v signal <span class="keywordsign">-></span> <span class="keywordsign">'</span>a v signal<br> <span class="keyword">val</span> fmap : (<span class="keywordsign">'</span>a <span class="keywordsign">-></span> <span class="keywordsign">'</span>b v option) <span class="keywordsign">-></span> <span class="keywordsign">'</span>b v <span class="keywordsign">-></span> <span class="keywordsign">'</span>a signal <span class="keywordsign">-></span> <span class="keywordsign">'</span>b v signal<br> <span class="keyword">val</span> when_ : bool signal <span class="keywordsign">-></span> <span class="keywordsign">'</span>a v <span class="keywordsign">-></span> <span class="keywordsign">'</span>a v signal <span class="keywordsign">-></span> <span class="keywordsign">'</span>a v signal<br> - <span class="keyword">val</span> dismiss : <span class="keywordsign">'</span>a event <span class="keywordsign">-></span> <span class="keywordsign">'</span>b v <span class="keywordsign">-></span> <span class="keywordsign">'</span>b v signal <span class="keywordsign">-></span> <span class="keywordsign">'</span>b v signal<br> + <span class="keyword">val</span> dismiss : <span class="keywordsign">'</span>b event <span class="keywordsign">-></span> <span class="keywordsign">'</span>a v <span class="keywordsign">-></span> <span class="keywordsign">'</span>a v signal <span class="keywordsign">-></span> <span class="keywordsign">'</span>a v signal<br> <span class="keyword">val</span> accum : (<span class="keywordsign">'</span>a v <span class="keywordsign">-></span> <span class="keywordsign">'</span>a v) event <span class="keywordsign">-></span> <span class="keywordsign">'</span>a v <span class="keywordsign">-></span> <span class="keywordsign">'</span>a v signal<br> <span class="keyword">val</span> fold : (<span class="keywordsign">'</span>a v <span class="keywordsign">-></span> <span class="keywordsign">'</span>b <span class="keywordsign">-></span> <span class="keywordsign">'</span>a v) <span class="keywordsign">-></span> <span class="keywordsign">'</span>a v <span class="keywordsign">-></span> <span class="keywordsign">'</span>b event <span class="keywordsign">-></span> <span class="keywordsign">'</span>a v signal<br> <span class="keyword">val</span> merge : (<span class="keywordsign">'</span>a v <span class="keywordsign">-></span> <span class="keywordsign">'</span>b <span class="keywordsign">-></span> <span class="keywordsign">'</span>a v) <span class="keywordsign">-></span> <span class="keywordsign">'</span>a v <span class="keywordsign">-></span> <span class="keywordsign">'</span>b signal list <span class="keywordsign">-></span> <span class="keywordsign">'</span>a v signal<br> diff --git a/doc/type_React.S.S.html b/doc/type_React.S.S.html index 1a3ef81..88345ee 100644 --- a/doc/type_React.S.S.html +++ b/doc/type_React.S.S.html @@ -35,9 +35,9 @@ <span class="keywordsign">'</span>a <span class="constructor">React</span>.<span class="constructor">S</span>.<span class="constructor">S</span>.v <span class="keywordsign">-></span><br> <span class="keywordsign">'</span>a <span class="constructor">React</span>.<span class="constructor">S</span>.<span class="constructor">S</span>.v <span class="constructor">React</span>.signal <span class="keywordsign">-></span> <span class="keywordsign">'</span>a <span class="constructor">React</span>.<span class="constructor">S</span>.<span class="constructor">S</span>.v <span class="constructor">React</span>.signal<br> <span class="keyword">val</span> dismiss :<br> - <span class="keywordsign">'</span>a <span class="constructor">React</span>.event <span class="keywordsign">-></span><br> - <span class="keywordsign">'</span>b <span class="constructor">React</span>.<span class="constructor">S</span>.<span class="constructor">S</span>.v <span class="keywordsign">-></span><br> - <span class="keywordsign">'</span>b <span class="constructor">React</span>.<span class="constructor">S</span>.<span class="constructor">S</span>.v <span class="constructor">React</span>.signal <span class="keywordsign">-></span> <span class="keywordsign">'</span>b <span class="constructor">React</span>.<span class="constructor">S</span>.<span class="constructor">S</span>.v <span class="constructor">React</span>.signal<br> + <span class="keywordsign">'</span>b <span class="constructor">React</span>.event <span class="keywordsign">-></span><br> + <span class="keywordsign">'</span>a <span class="constructor">React</span>.<span class="constructor">S</span>.<span class="constructor">S</span>.v <span class="keywordsign">-></span><br> + <span class="keywordsign">'</span>a <span class="constructor">React</span>.<span class="constructor">S</span>.<span class="constructor">S</span>.v <span class="constructor">React</span>.signal <span class="keywordsign">-></span> <span class="keywordsign">'</span>a <span class="constructor">React</span>.<span class="constructor">S</span>.<span class="constructor">S</span>.v <span class="constructor">React</span>.signal<br> <span class="keyword">val</span> accum :<br> (<span class="keywordsign">'</span>a <span class="constructor">React</span>.<span class="constructor">S</span>.<span class="constructor">S</span>.v <span class="keywordsign">-></span> <span class="keywordsign">'</span>a <span class="constructor">React</span>.<span class="constructor">S</span>.<span class="constructor">S</span>.v) <span class="constructor">React</span>.event <span class="keywordsign">-></span><br> <span class="keywordsign">'</span>a <span class="constructor">React</span>.<span class="constructor">S</span>.<span class="constructor">S</span>.v <span class="keywordsign">-></span> <span class="keywordsign">'</span>a <span class="constructor">React</span>.<span class="constructor">S</span>.<span class="constructor">S</span>.v <span class="constructor">React</span>.signal<br> diff --git a/doc/type_React.S.Special.Sb.html b/doc/type_React.S.Special.Sb.html index a1c2f1c..18b65c0 100644 --- a/doc/type_React.S.Special.Sb.html +++ b/doc/type_React.S.Special.Sb.html @@ -19,7 +19,7 @@ <span class="keyword">val</span> filter : (<span class="keywordsign">'</span>a v <span class="keywordsign">-></span> bool) <span class="keywordsign">-></span> <span class="keywordsign">'</span>a v <span class="keywordsign">-></span> <span class="keywordsign">'</span>a v signal <span class="keywordsign">-></span> <span class="keywordsign">'</span>a v signal<br> <span class="keyword">val</span> fmap : (<span class="keywordsign">'</span>a <span class="keywordsign">-></span> <span class="keywordsign">'</span>b v option) <span class="keywordsign">-></span> <span class="keywordsign">'</span>b v <span class="keywordsign">-></span> <span class="keywordsign">'</span>a signal <span class="keywordsign">-></span> <span class="keywordsign">'</span>b v signal<br> <span class="keyword">val</span> when_ : bool signal <span class="keywordsign">-></span> <span class="keywordsign">'</span>a v <span class="keywordsign">-></span> <span class="keywordsign">'</span>a v signal <span class="keywordsign">-></span> <span class="keywordsign">'</span>a v signal<br> - <span class="keyword">val</span> dismiss : <span class="keywordsign">'</span>a event <span class="keywordsign">-></span> <span class="keywordsign">'</span>b v <span class="keywordsign">-></span> <span class="keywordsign">'</span>b v signal <span class="keywordsign">-></span> <span class="keywordsign">'</span>b v signal<br> + <span class="keyword">val</span> dismiss : <span class="keywordsign">'</span>b event <span class="keywordsign">-></span> <span class="keywordsign">'</span>a v <span class="keywordsign">-></span> <span class="keywordsign">'</span>a v signal <span class="keywordsign">-></span> <span class="keywordsign">'</span>a v signal<br> <span class="keyword">val</span> accum : (<span class="keywordsign">'</span>a v <span class="keywordsign">-></span> <span class="keywordsign">'</span>a v) event <span class="keywordsign">-></span> <span class="keywordsign">'</span>a v <span class="keywordsign">-></span> <span class="keywordsign">'</span>a v signal<br> <span class="keyword">val</span> fold : (<span class="keywordsign">'</span>a v <span class="keywordsign">-></span> <span class="keywordsign">'</span>b <span class="keywordsign">-></span> <span class="keywordsign">'</span>a v) <span class="keywordsign">-></span> <span class="keywordsign">'</span>a v <span class="keywordsign">-></span> <span class="keywordsign">'</span>b event <span class="keywordsign">-></span> <span class="keywordsign">'</span>a v signal<br> <span class="keyword">val</span> merge : (<span class="keywordsign">'</span>a v <span class="keywordsign">-></span> <span class="keywordsign">'</span>b <span class="keywordsign">-></span> <span class="keywordsign">'</span>a v) <span class="keywordsign">-></span> <span class="keywordsign">'</span>a v <span class="keywordsign">-></span> <span class="keywordsign">'</span>b signal list <span class="keywordsign">-></span> <span class="keywordsign">'</span>a v signal<br> diff --git a/doc/type_React.S.Special.Sf.html b/doc/type_React.S.Special.Sf.html index 947e52e..31f19ee 100644 --- a/doc/type_React.S.Special.Sf.html +++ b/doc/type_React.S.Special.Sf.html @@ -19,7 +19,7 @@ <span class="keyword">val</span> filter : (<span class="keywordsign">'</span>a v <span class="keywordsign">-></span> bool) <span class="keywordsign">-></span> <span class="keywordsign">'</span>a v <span class="keywordsign">-></span> <span class="keywordsign">'</span>a v signal <span class="keywordsign">-></span> <span class="keywordsign">'</span>a v signal<br> <span class="keyword">val</span> fmap : (<span class="keywordsign">'</span>a <span class="keywordsign">-></span> <span class="keywordsign">'</span>b v option) <span class="keywordsign">-></span> <span class="keywordsign">'</span>b v <span class="keywordsign">-></span> <span class="keywordsign">'</span>a signal <span class="keywordsign">-></span> <span class="keywordsign">'</span>b v signal<br> <span class="keyword">val</span> when_ : bool signal <span class="keywordsign">-></span> <span class="keywordsign">'</span>a v <span class="keywordsign">-></span> <span class="keywordsign">'</span>a v signal <span class="keywordsign">-></span> <span class="keywordsign">'</span>a v signal<br> - <span class="keyword">val</span> dismiss : <span class="keywordsign">'</span>a event <span class="keywordsign">-></span> <span class="keywordsign">'</span>b v <span class="keywordsign">-></span> <span class="keywordsign">'</span>b v signal <span class="keywordsign">-></span> <span class="keywordsign">'</span>b v signal<br> + <span class="keyword">val</span> dismiss : <span class="keywordsign">'</span>b event <span class="keywordsign">-></span> <span class="keywordsign">'</span>a v <span class="keywordsign">-></span> <span class="keywordsign">'</span>a v signal <span class="keywordsign">-></span> <span class="keywordsign">'</span>a v signal<br> <span class="keyword">val</span> accum : (<span class="keywordsign">'</span>a v <span class="keywordsign">-></span> <span class="keywordsign">'</span>a v) event <span class="keywordsign">-></span> <span class="keywordsign">'</span>a v <span class="keywordsign">-></span> <span class="keywordsign">'</span>a v signal<br> <span class="keyword">val</span> fold : (<span class="keywordsign">'</span>a v <span class="keywordsign">-></span> <span class="keywordsign">'</span>b <span class="keywordsign">-></span> <span class="keywordsign">'</span>a v) <span class="keywordsign">-></span> <span class="keywordsign">'</span>a v <span class="keywordsign">-></span> <span class="keywordsign">'</span>b event <span class="keywordsign">-></span> <span class="keywordsign">'</span>a v signal<br> <span class="keyword">val</span> merge : (<span class="keywordsign">'</span>a v <span class="keywordsign">-></span> <span class="keywordsign">'</span>b <span class="keywordsign">-></span> <span class="keywordsign">'</span>a v) <span class="keywordsign">-></span> <span class="keywordsign">'</span>a v <span class="keywordsign">-></span> <span class="keywordsign">'</span>b signal list <span class="keywordsign">-></span> <span class="keywordsign">'</span>a v signal<br> diff --git a/doc/type_React.S.Special.Si.html b/doc/type_React.S.Special.Si.html index e5c16da..a246356 100644 --- a/doc/type_React.S.Special.Si.html +++ b/doc/type_React.S.Special.Si.html @@ -19,7 +19,7 @@ <span class="keyword">val</span> filter : (<span class="keywordsign">'</span>a v <span class="keywordsign">-></span> bool) <span class="keywordsign">-></span> <span class="keywordsign">'</span>a v <span class="keywordsign">-></span> <span class="keywordsign">'</span>a v signal <span class="keywordsign">-></span> <span class="keywordsign">'</span>a v signal<br> <span class="keyword">val</span> fmap : (<span class="keywordsign">'</span>a <span class="keywordsign">-></span> <span class="keywordsign">'</span>b v option) <span class="keywordsign">-></span> <span class="keywordsign">'</span>b v <span class="keywordsign">-></span> <span class="keywordsign">'</span>a signal <span class="keywordsign">-></span> <span class="keywordsign">'</span>b v signal<br> <span class="keyword">val</span> when_ : bool signal <span class="keywordsign">-></span> <span class="keywordsign">'</span>a v <span class="keywordsign">-></span> <span class="keywordsign">'</span>a v signal <span class="keywordsign">-></span> <span class="keywordsign">'</span>a v signal<br> - <span class="keyword">val</span> dismiss : <span class="keywordsign">'</span>a event <span class="keywordsign">-></span> <span class="keywordsign">'</span>b v <span class="keywordsign">-></span> <span class="keywordsign">'</span>b v signal <span class="keywordsign">-></span> <span class="keywordsign">'</span>b v signal<br> + <span class="keyword">val</span> dismiss : <span class="keywordsign">'</span>b event <span class="keywordsign">-></span> <span class="keywordsign">'</span>a v <span class="keywordsign">-></span> <span class="keywordsign">'</span>a v signal <span class="keywordsign">-></span> <span class="keywordsign">'</span>a v signal<br> <span class="keyword">val</span> accum : (<span class="keywordsign">'</span>a v <span class="keywordsign">-></span> <span class="keywordsign">'</span>a v) event <span class="keywordsign">-></span> <span class="keywordsign">'</span>a v <span class="keywordsign">-></span> <span class="keywordsign">'</span>a v signal<br> <span class="keyword">val</span> fold : (<span class="keywordsign">'</span>a v <span class="keywordsign">-></span> <span class="keywordsign">'</span>b <span class="keywordsign">-></span> <span class="keywordsign">'</span>a v) <span class="keywordsign">-></span> <span class="keywordsign">'</span>a v <span class="keywordsign">-></span> <span class="keywordsign">'</span>b event <span class="keywordsign">-></span> <span class="keywordsign">'</span>a v signal<br> <span class="keyword">val</span> merge : (<span class="keywordsign">'</span>a v <span class="keywordsign">-></span> <span class="keywordsign">'</span>b <span class="keywordsign">-></span> <span class="keywordsign">'</span>a v) <span class="keywordsign">-></span> <span class="keywordsign">'</span>a v <span class="keywordsign">-></span> <span class="keywordsign">'</span>b signal list <span class="keywordsign">-></span> <span class="keywordsign">'</span>a v signal<br> diff --git a/doc/type_React.S.Special.html b/doc/type_React.S.Special.html index 3e4f3a2..01839a0 100644 --- a/doc/type_React.S.Special.html +++ b/doc/type_React.S.Special.html @@ -21,7 +21,7 @@ <span class="keyword">val</span> filter : (<span class="keywordsign">'</span>a v <span class="keywordsign">-></span> bool) <span class="keywordsign">-></span> <span class="keywordsign">'</span>a v <span class="keywordsign">-></span> <span class="keywordsign">'</span>a v signal <span class="keywordsign">-></span> <span class="keywordsign">'</span>a v signal<br> <span class="keyword">val</span> fmap : (<span class="keywordsign">'</span>a <span class="keywordsign">-></span> <span class="keywordsign">'</span>b v option) <span class="keywordsign">-></span> <span class="keywordsign">'</span>b v <span class="keywordsign">-></span> <span class="keywordsign">'</span>a signal <span class="keywordsign">-></span> <span class="keywordsign">'</span>b v signal<br> <span class="keyword">val</span> when_ : bool signal <span class="keywordsign">-></span> <span class="keywordsign">'</span>a v <span class="keywordsign">-></span> <span class="keywordsign">'</span>a v signal <span class="keywordsign">-></span> <span class="keywordsign">'</span>a v signal<br> - <span class="keyword">val</span> dismiss : <span class="keywordsign">'</span>a event <span class="keywordsign">-></span> <span class="keywordsign">'</span>b v <span class="keywordsign">-></span> <span class="keywordsign">'</span>b v signal <span class="keywordsign">-></span> <span class="keywordsign">'</span>b v signal<br> + <span class="keyword">val</span> dismiss : <span class="keywordsign">'</span>b event <span class="keywordsign">-></span> <span class="keywordsign">'</span>a v <span class="keywordsign">-></span> <span class="keywordsign">'</span>a v signal <span class="keywordsign">-></span> <span class="keywordsign">'</span>a v signal<br> <span class="keyword">val</span> accum : (<span class="keywordsign">'</span>a v <span class="keywordsign">-></span> <span class="keywordsign">'</span>a v) event <span class="keywordsign">-></span> <span class="keywordsign">'</span>a v <span class="keywordsign">-></span> <span class="keywordsign">'</span>a v signal<br> <span class="keyword">val</span> fold : (<span class="keywordsign">'</span>a v <span class="keywordsign">-></span> <span class="keywordsign">'</span>b <span class="keywordsign">-></span> <span class="keywordsign">'</span>a v) <span class="keywordsign">-></span> <span class="keywordsign">'</span>a v <span class="keywordsign">-></span> <span class="keywordsign">'</span>b event <span class="keywordsign">-></span> <span class="keywordsign">'</span>a v signal<br> <span class="keyword">val</span> merge :<br> @@ -57,7 +57,7 @@ <span class="keyword">val</span> filter : (<span class="keywordsign">'</span>a v <span class="keywordsign">-></span> bool) <span class="keywordsign">-></span> <span class="keywordsign">'</span>a v <span class="keywordsign">-></span> <span class="keywordsign">'</span>a v signal <span class="keywordsign">-></span> <span class="keywordsign">'</span>a v signal<br> <span class="keyword">val</span> fmap : (<span class="keywordsign">'</span>a <span class="keywordsign">-></span> <span class="keywordsign">'</span>b v option) <span class="keywordsign">-></span> <span class="keywordsign">'</span>b v <span class="keywordsign">-></span> <span class="keywordsign">'</span>a signal <span class="keywordsign">-></span> <span class="keywordsign">'</span>b v signal<br> <span class="keyword">val</span> when_ : bool signal <span class="keywordsign">-></span> <span class="keywordsign">'</span>a v <span class="keywordsign">-></span> <span class="keywordsign">'</span>a v signal <span class="keywordsign">-></span> <span class="keywordsign">'</span>a v signal<br> - <span class="keyword">val</span> dismiss : <span class="keywordsign">'</span>a event <span class="keywordsign">-></span> <span class="keywordsign">'</span>b v <span class="keywordsign">-></span> <span class="keywordsign">'</span>b v signal <span class="keywordsign">-></span> <span class="keywordsign">'</span>b v signal<br> + <span class="keyword">val</span> dismiss : <span class="keywordsign">'</span>b event <span class="keywordsign">-></span> <span class="keywordsign">'</span>a v <span class="keywordsign">-></span> <span class="keywordsign">'</span>a v signal <span class="keywordsign">-></span> <span class="keywordsign">'</span>a v signal<br> <span class="keyword">val</span> accum : (<span class="keywordsign">'</span>a v <span class="keywordsign">-></span> <span class="keywordsign">'</span>a v) event <span class="keywordsign">-></span> <span class="keywordsign">'</span>a v <span class="keywordsign">-></span> <span class="keywordsign">'</span>a v signal<br> <span class="keyword">val</span> fold : (<span class="keywordsign">'</span>a v <span class="keywordsign">-></span> <span class="keywordsign">'</span>b <span class="keywordsign">-></span> <span class="keywordsign">'</span>a v) <span class="keywordsign">-></span> <span class="keywordsign">'</span>a v <span class="keywordsign">-></span> <span class="keywordsign">'</span>b event <span class="keywordsign">-></span> <span class="keywordsign">'</span>a v signal<br> <span class="keyword">val</span> merge :<br> @@ -93,7 +93,7 @@ <span class="keyword">val</span> filter : (<span class="keywordsign">'</span>a v <span class="keywordsign">-></span> bool) <span class="keywordsign">-></span> <span class="keywordsign">'</span>a v <span class="keywordsign">-></span> <span class="keywordsign">'</span>a v signal <span class="keywordsign">-></span> <span class="keywordsign">'</span>a v signal<br> <span class="keyword">val</span> fmap : (<span class="keywordsign">'</span>a <span class="keywordsign">-></span> <span class="keywordsign">'</span>b v option) <span class="keywordsign">-></span> <span class="keywordsign">'</span>b v <span class="keywordsign">-></span> <span class="keywordsign">'</span>a signal <span class="keywordsign">-></span> <span class="keywordsign">'</span>b v signal<br> <span class="keyword">val</span> when_ : bool signal <span class="keywordsign">-></span> <span class="keywordsign">'</span>a v <span class="keywordsign">-></span> <span class="keywordsign">'</span>a v signal <span class="keywordsign">-></span> <span class="keywordsign">'</span>a v signal<br> - <span class="keyword">val</span> dismiss : <span class="keywordsign">'</span>a event <span class="keywordsign">-></span> <span class="keywordsign">'</span>b v <span class="keywordsign">-></span> <span class="keywordsign">'</span>b v signal <span class="keywordsign">-></span> <span class="keywordsign">'</span>b v signal<br> + <span class="keyword">val</span> dismiss : <span class="keywordsign">'</span>b event <span class="keywordsign">-></span> <span class="keywordsign">'</span>a v <span class="keywordsign">-></span> <span class="keywordsign">'</span>a v signal <span class="keywordsign">-></span> <span class="keywordsign">'</span>a v signal<br> <span class="keyword">val</span> accum : (<span class="keywordsign">'</span>a v <span class="keywordsign">-></span> <span class="keywordsign">'</span>a v) event <span class="keywordsign">-></span> <span class="keywordsign">'</span>a v <span class="keywordsign">-></span> <span class="keywordsign">'</span>a v signal<br> <span class="keyword">val</span> fold : (<span class="keywordsign">'</span>a v <span class="keywordsign">-></span> <span class="keywordsign">'</span>b <span class="keywordsign">-></span> <span class="keywordsign">'</span>a v) <span class="keywordsign">-></span> <span class="keywordsign">'</span>a v <span class="keywordsign">-></span> <span class="keywordsign">'</span>b event <span class="keywordsign">-></span> <span class="keywordsign">'</span>a v signal<br> <span class="keyword">val</span> merge :<br> diff --git a/doc/type_React.S.html b/doc/type_React.S.html index e25ac09..4f39f57 100644 --- a/doc/type_React.S.html +++ b/doc/type_React.S.html @@ -24,21 +24,21 @@ <span class="keyword">val</span> hold :<br> ?eq:(<span class="keywordsign">'</span>a <span class="keywordsign">-></span> <span class="keywordsign">'</span>a <span class="keywordsign">-></span> bool) <span class="keywordsign">-></span> <span class="keywordsign">'</span>a <span class="keywordsign">-></span> <span class="keywordsign">'</span>a <span class="constructor">React</span>.event <span class="keywordsign">-></span> <span class="keywordsign">'</span>a <span class="constructor">React</span>.signal<br> <span class="keyword">val</span> app :<br> - ?eq:(<span class="keywordsign">'</span>a <span class="keywordsign">-></span> <span class="keywordsign">'</span>a <span class="keywordsign">-></span> bool) <span class="keywordsign">-></span><br> - (<span class="keywordsign">'</span>b <span class="keywordsign">-></span> <span class="keywordsign">'</span>a) <span class="constructor">React</span>.signal <span class="keywordsign">-></span> <span class="keywordsign">'</span>b <span class="constructor">React</span>.signal <span class="keywordsign">-></span> <span class="keywordsign">'</span>a <span class="constructor">React</span>.signal<br> + ?eq:(<span class="keywordsign">'</span>b <span class="keywordsign">-></span> <span class="keywordsign">'</span>b <span class="keywordsign">-></span> bool) <span class="keywordsign">-></span><br> + (<span class="keywordsign">'</span>a <span class="keywordsign">-></span> <span class="keywordsign">'</span>b) <span class="constructor">React</span>.signal <span class="keywordsign">-></span> <span class="keywordsign">'</span>a <span class="constructor">React</span>.signal <span class="keywordsign">-></span> <span class="keywordsign">'</span>b <span class="constructor">React</span>.signal<br> <span class="keyword">val</span> map :<br> - ?eq:(<span class="keywordsign">'</span>a <span class="keywordsign">-></span> <span class="keywordsign">'</span>a <span class="keywordsign">-></span> bool) <span class="keywordsign">-></span><br> - (<span class="keywordsign">'</span>b <span class="keywordsign">-></span> <span class="keywordsign">'</span>a) <span class="keywordsign">-></span> <span class="keywordsign">'</span>b <span class="constructor">React</span>.signal <span class="keywordsign">-></span> <span class="keywordsign">'</span>a <span class="constructor">React</span>.signal<br> + ?eq:(<span class="keywordsign">'</span>b <span class="keywordsign">-></span> <span class="keywordsign">'</span>b <span class="keywordsign">-></span> bool) <span class="keywordsign">-></span><br> + (<span class="keywordsign">'</span>a <span class="keywordsign">-></span> <span class="keywordsign">'</span>b) <span class="keywordsign">-></span> <span class="keywordsign">'</span>a <span class="constructor">React</span>.signal <span class="keywordsign">-></span> <span class="keywordsign">'</span>b <span class="constructor">React</span>.signal<br> <span class="keyword">val</span> filter :<br> ?eq:(<span class="keywordsign">'</span>a <span class="keywordsign">-></span> <span class="keywordsign">'</span>a <span class="keywordsign">-></span> bool) <span class="keywordsign">-></span><br> (<span class="keywordsign">'</span>a <span class="keywordsign">-></span> bool) <span class="keywordsign">-></span> <span class="keywordsign">'</span>a <span class="keywordsign">-></span> <span class="keywordsign">'</span>a <span class="constructor">React</span>.signal <span class="keywordsign">-></span> <span class="keywordsign">'</span>a <span class="constructor">React</span>.signal<br> <span class="keyword">val</span> fmap :<br> - ?eq:(<span class="keywordsign">'</span>a <span class="keywordsign">-></span> <span class="keywordsign">'</span>a <span class="keywordsign">-></span> bool) <span class="keywordsign">-></span><br> - (<span class="keywordsign">'</span>b <span class="keywordsign">-></span> <span class="keywordsign">'</span>a option) <span class="keywordsign">-></span> <span class="keywordsign">'</span>a <span class="keywordsign">-></span> <span class="keywordsign">'</span>b <span class="constructor">React</span>.signal <span class="keywordsign">-></span> <span class="keywordsign">'</span>a <span class="constructor">React</span>.signal<br> + ?eq:(<span class="keywordsign">'</span>b <span class="keywordsign">-></span> <span class="keywordsign">'</span>b <span class="keywordsign">-></span> bool) <span class="keywordsign">-></span><br> + (<span class="keywordsign">'</span>a <span class="keywordsign">-></span> <span class="keywordsign">'</span>b option) <span class="keywordsign">-></span> <span class="keywordsign">'</span>b <span class="keywordsign">-></span> <span class="keywordsign">'</span>a <span class="constructor">React</span>.signal <span class="keywordsign">-></span> <span class="keywordsign">'</span>b <span class="constructor">React</span>.signal<br> <span class="keyword">val</span> diff : (<span class="keywordsign">'</span>a <span class="keywordsign">-></span> <span class="keywordsign">'</span>a <span class="keywordsign">-></span> <span class="keywordsign">'</span>b) <span class="keywordsign">-></span> <span class="keywordsign">'</span>a <span class="constructor">React</span>.signal <span class="keywordsign">-></span> <span class="keywordsign">'</span>b <span class="constructor">React</span>.event<br> <span class="keyword">val</span> changes : <span class="keywordsign">'</span>a <span class="constructor">React</span>.signal <span class="keywordsign">-></span> <span class="keywordsign">'</span>a <span class="constructor">React</span>.event<br> <span class="keyword">val</span> sample :<br> - (<span class="keywordsign">'</span>a <span class="keywordsign">-></span> <span class="keywordsign">'</span>b <span class="keywordsign">-></span> <span class="keywordsign">'</span>c) <span class="keywordsign">-></span> <span class="keywordsign">'</span>a <span class="constructor">React</span>.event <span class="keywordsign">-></span> <span class="keywordsign">'</span>b <span class="constructor">React</span>.signal <span class="keywordsign">-></span> <span class="keywordsign">'</span>c <span class="constructor">React</span>.event<br> + (<span class="keywordsign">'</span>b <span class="keywordsign">-></span> <span class="keywordsign">'</span>a <span class="keywordsign">-></span> <span class="keywordsign">'</span>c) <span class="keywordsign">-></span> <span class="keywordsign">'</span>b <span class="constructor">React</span>.event <span class="keywordsign">-></span> <span class="keywordsign">'</span>a <span class="constructor">React</span>.signal <span class="keywordsign">-></span> <span class="keywordsign">'</span>c <span class="constructor">React</span>.event<br> <span class="keyword">val</span> when_ :<br> ?eq:(<span class="keywordsign">'</span>a <span class="keywordsign">-></span> <span class="keywordsign">'</span>a <span class="keywordsign">-></span> bool) <span class="keywordsign">-></span><br> bool <span class="constructor">React</span>.signal <span class="keywordsign">-></span> <span class="keywordsign">'</span>a <span class="keywordsign">-></span> <span class="keywordsign">'</span>a <span class="constructor">React</span>.signal <span class="keywordsign">-></span> <span class="keywordsign">'</span>a <span class="constructor">React</span>.signal<br> @@ -60,33 +60,33 @@ ?eq:(<span class="keywordsign">'</span>a <span class="keywordsign">-></span> <span class="keywordsign">'</span>a <span class="keywordsign">-></span> bool) <span class="keywordsign">-></span><br> <span class="keywordsign">'</span>a <span class="keywordsign">-></span> (<span class="keywordsign">'</span>a <span class="constructor">React</span>.signal <span class="keywordsign">-></span> <span class="keywordsign">'</span>a <span class="constructor">React</span>.signal * <span class="keywordsign">'</span>b) <span class="keywordsign">-></span> <span class="keywordsign">'</span>b<br> <span class="keyword">val</span> l1 :<br> - ?eq:(<span class="keywordsign">'</span>a <span class="keywordsign">-></span> <span class="keywordsign">'</span>a <span class="keywordsign">-></span> bool) <span class="keywordsign">-></span><br> - (<span class="keywordsign">'</span>b <span class="keywordsign">-></span> <span class="keywordsign">'</span>a) <span class="keywordsign">-></span> <span class="keywordsign">'</span>b <span class="constructor">React</span>.signal <span class="keywordsign">-></span> <span class="keywordsign">'</span>a <span class="constructor">React</span>.signal<br> + ?eq:(<span class="keywordsign">'</span>b <span class="keywordsign">-></span> <span class="keywordsign">'</span>b <span class="keywordsign">-></span> bool) <span class="keywordsign">-></span><br> + (<span class="keywordsign">'</span>a <span class="keywordsign">-></span> <span class="keywordsign">'</span>b) <span class="keywordsign">-></span> <span class="keywordsign">'</span>a <span class="constructor">React</span>.signal <span class="keywordsign">-></span> <span class="keywordsign">'</span>b <span class="constructor">React</span>.signal<br> <span class="keyword">val</span> l2 :<br> - ?eq:(<span class="keywordsign">'</span>a <span class="keywordsign">-></span> <span class="keywordsign">'</span>a <span class="keywordsign">-></span> bool) <span class="keywordsign">-></span><br> - (<span class="keywordsign">'</span>b <span class="keywordsign">-></span> <span class="keywordsign">'</span>c <span class="keywordsign">-></span> <span class="keywordsign">'</span>a) <span class="keywordsign">-></span> <span class="keywordsign">'</span>b <span class="constructor">React</span>.signal <span class="keywordsign">-></span> <span class="keywordsign">'</span>c <span class="constructor">React</span>.signal <span class="keywordsign">-></span> <span class="keywordsign">'</span>a <span class="constructor">React</span>.signal<br> + ?eq:(<span class="keywordsign">'</span>c <span class="keywordsign">-></span> <span class="keywordsign">'</span>c <span class="keywordsign">-></span> bool) <span class="keywordsign">-></span><br> + (<span class="keywordsign">'</span>a <span class="keywordsign">-></span> <span class="keywordsign">'</span>b <span class="keywordsign">-></span> <span class="keywordsign">'</span>c) <span class="keywordsign">-></span> <span class="keywordsign">'</span>a <span class="constructor">React</span>.signal <span class="keywordsign">-></span> <span class="keywordsign">'</span>b <span class="constructor">React</span>.signal <span class="keywordsign">-></span> <span class="keywordsign">'</span>c <span class="constructor">React</span>.signal<br> <span class="keyword">val</span> l3 :<br> - ?eq:(<span class="keywordsign">'</span>a <span class="keywordsign">-></span> <span class="keywordsign">'</span>a <span class="keywordsign">-></span> bool) <span class="keywordsign">-></span><br> - (<span class="keywordsign">'</span>b <span class="keywordsign">-></span> <span class="keywordsign">'</span>c <span class="keywordsign">-></span> <span class="keywordsign">'</span>d <span class="keywordsign">-></span> <span class="keywordsign">'</span>a) <span class="keywordsign">-></span><br> - <span class="keywordsign">'</span>b <span class="constructor">React</span>.signal <span class="keywordsign">-></span> <span class="keywordsign">'</span>c <span class="constructor">React</span>.signal <span class="keywordsign">-></span> <span class="keywordsign">'</span>d <span class="constructor">React</span>.signal <span class="keywordsign">-></span> <span class="keywordsign">'</span>a <span class="constructor">React</span>.signal<br> + ?eq:(<span class="keywordsign">'</span>d <span class="keywordsign">-></span> <span class="keywordsign">'</span>d <span class="keywordsign">-></span> bool) <span class="keywordsign">-></span><br> + (<span class="keywordsign">'</span>a <span class="keywordsign">-></span> <span class="keywordsign">'</span>b <span class="keywordsign">-></span> <span class="keywordsign">'</span>c <span class="keywordsign">-></span> <span class="keywordsign">'</span>d) <span class="keywordsign">-></span><br> + <span class="keywordsign">'</span>a <span class="constructor">React</span>.signal <span class="keywordsign">-></span> <span class="keywordsign">'</span>b <span class="constructor">React</span>.signal <span class="keywordsign">-></span> <span class="keywordsign">'</span>c <span class="constructor">React</span>.signal <span class="keywordsign">-></span> <span class="keywordsign">'</span>d <span class="constructor">React</span>.signal<br> <span class="keyword">val</span> l4 :<br> - ?eq:(<span class="keywordsign">'</span>a <span class="keywordsign">-></span> <span class="keywordsign">'</span>a <span class="keywordsign">-></span> bool) <span class="keywordsign">-></span><br> - (<span class="keywordsign">'</span>b <span class="keywordsign">-></span> <span class="keywordsign">'</span>c <span class="keywordsign">-></span> <span class="keywordsign">'</span>d <span class="keywordsign">-></span> <span class="keywordsign">'</span>e <span class="keywordsign">-></span> <span class="keywordsign">'</span>a) <span class="keywordsign">-></span><br> - <span class="keywordsign">'</span>b <span class="constructor">React</span>.signal <span class="keywordsign">-></span><br> - <span class="keywordsign">'</span>c <span class="constructor">React</span>.signal <span class="keywordsign">-></span> <span class="keywordsign">'</span>d <span class="constructor">React</span>.signal <span class="keywordsign">-></span> <span class="keywordsign">'</span>e <span class="constructor">React</span>.signal <span class="keywordsign">-></span> <span class="keywordsign">'</span>a <span class="constructor">React</span>.signal<br> + ?eq:(<span class="keywordsign">'</span>e <span class="keywordsign">-></span> <span class="keywordsign">'</span>e <span class="keywordsign">-></span> bool) <span class="keywordsign">-></span><br> + (<span class="keywordsign">'</span>a <span class="keywordsign">-></span> <span class="keywordsign">'</span>b <span class="keywordsign">-></span> <span class="keywordsign">'</span>c <span class="keywordsign">-></span> <span class="keywordsign">'</span>d <span class="keywordsign">-></span> <span class="keywordsign">'</span>e) <span class="keywordsign">-></span><br> + <span class="keywordsign">'</span>a <span class="constructor">React</span>.signal <span class="keywordsign">-></span><br> + <span class="keywordsign">'</span>b <span class="constructor">React</span>.signal <span class="keywordsign">-></span> <span class="keywordsign">'</span>c <span class="constructor">React</span>.signal <span class="keywordsign">-></span> <span class="keywordsign">'</span>d <span class="constructor">React</span>.signal <span class="keywordsign">-></span> <span class="keywordsign">'</span>e <span class="constructor">React</span>.signal<br> <span class="keyword">val</span> l5 :<br> - ?eq:(<span class="keywordsign">'</span>a <span class="keywordsign">-></span> <span class="keywordsign">'</span>a <span class="keywordsign">-></span> bool) <span class="keywordsign">-></span><br> - (<span class="keywordsign">'</span>b <span class="keywordsign">-></span> <span class="keywordsign">'</span>c <span class="keywordsign">-></span> <span class="keywordsign">'</span>d <span class="keywordsign">-></span> <span class="keywordsign">'</span>e <span class="keywordsign">-></span> <span class="keywordsign">'</span>f <span class="keywordsign">-></span> <span class="keywordsign">'</span>a) <span class="keywordsign">-></span><br> + ?eq:(<span class="keywordsign">'</span>f <span class="keywordsign">-></span> <span class="keywordsign">'</span>f <span class="keywordsign">-></span> bool) <span class="keywordsign">-></span><br> + (<span class="keywordsign">'</span>a <span class="keywordsign">-></span> <span class="keywordsign">'</span>b <span class="keywordsign">-></span> <span class="keywordsign">'</span>c <span class="keywordsign">-></span> <span class="keywordsign">'</span>d <span class="keywordsign">-></span> <span class="keywordsign">'</span>e <span class="keywordsign">-></span> <span class="keywordsign">'</span>f) <span class="keywordsign">-></span><br> + <span class="keywordsign">'</span>a <span class="constructor">React</span>.signal <span class="keywordsign">-></span><br> <span class="keywordsign">'</span>b <span class="constructor">React</span>.signal <span class="keywordsign">-></span><br> - <span class="keywordsign">'</span>c <span class="constructor">React</span>.signal <span class="keywordsign">-></span><br> - <span class="keywordsign">'</span>d <span class="constructor">React</span>.signal <span class="keywordsign">-></span> <span class="keywordsign">'</span>e <span class="constructor">React</span>.signal <span class="keywordsign">-></span> <span class="keywordsign">'</span>f <span class="constructor">React</span>.signal <span class="keywordsign">-></span> <span class="keywordsign">'</span>a <span class="constructor">React</span>.signal<br> + <span class="keywordsign">'</span>c <span class="constructor">React</span>.signal <span class="keywordsign">-></span> <span class="keywordsign">'</span>d <span class="constructor">React</span>.signal <span class="keywordsign">-></span> <span class="keywordsign">'</span>e <span class="constructor">React</span>.signal <span class="keywordsign">-></span> <span class="keywordsign">'</span>f <span class="constructor">React</span>.signal<br> <span class="keyword">val</span> l6 :<br> - ?eq:(<span class="keywordsign">'</span>a <span class="keywordsign">-></span> <span class="keywordsign">'</span>a <span class="keywordsign">-></span> bool) <span class="keywordsign">-></span><br> - (<span class="keywordsign">'</span>b <span class="keywordsign">-></span> <span class="keywordsign">'</span>c <span class="keywordsign">-></span> <span class="keywordsign">'</span>d <span class="keywordsign">-></span> <span class="keywordsign">'</span>e <span class="keywordsign">-></span> <span class="keywordsign">'</span>f <span class="keywordsign">-></span> <span class="keywordsign">'</span>g <span class="keywordsign">-></span> <span class="keywordsign">'</span>a) <span class="keywordsign">-></span><br> + ?eq:(<span class="keywordsign">'</span>g <span class="keywordsign">-></span> <span class="keywordsign">'</span>g <span class="keywordsign">-></span> bool) <span class="keywordsign">-></span><br> + (<span class="keywordsign">'</span>a <span class="keywordsign">-></span> <span class="keywordsign">'</span>b <span class="keywordsign">-></span> <span class="keywordsign">'</span>c <span class="keywordsign">-></span> <span class="keywordsign">'</span>d <span class="keywordsign">-></span> <span class="keywordsign">'</span>e <span class="keywordsign">-></span> <span class="keywordsign">'</span>f <span class="keywordsign">-></span> <span class="keywordsign">'</span>g) <span class="keywordsign">-></span><br> + <span class="keywordsign">'</span>a <span class="constructor">React</span>.signal <span class="keywordsign">-></span><br> <span class="keywordsign">'</span>b <span class="constructor">React</span>.signal <span class="keywordsign">-></span><br> <span class="keywordsign">'</span>c <span class="constructor">React</span>.signal <span class="keywordsign">-></span><br> - <span class="keywordsign">'</span>d <span class="constructor">React</span>.signal <span class="keywordsign">-></span><br> - <span class="keywordsign">'</span>e <span class="constructor">React</span>.signal <span class="keywordsign">-></span> <span class="keywordsign">'</span>f <span class="constructor">React</span>.signal <span class="keywordsign">-></span> <span class="keywordsign">'</span>g <span class="constructor">React</span>.signal <span class="keywordsign">-></span> <span class="keywordsign">'</span>a <span class="constructor">React</span>.signal<br> + <span class="keywordsign">'</span>d <span class="constructor">React</span>.signal <span class="keywordsign">-></span> <span class="keywordsign">'</span>e <span class="constructor">React</span>.signal <span class="keywordsign">-></span> <span class="keywordsign">'</span>f <span class="constructor">React</span>.signal <span class="keywordsign">-></span> <span class="keywordsign">'</span>g <span class="constructor">React</span>.signal<br> <span class="keyword">module</span> <span class="constructor">Bool</span> :<br> <span class="keyword">sig</span><br> <span class="keyword">val</span> not : bool <span class="constructor">React</span>.signal <span class="keywordsign">-></span> bool <span class="constructor">React</span>.signal<br> @@ -221,9 +221,9 @@ <span class="keywordsign">'</span>a <span class="constructor">React</span>.<span class="constructor">S</span>.<span class="constructor">S</span>.v <span class="keywordsign">-></span><br> <span class="keywordsign">'</span>a <span class="constructor">React</span>.<span class="constructor">S</span>.<span class="constructor">S</span>.v <span class="constructor">React</span>.signal <span class="keywordsign">-></span> <span class="keywordsign">'</span>a <span class="constructor">React</span>.<span class="constructor">S</span>.<span class="constructor">S</span>.v <span class="constructor">React</span>.signal<br> <span class="keyword">val</span> dismiss :<br> - <span class="keywordsign">'</span>a <span class="constructor">React</span>.event <span class="keywordsign">-></span><br> - <span class="keywordsign">'</span>b <span class="constructor">React</span>.<span class="constructor">S</span>.<span class="constructor">S</span>.v <span class="keywordsign">-></span><br> - <span class="keywordsign">'</span>b <span class="constructor">React</span>.<span class="constructor">S</span>.<span class="constructor">S</span>.v <span class="constructor">React</span>.signal <span class="keywordsign">-></span> <span class="keywordsign">'</span>b <span class="constructor">React</span>.<span class="constructor">S</span>.<span class="constructor">S</span>.v <span class="constructor">React</span>.signal<br> + <span class="keywordsign">'</span>b <span class="constructor">React</span>.event <span class="keywordsign">-></span><br> + <span class="keywordsign">'</span>a <span class="constructor">React</span>.<span class="constructor">S</span>.<span class="constructor">S</span>.v <span class="keywordsign">-></span><br> + <span class="keywordsign">'</span>a <span class="constructor">React</span>.<span class="constructor">S</span>.<span class="constructor">S</span>.v <span class="constructor">React</span>.signal <span class="keywordsign">-></span> <span class="keywordsign">'</span>a <span class="constructor">React</span>.<span class="constructor">S</span>.<span class="constructor">S</span>.v <span class="constructor">React</span>.signal<br> <span class="keyword">val</span> accum :<br> (<span class="keywordsign">'</span>a <span class="constructor">React</span>.<span class="constructor">S</span>.<span class="constructor">S</span>.v <span class="keywordsign">-></span> <span class="keywordsign">'</span>a <span class="constructor">React</span>.<span class="constructor">S</span>.<span class="constructor">S</span>.v) <span class="constructor">React</span>.event <span class="keywordsign">-></span><br> <span class="keywordsign">'</span>a <span class="constructor">React</span>.<span class="constructor">S</span>.<span class="constructor">S</span>.v <span class="keywordsign">-></span> <span class="keywordsign">'</span>a <span class="constructor">React</span>.<span class="constructor">S</span>.<span class="constructor">S</span>.v <span class="constructor">React</span>.signal<br> @@ -282,7 +282,7 @@ <span class="keyword">val</span> filter : (<span class="keywordsign">'</span>a v <span class="keywordsign">-></span> bool) <span class="keywordsign">-></span> <span class="keywordsign">'</span>a v <span class="keywordsign">-></span> <span class="keywordsign">'</span>a v signal <span class="keywordsign">-></span> <span class="keywordsign">'</span>a v signal<br> <span class="keyword">val</span> fmap : (<span class="keywordsign">'</span>a <span class="keywordsign">-></span> <span class="keywordsign">'</span>b v option) <span class="keywordsign">-></span> <span class="keywordsign">'</span>b v <span class="keywordsign">-></span> <span class="keywordsign">'</span>a signal <span class="keywordsign">-></span> <span class="keywordsign">'</span>b v signal<br> <span class="keyword">val</span> when_ : bool signal <span class="keywordsign">-></span> <span class="keywordsign">'</span>a v <span class="keywordsign">-></span> <span class="keywordsign">'</span>a v signal <span class="keywordsign">-></span> <span class="keywordsign">'</span>a v signal<br> - <span class="keyword">val</span> dismiss : <span class="keywordsign">'</span>a event <span class="keywordsign">-></span> <span class="keywordsign">'</span>b v <span class="keywordsign">-></span> <span class="keywordsign">'</span>b v signal <span class="keywordsign">-></span> <span class="keywordsign">'</span>b v signal<br> + <span class="keyword">val</span> dismiss : <span class="keywordsign">'</span>b event <span class="keywordsign">-></span> <span class="keywordsign">'</span>a v <span class="keywordsign">-></span> <span class="keywordsign">'</span>a v signal <span class="keywordsign">-></span> <span class="keywordsign">'</span>a v signal<br> <span class="keyword">val</span> accum : (<span class="keywordsign">'</span>a v <span class="keywordsign">-></span> <span class="keywordsign">'</span>a v) event <span class="keywordsign">-></span> <span class="keywordsign">'</span>a v <span class="keywordsign">-></span> <span class="keywordsign">'</span>a v signal<br> <span class="keyword">val</span> fold : (<span class="keywordsign">'</span>a v <span class="keywordsign">-></span> <span class="keywordsign">'</span>b <span class="keywordsign">-></span> <span class="keywordsign">'</span>a v) <span class="keywordsign">-></span> <span class="keywordsign">'</span>a v <span class="keywordsign">-></span> <span class="keywordsign">'</span>b event <span class="keywordsign">-></span> <span class="keywordsign">'</span>a v signal<br> <span class="keyword">val</span> merge :<br> @@ -320,7 +320,7 @@ <span class="keyword">val</span> filter : (<span class="keywordsign">'</span>a v <span class="keywordsign">-></span> bool) <span class="keywordsign">-></span> <span class="keywordsign">'</span>a v <span class="keywordsign">-></span> <span class="keywordsign">'</span>a v signal <span class="keywordsign">-></span> <span class="keywordsign">'</span>a v signal<br> <span class="keyword">val</span> fmap : (<span class="keywordsign">'</span>a <span class="keywordsign">-></span> <span class="keywordsign">'</span>b v option) <span class="keywordsign">-></span> <span class="keywordsign">'</span>b v <span class="keywordsign">-></span> <span class="keywordsign">'</span>a signal <span class="keywordsign">-></span> <span class="keywordsign">'</span>b v signal<br> <span class="keyword">val</span> when_ : bool signal <span class="keywordsign">-></span> <span class="keywordsign">'</span>a v <span class="keywordsign">-></span> <span class="keywordsign">'</span>a v signal <span class="keywordsign">-></span> <span class="keywordsign">'</span>a v signal<br> - <span class="keyword">val</span> dismiss : <span class="keywordsign">'</span>a event <span class="keywordsign">-></span> <span class="keywordsign">'</span>b v <span class="keywordsign">-></span> <span class="keywordsign">'</span>b v signal <span class="keywordsign">-></span> <span class="keywordsign">'</span>b v signal<br> + <span class="keyword">val</span> dismiss : <span class="keywordsign">'</span>b event <span class="keywordsign">-></span> <span class="keywordsign">'</span>a v <span class="keywordsign">-></span> <span class="keywordsign">'</span>a v signal <span class="keywordsign">-></span> <span class="keywordsign">'</span>a v signal<br> <span class="keyword">val</span> accum : (<span class="keywordsign">'</span>a v <span class="keywordsign">-></span> <span class="keywordsign">'</span>a v) event <span class="keywordsign">-></span> <span class="keywordsign">'</span>a v <span class="keywordsign">-></span> <span class="keywordsign">'</span>a v signal<br> <span class="keyword">val</span> fold : (<span class="keywordsign">'</span>a v <span class="keywordsign">-></span> <span class="keywordsign">'</span>b <span class="keywordsign">-></span> <span class="keywordsign">'</span>a v) <span class="keywordsign">-></span> <span class="keywordsign">'</span>a v <span class="keywordsign">-></span> <span class="keywordsign">'</span>b event <span class="keywordsign">-></span> <span class="keywordsign">'</span>a v signal<br> <span class="keyword">val</span> merge :<br> @@ -357,7 +357,7 @@ <span class="keyword">val</span> filter : (<span class="keywordsign">'</span>a v <span class="keywordsign">-></span> bool) <span class="keywordsign">-></span> <span class="keywordsign">'</span>a v <span class="keywordsign">-></span> <span class="keywordsign">'</span>a v signal <span class="keywordsign">-></span> <span class="keywordsign">'</span>a v signal<br> <span class="keyword">val</span> fmap : (<span class="keywordsign">'</span>a <span class="keywordsign">-></span> <span class="keywordsign">'</span>b v option) <span class="keywordsign">-></span> <span class="keywordsign">'</span>b v <span class="keywordsign">-></span> <span class="keywordsign">'</span>a signal <span class="keywordsign">-></span> <span class="keywordsign">'</span>b v signal<br> <span class="keyword">val</span> when_ : bool signal <span class="keywordsign">-></span> <span class="keywordsign">'</span>a v <span class="keywordsign">-></span> <span class="keywordsign">'</span>a v signal <span class="keywordsign">-></span> <span class="keywordsign">'</span>a v signal<br> - <span class="keyword">val</span> dismiss : <span class="keywordsign">'</span>a event <span class="keywordsign">-></span> <span class="keywordsign">'</span>b v <span class="keywordsign">-></span> <span class="keywordsign">'</span>b v signal <span class="keywordsign">-></span> <span class="keywordsign">'</span>b v signal<br> + <span class="keyword">val</span> dismiss : <span class="keywordsign">'</span>b event <span class="keywordsign">-></span> <span class="keywordsign">'</span>a v <span class="keywordsign">-></span> <span class="keywordsign">'</span>a v signal <span class="keywordsign">-></span> <span class="keywordsign">'</span>a v signal<br> <span class="keyword">val</span> accum : (<span class="keywordsign">'</span>a v <span class="keywordsign">-></span> <span class="keywordsign">'</span>a v) event <span class="keywordsign">-></span> <span class="keywordsign">'</span>a v <span class="keywordsign">-></span> <span class="keywordsign">'</span>a v signal<br> <span class="keyword">val</span> fold : (<span class="keywordsign">'</span>a v <span class="keywordsign">-></span> <span class="keywordsign">'</span>b <span class="keywordsign">-></span> <span class="keywordsign">'</span>a v) <span class="keywordsign">-></span> <span class="keywordsign">'</span>a v <span class="keywordsign">-></span> <span class="keywordsign">'</span>b event <span class="keywordsign">-></span> <span class="keywordsign">'</span>a v signal<br> <span class="keyword">val</span> merge :<br> @@ -394,7 +394,7 @@ <span class="keyword">val</span> filter : (<span class="keywordsign">'</span>a v <span class="keywordsign">-></span> bool) <span class="keywordsign">-></span> <span class="keywordsign">'</span>a v <span class="keywordsign">-></span> <span class="keywordsign">'</span>a v signal <span class="keywordsign">-></span> <span class="keywordsign">'</span>a v signal<br> <span class="keyword">val</span> fmap : (<span class="keywordsign">'</span>a <span class="keywordsign">-></span> <span class="keywordsign">'</span>b v option) <span class="keywordsign">-></span> <span class="keywordsign">'</span>b v <span class="keywordsign">-></span> <span class="keywordsign">'</span>a signal <span class="keywordsign">-></span> <span class="keywordsign">'</span>b v signal<br> <span class="keyword">val</span> when_ : bool signal <span class="keywordsign">-></span> <span class="keywordsign">'</span>a v <span class="keywordsign">-></span> <span class="keywordsign">'</span>a v signal <span class="keywordsign">-></span> <span class="keywordsign">'</span>a v signal<br> - <span class="keyword">val</span> dismiss : <span class="keywordsign">'</span>a event <span class="keywordsign">-></span> <span class="keywordsign">'</span>b v <span class="keywordsign">-></span> <span class="keywordsign">'</span>b v signal <span class="keywordsign">-></span> <span class="keywordsign">'</span>b v signal<br> + <span class="keyword">val</span> dismiss : <span class="keywordsign">'</span>b event <span class="keywordsign">-></span> <span class="keywordsign">'</span>a v <span class="keywordsign">-></span> <span class="keywordsign">'</span>a v signal <span class="keywordsign">-></span> <span class="keywordsign">'</span>a v signal<br> <span class="keyword">val</span> accum : (<span class="keywordsign">'</span>a v <span class="keywordsign">-></span> <span class="keywordsign">'</span>a v) event <span class="keywordsign">-></span> <span class="keywordsign">'</span>a v <span class="keywordsign">-></span> <span class="keywordsign">'</span>a v signal<br> <span class="keyword">val</span> fold : (<span class="keywordsign">'</span>a v <span class="keywordsign">-></span> <span class="keywordsign">'</span>b <span class="keywordsign">-></span> <span class="keywordsign">'</span>a v) <span class="keywordsign">-></span> <span class="keywordsign">'</span>a v <span class="keywordsign">-></span> <span class="keywordsign">'</span>b event <span class="keywordsign">-></span> <span class="keywordsign">'</span>a v signal<br> <span class="keyword">val</span> merge :<br> diff --git a/doc/type_React.html b/doc/type_React.html index d92f4b0..ecf1520 100644 --- a/doc/type_React.html +++ b/doc/type_React.html @@ -27,14 +27,14 @@ <span class="keyword">val</span> drop_once : <span class="keywordsign">'</span>a <span class="constructor">React</span>.event <span class="keywordsign">-></span> <span class="keywordsign">'</span>a <span class="constructor">React</span>.event<br> <span class="keyword">val</span> app : (<span class="keywordsign">'</span>a <span class="keywordsign">-></span> <span class="keywordsign">'</span>b) <span class="constructor">React</span>.event <span class="keywordsign">-></span> <span class="keywordsign">'</span>a <span class="constructor">React</span>.event <span class="keywordsign">-></span> <span class="keywordsign">'</span>b <span class="constructor">React</span>.event<br> <span class="keyword">val</span> map : (<span class="keywordsign">'</span>a <span class="keywordsign">-></span> <span class="keywordsign">'</span>b) <span class="keywordsign">-></span> <span class="keywordsign">'</span>a <span class="constructor">React</span>.event <span class="keywordsign">-></span> <span class="keywordsign">'</span>b <span class="constructor">React</span>.event<br> - <span class="keyword">val</span> stamp : <span class="keywordsign">'</span>a <span class="constructor">React</span>.event <span class="keywordsign">-></span> <span class="keywordsign">'</span>b <span class="keywordsign">-></span> <span class="keywordsign">'</span>b <span class="constructor">React</span>.event<br> + <span class="keyword">val</span> stamp : <span class="keywordsign">'</span>b <span class="constructor">React</span>.event <span class="keywordsign">-></span> <span class="keywordsign">'</span>a <span class="keywordsign">-></span> <span class="keywordsign">'</span>a <span class="constructor">React</span>.event<br> <span class="keyword">val</span> filter : (<span class="keywordsign">'</span>a <span class="keywordsign">-></span> bool) <span class="keywordsign">-></span> <span class="keywordsign">'</span>a <span class="constructor">React</span>.event <span class="keywordsign">-></span> <span class="keywordsign">'</span>a <span class="constructor">React</span>.event<br> <span class="keyword">val</span> fmap : (<span class="keywordsign">'</span>a <span class="keywordsign">-></span> <span class="keywordsign">'</span>b option) <span class="keywordsign">-></span> <span class="keywordsign">'</span>a <span class="constructor">React</span>.event <span class="keywordsign">-></span> <span class="keywordsign">'</span>b <span class="constructor">React</span>.event<br> <span class="keyword">val</span> diff : (<span class="keywordsign">'</span>a <span class="keywordsign">-></span> <span class="keywordsign">'</span>a <span class="keywordsign">-></span> <span class="keywordsign">'</span>b) <span class="keywordsign">-></span> <span class="keywordsign">'</span>a <span class="constructor">React</span>.event <span class="keywordsign">-></span> <span class="keywordsign">'</span>b <span class="constructor">React</span>.event<br> <span class="keyword">val</span> changes :<br> ?eq:(<span class="keywordsign">'</span>a <span class="keywordsign">-></span> <span class="keywordsign">'</span>a <span class="keywordsign">-></span> bool) <span class="keywordsign">-></span> <span class="keywordsign">'</span>a <span class="constructor">React</span>.event <span class="keywordsign">-></span> <span class="keywordsign">'</span>a <span class="constructor">React</span>.event<br> <span class="keyword">val</span> when_ : bool <span class="constructor">React</span>.signal <span class="keywordsign">-></span> <span class="keywordsign">'</span>a <span class="constructor">React</span>.event <span class="keywordsign">-></span> <span class="keywordsign">'</span>a <span class="constructor">React</span>.event<br> - <span class="keyword">val</span> dismiss : <span class="keywordsign">'</span>a <span class="constructor">React</span>.event <span class="keywordsign">-></span> <span class="keywordsign">'</span>b <span class="constructor">React</span>.event <span class="keywordsign">-></span> <span class="keywordsign">'</span>b <span class="constructor">React</span>.event<br> + <span class="keyword">val</span> dismiss : <span class="keywordsign">'</span>b <span class="constructor">React</span>.event <span class="keywordsign">-></span> <span class="keywordsign">'</span>a <span class="constructor">React</span>.event <span class="keywordsign">-></span> <span class="keywordsign">'</span>a <span class="constructor">React</span>.event<br> <span class="keyword">val</span> until : <span class="keywordsign">'</span>a <span class="constructor">React</span>.event <span class="keywordsign">-></span> <span class="keywordsign">'</span>b <span class="constructor">React</span>.event <span class="keywordsign">-></span> <span class="keywordsign">'</span>b <span class="constructor">React</span>.event<br> <span class="keyword">val</span> accum : (<span class="keywordsign">'</span>a <span class="keywordsign">-></span> <span class="keywordsign">'</span>a) <span class="constructor">React</span>.event <span class="keywordsign">-></span> <span class="keywordsign">'</span>a <span class="keywordsign">-></span> <span class="keywordsign">'</span>a <span class="constructor">React</span>.event<br> <span class="keyword">val</span> fold : (<span class="keywordsign">'</span>a <span class="keywordsign">-></span> <span class="keywordsign">'</span>b <span class="keywordsign">-></span> <span class="keywordsign">'</span>a) <span class="keywordsign">-></span> <span class="keywordsign">'</span>a <span class="keywordsign">-></span> <span class="keywordsign">'</span>b <span class="constructor">React</span>.event <span class="keywordsign">-></span> <span class="keywordsign">'</span>a <span class="constructor">React</span>.event<br> @@ -64,22 +64,22 @@ <span class="keyword">val</span> hold :<br> ?eq:(<span class="keywordsign">'</span>a <span class="keywordsign">-></span> <span class="keywordsign">'</span>a <span class="keywordsign">-></span> bool) <span class="keywordsign">-></span> <span class="keywordsign">'</span>a <span class="keywordsign">-></span> <span class="keywordsign">'</span>a <span class="constructor">React</span>.event <span class="keywordsign">-></span> <span class="keywordsign">'</span>a <span class="constructor">React</span>.signal<br> <span class="keyword">val</span> app :<br> - ?eq:(<span class="keywordsign">'</span>a <span class="keywordsign">-></span> <span class="keywordsign">'</span>a <span class="keywordsign">-></span> bool) <span class="keywordsign">-></span><br> - (<span class="keywordsign">'</span>b <span class="keywordsign">-></span> <span class="keywordsign">'</span>a) <span class="constructor">React</span>.signal <span class="keywordsign">-></span> <span class="keywordsign">'</span>b <span class="constructor">React</span>.signal <span class="keywordsign">-></span> <span class="keywordsign">'</span>a <span class="constructor">React</span>.signal<br> + ?eq:(<span class="keywordsign">'</span>b <span class="keywordsign">-></span> <span class="keywordsign">'</span>b <span class="keywordsign">-></span> bool) <span class="keywordsign">-></span><br> + (<span class="keywordsign">'</span>a <span class="keywordsign">-></span> <span class="keywordsign">'</span>b) <span class="constructor">React</span>.signal <span class="keywordsign">-></span> <span class="keywordsign">'</span>a <span class="constructor">React</span>.signal <span class="keywordsign">-></span> <span class="keywordsign">'</span>b <span class="constructor">React</span>.signal<br> <span class="keyword">val</span> map :<br> - ?eq:(<span class="keywordsign">'</span>a <span class="keywordsign">-></span> <span class="keywordsign">'</span>a <span class="keywordsign">-></span> bool) <span class="keywordsign">-></span><br> - (<span class="keywordsign">'</span>b <span class="keywordsign">-></span> <span class="keywordsign">'</span>a) <span class="keywordsign">-></span> <span class="keywordsign">'</span>b <span class="constructor">React</span>.signal <span class="keywordsign">-></span> <span class="keywordsign">'</span>a <span class="constructor">React</span>.signal<br> + ?eq:(<span class="keywordsign">'</span>b <span class="keywordsign">-></span> <span class="keywordsign">'</span>b <span class="keywordsign">-></span> bool) <span class="keywordsign">-></span><br> + (<span class="keywordsign">'</span>a <span class="keywordsign">-></span> <span class="keywordsign">'</span>b) <span class="keywordsign">-></span> <span class="keywordsign">'</span>a <span class="constructor">React</span>.signal <span class="keywordsign">-></span> <span class="keywordsign">'</span>b <span class="constructor">React</span>.signal<br> <span class="keyword">val</span> filter :<br> ?eq:(<span class="keywordsign">'</span>a <span class="keywordsign">-></span> <span class="keywordsign">'</span>a <span class="keywordsign">-></span> bool) <span class="keywordsign">-></span><br> (<span class="keywordsign">'</span>a <span class="keywordsign">-></span> bool) <span class="keywordsign">-></span> <span class="keywordsign">'</span>a <span class="keywordsign">-></span> <span class="keywordsign">'</span>a <span class="constructor">React</span>.signal <span class="keywordsign">-></span> <span class="keywordsign">'</span>a <span class="constructor">React</span>.signal<br> <span class="keyword">val</span> fmap :<br> - ?eq:(<span class="keywordsign">'</span>a <span class="keywordsign">-></span> <span class="keywordsign">'</span>a <span class="keywordsign">-></span> bool) <span class="keywordsign">-></span><br> - (<span class="keywordsign">'</span>b <span class="keywordsign">-></span> <span class="keywordsign">'</span>a option) <span class="keywordsign">-></span> <span class="keywordsign">'</span>a <span class="keywordsign">-></span> <span class="keywordsign">'</span>b <span class="constructor">React</span>.signal <span class="keywordsign">-></span> <span class="keywordsign">'</span>a <span class="constructor">React</span>.signal<br> + ?eq:(<span class="keywordsign">'</span>b <span class="keywordsign">-></span> <span class="keywordsign">'</span>b <span class="keywordsign">-></span> bool) <span class="keywordsign">-></span><br> + (<span class="keywordsign">'</span>a <span class="keywordsign">-></span> <span class="keywordsign">'</span>b option) <span class="keywordsign">-></span> <span class="keywordsign">'</span>b <span class="keywordsign">-></span> <span class="keywordsign">'</span>a <span class="constructor">React</span>.signal <span class="keywordsign">-></span> <span class="keywordsign">'</span>b <span class="constructor">React</span>.signal<br> <span class="keyword">val</span> diff : (<span class="keywordsign">'</span>a <span class="keywordsign">-></span> <span class="keywordsign">'</span>a <span class="keywordsign">-></span> <span class="keywordsign">'</span>b) <span class="keywordsign">-></span> <span class="keywordsign">'</span>a <span class="constructor">React</span>.signal <span class="keywordsign">-></span> <span class="keywordsign">'</span>b <span class="constructor">React</span>.event<br> <span class="keyword">val</span> changes : <span class="keywordsign">'</span>a <span class="constructor">React</span>.signal <span class="keywordsign">-></span> <span class="keywordsign">'</span>a <span class="constructor">React</span>.event<br> <span class="keyword">val</span> sample :<br> - (<span class="keywordsign">'</span>a <span class="keywordsign">-></span> <span class="keywordsign">'</span>b <span class="keywordsign">-></span> <span class="keywordsign">'</span>c) <span class="keywordsign">-></span><br> - <span class="keywordsign">'</span>a <span class="constructor">React</span>.event <span class="keywordsign">-></span> <span class="keywordsign">'</span>b <span class="constructor">React</span>.signal <span class="keywordsign">-></span> <span class="keywordsign">'</span>c <span class="constructor">React</span>.event<br> + (<span class="keywordsign">'</span>b <span class="keywordsign">-></span> <span class="keywordsign">'</span>a <span class="keywordsign">-></span> <span class="keywordsign">'</span>c) <span class="keywordsign">-></span><br> + <span class="keywordsign">'</span>b <span class="constructor">React</span>.event <span class="keywordsign">-></span> <span class="keywordsign">'</span>a <span class="constructor">React</span>.signal <span class="keywordsign">-></span> <span class="keywordsign">'</span>c <span class="constructor">React</span>.event<br> <span class="keyword">val</span> when_ :<br> ?eq:(<span class="keywordsign">'</span>a <span class="keywordsign">-></span> <span class="keywordsign">'</span>a <span class="keywordsign">-></span> bool) <span class="keywordsign">-></span><br> bool <span class="constructor">React</span>.signal <span class="keywordsign">-></span> <span class="keywordsign">'</span>a <span class="keywordsign">-></span> <span class="keywordsign">'</span>a <span class="constructor">React</span>.signal <span class="keywordsign">-></span> <span class="keywordsign">'</span>a <span class="constructor">React</span>.signal<br> @@ -102,38 +102,38 @@ ?eq:(<span class="keywordsign">'</span>a <span class="keywordsign">-></span> <span class="keywordsign">'</span>a <span class="keywordsign">-></span> bool) <span class="keywordsign">-></span><br> <span class="keywordsign">'</span>a <span class="keywordsign">-></span> (<span class="keywordsign">'</span>a <span class="constructor">React</span>.signal <span class="keywordsign">-></span> <span class="keywordsign">'</span>a <span class="constructor">React</span>.signal * <span class="keywordsign">'</span>b) <span class="keywordsign">-></span> <span class="keywordsign">'</span>b<br> <span class="keyword">val</span> l1 :<br> - ?eq:(<span class="keywordsign">'</span>a <span class="keywordsign">-></span> <span class="keywordsign">'</span>a <span class="keywordsign">-></span> bool) <span class="keywordsign">-></span><br> - (<span class="keywordsign">'</span>b <span class="keywordsign">-></span> <span class="keywordsign">'</span>a) <span class="keywordsign">-></span> <span class="keywordsign">'</span>b <span class="constructor">React</span>.signal <span class="keywordsign">-></span> <span class="keywordsign">'</span>a <span class="constructor">React</span>.signal<br> + ?eq:(<span class="keywordsign">'</span>b <span class="keywordsign">-></span> <span class="keywordsign">'</span>b <span class="keywordsign">-></span> bool) <span class="keywordsign">-></span><br> + (<span class="keywordsign">'</span>a <span class="keywordsign">-></span> <span class="keywordsign">'</span>b) <span class="keywordsign">-></span> <span class="keywordsign">'</span>a <span class="constructor">React</span>.signal <span class="keywordsign">-></span> <span class="keywordsign">'</span>b <span class="constructor">React</span>.signal<br> <span class="keyword">val</span> l2 :<br> - ?eq:(<span class="keywordsign">'</span>a <span class="keywordsign">-></span> <span class="keywordsign">'</span>a <span class="keywordsign">-></span> bool) <span class="keywordsign">-></span><br> - (<span class="keywordsign">'</span>b <span class="keywordsign">-></span> <span class="keywordsign">'</span>c <span class="keywordsign">-></span> <span class="keywordsign">'</span>a) <span class="keywordsign">-></span><br> - <span class="keywordsign">'</span>b <span class="constructor">React</span>.signal <span class="keywordsign">-></span> <span class="keywordsign">'</span>c <span class="constructor">React</span>.signal <span class="keywordsign">-></span> <span class="keywordsign">'</span>a <span class="constructor">React</span>.signal<br> + ?eq:(<span class="keywordsign">'</span>c <span class="keywordsign">-></span> <span class="keywordsign">'</span>c <span class="keywordsign">-></span> bool) <span class="keywordsign">-></span><br> + (<span class="keywordsign">'</span>a <span class="keywordsign">-></span> <span class="keywordsign">'</span>b <span class="keywordsign">-></span> <span class="keywordsign">'</span>c) <span class="keywordsign">-></span><br> + <span class="keywordsign">'</span>a <span class="constructor">React</span>.signal <span class="keywordsign">-></span> <span class="keywordsign">'</span>b <span class="constructor">React</span>.signal <span class="keywordsign">-></span> <span class="keywordsign">'</span>c <span class="constructor">React</span>.signal<br> <span class="keyword">val</span> l3 :<br> - ?eq:(<span class="keywordsign">'</span>a <span class="keywordsign">-></span> <span class="keywordsign">'</span>a <span class="keywordsign">-></span> bool) <span class="keywordsign">-></span><br> - (<span class="keywordsign">'</span>b <span class="keywordsign">-></span> <span class="keywordsign">'</span>c <span class="keywordsign">-></span> <span class="keywordsign">'</span>d <span class="keywordsign">-></span> <span class="keywordsign">'</span>a) <span class="keywordsign">-></span><br> - <span class="keywordsign">'</span>b <span class="constructor">React</span>.signal <span class="keywordsign">-></span><br> - <span class="keywordsign">'</span>c <span class="constructor">React</span>.signal <span class="keywordsign">-></span> <span class="keywordsign">'</span>d <span class="constructor">React</span>.signal <span class="keywordsign">-></span> <span class="keywordsign">'</span>a <span class="constructor">React</span>.signal<br> + ?eq:(<span class="keywordsign">'</span>d <span class="keywordsign">-></span> <span class="keywordsign">'</span>d <span class="keywordsign">-></span> bool) <span class="keywordsign">-></span><br> + (<span class="keywordsign">'</span>a <span class="keywordsign">-></span> <span class="keywordsign">'</span>b <span class="keywordsign">-></span> <span class="keywordsign">'</span>c <span class="keywordsign">-></span> <span class="keywordsign">'</span>d) <span class="keywordsign">-></span><br> + <span class="keywordsign">'</span>a <span class="constructor">React</span>.signal <span class="keywordsign">-></span><br> + <span class="keywordsign">'</span>b <span class="constructor">React</span>.signal <span class="keywordsign">-></span> <span class="keywordsign">'</span>c <span class="constructor">React</span>.signal <span class="keywordsign">-></span> <span class="keywordsign">'</span>d <span class="constructor">React</span>.signal<br> <span class="keyword">val</span> l4 :<br> - ?eq:(<span class="keywordsign">'</span>a <span class="keywordsign">-></span> <span class="keywordsign">'</span>a <span class="keywordsign">-></span> bool) <span class="keywordsign">-></span><br> - (<span class="keywordsign">'</span>b <span class="keywordsign">-></span> <span class="keywordsign">'</span>c <span class="keywordsign">-></span> <span class="keywordsign">'</span>d <span class="keywordsign">-></span> <span class="keywordsign">'</span>e <span class="keywordsign">-></span> <span class="keywordsign">'</span>a) <span class="keywordsign">-></span><br> + ?eq:(<span class="keywordsign">'</span>e <span class="keywordsign">-></span> <span class="keywordsign">'</span>e <span class="keywordsign">-></span> bool) <span class="keywordsign">-></span><br> + (<span class="keywordsign">'</span>a <span class="keywordsign">-></span> <span class="keywordsign">'</span>b <span class="keywordsign">-></span> <span class="keywordsign">'</span>c <span class="keywordsign">-></span> <span class="keywordsign">'</span>d <span class="keywordsign">-></span> <span class="keywordsign">'</span>e) <span class="keywordsign">-></span><br> + <span class="keywordsign">'</span>a <span class="constructor">React</span>.signal <span class="keywordsign">-></span><br> <span class="keywordsign">'</span>b <span class="constructor">React</span>.signal <span class="keywordsign">-></span><br> - <span class="keywordsign">'</span>c <span class="constructor">React</span>.signal <span class="keywordsign">-></span><br> - <span class="keywordsign">'</span>d <span class="constructor">React</span>.signal <span class="keywordsign">-></span> <span class="keywordsign">'</span>e <span class="constructor">React</span>.signal <span class="keywordsign">-></span> <span class="keywordsign">'</span>a <span class="constructor">React</span>.signal<br> + <span class="keywordsign">'</span>c <span class="constructor">React</span>.signal <span class="keywordsign">-></span> <span class="keywordsign">'</span>d <span class="constructor">React</span>.signal <span class="keywordsign">-></span> <span class="keywordsign">'</span>e <span class="constructor">React</span>.signal<br> <span class="keyword">val</span> l5 :<br> - ?eq:(<span class="keywordsign">'</span>a <span class="keywordsign">-></span> <span class="keywordsign">'</span>a <span class="keywordsign">-></span> bool) <span class="keywordsign">-></span><br> - (<span class="keywordsign">'</span>b <span class="keywordsign">-></span> <span class="keywordsign">'</span>c <span class="keywordsign">-></span> <span class="keywordsign">'</span>d <span class="keywordsign">-></span> <span class="keywordsign">'</span>e <span class="keywordsign">-></span> <span class="keywordsign">'</span>f <span class="keywordsign">-></span> <span class="keywordsign">'</span>a) <span class="keywordsign">-></span><br> + ?eq:(<span class="keywordsign">'</span>f <span class="keywordsign">-></span> <span class="keywordsign">'</span>f <span class="keywordsign">-></span> bool) <span class="keywordsign">-></span><br> + (<span class="keywordsign">'</span>a <span class="keywordsign">-></span> <span class="keywordsign">'</span>b <span class="keywordsign">-></span> <span class="keywordsign">'</span>c <span class="keywordsign">-></span> <span class="keywordsign">'</span>d <span class="keywordsign">-></span> <span class="keywordsign">'</span>e <span class="keywordsign">-></span> <span class="keywordsign">'</span>f) <span class="keywordsign">-></span><br> + <span class="keywordsign">'</span>a <span class="constructor">React</span>.signal <span class="keywordsign">-></span><br> <span class="keywordsign">'</span>b <span class="constructor">React</span>.signal <span class="keywordsign">-></span><br> <span class="keywordsign">'</span>c <span class="constructor">React</span>.signal <span class="keywordsign">-></span><br> - <span class="keywordsign">'</span>d <span class="constructor">React</span>.signal <span class="keywordsign">-></span><br> - <span class="keywordsign">'</span>e <span class="constructor">React</span>.signal <span class="keywordsign">-></span> <span class="keywordsign">'</span>f <span class="constructor">React</span>.signal <span class="keywordsign">-></span> <span class="keywordsign">'</span>a <span class="constructor">React</span>.signal<br> + <span class="keywordsign">'</span>d <span class="constructor">React</span>.signal <span class="keywordsign">-></span> <span class="keywordsign">'</span>e <span class="constructor">React</span>.signal <span class="keywordsign">-></span> <span class="keywordsign">'</span>f <span class="constructor">React</span>.signal<br> <span class="keyword">val</span> l6 :<br> - ?eq:(<span class="keywordsign">'</span>a <span class="keywordsign">-></span> <span class="keywordsign">'</span>a <span class="keywordsign">-></span> bool) <span class="keywordsign">-></span><br> - (<span class="keywordsign">'</span>b <span class="keywordsign">-></span> <span class="keywordsign">'</span>c <span class="keywordsign">-></span> <span class="keywordsign">'</span>d <span class="keywordsign">-></span> <span class="keywordsign">'</span>e <span class="keywordsign">-></span> <span class="keywordsign">'</span>f <span class="keywordsign">-></span> <span class="keywordsign">'</span>g <span class="keywordsign">-></span> <span class="keywordsign">'</span>a) <span class="keywordsign">-></span><br> + ?eq:(<span class="keywordsign">'</span>g <span class="keywordsign">-></span> <span class="keywordsign">'</span>g <span class="keywordsign">-></span> bool) <span class="keywordsign">-></span><br> + (<span class="keywordsign">'</span>a <span class="keywordsign">-></span> <span class="keywordsign">'</span>b <span class="keywordsign">-></span> <span class="keywordsign">'</span>c <span class="keywordsign">-></span> <span class="keywordsign">'</span>d <span class="keywordsign">-></span> <span class="keywordsign">'</span>e <span class="keywordsign">-></span> <span class="keywordsign">'</span>f <span class="keywordsign">-></span> <span class="keywordsign">'</span>g) <span class="keywordsign">-></span><br> + <span class="keywordsign">'</span>a <span class="constructor">React</span>.signal <span class="keywordsign">-></span><br> <span class="keywordsign">'</span>b <span class="constructor">React</span>.signal <span class="keywordsign">-></span><br> <span class="keywordsign">'</span>c <span class="constructor">React</span>.signal <span class="keywordsign">-></span><br> <span class="keywordsign">'</span>d <span class="constructor">React</span>.signal <span class="keywordsign">-></span><br> - <span class="keywordsign">'</span>e <span class="constructor">React</span>.signal <span class="keywordsign">-></span><br> - <span class="keywordsign">'</span>f <span class="constructor">React</span>.signal <span class="keywordsign">-></span> <span class="keywordsign">'</span>g <span class="constructor">React</span>.signal <span class="keywordsign">-></span> <span class="keywordsign">'</span>a <span class="constructor">React</span>.signal<br> + <span class="keywordsign">'</span>e <span class="constructor">React</span>.signal <span class="keywordsign">-></span> <span class="keywordsign">'</span>f <span class="constructor">React</span>.signal <span class="keywordsign">-></span> <span class="keywordsign">'</span>g <span class="constructor">React</span>.signal<br> <span class="keyword">module</span> <span class="constructor">Bool</span> :<br> <span class="keyword">sig</span><br> <span class="keyword">val</span> not : bool <span class="constructor">React</span>.signal <span class="keywordsign">-></span> bool <span class="constructor">React</span>.signal<br> @@ -287,9 +287,9 @@ <span class="keywordsign">'</span>a <span class="constructor">React</span>.<span class="constructor">S</span>.<span class="constructor">S</span>.v <span class="keywordsign">-></span><br> <span class="keywordsign">'</span>a <span class="constructor">React</span>.<span class="constructor">S</span>.<span class="constructor">S</span>.v <span class="constructor">React</span>.signal <span class="keywordsign">-></span> <span class="keywordsign">'</span>a <span class="constructor">React</span>.<span class="constructor">S</span>.<span class="constructor">S</span>.v <span class="constructor">React</span>.signal<br> <span class="keyword">val</span> dismiss :<br> - <span class="keywordsign">'</span>a <span class="constructor">React</span>.event <span class="keywordsign">-></span><br> - <span class="keywordsign">'</span>b <span class="constructor">React</span>.<span class="constructor">S</span>.<span class="constructor">S</span>.v <span class="keywordsign">-></span><br> - <span class="keywordsign">'</span>b <span class="constructor">React</span>.<span class="constructor">S</span>.<span class="constructor">S</span>.v <span class="constructor">React</span>.signal <span class="keywordsign">-></span> <span class="keywordsign">'</span>b <span class="constructor">React</span>.<span class="constructor">S</span>.<span class="constructor">S</span>.v <span class="constructor">React</span>.signal<br> + <span class="keywordsign">'</span>b <span class="constructor">React</span>.event <span class="keywordsign">-></span><br> + <span class="keywordsign">'</span>a <span class="constructor">React</span>.<span class="constructor">S</span>.<span class="constructor">S</span>.v <span class="keywordsign">-></span><br> + <span class="keywordsign">'</span>a <span class="constructor">React</span>.<span class="constructor">S</span>.<span class="constructor">S</span>.v <span class="constructor">React</span>.signal <span class="keywordsign">-></span> <span class="keywordsign">'</span>a <span class="constructor">React</span>.<span class="constructor">S</span>.<span class="constructor">S</span>.v <span class="constructor">React</span>.signal<br> <span class="keyword">val</span> accum :<br> (<span class="keywordsign">'</span>a <span class="constructor">React</span>.<span class="constructor">S</span>.<span class="constructor">S</span>.v <span class="keywordsign">-></span> <span class="keywordsign">'</span>a <span class="constructor">React</span>.<span class="constructor">S</span>.<span class="constructor">S</span>.v) <span class="constructor">React</span>.event <span class="keywordsign">-></span><br> <span class="keywordsign">'</span>a <span class="constructor">React</span>.<span class="constructor">S</span>.<span class="constructor">S</span>.v <span class="keywordsign">-></span> <span class="keywordsign">'</span>a <span class="constructor">React</span>.<span class="constructor">S</span>.<span class="constructor">S</span>.v <span class="constructor">React</span>.signal<br> @@ -350,7 +350,7 @@ <span class="keyword">val</span> fmap :<br> (<span class="keywordsign">'</span>a <span class="keywordsign">-></span> <span class="keywordsign">'</span>b v option) <span class="keywordsign">-></span> <span class="keywordsign">'</span>b v <span class="keywordsign">-></span> <span class="keywordsign">'</span>a signal <span class="keywordsign">-></span> <span class="keywordsign">'</span>b v signal<br> <span class="keyword">val</span> when_ : bool signal <span class="keywordsign">-></span> <span class="keywordsign">'</span>a v <span class="keywordsign">-></span> <span class="keywordsign">'</span>a v signal <span class="keywordsign">-></span> <span class="keywordsign">'</span>a v signal<br> - <span class="keyword">val</span> dismiss : <span class="keywordsign">'</span>a event <span class="keywordsign">-></span> <span class="keywordsign">'</span>b v <span class="keywordsign">-></span> <span class="keywordsign">'</span>b v signal <span class="keywordsign">-></span> <span class="keywordsign">'</span>b v signal<br> + <span class="keyword">val</span> dismiss : <span class="keywordsign">'</span>b event <span class="keywordsign">-></span> <span class="keywordsign">'</span>a v <span class="keywordsign">-></span> <span class="keywordsign">'</span>a v signal <span class="keywordsign">-></span> <span class="keywordsign">'</span>a v signal<br> <span class="keyword">val</span> accum : (<span class="keywordsign">'</span>a v <span class="keywordsign">-></span> <span class="keywordsign">'</span>a v) event <span class="keywordsign">-></span> <span class="keywordsign">'</span>a v <span class="keywordsign">-></span> <span class="keywordsign">'</span>a v signal<br> <span class="keyword">val</span> fold :<br> (<span class="keywordsign">'</span>a v <span class="keywordsign">-></span> <span class="keywordsign">'</span>b <span class="keywordsign">-></span> <span class="keywordsign">'</span>a v) <span class="keywordsign">-></span> <span class="keywordsign">'</span>a v <span class="keywordsign">-></span> <span class="keywordsign">'</span>b event <span class="keywordsign">-></span> <span class="keywordsign">'</span>a v signal<br> @@ -392,7 +392,7 @@ <span class="keyword">val</span> fmap :<br> (<span class="keywordsign">'</span>a <span class="keywordsign">-></span> <span class="keywordsign">'</span>b v option) <span class="keywordsign">-></span> <span class="keywordsign">'</span>b v <span class="keywordsign">-></span> <span class="keywordsign">'</span>a signal <span class="keywordsign">-></span> <span class="keywordsign">'</span>b v signal<br> <span class="keyword">val</span> when_ : bool signal <span class="keywordsign">-></span> <span class="keywordsign">'</span>a v <span class="keywordsign">-></span> <span class="keywordsign">'</span>a v signal <span class="keywordsign">-></span> <span class="keywordsign">'</span>a v signal<br> - <span class="keyword">val</span> dismiss : <span class="keywordsign">'</span>a event <span class="keywordsign">-></span> <span class="keywordsign">'</span>b v <span class="keywordsign">-></span> <span class="keywordsign">'</span>b v signal <span class="keywordsign">-></span> <span class="keywordsign">'</span>b v signal<br> + <span class="keyword">val</span> dismiss : <span class="keywordsign">'</span>b event <span class="keywordsign">-></span> <span class="keywordsign">'</span>a v <span class="keywordsign">-></span> <span class="keywordsign">'</span>a v signal <span class="keywordsign">-></span> <span class="keywordsign">'</span>a v signal<br> <span class="keyword">val</span> accum : (<span class="keywordsign">'</span>a v <span class="keywordsign">-></span> <span class="keywordsign">'</span>a v) event <span class="keywordsign">-></span> <span class="keywordsign">'</span>a v <span class="keywordsign">-></span> <span class="keywordsign">'</span>a v signal<br> <span class="keyword">val</span> fold :<br> (<span class="keywordsign">'</span>a v <span class="keywordsign">-></span> <span class="keywordsign">'</span>b <span class="keywordsign">-></span> <span class="keywordsign">'</span>a v) <span class="keywordsign">-></span> <span class="keywordsign">'</span>a v <span class="keywordsign">-></span> <span class="keywordsign">'</span>b event <span class="keywordsign">-></span> <span class="keywordsign">'</span>a v signal<br> @@ -435,7 +435,7 @@ <span class="keyword">val</span> fmap :<br> (<span class="keywordsign">'</span>a <span class="keywordsign">-></span> <span class="keywordsign">'</span>b v option) <span class="keywordsign">-></span> <span class="keywordsign">'</span>b v <span class="keywordsign">-></span> <span class="keywordsign">'</span>a signal <span class="keywordsign">-></span> <span class="keywordsign">'</span>b v signal<br> <span class="keyword">val</span> when_ : bool signal <span class="keywordsign">-></span> <span class="keywordsign">'</span>a v <span class="keywordsign">-></span> <span class="keywordsign">'</span>a v signal <span class="keywordsign">-></span> <span class="keywordsign">'</span>a v signal<br> - <span class="keyword">val</span> dismiss : <span class="keywordsign">'</span>a event <span class="keywordsign">-></span> <span class="keywordsign">'</span>b v <span class="keywordsign">-></span> <span class="keywordsign">'</span>b v signal <span class="keywordsign">-></span> <span class="keywordsign">'</span>b v signal<br> + <span class="keyword">val</span> dismiss : <span class="keywordsign">'</span>b event <span class="keywordsign">-></span> <span class="keywordsign">'</span>a v <span class="keywordsign">-></span> <span class="keywordsign">'</span>a v signal <span class="keywordsign">-></span> <span class="keywordsign">'</span>a v signal<br> <span class="keyword">val</span> accum : (<span class="keywordsign">'</span>a v <span class="keywordsign">-></span> <span class="keywordsign">'</span>a v) event <span class="keywordsign">-></span> <span class="keywordsign">'</span>a v <span class="keywordsign">-></span> <span class="keywordsign">'</span>a v signal<br> <span class="keyword">val</span> fold :<br> (<span class="keywordsign">'</span>a v <span class="keywordsign">-></span> <span class="keywordsign">'</span>b <span class="keywordsign">-></span> <span class="keywordsign">'</span>a v) <span class="keywordsign">-></span> <span class="keywordsign">'</span>a v <span class="keywordsign">-></span> <span class="keywordsign">'</span>b event <span class="keywordsign">-></span> <span class="keywordsign">'</span>a v signal<br> @@ -478,7 +478,7 @@ <span class="keyword">val</span> fmap :<br> (<span class="keywordsign">'</span>a <span class="keywordsign">-></span> <span class="keywordsign">'</span>b v option) <span class="keywordsign">-></span> <span class="keywordsign">'</span>b v <span class="keywordsign">-></span> <span class="keywordsign">'</span>a signal <span class="keywordsign">-></span> <span class="keywordsign">'</span>b v signal<br> <span class="keyword">val</span> when_ : bool signal <span class="keywordsign">-></span> <span class="keywordsign">'</span>a v <span class="keywordsign">-></span> <span class="keywordsign">'</span>a v signal <span class="keywordsign">-></span> <span class="keywordsign">'</span>a v signal<br> - <span class="keyword">val</span> dismiss : <span class="keywordsign">'</span>a event <span class="keywordsign">-></span> <span class="keywordsign">'</span>b v <span class="keywordsign">-></span> <span class="keywordsign">'</span>b v signal <span class="keywordsign">-></span> <span class="keywordsign">'</span>b v signal<br> + <span class="keyword">val</span> dismiss : <span class="keywordsign">'</span>b event <span class="keywordsign">-></span> <span class="keywordsign">'</span>a v <span class="keywordsign">-></span> <span class="keywordsign">'</span>a v signal <span class="keywordsign">-></span> <span class="keywordsign">'</span>a v signal<br> <span class="keyword">val</span> accum : (<span class="keywordsign">'</span>a v <span class="keywordsign">-></span> <span class="keywordsign">'</span>a v) event <span class="keywordsign">-></span> <span class="keywordsign">'</span>a v <span class="keywordsign">-></span> <span class="keywordsign">'</span>a v signal<br> <span class="keyword">val</span> fold :<br> (<span class="keywordsign">'</span>a v <span class="keywordsign">-></span> <span class="keywordsign">'</span>b <span class="keywordsign">-></span> <span class="keywordsign">'</span>a v) <span class="keywordsign">-></span> <span class="keywordsign">'</span>a v <span class="keywordsign">-></span> <span class="keywordsign">'</span>b event <span class="keywordsign">-></span> <span class="keywordsign">'</span>a v signal<br> diff --git a/myocamlbuild.ml b/myocamlbuild.ml index 14ca905..923cd59 100644 --- a/myocamlbuild.ml +++ b/myocamlbuild.ml @@ -1,39 +1,39 @@ (* OASIS_START *) -(* DO NOT EDIT (digest: 57de37f6bdbc2dcfe6dc0949e05cd452) *) +(* DO NOT EDIT (digest: 283ec2005876064ba21c41d9e688a027) *) module OASISGettext = struct -# 21 "/Users/dbuenzli/tmp/ocaml/oasis-0.3.0~rc2/src/oasis/OASISGettext.ml" - +# 21 "/Users/dbuenzli/.odb/install-oasis/oasis-0.3.0/src/oasis/OASISGettext.ml" + let ns_ str = str - + let s_ str = str - + let f_ (str : ('a, 'b, 'c, 'd) format4) = str - + let fn_ fmt1 fmt2 n = if n = 1 then fmt1^^"" else fmt2^^"" - + let init = [] - + end module OASISExpr = struct -# 21 "/Users/dbuenzli/tmp/ocaml/oasis-0.3.0~rc2/src/oasis/OASISExpr.ml" - - - +# 21 "/Users/dbuenzli/.odb/install-oasis/oasis-0.3.0/src/oasis/OASISExpr.ml" + + + open OASISGettext - + type test = string - + type flag = string - + type t = | EBool of bool | ENot of t @@ -42,31 +42,31 @@ module OASISExpr = struct | EFlag of flag | ETest of test * string - + type 'a choices = (t * 'a) list - + let eval var_get t = let rec eval' = function | EBool b -> b - + | ENot e -> not (eval' e) - + | EAnd (e1, e2) -> (eval' e1) && (eval' e2) - + | EOr (e1, e2) -> (eval' e1) || (eval' e2) - + | EFlag nm -> let v = var_get nm in assert(v = "true" || v = "false"); (v = "true") - + | ETest (nm, vl) -> let v = var_get nm @@ -74,7 +74,7 @@ module OASISExpr = struct (v = vl) in eval' t - + let choose ?printer ?name var_get lst = let rec choose_aux = function @@ -110,22 +110,23 @@ module OASISExpr = struct str_lst) in choose_aux (List.rev lst) - + end +# 117 "myocamlbuild.ml" module BaseEnvLight = struct -# 21 "/Users/dbuenzli/tmp/ocaml/oasis-0.3.0~rc2/src/base/BaseEnvLight.ml" - +# 21 "/Users/dbuenzli/.odb/install-oasis/oasis-0.3.0/src/base/BaseEnvLight.ml" + module MapString = Map.Make(String) - + type t = string MapString.t - + let default_filename = Filename.concat (Sys.getcwd ()) "setup.data" - + let load ?(allow_empty=false) ?(filename=default_filename) () = if Sys.file_exists filename then begin @@ -182,7 +183,7 @@ module BaseEnvLight = struct "Unable to load environment, the file '%s' doesn't exist." filename) end - + let var_get name env = let rec var_expand str = let buff = @@ -203,7 +204,7 @@ module BaseEnvLight = struct Buffer.contents buff in var_expand (MapString.find name env) - + let var_choose lst env = OASISExpr.choose (fun nm -> var_get nm env) @@ -211,9 +212,10 @@ module BaseEnvLight = struct end +# 215 "myocamlbuild.ml" module MyOCamlbuildFindlib = struct -# 21 "/Users/dbuenzli/tmp/ocaml/oasis-0.3.0~rc2/src/plugins/ocamlbuild/MyOCamlbuildFindlib.ml" - +# 21 "/Users/dbuenzli/.odb/install-oasis/oasis-0.3.0/src/plugins/ocamlbuild/MyOCamlbuildFindlib.ml" + (** OCamlbuild extension, copied from * http://brion.inria.fr/gallium/index.php/Using_ocamlfind_with_ocamlbuild * by N. Pouillard and others @@ -223,14 +225,14 @@ module MyOCamlbuildFindlib = struct * Modified by Sylvain Le Gall *) open Ocamlbuild_plugin - + (* these functions are not really officially exported *) let run_and_read = Ocamlbuild_pack.My_unix.run_and_read - + let blank_sep_strings = Ocamlbuild_pack.Lexers.blank_sep_strings - + let split s ch = let x = ref [] @@ -245,24 +247,24 @@ module MyOCamlbuildFindlib = struct try go s with Not_found -> !x - + let split_nl s = split s '\n' - + let before_space s = try String.before s (String.index s ' ') with Not_found -> s - + (* this lists all supported packages *) let find_packages () = List.map before_space (split_nl & run_and_read "ocamlfind list") - + (* this is supposed to list available syntaxes, but I don't know how to do it. *) let find_syntaxes () = ["camlp4o"; "camlp4r"] - + (* ocamlfind command *) let ocamlfind x = S[A"ocamlfind"; x] - + let dispatch = function | Before_options -> @@ -292,7 +294,7 @@ module MyOCamlbuildFindlib = struct flag ["ocaml"; "infer_interface"; "pkg_"^pkg] & S[A"-package"; A pkg]; end (find_packages ()); - + (* Like -package but for extensions syntax. Morover -syntax is useless * when linking. *) List.iter begin fun syntax -> @@ -301,7 +303,7 @@ module MyOCamlbuildFindlib = struct flag ["ocaml"; "doc"; "syntax_"^syntax] & S[A"-syntax"; A syntax]; flag ["ocaml"; "infer_interface"; "syntax_"^syntax] & S[A"-syntax"; A syntax]; end (find_syntaxes ()); - + (* The default "thread" tag is not compatible with ocamlfind. * Indeed, the default rules add the "threads.cma" or "threads.cmxa" * options when using this tag. When using the "-linkpkg" option with @@ -314,47 +316,58 @@ module MyOCamlbuildFindlib = struct flag ["ocaml"; "pkg_threads"; "doc"] (S[A "-I"; A "+threads"]); flag ["ocaml"; "pkg_threads"; "link"] (S[A "-thread"]); flag ["ocaml"; "pkg_threads"; "infer_interface"] (S[A "-thread"]) - + | _ -> () - + end module MyOCamlbuildBase = struct -# 21 "/Users/dbuenzli/tmp/ocaml/oasis-0.3.0~rc2/src/plugins/ocamlbuild/MyOCamlbuildBase.ml" - +# 21 "/Users/dbuenzli/.odb/install-oasis/oasis-0.3.0/src/plugins/ocamlbuild/MyOCamlbuildBase.ml" + (** Base functions for writing myocamlbuild.ml @author Sylvain Le Gall *) - - - + + + open Ocamlbuild_plugin - + module OC = Ocamlbuild_pack.Ocaml_compiler + type dir = string type file = string type name = string type tag = string - -# 55 "/Users/dbuenzli/tmp/ocaml/oasis-0.3.0~rc2/src/plugins/ocamlbuild/MyOCamlbuildBase.ml" - + +# 56 "/Users/dbuenzli/.odb/install-oasis/oasis-0.3.0/src/plugins/ocamlbuild/MyOCamlbuildBase.ml" + type t = { lib_ocaml: (name * dir list) list; lib_c: (name * dir * file list) list; flags: (tag list * (spec OASISExpr.choices)) list; + (* Replace the 'dir: include' from _tags by a precise interdepends in + * directory. + *) + includes: (dir * dir list) list; } - + let env_filename = Pathname.basename BaseEnvLight.default_filename - + let dispatch_combine lst = fun e -> List.iter (fun dispatch -> dispatch e) lst - + + let tag_libstubs nm = + "use_lib"^nm^"_stubs" + + let nm_libstubs nm = + nm^"_stubs" + let dispatch t e = let env = BaseEnvLight.load @@ -381,56 +394,64 @@ module MyOCamlbuildBase = struct Options.ext_lib, "ext_lib"; Options.ext_dll, "ext_dll"; ] - + | After_rules -> (* Declare OCaml libraries *) List.iter (function - | lib, [] -> - ocaml_lib lib; - | lib, dir :: tl -> - ocaml_lib ~dir:dir lib; + | nm, [] -> + ocaml_lib nm + | nm, dir :: tl -> + ocaml_lib ~dir:dir (dir^"/"^nm); List.iter (fun dir -> - flag - ["ocaml"; "use_"^lib; "compile"] - (S[A"-I"; P dir])) + List.iter + (fun str -> + flag ["ocaml"; "use_"^nm; str] (S[A"-I"; P dir])) + ["compile"; "infer_interface"; "doc"]) tl) t.lib_ocaml; - + + (* Declare directories dependencies, replace "include" in _tags. *) + List.iter + (fun (dir, include_dirs) -> + Pathname.define_context dir include_dirs) + t.includes; + (* Declare C libraries *) List.iter (fun (lib, dir, headers) -> (* Handle C part of library *) - flag ["link"; "library"; "ocaml"; "byte"; "use_lib"^lib] - (S[A"-dllib"; A("-l"^lib); A"-cclib"; A("-l"^lib)]); - - flag ["link"; "library"; "ocaml"; "native"; "use_lib"^lib] - (S[A"-cclib"; A("-l"^lib)]); + flag ["link"; "library"; "ocaml"; "byte"; tag_libstubs lib] + (S[A"-dllib"; A("-l"^(nm_libstubs lib)); A"-cclib"; + A("-l"^(nm_libstubs lib))]); + + flag ["link"; "library"; "ocaml"; "native"; tag_libstubs lib] + (S[A"-cclib"; A("-l"^(nm_libstubs lib))]); - flag ["link"; "program"; "ocaml"; "byte"; "use_lib"^lib] - (S[A"-dllib"; A("dll"^lib)]); - + flag ["link"; "program"; "ocaml"; "byte"; tag_libstubs lib] + (S[A"-dllib"; A("dll"^(nm_libstubs lib))]); + (* When ocaml link something that use the C library, then one need that file to be up to date. *) - dep ["link"; "ocaml"; "program"; "use_lib"^lib] - [dir/"lib"^lib^"."^(!Options.ext_lib)]; - - dep ["compile"; "ocaml"; "program"; "use_lib"^lib] - [dir/"lib"^lib^"."^(!Options.ext_lib)]; - + dep ["link"; "ocaml"; "program"; tag_libstubs lib] + [dir/"lib"^(nm_libstubs lib)^"."^(!Options.ext_lib)]; + + dep ["compile"; "ocaml"; "program"; tag_libstubs lib] + [dir/"lib"^(nm_libstubs lib)^"."^(!Options.ext_lib)]; + (* TODO: be more specific about what depends on headers *) (* Depends on .h files *) dep ["compile"; "c"] headers; - + (* Setup search path for lib *) flag ["link"; "ocaml"; "use_"^lib] (S[A"-I"; P(dir)]); ) t.lib_c; - + (* Add flags *) List.iter (fun (tags, cond_specs) -> @@ -441,28 +462,30 @@ module MyOCamlbuildBase = struct t.flags | _ -> () - + let dispatch_default t = dispatch_combine [ dispatch t; MyOCamlbuildFindlib.dispatch; ] - + end +# 476 "myocamlbuild.ml" open Ocamlbuild_plugin;; let package_default = { - MyOCamlbuildBase.lib_ocaml = [("src/react", ["src"])]; + MyOCamlbuildBase.lib_ocaml = [("react", ["src"])]; lib_c = []; flags = []; + includes = [("test", ["src"])]; } ;; let dispatch_default = MyOCamlbuildBase.dispatch_default package_default;; -# 467 "myocamlbuild.ml" +# 490 "myocamlbuild.ml" (* OASIS_STOP *) Ocamlbuild_plugin.dispatch dispatch_default;; @@ -1,55 +1,56 @@ -(* setup.ml generated for the first time by OASIS v0.3.0~rc2 *) +(* setup.ml generated for the first time by OASIS v0.3.0 *) (* OASIS_START *) -(* DO NOT EDIT (digest: c0f73af3f29a5a9c4570b553c653ef5e) *) +(* DO NOT EDIT (digest: 80aa4c9fa91e67754a0644227176230f) *) (* - Regenerated by OASIS v0.3.0~rc2 + Regenerated by OASIS v0.3.0 Visit http://oasis.forge.ocamlcore.org for more information and documentation about functions used in this file. *) module OASISGettext = struct -# 21 "/Users/dbuenzli/tmp/ocaml/oasis-0.3.0~rc2/src/oasis/OASISGettext.ml" - +# 21 "/Users/dbuenzli/.odb/install-oasis/oasis-0.3.0/src/oasis/OASISGettext.ml" + let ns_ str = str - + let s_ str = str - + let f_ (str : ('a, 'b, 'c, 'd) format4) = str - + let fn_ fmt1 fmt2 n = if n = 1 then fmt1^^"" else fmt2^^"" - + let init = [] - + end module OASISContext = struct -# 21 "/Users/dbuenzli/tmp/ocaml/oasis-0.3.0~rc2/src/oasis/OASISContext.ml" - +# 21 "/Users/dbuenzli/.odb/install-oasis/oasis-0.3.0/src/oasis/OASISContext.ml" + open OASISGettext - + type level = [ `Debug | `Info | `Warning | `Error] - + type t = { - verbose: bool; + quiet: bool; + info: bool; debug: bool; ignore_plugins: bool; ignore_unknown_fields: bool; printf: level -> string -> unit; } - + let printf lvl str = let beg = match lvl with @@ -59,117 +60,203 @@ module OASISContext = struct | `Debug -> s_ "D: " in prerr_endline (beg^str) - + let default = ref { - verbose = true; + quiet = false; + info = false; debug = false; ignore_plugins = false; ignore_unknown_fields = false; printf = printf; } - + let quiet = - {!default with - verbose = false; - debug = false; - } - - + {!default with quiet = true} + + let args () = ["-quiet", - Arg.Unit (fun () -> default := {!default with verbose = false}), + Arg.Unit (fun () -> default := {!default with quiet = true}), (s_ " Run quietly"); - + + "-info", + Arg.Unit (fun () -> default := {!default with info = true}), + (s_ " Display information message"); + + "-debug", Arg.Unit (fun () -> default := {!default with debug = true}), (s_ " Output debug message")] end +module OASISString = struct +# 1 "/Users/dbuenzli/.odb/install-oasis/oasis-0.3.0/src/oasis/OASISString.ml" + + + + (** Various string utilities. + + Mostly inspired by extlib and batteries ExtString and BatString libraries. + + @author Sylvain Le Gall + *) + + let nsplitf str f = + if str = "" then + [] + else + let buf = Buffer.create 13 in + let lst = ref [] in + let push () = + lst := Buffer.contents buf :: !lst; + Buffer.clear buf + in + let str_len = String.length str in + for i = 0 to str_len - 1 do + if f str.[i] then + push () + else + Buffer.add_char buf str.[i] + done; + push (); + List.rev !lst + + (** [nsplit c s] Split the string [s] at char [c]. It doesn't include the + separator. + *) + let nsplit str c = + nsplitf str ((=) c) + + let find ~what ?(offset=0) str = + let what_idx = ref 0 in + let str_idx = ref offset in + while !str_idx < String.length str && + !what_idx < String.length what do + if str.[!str_idx] = what.[!what_idx] then + incr what_idx + else + what_idx := 0; + incr str_idx + done; + if !what_idx <> String.length what then + raise Not_found + else + !str_idx - !what_idx + + let sub_start str len = + let str_len = String.length str in + if len >= str_len then + "" + else + String.sub str len (str_len - len) + + let sub_end ?(offset=0) str len = + let str_len = String.length str in + if len >= str_len then + "" + else + String.sub str 0 (str_len - len) + + let starts_with ~what ?(offset=0) str = + let what_idx = ref 0 in + let str_idx = ref offset in + let ok = ref true in + while !ok && + !str_idx < String.length str && + !what_idx < String.length what do + if str.[!str_idx] = what.[!what_idx] then + incr what_idx + else + ok := false; + incr str_idx + done; + if !what_idx = String.length what then + true + else + false + + let strip_starts_with ~what str = + if starts_with ~what str then + sub_start str (String.length what) + else + raise Not_found + + let ends_with ~what ?(offset=0) str = + let what_idx = ref ((String.length what) - 1) in + let str_idx = ref ((String.length str) - 1) in + let ok = ref true in + while !ok && + offset <= !str_idx && + 0 <= !what_idx do + if str.[!str_idx] = what.[!what_idx] then + decr what_idx + else + ok := false; + decr str_idx + done; + if !what_idx = -1 then + true + else + false + + let strip_ends_with ~what str = + if ends_with ~what str then + sub_end str (String.length what) + else + raise Not_found + + let replace_chars f s = + let buf = String.make (String.length s) 'X' in + for i = 0 to String.length s - 1 do + buf.[i] <- f s.[i] + done; + buf + +end + module OASISUtils = struct -# 21 "/Users/dbuenzli/tmp/ocaml/oasis-0.3.0~rc2/src/oasis/OASISUtils.ml" - +# 21 "/Users/dbuenzli/.odb/install-oasis/oasis-0.3.0/src/oasis/OASISUtils.ml" + open OASISGettext - + module MapString = Map.Make(String) - + let map_string_of_assoc assoc = List.fold_left (fun acc (k, v) -> MapString.add k v acc) MapString.empty assoc - + module SetString = Set.Make(String) - + let set_string_add_list st lst = List.fold_left (fun acc e -> SetString.add e acc) st lst - + let set_string_of_list = set_string_add_list SetString.empty - - + + let compare_csl s1 s2 = String.compare (String.lowercase s1) (String.lowercase s2) - + module HashStringCsl = Hashtbl.Make (struct type t = string - + let equal s1 s2 = (String.lowercase s1) = (String.lowercase s2) - + let hash s = Hashtbl.hash (String.lowercase s) end) - - let split sep str = - let str_len = - String.length str - in - let rec split_aux acc pos = - if pos < str_len then - ( - let pos_sep = - try - String.index_from str pos sep - with Not_found -> - str_len - in - let part = - String.sub str pos (pos_sep - pos) - in - let acc = - part :: acc - in - if pos_sep >= str_len then - ( - (* Nothing more in the string *) - List.rev acc - ) - else if pos_sep = (str_len - 1) then - ( - (* String end with a separator *) - List.rev ("" :: acc) - ) - else - ( - split_aux acc (pos_sep + 1) - ) - ) - else - ( - List.rev acc - ) - in - split_aux [] 0 - - + let varname_of_string ?(hyphen='_') s = if String.length s = 0 then begin @@ -177,68 +264,64 @@ module OASISUtils = struct end else begin - let buff = - Buffer.create (String.length s) - in - (* Start with a _ if digit *) - if '0' <= s.[0] && s.[0] <= '9' then - Buffer.add_char buff hyphen; - - String.iter + let buf = + OASISString.replace_chars (fun c -> if ('a' <= c && c <= 'z') || ('A' <= c && c <= 'Z') || ('0' <= c && c <= '9') then - Buffer.add_char buff c + c else - Buffer.add_char buff hyphen) + hyphen) s; - - String.lowercase (Buffer.contents buff) + in + let buf = + (* Start with a _ if digit *) + if '0' <= s.[0] && s.[0] <= '9' then + "_"^buf + else + buf + in + String.lowercase buf end - + let varname_concat ?(hyphen='_') p s = + let what = String.make 1 hyphen in let p = - let p_len = - String.length p - in - if p_len > 0 && p.[p_len - 1] = hyphen then - String.sub p 0 (p_len - 1) - else - p + try + OASISString.strip_ends_with ~what p + with Not_found -> + p in let s = - let s_len = - String.length s - in - if s_len > 0 && s.[0] = hyphen then - String.sub s 1 (s_len - 1) - else - s + try + OASISString.strip_starts_with ~what s + with Not_found -> + s in - Printf.sprintf "%s%c%s" p hyphen s - - + p^what^s + + let is_varname str = str = varname_of_string str - + let failwithf fmt = Printf.ksprintf failwith fmt - + end module PropList = struct -# 21 "/Users/dbuenzli/tmp/ocaml/oasis-0.3.0~rc2/src/oasis/PropList.ml" - +# 21 "/Users/dbuenzli/.odb/install-oasis/oasis-0.3.0/src/oasis/PropList.ml" + open OASISGettext - + type name = string - + exception Not_set of name * string option exception No_printer of name exception Unknown_field of name * name - + let () = Printexc.register_printer (function @@ -256,25 +339,25 @@ module PropList = struct (Printf.sprintf (f_ "Field %s is not defined in schema %s") nm schm) | _ -> None) - + module Data = struct - + type t = (name, unit -> unit) Hashtbl.t - + let create () = Hashtbl.create 13 - + let clear t = Hashtbl.clear t - -# 71 "/Users/dbuenzli/tmp/ocaml/oasis-0.3.0~rc2/src/oasis/PropList.ml" + +# 71 "/Users/dbuenzli/.odb/install-oasis/oasis-0.3.0/src/oasis/PropList.ml" end - + module Schema = struct - + type ('ctxt, 'extra) value = { get: Data.t -> string; @@ -282,7 +365,7 @@ module PropList = struct help: (unit -> string) option; extra: 'extra; } - + type ('ctxt, 'extra) t = { name: name; @@ -290,7 +373,7 @@ module PropList = struct order: name Queue.t; name_norm: string -> string; } - + let create ?(case_insensitive=false) nm = { name = nm; @@ -302,12 +385,12 @@ module PropList = struct else fun s -> s); } - + let add t nm set get extra help = let key = t.name_norm nm in - + if Hashtbl.mem t.fields key then failwith (Printf.sprintf @@ -323,25 +406,25 @@ module PropList = struct extra = extra; }; Queue.add nm t.order - + let mem t nm = Hashtbl.mem t.fields nm - + let find t nm = try Hashtbl.find t.fields (t.name_norm nm) with Not_found -> raise (Unknown_field (nm, t.name)) - + let get t data nm = (find t nm).get data - + let set t data nm ?context x = (find t nm).set data ?context x - + let fold f acc t = Queue.fold (fun acc k -> @@ -351,20 +434,20 @@ module PropList = struct f acc k v.extra v.help) acc t.order - + let iter f t = fold (fun () -> f) () t - + let name t = t.name end - + module Field = struct - + type ('ctxt, 'value, 'extra) t = { set: Data.t -> ?context:'ctxt -> 'value -> unit; @@ -374,33 +457,33 @@ module PropList = struct help: (unit -> string) option; extra: 'extra; } - + let new_id = let last_id = ref 0 in fun () -> incr last_id; !last_id - + let create ?schema ?name ?parse ?print ?default ?update ?help extra = (* Default value container *) let v = ref None in - + (* If name is not given, create unique one *) let nm = match name with | Some s -> s | None -> Printf.sprintf "_anon_%d" (new_id ()) in - + (* Last chance to get a value: the default *) let default () = match default with | Some d -> d | None -> raise (Not_set (nm, Some (s_ "no default value"))) in - + (* Get data *) let get data = (* Get value *) @@ -412,7 +495,7 @@ module PropList = struct with Not_found -> default () in - + (* Set data *) let set data ?context x = let x = @@ -432,7 +515,7 @@ module PropList = struct nm (fun () -> v := Some x) in - + (* Parse string value, if possible *) let parse = match parse with @@ -446,12 +529,12 @@ module PropList = struct nm s) in - + (* Set data, from string *) let sets data ?context s = set ?context data (parse ?context s) in - + (* Output value as string, if possible *) let print = match print with @@ -460,12 +543,12 @@ module PropList = struct | None -> fun _ -> raise (No_printer nm) in - + (* Get data, as a string *) let gets data = print (get data) in - + begin match schema with | Some t -> @@ -473,7 +556,7 @@ module PropList = struct | None -> () end; - + { set = set; get = get; @@ -482,45 +565,49 @@ module PropList = struct help = help; extra = extra; } - + let fset data t ?context x = t.set data ?context x - + let fget data t = t.get data - + let fsets data t ?context s = t.sets data ?context s - + let fgets data t = t.gets data - + end - + module FieldRO = struct - + let create ?schema ?name ?parse ?print ?default ?update ?help extra = let fld = Field.create ?schema ?name ?parse ?print ?default ?update ?help extra in fun data -> Field.fget data fld - + end end module OASISMessage = struct -# 21 "/Users/dbuenzli/tmp/ocaml/oasis-0.3.0~rc2/src/oasis/OASISMessage.ml" - - +# 21 "/Users/dbuenzli/.odb/install-oasis/oasis-0.3.0/src/oasis/OASISMessage.ml" + + open OASISGettext open OASISContext - + let generic_message ~ctxt lvl fmt = let cond = - match lvl with - | `Debug -> ctxt.debug - | _ -> ctxt.verbose + if ctxt.quiet then + false + else + match lvl with + | `Debug -> ctxt.debug + | `Info -> ctxt.info + | _ -> true in Printf.ksprintf (fun str -> @@ -529,32 +616,32 @@ module OASISMessage = struct ctxt.printf lvl str end) fmt - + let debug ~ctxt fmt = generic_message ~ctxt `Debug fmt - + let info ~ctxt fmt = generic_message ~ctxt `Info fmt - + let warning ~ctxt fmt = generic_message ~ctxt `Warning fmt - + let error ~ctxt fmt = generic_message ~ctxt `Error fmt - + end module OASISVersion = struct -# 21 "/Users/dbuenzli/tmp/ocaml/oasis-0.3.0~rc2/src/oasis/OASISVersion.ml" - +# 21 "/Users/dbuenzli/.odb/install-oasis/oasis-0.3.0/src/oasis/OASISVersion.ml" + open OASISGettext - - - + + + type s = string - + type t = string - + type comparator = | VGreater of t | VGreaterEqual of t @@ -564,19 +651,19 @@ module OASISVersion = struct | VOr of comparator * comparator | VAnd of comparator * comparator - + (* Range of allowed characters *) let is_digit c = '0' <= c && c <= '9' - + let is_alpha c = ('a' <= c && c <= 'z') || ('A' <= c && c <= 'Z') - + let is_special = function | '.' | '+' | '-' | '~' -> true | _ -> false - + let rec version_compare v1 v2 = if v1 <> "" || v2 <> "" then begin @@ -590,12 +677,12 @@ module OASISVersion = struct else if is_alpha c then Char.code c else (Char.code c) + 256 in - + let len1 = String.length v1 in let len2 = String.length v2 in - + let p = ref 0 in - + (** Compare ascii part *) let compare_vascii () = let cmp = ref 0 in @@ -612,7 +699,7 @@ module OASISVersion = struct else !cmp in - + (** Compare digit part *) let compare_digit () = let extract_int v p = @@ -634,7 +721,7 @@ module OASISVersion = struct let i2, tl2 = extract_int v2 (ref !p) in i1 - i2, tl1, tl2 in - + match compare_vascii () with | 0 -> begin @@ -656,24 +743,12 @@ module OASISVersion = struct begin 0 end - - - let version_of_string str = - String.iter - (fun c -> - if is_alpha c || is_digit c || is_special c then - () - else - failwith - (Printf.sprintf - (f_ "Char %C is not allowed in version '%s'") - c str)) - str; - str - - let string_of_version t = - t - + + + let version_of_string str = str + + let string_of_version t = t + let chop t = try let pos = @@ -682,7 +757,7 @@ module OASISVersion = struct String.sub t 0 pos with Not_found -> t - + let rec comparator_apply v op = match op with | VGreater cv -> @@ -699,7 +774,7 @@ module OASISVersion = struct (comparator_apply v op1) || (comparator_apply v op2) | VAnd (op1, op2) -> (comparator_apply v op1) && (comparator_apply v op2) - + let rec string_of_comparator = function | VGreater v -> "> "^(string_of_version v) @@ -711,7 +786,7 @@ module OASISVersion = struct (string_of_comparator c1)^" || "^(string_of_comparator c2) | VAnd (c1, c2) -> (string_of_comparator c1)^" && "^(string_of_comparator c2) - + let rec varname_of_comparator = let concat p v = OASISUtils.varname_concat @@ -729,53 +804,63 @@ module OASISVersion = struct (varname_of_comparator c1)^"_or_"^(varname_of_comparator c2) | VAnd (c1, c2) -> (varname_of_comparator c1)^"_and_"^(varname_of_comparator c2) - + + let version_0_3_or_after t = + comparator_apply t (VGreaterEqual (string_of_version "0.3")) + end module OASISLicense = struct -# 21 "/Users/dbuenzli/tmp/ocaml/oasis-0.3.0~rc2/src/oasis/OASISLicense.ml" - +# 21 "/Users/dbuenzli/.odb/install-oasis/oasis-0.3.0/src/oasis/OASISLicense.ml" + (** License for _oasis fields @author Sylvain Le Gall *) - - - + + + type license = string - + type license_exception = string - + type license_version = | Version of OASISVersion.t | VersionOrLater of OASISVersion.t | NoVersion - + + type license_dep_5_unit = + { + license: license; + excption: license_exception option; + version: license_version; + } + + type license_dep_5 = - { - license: license; - exceptions: license_exception list; - version: license_version; - } - + | DEP5Unit of license_dep_5_unit + | DEP5Or of license_dep_5 list + | DEP5And of license_dep_5 list + + type t = | DEP5License of license_dep_5 | OtherLicense of string (* URL *) - + end module OASISExpr = struct -# 21 "/Users/dbuenzli/tmp/ocaml/oasis-0.3.0~rc2/src/oasis/OASISExpr.ml" - - - +# 21 "/Users/dbuenzli/.odb/install-oasis/oasis-0.3.0/src/oasis/OASISExpr.ml" + + + open OASISGettext - + type test = string - + type flag = string - + type t = | EBool of bool | ENot of t @@ -784,31 +869,31 @@ module OASISExpr = struct | EFlag of flag | ETest of test * string - + type 'a choices = (t * 'a) list - + let eval var_get t = let rec eval' = function | EBool b -> b - + | ENot e -> not (eval' e) - + | EAnd (e1, e2) -> (eval' e1) && (eval' e2) - + | EOr (e1, e2) -> (eval' e1) || (eval' e2) - + | EFlag nm -> let v = var_get nm in assert(v = "true" || v = "false"); (v = "true") - + | ETest (nm, vl) -> let v = var_get nm @@ -816,7 +901,7 @@ module OASISExpr = struct (v = vl) in eval' t - + let choose ?printer ?name var_get lst = let rec choose_aux = function @@ -852,15 +937,15 @@ module OASISExpr = struct str_lst) in choose_aux (List.rev lst) - + end module OASISTypes = struct -# 21 "/Users/dbuenzli/tmp/ocaml/oasis-0.3.0~rc2/src/oasis/OASISTypes.ml" - - - - +# 21 "/Users/dbuenzli/.odb/install-oasis/oasis-0.3.0/src/oasis/OASISTypes.ml" + + + + type name = string type package_name = string type url = string @@ -872,26 +957,26 @@ module OASISTypes = struct type arg = string type args = string list type command_line = (prog * arg list) - + type findlib_name = string type findlib_full = string - + type compiled_object = | Byte | Native | Best - + type dependency = | FindlibPackage of findlib_full * OASISVersion.comparator option | InternalLibrary of name - + type tool = | ExternalTool of name | InternalExecutable of name - + type vcs = | Darcs | Git @@ -903,7 +988,7 @@ module OASISTypes = struct | Monotone | OtherVCS of url - + type plugin_kind = [ `Configure | `Build @@ -912,7 +997,7 @@ module OASISTypes = struct | `Install | `Extra ] - + type plugin_data_purpose = [ `Configure | `Build @@ -926,24 +1011,24 @@ module OASISTypes = struct | `Extra | `Other of string ] - + type 'a plugin = 'a * name * OASISVersion.t option - + type all_plugin = plugin_kind plugin - + type plugin_data = (all_plugin * plugin_data_purpose * (unit -> unit)) list - -# 102 "/Users/dbuenzli/tmp/ocaml/oasis-0.3.0~rc2/src/oasis/OASISTypes.ml" - + +# 102 "/Users/dbuenzli/.odb/install-oasis/oasis-0.3.0/src/oasis/OASISTypes.ml" + type 'a conditional = 'a OASISExpr.choices - + type custom = { pre_command: (command_line option) conditional; post_command: (command_line option) conditional; } - + type common_section = { cs_name: name; @@ -951,7 +1036,7 @@ module OASISTypes = struct cs_plugin_data: plugin_data; } - + type build_section = { bs_build: bool conditional; @@ -970,7 +1055,7 @@ module OASISTypes = struct bs_nativeopt: args conditional; } - + type library = { lib_modules: string list; @@ -980,19 +1065,19 @@ module OASISTypes = struct lib_findlib_name: findlib_name option; lib_findlib_containers: findlib_name list; } - + type executable = { exec_custom: bool; exec_main_is: unix_filename; } - + type flag = { flag_description: string option; flag_default: bool conditional; } - + type source_repository = { src_repo_type: vcs; @@ -1003,7 +1088,7 @@ module OASISTypes = struct src_repo_tag: string option; src_repo_subdir: unix_filename option; } - + type test = { test_type: [`Test] plugin; @@ -1013,7 +1098,7 @@ module OASISTypes = struct test_run: bool conditional; test_tools: tool list; } - + type doc_format = | HTML of unix_filename | DocText @@ -1023,7 +1108,7 @@ module OASISTypes = struct | DVI | OtherDoc - + type doc = { doc_type: [`Doc] plugin; @@ -1038,7 +1123,7 @@ module OASISTypes = struct doc_data_files: (unix_filename * unix_filename option) list; doc_build_tools: tool list; } - + type section = | Library of common_section * build_section * library | Executable of common_section * build_section * executable @@ -1047,10 +1132,10 @@ module OASISTypes = struct | Test of common_section * test | Doc of common_section * doc - + type section_kind = [ `Library | `Executable | `Flag | `SrcRepo | `Test | `Doc ] - + type package = { oasis_version: OASISVersion.t; @@ -1067,50 +1152,54 @@ module OASISTypes = struct synopsis: string; description: string option; categories: url list; - + conf_type: [`Configure] plugin; conf_custom: custom; - + build_type: [`Build] plugin; build_custom: custom; - + install_type: [`Install] plugin; install_custom: custom; uninstall_custom: custom; - + clean_custom: custom; distclean_custom: custom; - + files_ab: unix_filename list; sections: section list; plugins: [`Extra] plugin list; schema_data: PropList.Data.t; plugin_data: plugin_data; } - + end module OASISUnixPath = struct -# 21 "/Users/dbuenzli/tmp/ocaml/oasis-0.3.0~rc2/src/oasis/OASISUnixPath.ml" - +# 21 "/Users/dbuenzli/.odb/install-oasis/oasis-0.3.0/src/oasis/OASISUnixPath.ml" + type unix_filename = string type unix_dirname = string - + type host_filename = string type host_dirname = string - + let current_dir_name = "." - + let parent_dir_name = ".." - + + let is_current_dir fn = + fn = current_dir_name || fn = "" + let concat f1 f2 = - if f1 = current_dir_name then + if is_current_dir f1 then f2 - else if f2 = current_dir_name then - f1 else - f1^"/"^f2 - + let f1' = + try OASISString.strip_ends_with ~what:"/" f1 with Not_found -> f1 + in + f1'^"/"^f2 + let make = function | hd :: tl -> @@ -1120,13 +1209,13 @@ module OASISUnixPath = struct tl | [] -> invalid_arg "OASISUnixPath.make" - + let dirname f = try String.sub f 0 (String.rindex f '/') with Not_found -> current_dir_name - + let basename f = try let pos_start = @@ -1135,7 +1224,7 @@ module OASISUnixPath = struct String.sub f pos_start ((String.length f) - pos_start) with Not_found -> f - + let chop_extension f = try let last_dot = @@ -1154,26 +1243,60 @@ module OASISUnixPath = struct f with Not_found -> sub - + with Not_found -> f - + let capitalize_file f = let dir = dirname f in let base = basename f in concat dir (String.capitalize base) - + let uncapitalize_file f = let dir = dirname f in let base = basename f in concat dir (String.uncapitalize base) + +end + +module OASISHostPath = struct +# 21 "/Users/dbuenzli/.odb/install-oasis/oasis-0.3.0/src/oasis/OASISHostPath.ml" + + + open Filename + + module Unix = OASISUnixPath + + let make = + function + | [] -> + invalid_arg "OASISHostPath.make" + | hd :: tl -> + List.fold_left Filename.concat hd tl + + let of_unix ufn = + if Sys.os_type = "Unix" then + ufn + else + make + (List.map + (fun p -> + if p = Unix.current_dir_name then + current_dir_name + else if p = Unix.parent_dir_name then + parent_dir_name + else + p) + (OASISString.nsplit ufn '/')) + + end module OASISSection = struct -# 21 "/Users/dbuenzli/tmp/ocaml/oasis-0.3.0~rc2/src/oasis/OASISSection.ml" - +# 21 "/Users/dbuenzli/.odb/install-oasis/oasis-0.3.0/src/oasis/OASISSection.ml" + open OASISTypes - + let section_kind_common = function | Library (cs, _, _) -> @@ -1188,10 +1311,10 @@ module OASISSection = struct `Test, cs | Doc (cs, _) -> `Doc, cs - + let section_common sct = snd (section_kind_common sct) - + let section_common_set cs = function | Library (_, bs, lib) -> Library (cs, bs, lib) @@ -1200,7 +1323,7 @@ module OASISSection = struct | SrcRepo (_, src_repo) -> SrcRepo (cs, src_repo) | Test (_, tst) -> Test (cs, tst) | Doc (_, doc) -> Doc (cs, doc) - + (** Key used to identify section *) let section_id sct = @@ -1208,7 +1331,7 @@ module OASISSection = struct section_kind_common sct in k, cs.cs_name - + let string_of_section sct = let k, nm = section_id sct @@ -1221,19 +1344,43 @@ module OASISSection = struct | `Test -> "test" | `Doc -> "doc") ^" "^nm - + + let section_find id scts = + List.find + (fun sct -> id = section_id sct) + scts + + module CSection = + struct + type t = section + + let id = section_id + + let compare t1 t2 = + compare (id t1) (id t2) + + let equal t1 t2 = + (id t1) = (id t2) + + let hash t = + Hashtbl.hash (id t) + end + + module MapSection = Map.Make(CSection) + module SetSection = Set.Make(CSection) + end module OASISBuildSection = struct -# 21 "/Users/dbuenzli/tmp/ocaml/oasis-0.3.0~rc2/src/oasis/OASISBuildSection.ml" - +# 21 "/Users/dbuenzli/.odb/install-oasis/oasis-0.3.0/src/oasis/OASISBuildSection.ml" + end module OASISExecutable = struct -# 21 "/Users/dbuenzli/tmp/ocaml/oasis-0.3.0~rc2/src/oasis/OASISExecutable.ml" - +# 21 "/Users/dbuenzli/.odb/install-oasis/oasis-0.3.0/src/oasis/OASISExecutable.ml" + open OASISTypes - + let unix_exec_is (cs, bs, exec) is_native ext_dll suffix_program = let dir = OASISUnixPath.concat @@ -1246,29 +1393,43 @@ module OASISExecutable = struct | Best -> is_native () | Byte -> false in - + OASISUnixPath.concat dir (cs.cs_name^(suffix_program ())), - + if not is_native_exec && not exec.exec_custom && bs.bs_c_sources <> [] then - Some (dir^"/dll"^cs.cs_name^(ext_dll ())) + Some (dir^"/dll"^cs.cs_name^"_stubs"^(ext_dll ())) else None - + end module OASISLibrary = struct -# 21 "/Users/dbuenzli/tmp/ocaml/oasis-0.3.0~rc2/src/oasis/OASISLibrary.ml" - +# 21 "/Users/dbuenzli/.odb/install-oasis/oasis-0.3.0/src/oasis/OASISLibrary.ml" + open OASISTypes open OASISUtils open OASISGettext - + open OASISSection + type library_name = name - + type findlib_part_name = name + type 'a map_of_findlib_part_name = 'a OASISUtils.MapString.t + + exception InternalLibraryNotFound of library_name + exception FindlibPackageNotFound of findlib_name + + type group_t = + | Container of findlib_name * group_t list + | Package of (findlib_name * + common_section * + build_section * + library * + group_t list) + (* Look for a module file, considering capitalization or not. *) let find_module source_file_exists (cs, bs, lib) modul = let possible_base_fn = @@ -1307,7 +1468,7 @@ module OASISLibrary = struct acc) (`No_sources possible_base_fn) possible_base_fn - + let source_unix_files ~ctxt (cs, bs, lib) source_file_exists = List.fold_left (fun acc modul -> @@ -1323,10 +1484,16 @@ module OASISLibrary = struct acc) [] (lib.lib_modules @ lib.lib_internal_modules) - - let generated_unix_files ~ctxt (cs, bs, lib) - source_file_exists is_native ext_lib ext_dll = - + + let generated_unix_files + ~ctxt + ~is_native + ~has_native_dynlink + ~ext_lib + ~ext_dll + ~source_file_exists + (cs, bs, lib) = + let find_modules lst ext = let find_module modul = match find_module source_file_exists (cs, bs, lib) modul with @@ -1347,7 +1514,7 @@ module OASISLibrary = struct (find_module nm)) lst in - + (* The headers that should be compiled along *) let headers = if lib.lib_pack then @@ -1357,14 +1524,14 @@ module OASISLibrary = struct lib.lib_modules "cmi" in - + (* The .cmx that be compiled along *) let cmxs = let should_be_built = (not lib.lib_pack) && (* Do not install .cmx packed submodules *) match bs.bs_compiled_object with | Native -> true - | Best -> is_native () + | Best -> is_native | Byte -> false in if should_be_built then @@ -1374,11 +1541,11 @@ module OASISLibrary = struct else [] in - + let acc_nopath = [] in - + (* Compute what libraries should be built *) let acc_nopath = (* Add the packed header file if required *) @@ -1392,31 +1559,37 @@ module OASISLibrary = struct add_pack_header ([cs.cs_name^".cma"] :: acc) in let native acc = - add_pack_header ([cs.cs_name^".cmxa"] :: [cs.cs_name^(ext_lib ())] :: acc) + let acc = + add_pack_header + (if has_native_dynlink then + [cs.cs_name^".cmxs"] :: acc + else acc) + in + [cs.cs_name^".cmxa"] :: [cs.cs_name^ext_lib] :: acc in match bs.bs_compiled_object with | Native -> byte (native acc_nopath) - | Best when is_native () -> + | Best when is_native -> byte (native acc_nopath) | Byte | Best -> byte acc_nopath in - + (* Add C library to be built *) let acc_nopath = if bs.bs_c_sources <> [] then begin - ["lib"^cs.cs_name^(ext_lib ())] + ["lib"^cs.cs_name^"_stubs"^ext_lib] :: - ["dll"^cs.cs_name^(ext_dll ())] + ["dll"^cs.cs_name^"_stubs"^ext_dll] :: acc_nopath end else acc_nopath in - + (* All the files generated *) List.rev_append (List.rev_map @@ -1424,248 +1597,561 @@ module OASISLibrary = struct (OASISUnixPath.concat bs.bs_path)) acc_nopath) (headers @ cmxs) - - - type group_t = - | Container of findlib_name * (group_t list) - | Package of (findlib_name * - common_section * - build_section * - library * - (group_t list)) - - let group_libs pkg = - (** Associate a name with its children *) - let children = + + type data = common_section * build_section * library + type tree = + | Node of (data option) * (tree MapString.t) + | Leaf of data + + let findlib_mapping pkg = + (* Map from library name to either full findlib name or parts + parent. *) + let fndlb_parts_of_lib_name = + let fndlb_parts cs lib = + let name = + match lib.lib_findlib_name with + | Some nm -> nm + | None -> cs.cs_name + in + let name = + String.concat "." (lib.lib_findlib_containers @ [name]) + in + name + in + List.fold_left + (fun mp -> + function + | Library (cs, _, lib) -> + begin + let lib_name = cs.cs_name in + let fndlb_parts = fndlb_parts cs lib in + if MapString.mem lib_name mp then + failwithf + (f_ "The library name '%s' is used more than once.") + lib_name; + match lib.lib_findlib_parent with + | Some lib_name_parent -> + MapString.add + lib_name + (`Unsolved (lib_name_parent, fndlb_parts)) + mp + | None -> + MapString.add + lib_name + (`Solved fndlb_parts) + mp + end + + | Executable _ | Test _ | Flag _ | SrcRepo _ | Doc _ -> + mp) + MapString.empty + pkg.sections + in + + (* Solve the above graph to be only library name to full findlib name. *) + let fndlb_name_of_lib_name = + let rec solve visited mp lib_name lib_name_child = + if SetString.mem lib_name visited then + failwithf + (f_ "Library '%s' is involved in a cycle \ + with regard to findlib naming.") + lib_name; + let visited = SetString.add lib_name visited in + try + match MapString.find lib_name mp with + | `Solved fndlb_nm -> + fndlb_nm, mp + | `Unsolved (lib_nm_parent, post_fndlb_nm) -> + let pre_fndlb_nm, mp = + solve visited mp lib_nm_parent lib_name + in + let fndlb_nm = pre_fndlb_nm^"."^post_fndlb_nm in + fndlb_nm, MapString.add lib_name (`Solved fndlb_nm) mp + with Not_found -> + failwithf + (f_ "Library '%s', which is defined as the findlib parent of \ + library '%s', doesn't exist.") + lib_name lib_name_child + in + let mp = + MapString.fold + (fun lib_name status mp -> + match status with + | `Solved _ -> + (* Solved initialy, no need to go further *) + mp + | `Unsolved _ -> + let _, mp = solve SetString.empty mp lib_name "<none>" in + mp) + fndlb_parts_of_lib_name + fndlb_parts_of_lib_name + in + MapString.map + (function + | `Solved fndlb_nm -> fndlb_nm + | `Unsolved _ -> assert false) + mp + in + + (* Convert an internal library name to a findlib name. *) + let findlib_name_of_library_name lib_nm = + try + MapString.find lib_nm fndlb_name_of_lib_name + with Not_found -> + raise (InternalLibraryNotFound lib_nm) + in + + (* Add a library to the tree. + *) + let add sct mp = + let fndlb_fullname = + let cs, _, _ = sct in + let lib_name = cs.cs_name in + findlib_name_of_library_name lib_name + in + let rec add_children nm_lst (children : tree MapString.t) = + match nm_lst with + | (hd :: tl) -> + begin + let node = + try + add_node tl (MapString.find hd children) + with Not_found -> + (* New node *) + new_node tl + in + MapString.add hd node children + end + | [] -> + (* Should not have a nameless library. *) + assert false + and add_node tl node = + if tl = [] then + begin + match node with + | Node (None, children) -> + Node (Some sct, children) + | Leaf (cs', _, _) | Node (Some (cs', _, _), _) -> + (* TODO: allow to merge Package, i.e. + * archive(byte) = "foo.cma foo_init.cmo" + *) + let cs, _, _ = sct in + failwithf + (f_ "Library '%s' and '%s' have the same findlib name '%s'") + cs.cs_name cs'.cs_name fndlb_fullname + end + else + begin + match node with + | Leaf data -> + Node (Some data, add_children tl MapString.empty) + | Node (data_opt, children) -> + Node (data_opt, add_children tl children) + end + and new_node = + function + | [] -> + Leaf sct + | hd :: tl -> + Node (None, MapString.add hd (new_node tl) MapString.empty) + in + add_children (OASISString.nsplit fndlb_fullname '.') mp + in + + let rec group_of_tree mp = + MapString.fold + (fun nm node acc -> + let cur = + match node with + | Node (Some (cs, bs, lib), children) -> + Package (nm, cs, bs, lib, group_of_tree children) + | Node (None, children) -> + Container (nm, group_of_tree children) + | Leaf (cs, bs, lib) -> + Package (nm, cs, bs, lib, []) + in + cur :: acc) + mp [] + in + + let group_mp = List.fold_left (fun mp -> function | Library (cs, bs, lib) -> - begin - match lib.lib_findlib_parent with - | Some p_nm -> - begin - let children = - try - MapString.find p_nm mp - with Not_found -> - [] - in - MapString.add p_nm ((cs, bs, lib) :: children) mp - end - | None -> - mp - end + add (cs, bs, lib) mp | _ -> mp) MapString.empty pkg.sections in - - (* Compute findlib name of a single node *) - let findlib_name (cs, _, lib) = - match lib.lib_findlib_name with - | Some nm -> nm - | None -> cs.cs_name - in - - (** Build a package tree *) - let rec tree_of_library containers ((cs, bs, lib) as acc) = - match containers with - | hd :: tl -> - Container (hd, [tree_of_library tl acc]) - | [] -> - Package - (findlib_name acc, cs, bs, lib, - (try - List.rev_map - (fun ((_, _, child_lib) as child_acc) -> - tree_of_library - child_lib.lib_findlib_containers - child_acc) - (MapString.find cs.cs_name children) - with Not_found -> - [])) - in - - (** Merge containers with the same name *) - let rec merge_containers groups = - (* Collect packages and create the map "container name -> merged children" *) - let packages, containers = - List.fold_left - (fun (packages, containers) group -> - match group with - | Container(name, children) -> - let children' = - try - MapString.find name containers - with Not_found -> - [] - in - (packages, - MapString.add name (children' @ children) containers) - | Package(name, cs, bs, lib, children) -> - (Package(name, cs, bs, lib, merge_containers children) :: packages, - containers)) - ([], MapString.empty) - groups - in - (* Recreate the list of groups *) - packages @ - (MapString.fold - (fun name children acc -> - Container(name, merge_containers children) :: acc) - containers []) + + let groups = + group_of_tree group_mp in - - (* TODO: check that libraries are unique *) - merge_containers - (List.fold_left - (fun acc -> - function - | Library (cs, bs, lib) when lib.lib_findlib_parent = None -> - (tree_of_library lib.lib_findlib_containers (cs, bs, lib)) :: acc - | _ -> - acc) - [] - pkg.sections) - - (** Compute internal to findlib library matchings, including subpackage - and return a map of it. - *) - let findlib_name_map pkg = - - (* Compute names in a tree *) - let rec findlib_names_aux path mp grp = - let fndlb_nm, children, mp = - match grp with - | Container (fndlb_nm, children) -> - fndlb_nm, children, mp - - | Package (fndlb_nm, {cs_name = nm}, _, _, children) -> - fndlb_nm, children, (MapString.add nm (path, fndlb_nm) mp) - in - let fndlb_nm_full = - (match path with - | Some pth -> pth^"." - | None -> "")^ - fndlb_nm - in - List.fold_left - (findlib_names_aux (Some fndlb_nm_full)) - mp - children + + let library_name_of_findlib_name = + Lazy.lazy_from_fun + (fun () -> + (* Revert findlib_name_of_library_name. *) + MapString.fold + (fun k v mp -> MapString.add v k mp) + fndlb_name_of_lib_name + MapString.empty) in - - List.fold_left - (findlib_names_aux None) - MapString.empty - (group_libs pkg) - - - let findlib_of_name ?(recurse=false) map nm = - try - let (path, fndlb_nm) = - MapString.find nm map - in - match path with - | Some pth when recurse -> pth^"."^fndlb_nm - | _ -> fndlb_nm - - with Not_found -> - failwithf - (f_ "Unable to translate internal library '%s' to findlib name") - nm - - let name_findlib_map pkg = - let mp = - findlib_name_map pkg + let library_name_of_findlib_name fndlb_nm = + try + MapString.find fndlb_nm (Lazy.force library_name_of_findlib_name) + with Not_found -> + raise (FindlibPackageNotFound fndlb_nm) in - MapString.fold - (fun nm _ acc -> - let fndlb_nm_full = - findlib_of_name - ~recurse:true - mp - nm - in - MapString.add fndlb_nm_full nm acc) - mp - MapString.empty - + + groups, + findlib_name_of_library_name, + library_name_of_findlib_name + let findlib_of_group = function | Container (fndlb_nm, _) | Package (fndlb_nm, _, _, _, _) -> fndlb_nm - + let root_of_group grp = let rec root_lib_aux = + (* We do a DFS in the group. *) function | Container (_, children) -> - root_lib_lst children - | Package (_, cs, bs, lib, children) -> - if lib.lib_findlib_parent = None then - cs, bs, lib - else - root_lib_lst children - and root_lib_lst = - function - | [] -> - raise Not_found - | hd :: tl -> - try - root_lib_aux hd - with Not_found -> - root_lib_lst tl + List.fold_left + (fun res grp -> + if res = None then + root_lib_aux grp + else + res) + None + children + | Package (_, cs, bs, lib, _) -> + Some (cs, bs, lib) in - try - root_lib_aux grp - with Not_found -> - failwithf - (f_ "Unable to determine root library of findlib library '%s'") - (findlib_of_group grp) - - + match root_lib_aux grp with + | Some res -> + res + | None -> + failwithf + (f_ "Unable to determine root library of findlib library '%s'") + (findlib_of_group grp) + end module OASISFlag = struct -# 21 "/Users/dbuenzli/tmp/ocaml/oasis-0.3.0~rc2/src/oasis/OASISFlag.ml" - +# 21 "/Users/dbuenzli/.odb/install-oasis/oasis-0.3.0/src/oasis/OASISFlag.ml" + end module OASISPackage = struct -# 21 "/Users/dbuenzli/tmp/ocaml/oasis-0.3.0~rc2/src/oasis/OASISPackage.ml" - +# 21 "/Users/dbuenzli/.odb/install-oasis/oasis-0.3.0/src/oasis/OASISPackage.ml" + end module OASISSourceRepository = struct -# 21 "/Users/dbuenzli/tmp/ocaml/oasis-0.3.0~rc2/src/oasis/OASISSourceRepository.ml" - +# 21 "/Users/dbuenzli/.odb/install-oasis/oasis-0.3.0/src/oasis/OASISSourceRepository.ml" + end module OASISTest = struct -# 21 "/Users/dbuenzli/tmp/ocaml/oasis-0.3.0~rc2/src/oasis/OASISTest.ml" - +# 21 "/Users/dbuenzli/.odb/install-oasis/oasis-0.3.0/src/oasis/OASISTest.ml" + end module OASISDocument = struct -# 21 "/Users/dbuenzli/tmp/ocaml/oasis-0.3.0~rc2/src/oasis/OASISDocument.ml" - +# 21 "/Users/dbuenzli/.odb/install-oasis/oasis-0.3.0/src/oasis/OASISDocument.ml" + +end + +module OASISExec = struct +# 21 "/Users/dbuenzli/.odb/install-oasis/oasis-0.3.0/src/oasis/OASISExec.ml" + + open OASISGettext + open OASISUtils + open OASISMessage + + (* TODO: I don't like this quote, it is there because $(rm) foo expands to + * 'rm -f' foo... + *) + let run ~ctxt ?f_exit_code ?(quote=true) cmd args = + let cmd = + if quote then + if Sys.os_type = "Win32" then + if String.contains cmd ' ' then + (* Double the 1st double quote... win32... sigh *) + "\""^(Filename.quote cmd) + else + cmd + else + Filename.quote cmd + else + cmd + in + let cmdline = + String.concat " " (cmd :: args) + in + info ~ctxt (f_ "Running command '%s'") cmdline; + match f_exit_code, Sys.command cmdline with + | None, 0 -> () + | None, i -> + failwithf + (f_ "Command '%s' terminated with error code %d") + cmdline i + | Some f, i -> + f i + + let run_read_output ~ctxt ?f_exit_code cmd args = + let fn = + Filename.temp_file "oasis-" ".txt" + in + try + begin + let () = + run ~ctxt ?f_exit_code cmd (args @ [">"; Filename.quote fn]) + in + let chn = + open_in fn + in + let routput = + ref [] + in + begin + try + while true do + routput := (input_line chn) :: !routput + done + with End_of_file -> + () + end; + close_in chn; + Sys.remove fn; + List.rev !routput + end + with e -> + (try Sys.remove fn with _ -> ()); + raise e + + let run_read_one_line ~ctxt ?f_exit_code cmd args = + match run_read_output ~ctxt ?f_exit_code cmd args with + | [fst] -> + fst + | lst -> + failwithf + (f_ "Command return unexpected output %S") + (String.concat "\n" lst) +end + +module OASISFileUtil = struct +# 21 "/Users/dbuenzli/.odb/install-oasis/oasis-0.3.0/src/oasis/OASISFileUtil.ml" + + open OASISGettext + + let file_exists_case fn = + let dirname = Filename.dirname fn in + let basename = Filename.basename fn in + if Sys.file_exists dirname then + if basename = Filename.current_dir_name then + true + else + List.mem + basename + (Array.to_list (Sys.readdir dirname)) + else + false + + let find_file ?(case_sensitive=true) paths exts = + + (* Cardinal product of two list *) + let ( * ) lst1 lst2 = + List.flatten + (List.map + (fun a -> + List.map + (fun b -> a,b) + lst2) + lst1) + in + + let rec combined_paths lst = + match lst with + | p1 :: p2 :: tl -> + let acc = + (List.map + (fun (a,b) -> Filename.concat a b) + (p1 * p2)) + in + combined_paths (acc :: tl) + | [e] -> + e + | [] -> + [] + in + + let alternatives = + List.map + (fun (p,e) -> + if String.length e > 0 && e.[0] <> '.' then + p ^ "." ^ e + else + p ^ e) + ((combined_paths paths) * exts) + in + List.find + (if case_sensitive then + file_exists_case + else + Sys.file_exists) + alternatives + + let which ~ctxt prg = + let path_sep = + match Sys.os_type with + | "Win32" -> + ';' + | _ -> + ':' + in + let path_lst = OASISString.nsplit (Sys.getenv "PATH") path_sep in + let exec_ext = + match Sys.os_type with + | "Win32" -> + "" :: (OASISString.nsplit (Sys.getenv "PATHEXT") path_sep) + | _ -> + [""] + in + find_file ~case_sensitive:false [path_lst; [prg]] exec_ext + + (**/**) + let rec fix_dir dn = + (* Windows hack because Sys.file_exists "src\\" = false when + * Sys.file_exists "src" = true + *) + let ln = + String.length dn + in + if Sys.os_type = "Win32" && ln > 0 && dn.[ln - 1] = '\\' then + fix_dir (String.sub dn 0 (ln - 1)) + else + dn + + let q = Filename.quote + (**/**) + + let cp ~ctxt ?(recurse=false) src tgt = + if recurse then + match Sys.os_type with + | "Win32" -> + OASISExec.run ~ctxt + "xcopy" [q src; q tgt; "/E"] + | _ -> + OASISExec.run ~ctxt + "cp" ["-r"; q src; q tgt] + else + OASISExec.run ~ctxt + (match Sys.os_type with + | "Win32" -> "copy" + | _ -> "cp") + [q src; q tgt] + + let mkdir ~ctxt tgt = + OASISExec.run ~ctxt + (match Sys.os_type with + | "Win32" -> "md" + | _ -> "mkdir") + [q tgt] + + let rec mkdir_parent ~ctxt f tgt = + let tgt = + fix_dir tgt + in + if Sys.file_exists tgt then + begin + if not (Sys.is_directory tgt) then + OASISUtils.failwithf + (f_ "Cannot create directory '%s', a file of the same name already \ + exists") + tgt + end + else + begin + mkdir_parent ~ctxt f (Filename.dirname tgt); + if not (Sys.file_exists tgt) then + begin + f tgt; + mkdir ~ctxt tgt + end + end + + let rmdir ~ctxt tgt = + if Sys.readdir tgt = [||] then + begin + match Sys.os_type with + | "Win32" -> + OASISExec.run ~ctxt "rd" [q tgt] + | _ -> + OASISExec.run ~ctxt "rm" ["-r"; q tgt] + end + + let glob ~ctxt fn = + let basename = + Filename.basename fn + in + if String.length basename >= 2 && + basename.[0] = '*' && + basename.[1] = '.' then + begin + let ext_len = + (String.length basename) - 2 + in + let ext = + String.sub basename 2 ext_len + in + let dirname = + Filename.dirname fn + in + Array.fold_left + (fun acc fn -> + try + let fn_ext = + String.sub + fn + ((String.length fn) - ext_len) + ext_len + in + if fn_ext = ext then + (Filename.concat dirname fn) :: acc + else + acc + with Invalid_argument _ -> + acc) + [] + (Sys.readdir dirname) + end + else + begin + if file_exists_case fn then + [fn] + else + [] + end end +# 2142 "setup.ml" module BaseEnvLight = struct -# 21 "/Users/dbuenzli/tmp/ocaml/oasis-0.3.0~rc2/src/base/BaseEnvLight.ml" - +# 21 "/Users/dbuenzli/.odb/install-oasis/oasis-0.3.0/src/base/BaseEnvLight.ml" + module MapString = Map.Make(String) - + type t = string MapString.t - + let default_filename = Filename.concat (Sys.getcwd ()) "setup.data" - + let load ?(allow_empty=false) ?(filename=default_filename) () = if Sys.file_exists filename then begin @@ -1722,7 +2208,7 @@ module BaseEnvLight = struct "Unable to load environment, the file '%s' doesn't exist." filename) end - + let var_get name env = let rec var_expand str = let buff = @@ -1743,7 +2229,7 @@ module BaseEnvLight = struct Buffer.contents buff in var_expand (MapString.find name env) - + let var_choose lst env = OASISExpr.choose (fun nm -> var_get nm env) @@ -1751,90 +2237,59 @@ module BaseEnvLight = struct end +# 2240 "setup.ml" module BaseContext = struct -# 21 "/Users/dbuenzli/tmp/ocaml/oasis-0.3.0~rc2/src/base/BaseContext.ml" - +# 21 "/Users/dbuenzli/.odb/install-oasis/oasis-0.3.0/src/base/BaseContext.ml" + open OASISContext - + let args = args - + let default = default - + end module BaseMessage = struct -# 21 "/Users/dbuenzli/tmp/ocaml/oasis-0.3.0~rc2/src/base/BaseMessage.ml" - +# 21 "/Users/dbuenzli/.odb/install-oasis/oasis-0.3.0/src/base/BaseMessage.ml" + (** Message to user, overrid for Base @author Sylvain Le Gall *) open OASISMessage open BaseContext - + let debug fmt = debug ~ctxt:!default fmt - + let info fmt = info ~ctxt:!default fmt - + let warning fmt = warning ~ctxt:!default fmt - + let error fmt = error ~ctxt:!default fmt - -end -module BaseFilePath = struct -# 21 "/Users/dbuenzli/tmp/ocaml/oasis-0.3.0~rc2/src/base/BaseFilePath.ml" - - - open Filename - - module Unix = OASISUnixPath - - let make = - function - | [] -> - invalid_arg "BaseFilename.make" - | hd :: tl -> - List.fold_left Filename.concat hd tl - - let of_unix ufn = - if Sys.os_type = "Unix" then - ufn - else - make - (List.map - (fun p -> - if p = Unix.current_dir_name then - current_dir_name - else if p = Unix.parent_dir_name then - parent_dir_name - else - p) - (OASISUtils.split '/' ufn)) - end module BaseEnv = struct -# 21 "/Users/dbuenzli/tmp/ocaml/oasis-0.3.0~rc2/src/base/BaseEnv.ml" - +# 21 "/Users/dbuenzli/.odb/install-oasis/oasis-0.3.0/src/base/BaseEnv.ml" + open OASISGettext open OASISUtils open PropList - + module MapString = BaseEnvLight.MapString - + type origin_t = | ODefault | OGetEnv | OFileLoad | OCommandLine - + type cli_handle_t = | CLINone | CLIAuto | CLIWith | CLIEnable | CLIUser of (Arg.key * Arg.spec * Arg.doc) list - + type definition_t = { hide: bool; @@ -1843,22 +2298,22 @@ module BaseEnv = struct arg_help: string option; group: string option; } - + let schema = Schema.create "environment" - + (* Environment data *) let env = Data.create () - + (* Environment data from file *) let env_from_file = ref MapString.empty - + (* Lexer for var *) let var_lxr = Genlex.make_lexer [] - + let rec var_expand str = let buff = Buffer.create ((String.length str) * 2) @@ -1879,9 +2334,9 @@ module BaseEnv = struct in match Stream.npeek 3 st with | [Genlex.Ident "utoh"; Genlex.Ident nm] -> - BaseFilePath.of_unix (var_get nm) + OASISHostPath.of_unix (var_get nm) | [Genlex.Ident "utoh"; Genlex.String s] -> - BaseFilePath.of_unix s + OASISHostPath.of_unix s | [Genlex.Ident "ocaml_escaped"; Genlex.Ident nm] -> String.escaped (var_get nm) | [Genlex.Ident "ocaml_escaped"; Genlex.String s] -> @@ -1908,7 +2363,7 @@ module BaseEnv = struct e) str; Buffer.contents buff - + and var_get name = let vl = try @@ -1922,14 +2377,14 @@ module BaseEnv = struct end in var_expand vl - + let var_choose ?printer ?name lst = OASISExpr.choose ?printer ?name var_get lst - + let var_protect vl = let buff = Buffer.create (String.length vl) @@ -1940,7 +2395,7 @@ module BaseEnv = struct | c -> Buffer.add_char buff c) vl; Buffer.contents buff - + let var_define ?(hide=false) ?(dump=true) @@ -1951,7 +2406,7 @@ module BaseEnv = struct name (* TODO: type constraint on the fact that name must be a valid OCaml id *) dflt = - + let default = [ OFileLoad, (fun () -> MapString.find name !env_from_file); @@ -1959,7 +2414,7 @@ module BaseEnv = struct OGetEnv, (fun () -> Sys.getenv name); ] in - + let extra = { hide = hide; @@ -1969,7 +2424,7 @@ module BaseEnv = struct group = group; } in - + (* Try to find a value that can be defined *) let var_get_low lst = @@ -2004,13 +2459,13 @@ module BaseEnv = struct | None, lst -> raise (Not_set (name, Some (String.concat (s_ ", ") lst))) in - + let help = match short_desc with | Some fs -> Some fs | None -> None in - + let var_get_lst = FieldRO.create ~schema @@ -2022,10 +2477,10 @@ module BaseEnv = struct ?help extra in - + fun () -> var_expand (var_get_low (var_get_lst env)) - + let var_redefine ?hide ?dump @@ -2053,10 +2508,10 @@ module BaseEnv = struct name dflt end - + let var_ignore (e : unit -> string) = () - + let print_hidden = var_define ~hide:true @@ -2065,7 +2520,7 @@ module BaseEnv = struct ~arg_help:"Print even non-printable variable. (debug)" "print_hidden" (fun () -> "false") - + let var_all () = List.rev (Schema.fold @@ -2076,17 +2531,17 @@ module BaseEnv = struct acc) [] schema) - + let default_filename = BaseEnvLight.default_filename - + let load ?allow_empty ?filename () = env_from_file := BaseEnvLight.load ?allow_empty ?filename () - + let unload () = env_from_file := MapString.empty; Data.clear env - + let dump ?(filename=default_filename) () = let chn = open_out_bin filename @@ -2117,10 +2572,10 @@ module BaseEnv = struct in (* Dump data defined outside of schema *) MapString.iter output mp_todo; - + (* End of the dump *) close_out chn - + let print () = let printable_vars = Schema.fold @@ -2156,14 +2611,14 @@ module BaseEnv = struct let dot_pad str = String.make ((max_length - (String.length str)) + 3) '.' in - + Printf.printf "\nConfiguration: \n"; List.iter (fun (name,value) -> Printf.printf "%s: %s %s\n" name (dot_pad name) value) (List.rev printable_vars); Printf.printf "\n%!" - + let args () = let arg_concat = OASISUtils.varname_concat ~hyphen:'-' @@ -2190,7 +2645,7 @@ module BaseEnv = struct ] ), "var+val Override any configuration variable."; - + ] @ List.flatten @@ -2204,23 +2659,23 @@ module BaseEnv = struct name s in - + let arg_name = OASISUtils.varname_of_string ~hyphen:'-' name in - + let hlp = match short_descr_opt with | Some txt -> txt () | None -> "" in - + let arg_hlp = match def.arg_help with | Some s -> s | None -> "str" in - + let default_value = try Printf.sprintf @@ -2232,7 +2687,7 @@ module BaseEnv = struct with Not_set _ -> "" in - + let args = match def.cli with | CLINone -> @@ -2260,7 +2715,7 @@ module BaseEnv = struct arg_concat "--enable-" arg_name, Arg.Unit (fun () -> var_set "true"), Printf.sprintf (f_ " %s%s") hlp dflt; - + arg_concat "--disable-" arg_name, Arg.Unit (fun () -> var_set "false"), Printf.sprintf (f_ " %s%s") hlp dflt @@ -2273,256 +2728,18 @@ module BaseEnv = struct schema) end -module BaseExec = struct -# 21 "/Users/dbuenzli/tmp/ocaml/oasis-0.3.0~rc2/src/base/BaseExec.ml" - - open OASISGettext - open OASISUtils - open BaseMessage - - let run ?f_exit_code cmd args = - let cmdline = - String.concat " " (cmd :: args) - in - info (f_ "Running command '%s'") cmdline; - match f_exit_code, Sys.command cmdline with - | None, 0 -> () - | None, i -> - failwithf - (f_ "Command '%s' terminated with error code %d") - cmdline i - | Some f, i -> - f i - - let run_read_output ?f_exit_code cmd args = - let fn = - Filename.temp_file "oasis-" ".txt" - in - let () = - try - run ?f_exit_code cmd (args @ [">"; Filename.quote fn]) - with e -> - Sys.remove fn; - raise e - in - let chn = - open_in fn - in - let routput = - ref [] - in - ( - try - while true do - routput := (input_line chn) :: !routput - done - with End_of_file -> - () - ); - close_in chn; - Sys.remove fn; - List.rev !routput - - let run_read_one_line ?f_exit_code cmd args = - match run_read_output ?f_exit_code cmd args with - | [fst] -> - fst - | lst -> - failwithf - (f_ "Command return unexpected output %S") - (String.concat "\n" lst) -end - -module BaseFileUtil = struct -# 21 "/Users/dbuenzli/tmp/ocaml/oasis-0.3.0~rc2/src/base/BaseFileUtil.ml" - - open OASISGettext - - let find_file paths exts = - - (* Cardinal product of two list *) - let ( * ) lst1 lst2 = - List.flatten - (List.map - (fun a -> - List.map - (fun b -> a,b) - lst2) - lst1) - in - - let rec combined_paths lst = - match lst with - | p1 :: p2 :: tl -> - let acc = - (List.map - (fun (a,b) -> Filename.concat a b) - (p1 * p2)) - in - combined_paths (acc :: tl) - | [e] -> - e - | [] -> - [] - in - - let alternatives = - List.map - (fun (p,e) -> - if String.length e > 0 && e.[0] <> '.' then - p ^ "." ^ e - else - p ^ e) - ((combined_paths paths) * exts) - in - List.find - Sys.file_exists - alternatives - - let which prg = - let path_sep = - match Sys.os_type with - | "Win32" -> - ';' - | _ -> - ':' - in - let path_lst = - OASISUtils.split - path_sep - (Sys.getenv "PATH") - in - let exec_ext = - match Sys.os_type with - | "Win32" -> - "" - :: - (OASISUtils.split - path_sep - (Sys.getenv "PATHEXT")) - | _ -> - [""] - in - find_file [path_lst; [prg]] exec_ext - - (**/**) - let rec fix_dir dn = - (* Windows hack because Sys.file_exists "src\\" = false when - * Sys.file_exists "src" = true - *) - let ln = - String.length dn - in - if Sys.os_type = "Win32" && ln > 0 && dn.[ln - 1] = '\\' then - fix_dir (String.sub dn 0 (ln - 1)) - else - dn - - let q = Filename.quote - (**/**) - - let cp src tgt = - BaseExec.run - (match Sys.os_type with - | "Win32" -> "copy" - | _ -> "cp") - [q src; q tgt] - - let mkdir tgt = - BaseExec.run - (match Sys.os_type with - | "Win32" -> "md" - | _ -> "mkdir") - [q tgt] - - let rec mkdir_parent f tgt = - let tgt = - fix_dir tgt - in - if Sys.file_exists tgt then - begin - if not (Sys.is_directory tgt) then - OASISUtils.failwithf - (f_ "Cannot create directory '%s', a file of the same name already \ - exists") - tgt - end - else - begin - mkdir_parent f (Filename.dirname tgt); - if not (Sys.file_exists tgt) then - begin - f tgt; - mkdir tgt - end - end - - let rmdir tgt = - if Sys.readdir tgt = [||] then - begin - match Sys.os_type with - | "Win32" -> - BaseExec.run "rd" [q tgt] - | _ -> - BaseExec.run "rm" ["-r"; q tgt] - end - - let glob fn = - let basename = - Filename.basename fn - in - if String.length basename >= 2 && - basename.[0] = '*' && - basename.[1] = '.' then - begin - let ext_len = - (String.length basename) - 2 - in - let ext = - String.sub basename 2 ext_len - in - let dirname = - Filename.dirname fn - in - Array.fold_left - (fun acc fn -> - try - let fn_ext = - String.sub - fn - ((String.length fn) - ext_len) - ext_len - in - if fn_ext = ext then - (Filename.concat dirname fn) :: acc - else - acc - with Invalid_argument _ -> - acc) - [] - (Sys.readdir dirname) - end - else - begin - if Sys.file_exists fn then - [fn] - else - [] - end -end - module BaseArgExt = struct -# 21 "/Users/dbuenzli/tmp/ocaml/oasis-0.3.0~rc2/src/base/BaseArgExt.ml" - +# 21 "/Users/dbuenzli/.odb/install-oasis/oasis-0.3.0/src/base/BaseArgExt.ml" + open OASISUtils open OASISGettext - + let parse argv args = (* Simulate command line for Arg *) let current = ref 0 in - + try Arg.parse_argv ~current:current @@ -2540,13 +2757,13 @@ module BaseArgExt = struct end module BaseCheck = struct -# 21 "/Users/dbuenzli/tmp/ocaml/oasis-0.3.0~rc2/src/base/BaseCheck.ml" - +# 21 "/Users/dbuenzli/.odb/install-oasis/oasis-0.3.0/src/base/BaseCheck.ml" + open BaseEnv open BaseMessage open OASISUtils open OASISGettext - + let prog_best prg prg_lst = var_redefine prg @@ -2559,7 +2776,7 @@ module BaseCheck = struct res | None -> try - Some (BaseFileUtil.which e) + Some (OASISFileUtil.which ~ctxt:!BaseContext.default e) with Not_found -> None) None @@ -2568,16 +2785,16 @@ module BaseCheck = struct match alternate with | Some prg -> prg | None -> raise Not_found) - + let prog prg = prog_best prg [prg] - + let prog_opt prg = prog_best prg [prg^".opt"; prg] - + let ocamlfind = prog "ocamlfind" - + let version var_prefix cmp @@ -2618,12 +2835,12 @@ module BaseCheck = struct (OASISVersion.string_of_comparator cmp) version_str) () - + let package_version pkg = - BaseExec.run_read_one_line + OASISExec.run_read_one_line ~ctxt:!BaseContext.default (ocamlfind ()) ["query"; "-format"; "%v"; pkg] - + let package ?version_comparator pkg () = let var = OASISUtils.varname_concat @@ -2632,7 +2849,7 @@ module BaseCheck = struct in let findlib_dir pkg = let dir = - BaseExec.run_read_one_line + OASISExec.run_read_one_line ~ctxt:!BaseContext.default (ocamlfind ()) ["query"; "-format"; "%d"; pkg] in @@ -2666,18 +2883,18 @@ module BaseCheck = struct end module BaseOCamlcConfig = struct -# 21 "/Users/dbuenzli/tmp/ocaml/oasis-0.3.0~rc2/src/base/BaseOCamlcConfig.ml" - - +# 21 "/Users/dbuenzli/.odb/install-oasis/oasis-0.3.0/src/base/BaseOCamlcConfig.ml" + + open BaseEnv open OASISUtils open OASISGettext - + module SMap = Map.Make(String) - + let ocamlc = BaseCheck.prog_opt "ocamlc" - + let ocamlc_config_map = (* Map name to value for ocamlc -config output (name ^": "^value) @@ -2722,14 +2939,15 @@ module BaseOCamlcConfig = struct | [] -> mp in - + let cache = lazy (var_protect (Marshal.to_string (split_field SMap.empty - (BaseExec.run_read_output + (OASISExec.run_read_output + ~ctxt:!BaseContext.default (ocamlc ()) ["-config"])) [])) in @@ -2740,7 +2958,7 @@ module BaseOCamlcConfig = struct (fun () -> (* TODO: update if ocamlc change !!! *) Lazy.force cache) - + let var_define nm = (* Extract data from ocamlc -config *) let avlbl_config_get () = @@ -2754,7 +2972,7 @@ module BaseOCamlcConfig = struct with _ -> s in - + let nm_config, value_config = match nm with | "ocaml_version" -> @@ -2777,58 +2995,72 @@ module BaseOCamlcConfig = struct (f_ "Cannot find field '%s' in '%s -config' output") nm (ocamlc ())) - + end module BaseStandardVar = struct -# 21 "/Users/dbuenzli/tmp/ocaml/oasis-0.3.0~rc2/src/base/BaseStandardVar.ml" - - +# 21 "/Users/dbuenzli/.odb/install-oasis/oasis-0.3.0/src/base/BaseStandardVar.ml" + + open OASISGettext open OASISTypes open OASISExpr open BaseCheck open BaseEnv - + let ocamlfind = BaseCheck.ocamlfind let ocamlc = BaseOCamlcConfig.ocamlc let ocamlopt = prog_opt "ocamlopt" let ocamlbuild = prog "ocamlbuild" - - + + (**/**) let rpkg = ref None - + let pkg_get () = match !rpkg with | Some pkg -> pkg | None -> failwith (s_ "OASIS Package is not set") + + let var_cond = ref [] + + let var_define_cond ~since_version f dflt = + let holder = ref (fun () -> dflt) in + let since_version = + OASISVersion.VGreaterEqual (OASISVersion.version_of_string since_version) + in + var_cond := + (fun ver -> + if OASISVersion.comparator_apply ver since_version then + holder := f ()) :: !var_cond; + fun () -> !holder () + (**/**) - + let pkg_name = var_define ~short_desc:(fun () -> s_ "Package name") "pkg_name" (fun () -> (pkg_get ()).name) - + let pkg_version = var_define ~short_desc:(fun () -> s_ "Package version") "pkg_version" (fun () -> (OASISVersion.string_of_version (pkg_get ()).version)) - + let c = BaseOCamlcConfig.var_define - + let os_type = c "os_type" let system = c "system" let architecture = c "architecture" let ccomp_type = c "ccomp_type" let ocaml_version = c "ocaml_version" - + (* TODO: Check standard variable presence at runtime *) - + let standard_library_default = c "standard_library_default" let standard_library = c "standard_library" let standard_runtime = c "standard_runtime" @@ -2841,8 +3073,25 @@ module BaseStandardVar = struct let ext_dll = c "ext_dll" let default_executable_name = c "default_executable_name" let systhread_supported = c "systhread_supported" - - + + let flexlink = + BaseCheck.prog "flexlink" + + let flexdll_version = + var_define + ~short_desc:(fun () -> "FlexDLL version (Win32)") + "flexdll_version" + (fun () -> + let lst = + OASISExec.run_read_output ~ctxt:!BaseContext.default + (flexlink ()) ["-help"] + in + match lst with + | line :: _ -> + Scanf.sscanf line "FlexDLL version %s" (fun ver -> ver) + | [] -> + raise Not_found) + (**/**) let p name hlp dflt = var_define @@ -2851,17 +3100,17 @@ module BaseStandardVar = struct ~arg_help:"dir" name dflt - + let (/) a b = if os_type () = Sys.os_type then Filename.concat a b else if os_type () = "Unix" then - BaseFilePath.Unix.concat a b + OASISUnixPath.concat a b else OASISUtils.failwithf (f_ "Cannot handle os_type %s filename concat") (os_type ()) (**/**) - + let prefix = p "prefix" (fun () -> s_ "Install architecture-independent files dir") @@ -2874,97 +3123,97 @@ module BaseStandardVar = struct program_files/(pkg_name ()) | _ -> "/usr/local") - + let exec_prefix = p "exec_prefix" (fun () -> s_ "Install architecture-dependent files in dir") (fun () -> "$prefix") - + let bindir = p "bindir" (fun () -> s_ "User executables") (fun () -> "$exec_prefix"/"bin") - + let sbindir = p "sbindir" (fun () -> s_ "System admin executables") (fun () -> "$exec_prefix"/"sbin") - + let libexecdir = p "libexecdir" (fun () -> s_ "Program executables") (fun () -> "$exec_prefix"/"libexec") - + let sysconfdir = p "sysconfdir" (fun () -> s_ "Read-only single-machine data") (fun () -> "$prefix"/"etc") - + let sharedstatedir = p "sharedstatedir" (fun () -> s_ "Modifiable architecture-independent data") (fun () -> "$prefix"/"com") - + let localstatedir = p "localstatedir" (fun () -> s_ "Modifiable single-machine data") (fun () -> "$prefix"/"var") - + let libdir = p "libdir" (fun () -> s_ "Object code libraries") (fun () -> "$exec_prefix"/"lib") - + let datarootdir = p "datarootdir" (fun () -> s_ "Read-only arch-independent data root") (fun () -> "$prefix"/"share") - + let datadir = p "datadir" (fun () -> s_ "Read-only architecture-independent data") (fun () -> "$datarootdir") - + let infodir = p "infodir" (fun () -> s_ "Info documentation") (fun () -> "$datarootdir"/"info") - + let localedir = p "localedir" (fun () -> s_ "Locale-dependent data") (fun () -> "$datarootdir"/"locale") - + let mandir = p "mandir" (fun () -> s_ "Man documentation") (fun () -> "$datarootdir"/"man") - + let docdir = p "docdir" (fun () -> s_ "Documentation root") (fun () -> "$datarootdir"/"doc"/"$pkg_name") - + let htmldir = p "htmldir" (fun () -> s_ "HTML documentation") (fun () -> "$docdir") - + let dvidir = p "dvidir" (fun () -> s_ "DVI documentation") (fun () -> "$docdir") - + let pdfdir = p "pdfdir" (fun () -> s_ "PDF documentation") (fun () -> "$docdir") - + let psdir = p "psdir" (fun () -> s_ "PS documentation") (fun () -> "$docdir") - + let destdir = p "destdir" (fun () -> s_ "Prepend a path when installing package") @@ -2973,13 +3222,13 @@ module BaseStandardVar = struct (PropList.Not_set ("destdir", Some (s_ "undefined by construct")))) - + let findlib_version = var_define "findlib_version" (fun () -> BaseCheck.package_version "findlib") - + let is_native = var_define "is_native" @@ -2994,7 +3243,7 @@ module BaseStandardVar = struct ocamlc () in "false") - + let ext_program = var_define "suffix_program" @@ -3002,7 +3251,7 @@ module BaseStandardVar = struct match os_type () with | "Win32" -> ".exe" | _ -> "") - + let rm = var_define ~short_desc:(fun () -> s_ "Remove a file.") @@ -3011,7 +3260,7 @@ module BaseStandardVar = struct match os_type () with | "Win32" -> "del" | _ -> "rm -f") - + let rmdir = var_define ~short_desc:(fun () -> s_ "Remove a directory.") @@ -3020,58 +3269,116 @@ module BaseStandardVar = struct match os_type () with | "Win32" -> "rd" | _ -> "rm -rf") - + let debug = var_define ~short_desc:(fun () -> s_ "Turn ocaml debug flag on") ~cli:CLIEnable "debug" (fun () -> "true") - + let profile = var_define ~short_desc:(fun () -> s_ "Turn ocaml profile flag on") ~cli:CLIEnable "profile" (fun () -> "false") - + let tests = - var_define - ~short_desc:(fun () -> - s_ "Compile tests executable and library and run them") - ~cli:CLIEnable - "tests" - (fun () -> "false") - + var_define_cond ~since_version:"0.3" + (fun () -> + var_define + ~short_desc:(fun () -> + s_ "Compile tests executable and library and run them") + ~cli:CLIEnable + "tests" + (fun () -> "false")) + "true" + let docs = + var_define_cond ~since_version:"0.3" + (fun () -> + var_define + ~short_desc:(fun () -> s_ "Create documentations") + ~cli:CLIEnable + "docs" + (fun () -> "true")) + "true" + + let native_dynlink = var_define - ~short_desc:(fun () -> s_ "Create documentations") - ~cli:CLIEnable - "docs" - (fun () -> "true") - + ~short_desc:(fun () -> s_ "Compiler support generation of .cmxs.") + ~cli:CLINone + "native_dynlink" + (fun () -> + let res = + let ocaml_lt_312 () = + OASISVersion.comparator_apply + (OASISVersion.version_of_string (ocaml_version ())) + (OASISVersion.VLesser + (OASISVersion.version_of_string "3.12.0")) + in + let flexdll_lt_030 () = + OASISVersion.comparator_apply + (OASISVersion.version_of_string (flexdll_version ())) + (OASISVersion.VLesser + (OASISVersion.version_of_string "0.30")) + in + let has_native_dynlink = + let ocamlfind = ocamlfind () in + try + let fn = + OASISExec.run_read_one_line + ~ctxt:!BaseContext.default + ocamlfind + ["query"; "-predicates"; "native"; "dynlink"; + "-format"; "%d/%a"] + in + Sys.file_exists fn + with _ -> + false + in + if not has_native_dynlink then + false + else if ocaml_lt_312 () then + false + else if (os_type () = "Win32" || os_type () = "Cygwin") + && flexdll_lt_030 () then + begin + BaseMessage.warning + (f_ ".cmxs generation disabled because FlexDLL needs to be \ + at least 0.30. Please upgrade FlexDLL from %s to 0.30.") + (flexdll_version ()); + false + end + else + true + in + string_of_bool res) + let init pkg = - rpkg := Some pkg - + rpkg := Some pkg; + List.iter (fun f -> f pkg.oasis_version) !var_cond + end module BaseFileAB = struct -# 21 "/Users/dbuenzli/tmp/ocaml/oasis-0.3.0~rc2/src/base/BaseFileAB.ml" - +# 21 "/Users/dbuenzli/.odb/install-oasis/oasis-0.3.0/src/base/BaseFileAB.ml" + open BaseEnv open OASISGettext open BaseMessage - + let to_filename fn = let fn = - BaseFilePath.of_unix fn + OASISHostPath.of_unix fn in if not (Filename.check_suffix fn ".ab") then warning (f_ "File '%s' doesn't have '.ab' extension") fn; Filename.chop_extension fn - + let replace fn_lst = let buff = Buffer.create 13 @@ -3079,7 +3386,7 @@ module BaseFileAB = struct List.iter (fun fn -> let fn = - BaseFilePath.of_unix fn + OASISHostPath.of_unix fn in let chn_in = open_in fn @@ -3104,15 +3411,15 @@ module BaseFileAB = struct end module BaseLog = struct -# 21 "/Users/dbuenzli/tmp/ocaml/oasis-0.3.0~rc2/src/base/BaseLog.ml" - +# 21 "/Users/dbuenzli/.odb/install-oasis/oasis-0.3.0/src/base/BaseLog.ml" + open OASISUtils - + let default_filename = Filename.concat (Filename.dirname BaseEnv.default_filename) "setup.log" - + module SetTupleString = Set.Make (struct @@ -3122,7 +3429,7 @@ module BaseLog = struct | 0 -> String.compare s12 s22 | n -> n end) - + let load () = if Sys.file_exists default_filename then begin @@ -3171,14 +3478,14 @@ module BaseLog = struct begin [] end - + let register event data = let chn_out = open_out_gen [Open_append; Open_creat; Open_text] 0o644 default_filename in Printf.fprintf chn_out "%S %S\n" event data; close_out chn_out - + let unregister event data = if Sys.file_exists default_filename then begin @@ -3203,7 +3510,7 @@ module BaseLog = struct if not !write_something then Sys.remove default_filename end - + let filter events = let st_events = List.fold_left @@ -3215,7 +3522,7 @@ module BaseLog = struct List.filter (fun (e, _) -> SetString.mem e st_events) (load ()) - + let exists event data = List.exists (fun v -> (event, data) = v) @@ -3223,19 +3530,19 @@ module BaseLog = struct end module BaseBuilt = struct -# 21 "/Users/dbuenzli/tmp/ocaml/oasis-0.3.0~rc2/src/base/BaseBuilt.ml" - +# 21 "/Users/dbuenzli/.odb/install-oasis/oasis-0.3.0/src/base/BaseBuilt.ml" + open OASISTypes open OASISGettext open BaseStandardVar open BaseMessage - + type t = | BExec (* Executable *) | BExecLib (* Library coming with executable *) | BLib (* Library *) | BDoc (* Document *) - + let to_log_event_file t nm = "built_"^ (match t with @@ -3244,10 +3551,10 @@ module BaseBuilt = struct | BLib -> "lib" | BDoc -> "doc")^ "_"^nm - + let to_log_event_done t nm = "is_"^(to_log_event_file t nm) - + let register t nm lst = BaseLog.register (to_log_event_done t nm) @@ -3257,7 +3564,7 @@ module BaseBuilt = struct let registered = List.fold_left (fun registered fn -> - if Sys.file_exists fn then + if OASISFileUtil.file_exists_case fn then begin BaseLog.register (to_log_event_file t nm) @@ -3277,7 +3584,7 @@ module BaseBuilt = struct (f_ "Cannot find an existing alternative files among: %s") (String.concat (s_ ", ") alt)) lst - + let unregister t nm = List.iter (fun (e, d) -> @@ -3285,11 +3592,11 @@ module BaseBuilt = struct (BaseLog.filter [to_log_event_file t nm; to_log_event_done t nm]) - + let fold t nm f acc = List.fold_left (fun acc (_, fn) -> - if Sys.file_exists fn then + if OASISFileUtil.file_exists_case fn then begin f acc fn end @@ -3313,7 +3620,7 @@ module BaseBuilt = struct acc (BaseLog.filter [to_log_event_file t nm]) - + let is_built t nm = List.fold_left (fun is_built (_, d) -> @@ -3324,7 +3631,7 @@ module BaseBuilt = struct false (BaseLog.filter [to_log_event_done t nm]) - + let of_executable ffn (cs, bs, exec) = let unix_exec_is, unix_dll_opt = OASISExecutable.unix_exec_is @@ -3347,18 +3654,18 @@ module BaseBuilt = struct evs, unix_exec_is, unix_dll_opt - + let of_library ffn (cs, bs, lib) = let unix_lst = OASISLibrary.generated_unix_files ~ctxt:!BaseContext.default + ~source_file_exists:(fun fn -> + OASISFileUtil.file_exists_case (OASISHostPath.of_unix fn)) + ~is_native:(bool_of_string (is_native ())) + ~has_native_dynlink:(bool_of_string (native_dynlink ())) + ~ext_lib:(ext_lib ()) + ~ext_dll:(ext_dll ()) (cs, bs, lib) - (fun fn -> - Sys.file_exists (BaseFilePath.of_unix fn)) - (fun () -> - bool_of_string (is_native ())) - ext_lib - ext_dll in let evs = [BLib, @@ -3366,24 +3673,24 @@ module BaseBuilt = struct List.map (List.map ffn) unix_lst] in evs, unix_lst - + end module BaseCustom = struct -# 21 "/Users/dbuenzli/tmp/ocaml/oasis-0.3.0~rc2/src/base/BaseCustom.ml" - +# 21 "/Users/dbuenzli/.odb/install-oasis/oasis-0.3.0/src/base/BaseCustom.ml" + open BaseEnv open BaseMessage open OASISTypes open OASISGettext - + let run cmd args extra_args = - BaseExec.run + OASISExec.run ~ctxt:!BaseContext.default ~quote:false (var_expand cmd) (List.map var_expand (args @ (Array.to_list extra_args))) - + let hook ?(failsafe=false) cstm f e = let optional_command lst = let printer = @@ -3420,15 +3727,17 @@ module BaseCustom = struct end module BaseDynVar = struct -# 21 "/Users/dbuenzli/tmp/ocaml/oasis-0.3.0~rc2/src/base/BaseDynVar.ml" - - +# 21 "/Users/dbuenzli/.odb/install-oasis/oasis-0.3.0/src/base/BaseDynVar.ml" + + open OASISTypes open OASISGettext open BaseEnv open BaseBuilt - + let init pkg = + (* TODO: disambiguate exec vs other variable by adding exec_VARNAME. *) + (* TODO: provide compile option for library libary_byte_args_VARNAME... *) List.iter (function | Executable (cs, bs, exec) -> @@ -3441,7 +3750,7 @@ module BaseDynVar = struct Printf.sprintf (f_ "Filename of executable '%s'") cs.cs_name) - cs.cs_name + (OASISUtils.varname_of_string cs.cs_name) (fun () -> let fn_opt = fold @@ -3458,23 +3767,23 @@ module BaseDynVar = struct Some (Printf.sprintf (f_ "Executable '%s' not yet built.") cs.cs_name))))) - + | Library _ | Flag _ | Test _ | SrcRepo _ | Doc _ -> ()) pkg.sections end module BaseTest = struct -# 21 "/Users/dbuenzli/tmp/ocaml/oasis-0.3.0~rc2/src/base/BaseTest.ml" - +# 21 "/Users/dbuenzli/.odb/install-oasis/oasis-0.3.0/src/base/BaseTest.ml" + open BaseEnv open BaseMessage open OASISTypes open OASISExpr open OASISGettext - + let test lst pkg extra_args = - + let one_test (failure, n) (test_plugin, cs, test) = if var_choose ~name:(Printf.sprintf @@ -3498,7 +3807,7 @@ module BaseTest = struct in chdir dir; fun () -> chdir cwd - + | None -> fun () -> () in @@ -3543,19 +3852,27 @@ module BaseTest = struct if failure_percent > 0.0 then failwith msg else - info "%s" msg + info "%s" msg; + + (* Possible explanation why the tests where not run. *) + if OASISVersion.version_0_3_or_after pkg.oasis_version && + not (bool_of_string (BaseStandardVar.tests ())) && + lst <> [] then + BaseMessage.warning + "Tests are turned off, consider enabling with \ + 'ocaml setup.ml -configure --enable-tests'" end module BaseDoc = struct -# 21 "/Users/dbuenzli/tmp/ocaml/oasis-0.3.0~rc2/src/base/BaseDoc.ml" - +# 21 "/Users/dbuenzli/.odb/install-oasis/oasis-0.3.0/src/base/BaseDoc.ml" + open BaseEnv open BaseMessage open OASISTypes open OASISGettext - + let doc lst pkg extra_args = - + let one_doc (doc_plugin, cs, doc) = if var_choose ~name:(Printf.sprintf @@ -3571,45 +3888,55 @@ module BaseDoc = struct extra_args end in - List.iter - one_doc - lst + List.iter one_doc lst; + + if OASISVersion.version_0_3_or_after pkg.oasis_version && + not (bool_of_string (BaseStandardVar.docs ())) && + lst <> [] then + BaseMessage.warning + "Docs are turned off, consider enabling with \ + 'ocaml setup.ml -configure --enable-docs'" end module BaseSetup = struct -# 21 "/Users/dbuenzli/tmp/ocaml/oasis-0.3.0~rc2/src/base/BaseSetup.ml" - +# 21 "/Users/dbuenzli/.odb/install-oasis/oasis-0.3.0/src/base/BaseSetup.ml" + open BaseEnv open BaseMessage open OASISTypes open OASISSection open OASISGettext open OASISUtils - + type std_args_fun = package -> string array -> unit - + type ('a, 'b) section_args_fun = name * (package -> (common_section * 'a) -> string array -> 'b) - + type t = { - configure: std_args_fun; - build: std_args_fun; - doc: ((doc, unit) section_args_fun) list; - test: ((test, float) section_args_fun) list; - install: std_args_fun; - uninstall: std_args_fun; - clean: std_args_fun list; - clean_doc: (doc, unit) section_args_fun list; - clean_test: (test, unit) section_args_fun list; - distclean: std_args_fun list; - distclean_doc: (doc, unit) section_args_fun list; - distclean_test: (test, unit) section_args_fun list; - package: package; - version: string; + configure: std_args_fun; + build: std_args_fun; + doc: ((doc, unit) section_args_fun) list; + test: ((test, float) section_args_fun) list; + install: std_args_fun; + uninstall: std_args_fun; + clean: std_args_fun list; + clean_doc: (doc, unit) section_args_fun list; + clean_test: (test, unit) section_args_fun list; + distclean: std_args_fun list; + distclean_doc: (doc, unit) section_args_fun list; + distclean_test: (test, unit) section_args_fun list; + package: package; + oasis_fn: string option; + oasis_version: string; + oasis_digest: Digest.t option; + oasis_exec: string option; + oasis_setup_args: string list; + setup_update: bool; } - + (* Associate a plugin function with data from package *) let join_plugin_sections filter_map lst = List.rev @@ -3622,7 +3949,7 @@ module BaseSetup = struct acc) [] lst) - + (* Search for plugin data associated with a section name *) let lookup_plugin_section plugin action nm lst = try @@ -3633,7 +3960,7 @@ module BaseSetup = struct plugin nm action - + let configure t args = (* Run configure *) BaseCustom.hook @@ -3647,78 +3974,68 @@ module BaseSetup = struct with _ -> () end; - + (* Run plugin's configure *) t.configure t.package args; - + (* Dump to allow postconf to change it *) dump ()) (); - + (* Reload environment *) unload (); load (); - + (* Save environment *) print (); - + (* Replace data in file *) BaseFileAB.replace t.package.files_ab - + let build t args = BaseCustom.hook t.package.build_custom (t.build t.package) args - + let doc t args = - if bool_of_string (BaseStandardVar.docs ()) then - BaseDoc.doc - (join_plugin_sections - (function - | Doc (cs, e) -> - Some - (lookup_plugin_section - "documentation" - (s_ "build") - cs.cs_name - t.doc, - cs, - e) - | _ -> - None) - t.package.sections) - t.package - args - else - BaseMessage.warning - "Docs are turned off, consider enabling with \ - 'ocaml setup.ml -configure --enable-docs'" - + BaseDoc.doc + (join_plugin_sections + (function + | Doc (cs, e) -> + Some + (lookup_plugin_section + "documentation" + (s_ "build") + cs.cs_name + t.doc, + cs, + e) + | _ -> + None) + t.package.sections) + t.package + args + let test t args = - if bool_of_string (BaseStandardVar.tests ()) then - BaseTest.test - (join_plugin_sections - (function - | Test (cs, e) -> - Some - (lookup_plugin_section - "test" - (s_ "run") - cs.cs_name - t.test, - cs, - e) - | _ -> - None) - t.package.sections) - t.package - args - else - BaseMessage.warning - "Tests are turned off, consider enabling with \ - 'ocaml setup.ml -configure --enable-tests'" - + BaseTest.test + (join_plugin_sections + (function + | Test (cs, e) -> + Some + (lookup_plugin_section + "test" + (s_ "run") + cs.cs_name + t.test, + cs, + e) + | _ -> + None) + t.package.sections) + t.package + args + let all t args = let rno_doc = ref false @@ -3735,23 +4052,23 @@ module BaseSetup = struct "-no-doc", Arg.Set rno_doc, s_ "Don't run doc target"; - + "-no-test", Arg.Set rno_test, s_ "Don't run test target"; ] (failwithf (f_ "Don't know what to do with '%s'")) ""; - + info "Running configure step"; configure t [||]; - + info "Running build step"; build t [||]; - + (* Load setup.log dynamic variables *) BaseDynVar.init t.package; - + if not !rno_doc then begin info "Running doc step"; @@ -3761,7 +4078,7 @@ module BaseSetup = struct begin info "Skipping doc step" end; - + if not !rno_test then begin info "Running test step"; @@ -3771,23 +4088,23 @@ module BaseSetup = struct begin info "Skipping test step" end - + let install t args = BaseCustom.hook t.package.install_custom (t.install t.package) args - + let uninstall t args = BaseCustom.hook t.package.uninstall_custom (t.uninstall t.package) args - + let reinstall t args = uninstall t args; install t args - + let clean, distclean = let failsafe f a = try @@ -3799,7 +4116,7 @@ module BaseSetup = struct | Failure msg -> msg | e -> Printexc.to_string e) in - + let generic_clean t cstm mains docs tests args = BaseCustom.hook ~failsafe:true @@ -3843,7 +4160,7 @@ module BaseSetup = struct mains) () in - + let clean t args = generic_clean t @@ -3853,11 +4170,20 @@ module BaseSetup = struct t.clean_test args in - + let distclean t args = (* Call clean *) clean t args; - + + (* Call distclean code *) + generic_clean + t + t.package.distclean_custom + t.distclean + t.distclean_doc + t.distclean_test + args; + (* Remove generated file *) List.iter (fun fn -> @@ -3870,23 +4196,143 @@ module BaseSetup = struct :: BaseLog.default_filename :: - (List.rev_map BaseFileAB.to_filename t.package.files_ab)); - - (* Call distclean code *) - generic_clean - t - t.package.distclean_custom - t.distclean - t.distclean_doc - t.distclean_test - args + (List.rev_map BaseFileAB.to_filename t.package.files_ab)) in - + clean, distclean - + let version t _ = - print_endline t.version - + print_endline t.oasis_version + + let update_setup_ml, no_update_setup_ml_cli = + let b = ref true in + b, + ("-no-update-setup-ml", + Arg.Clear b, + s_ " Don't try to update setup.ml, even if _oasis has changed.") + + let update_setup_ml t = + let oasis_fn = + match t.oasis_fn with + | Some fn -> fn + | None -> "_oasis" + in + let oasis_exec = + match t.oasis_exec with + | Some fn -> fn + | None -> "oasis" + in + let ocaml = + Sys.executable_name + in + let setup_ml, args = + match Array.to_list Sys.argv with + | setup_ml :: args -> + setup_ml, args + | [] -> + failwith + (s_ "Expecting non-empty command line arguments.") + in + let ocaml, setup_ml = + if Sys.executable_name = Sys.argv.(0) then + (* We are not running in standard mode, probably the script + * is precompiled. + *) + "ocaml", "setup.ml" + else + ocaml, setup_ml + in + let no_update_setup_ml_cli, _, _ = no_update_setup_ml_cli in + let do_update () = + let oasis_exec_version = + OASISExec.run_read_one_line + ~ctxt:!BaseContext.default + ~f_exit_code: + (function + | 0 -> + () + | 1 -> + failwithf + (f_ "Executable '%s' is probably an old version \ + of oasis (< 0.3.0), please update to version \ + v%s.") + oasis_exec t.oasis_version + | 127 -> + failwithf + (f_ "Cannot find executable '%s', please install \ + oasis v%s.") + oasis_exec t.oasis_version + | n -> + failwithf + (f_ "Command '%s version' exited with code %d.") + oasis_exec n) + oasis_exec ["version"] + in + if OASISVersion.comparator_apply + (OASISVersion.version_of_string oasis_exec_version) + (OASISVersion.VGreaterEqual + (OASISVersion.version_of_string t.oasis_version)) then + begin + (* We have a version >= for the executable oasis, proceed with + * update. + *) + (* TODO: delegate this check to 'oasis setup'. *) + if Sys.os_type = "Win32" then + failwithf + (f_ "It is not possible to update the running script \ + setup.ml on Windows. Please update setup.ml by \ + running '%s'.") + (String.concat " " (oasis_exec :: "setup" :: t.oasis_setup_args)) + else + begin + OASISExec.run + ~ctxt:!BaseContext.default + ~f_exit_code: + (function + | 0 -> + () + | n -> + failwithf + (f_ "Unable to update setup.ml using '%s', \ + please fix the problem and retry.") + oasis_exec) + oasis_exec ("setup" :: t.oasis_setup_args); + OASISExec.run ~ctxt:!BaseContext.default ocaml (setup_ml :: args) + end + end + else + failwithf + (f_ "The version of '%s' (v%s) doesn't match the version of \ + oasis used to generate the %s file. Please install at \ + least oasis v%s.") + oasis_exec oasis_exec_version setup_ml t.oasis_version + in + + if !update_setup_ml then + begin + try + match t.oasis_digest with + | Some dgst -> + if Sys.file_exists oasis_fn && dgst <> Digest.file "_oasis" then + begin + do_update (); + true + end + else + false + | None -> + false + with e -> + error + (f_ "Error when updating setup.ml. If you want to avoid this error, \ + you can bypass the update of %s by running '%s %s %s %s'") + setup_ml ocaml setup_ml no_update_setup_ml_cli + (String.concat " " args); + raise e + end + else + false + let setup t = let catch_exn = ref true @@ -3898,7 +4344,7 @@ module BaseSetup = struct (f_ "No action defined, run '%s %s -help'") Sys.executable_name Sys.argv.(0)) - + in let extra_args_ref = ref [] @@ -3910,75 +4356,80 @@ module BaseSetup = struct Arg.Tuple [ Arg.Rest (fun str -> extra_args_ref := str :: !extra_args_ref); - + Arg.Unit (fun () -> allow_empty_env_ref := allow_empty_env; act_ref := act); ] in - + Arg.parse (Arg.align - [ + ([ "-configure", arg_handle ~allow_empty_env:true configure, s_ "[options*] Configure the whole build process."; - + "-build", arg_handle build, s_ "[options*] Build executables and libraries."; - + "-doc", arg_handle doc, s_ "[options*] Build documents."; - + "-test", arg_handle test, s_ "[options*] Run tests."; - + "-all", arg_handle ~allow_empty_env:true all, s_ "[options*] Run configure, build, doc and test targets."; - + "-install", arg_handle install, s_ "[options*] Install libraries, data, executables \ and documents."; - + "-uninstall", arg_handle uninstall, s_ "[options*] Uninstall libraries, data, executables \ and documents."; - + "-reinstall", arg_handle reinstall, s_ "[options*] Uninstall and install libraries, data, \ executables and documents."; - + "-clean", arg_handle ~allow_empty_env:true clean, s_ "[options*] Clean files generated by a build."; - + "-distclean", arg_handle ~allow_empty_env:true distclean, s_ "[options*] Clean files generated by a build and configure."; - + "-version", arg_handle ~allow_empty_env:true version, s_ " Display version of OASIS used to generate this setup.ml."; - + "-no-catch-exn", Arg.Clear catch_exn, s_ " Don't catch exception, useful for debugging."; ] - @ (BaseContext.args ())) + @ + (if t.setup_update then + [no_update_setup_ml_cli] + else + []) + @ (BaseContext.args ()))) (failwithf (f_ "Don't know what to do with '%s'")) (s_ "Setup and run build process current package\n"); - + (* Build initial environment *) load ~allow_empty:!allow_empty_env_ref (); - + (** Initialize flags *) List.iter (function @@ -4009,90 +4460,37 @@ module BaseSetup = struct | _ -> ()) t.package.sections; - + BaseStandardVar.init t.package; - + BaseDynVar.init t.package; - - !act_ref t (Array.of_list (List.rev !extra_args_ref)) - + + if t.setup_update && update_setup_ml t then + () + else + !act_ref t (Array.of_list (List.rev !extra_args_ref)) + with e when !catch_exn -> error "%s" (Printexc.to_string e); exit 1 - -end -module BaseDev = struct -# 21 "/Users/dbuenzli/tmp/ocaml/oasis-0.3.0~rc2/src/base/BaseDev.ml" - - - - open OASISGettext - open BaseMessage - - type t = - { - oasis_cmd: string; - } - - let update_and_run t = - (* Command line to run setup-dev *) - let oasis_args = - "setup-dev" :: "-run" :: - Sys.executable_name :: - (Array.to_list Sys.argv) - in - - let exit_on_child_error = - function - | 0 -> () - | 2 -> - (* Bad CLI arguments *) - error - (f_ "The command '%s %s' exit with code 2. It often means that we \ - don't use the right command-line arguments, rerun \ - 'oasis setup-dev'.") - t.oasis_cmd - (String.concat " " oasis_args) - - | 127 -> - (* Cannot find OASIS *) - error - (f_ "Cannot find executable '%s', check where 'oasis' is located \ - and rerun 'oasis setup-dev'") - t.oasis_cmd - - | i -> - exit i - in - - let () = - (* Run OASIS to generate a temporary setup.ml - *) - BaseExec.run - ~f_exit_code:exit_on_child_error - t.oasis_cmd - oasis_args - in - - () - end +# 4480 "setup.ml" module InternalConfigurePlugin = struct -# 21 "/Users/dbuenzli/tmp/ocaml/oasis-0.3.0~rc2/src/plugins/internal/InternalConfigurePlugin.ml" - +# 21 "/Users/dbuenzli/.odb/install-oasis/oasis-0.3.0/src/plugins/internal/InternalConfigurePlugin.ml" + (** Configure using internal scheme @author Sylvain Le Gall *) - + open BaseEnv open OASISTypes open OASISUtils open OASISGettext open BaseMessage - + (** Configure build using provided series of check to be done * and then output corresponding file. *) @@ -4103,15 +4501,15 @@ module InternalConfigurePlugin = struct in () in - + let errors = ref SetString.empty in - + let buff = Buffer.create 13 in - + let add_errors fmt = Printf.kbprintf (fun b -> @@ -4120,11 +4518,11 @@ module InternalConfigurePlugin = struct buff fmt in - + let warn_exception e = warning "%s" (Printexc.to_string e) in - + (* Check tools *) let check_tools lst = List.iter @@ -4154,7 +4552,7 @@ module InternalConfigurePlugin = struct pkg.sections) lst in - + let build_checks sct bs = if var_choose bs.bs_build then begin @@ -4168,10 +4566,10 @@ module InternalConfigurePlugin = struct (f_ "Section %s requires native compilation") (OASISSection.string_of_section sct) end; - + (* Check tools *) check_tools bs.bs_build_tools; - + (* Check depends *) List.iter (function @@ -4211,10 +4609,10 @@ module InternalConfigurePlugin = struct bs.bs_build_depends end in - + (* Parse command line *) BaseArgExt.parse argv (BaseEnv.args ()); - + (* OCaml version *) begin match pkg.ocaml_version with @@ -4236,7 +4634,7 @@ module InternalConfigurePlugin = struct | None -> () end; - + (* Findlib version *) begin match pkg.findlib_version with @@ -4258,7 +4656,18 @@ module InternalConfigurePlugin = struct | None -> () end; - + + (* FlexDLL *) + if BaseStandardVar.os_type () = "Win32" || + BaseStandardVar.os_type () = "Cygwin" then + begin + try + var_ignore_eval BaseStandardVar.flexlink + with e -> + warn_exception e; + add_errors (f_ "Cannot find 'flexlink'") + end; + (* Check build depends *) List.iter (function @@ -4274,7 +4683,27 @@ module InternalConfigurePlugin = struct | _ -> ()) pkg.sections; - + + (* Check if we need native dynlink (presence of libraries that compile to + * native) + *) + begin + let has_cmxa = + List.exists + (function + | Library (_, bs, _) -> + var_choose bs.bs_build && + (bs.bs_compiled_object = Native || + (bs.bs_compiled_object = Best && + bool_of_string (BaseStandardVar.is_native ()))) + | _ -> + false) + pkg.sections + in + if has_cmxa then + var_ignore_eval BaseStandardVar.native_dynlink + end; + (* Check errors *) if SetString.empty != !errors then begin @@ -4288,16 +4717,16 @@ module InternalConfigurePlugin = struct (SetString.cardinal !errors)) (SetString.cardinal !errors) end - + end module InternalInstallPlugin = struct -# 21 "/Users/dbuenzli/tmp/ocaml/oasis-0.3.0~rc2/src/plugins/internal/InternalInstallPlugin.ml" - +# 21 "/Users/dbuenzli/.odb/install-oasis/oasis-0.3.0/src/plugins/internal/InternalInstallPlugin.ml" + (** Install using internal scheme @author Sylvain Le Gall *) - + open BaseEnv open BaseStandardVar open BaseMessage @@ -4305,27 +4734,92 @@ module InternalInstallPlugin = struct open OASISLibrary open OASISGettext open OASISUtils - + let exec_hook = ref (fun (cs, bs, exec) -> cs, bs, exec) - + let lib_hook = ref (fun (cs, bs, lib) -> cs, bs, lib, []) - + let doc_hook = ref (fun (cs, doc) -> cs, doc) - + let install_file_ev = "install-file" - + let install_dir_ev = "install-dir" - + let install_findlib_ev = "install-findlib" - + + let win32_max_command_line_length = 8000 + + let split_install_command ocamlfind findlib_name meta files = + if Sys.os_type = "Win32" then + (* Arguments for the first command: *) + let first_args = ["install"; findlib_name; meta] in + (* Arguments for remaining commands: *) + let other_args = ["install"; findlib_name; "-add"] in + (* Extract as much files as possible from [files], [len] is + the current command line length: *) + let rec get_files len acc files = + match files with + | [] -> + (List.rev acc, []) + | file :: rest -> + let len = len + 1 + String.length file in + if len > win32_max_command_line_length then + (List.rev acc, files) + else + get_files len (file :: acc) rest + in + (* Split the command into several commands. *) + let rec split args files = + match files with + | [] -> + [] + | _ -> + (* Length of "ocamlfind install <lib> [META|-add]" *) + let len = + List.fold_left + (fun len arg -> + len + 1 (* for the space *) + String.length arg) + (String.length ocamlfind) + args + in + match get_files len [] files with + | ([], _) -> + failwith (s_ "Command line too long.") + | (firsts, others) -> + let cmd = args @ firsts in + (* Use -add for remaining commands: *) + let () = + let findlib_ge_132 = + OASISVersion.comparator_apply + (OASISVersion.version_of_string + (BaseStandardVar.findlib_version ())) + (OASISVersion.VGreaterEqual + (OASISVersion.version_of_string "1.3.2")) + in + if not findlib_ge_132 then + failwithf + (f_ "Installing the library %s require to use the flag \ + '-add' of ocamlfind because the command line is too \ + long. This flag is only available for findlib 1.3.2. \ + Please upgrade findlib from %s to 1.3.2") + findlib_name (BaseStandardVar.findlib_version ()) + in + let cmds = split other_args others in + cmd :: cmds + in + (* The first command does not use -add: *) + split first_args files + else + ["install" :: findlib_name :: meta :: files] + let install pkg argv = - + let in_destdir = try let destdir = @@ -4338,7 +4832,7 @@ module InternalInstallPlugin = struct with PropList.Not_set _ -> fun fn -> fn in - + let install_file ?tgt_fn src_file envdir = let tgt_dir = in_destdir (envdir ()) @@ -4353,27 +4847,29 @@ module InternalInstallPlugin = struct Filename.basename src_file) in (* Create target directory if needed *) - BaseFileUtil.mkdir_parent + OASISFileUtil.mkdir_parent + ~ctxt:!BaseContext.default (fun dn -> info (f_ "Creating directory '%s'") dn; BaseLog.register install_dir_ev dn) tgt_dir; - + (* Really install files *) info (f_ "Copying file '%s' to '%s'") src_file tgt_file; - BaseFileUtil.cp src_file tgt_file; + OASISFileUtil.cp ~ctxt:!BaseContext.default src_file tgt_file; BaseLog.register install_file_ev tgt_file in - + (* Install data into defined directory *) let install_data srcdir lst tgtdir = let tgtdir = - BaseFilePath.of_unix (var_expand tgtdir) + OASISHostPath.of_unix (var_expand tgtdir) in List.iter (fun (src, tgt_opt) -> let real_srcs = - BaseFileUtil.glob + OASISFileUtil.glob + ~ctxt:!BaseContext.default (Filename.concat srcdir src) in if real_srcs = [] then @@ -4387,16 +4883,16 @@ module InternalInstallPlugin = struct (fun () -> match tgt_opt with | Some s -> - BaseFilePath.of_unix (var_expand s) + OASISHostPath.of_unix (var_expand s) | None -> tgtdir)) real_srcs) lst in - + (** Install all libraries *) let install_libs pkg = - + let files_of_library (f_data, acc) data_lib = let cs, bs, lib, lib_extra = !lib_hook data_lib @@ -4411,13 +4907,13 @@ module InternalInstallPlugin = struct let acc = (* Add uncompiled header from the source tree *) let path = - BaseFilePath.of_unix bs.bs_path + OASISHostPath.of_unix bs.bs_path in List.fold_left (fun acc modul -> try List.find - Sys.file_exists + OASISFileUtil.file_exists_case (List.map (Filename.concat path) [modul^".mli"; @@ -4438,7 +4934,7 @@ module InternalInstallPlugin = struct acc lib.lib_modules in - + let acc = (* Get generated files *) BaseBuilt.fold @@ -4447,7 +4943,7 @@ module InternalInstallPlugin = struct (fun acc fn -> fn :: acc) acc in - + let f_data () = (* Install data associated with the library *) install_data @@ -4458,7 +4954,7 @@ module InternalInstallPlugin = struct pkg.name); f_data () in - + (f_data, acc) end else @@ -4466,7 +4962,7 @@ module InternalInstallPlugin = struct (f_data, acc) end in - + (* Install one group of library *) let install_group_lib grp = (* Iterate through all group nodes *) @@ -4483,22 +4979,22 @@ module InternalInstallPlugin = struct data_and_files children in - + (* Findlib name of the root library *) let findlib_name = findlib_of_group grp in - + (* Determine root library *) let root_lib = root_of_group grp in - + (* All files to install for this library *) let f_data, files = install_group_lib_aux (ignore, []) grp in - + (* Really install, if there is something to install *) if files = [] then begin @@ -4516,7 +5012,7 @@ module InternalInstallPlugin = struct let res = Filename.concat bs.bs_path "META" in - if not (Sys.file_exists res) then + if not (OASISFileUtil.file_exists_case res) then failwithf (f_ "Cannot find file '%s' for findlib library %s") res @@ -4554,23 +5050,33 @@ module InternalInstallPlugin = struct info (f_ "Installing findlib library '%s'") findlib_name; - BaseExec.run - (ocamlfind ()) - ("install" :: findlib_name :: meta :: files); + let ocamlfind = ocamlfind () in + let commands = + split_install_command + ocamlfind + findlib_name + meta + files + in + List.iter + (OASISExec.run ~ctxt:!BaseContext.default ocamlfind) + commands; BaseLog.register install_findlib_ev findlib_name end; - + (* Install data files *) f_data (); - + in - + + let group_libs, _, _ = + findlib_mapping pkg + in + (* We install libraries in groups *) - List.iter - install_group_lib - (group_libs pkg) + List.iter install_group_lib group_libs in - + let install_execs pkg = let install_exec data_exec = let (cs, bs, exec) = @@ -4589,7 +5095,7 @@ module InternalInstallPlugin = struct cs.cs_name (fun () fn -> install_file - ~tgt_fn:cs.cs_name + ~tgt_fn:(cs.cs_name ^ ext_program ()) fn bindir) (); @@ -4617,7 +5123,7 @@ module InternalInstallPlugin = struct ()) pkg.sections in - + let install_docs pkg = let install_doc data = let (cs, doc) = @@ -4627,7 +5133,7 @@ module InternalInstallPlugin = struct BaseBuilt.is_built BaseBuilt.BDoc cs.cs_name then begin let tgt_dir = - BaseFilePath.of_unix (var_expand doc.doc_install_dir) + OASISHostPath.of_unix (var_expand doc.doc_install_dir) in BaseBuilt.fold BaseBuilt.BDoc @@ -4651,18 +5157,18 @@ module InternalInstallPlugin = struct ()) pkg.sections in - + install_libs pkg; install_execs pkg; install_docs pkg - + (* Uninstall already installed data *) let uninstall _ argv = List.iter (fun (ev, data) -> if ev = install_file_ev then begin - if Sys.file_exists data then + if OASISFileUtil.file_exists_case data then begin info (f_ "Removing file '%s'") @@ -4685,7 +5191,7 @@ module InternalInstallPlugin = struct info (f_ "Removing directory '%s'") data; - BaseFileUtil.rmdir data + OASISFileUtil.rmdir ~ctxt:!BaseContext.default data end else begin @@ -4708,7 +5214,8 @@ module InternalInstallPlugin = struct else if ev = install_findlib_ev then begin info (f_ "Removing findlib library '%s'") data; - BaseExec.run (ocamlfind ()) ["remove"; data] + OASISExec.run ~ctxt:!BaseContext.default + (ocamlfind ()) ["remove"; data] end else failwithf (f_ "Unknown log event '%s'") ev; @@ -4719,29 +5226,30 @@ module InternalInstallPlugin = struct [install_file_ev; install_dir_ev; install_findlib_ev;])) - + end +# 5233 "setup.ml" module OCamlbuildCommon = struct -# 21 "/Users/dbuenzli/tmp/ocaml/oasis-0.3.0~rc2/src/plugins/ocamlbuild/OCamlbuildCommon.ml" - +# 21 "/Users/dbuenzli/.odb/install-oasis/oasis-0.3.0/src/plugins/ocamlbuild/OCamlbuildCommon.ml" + (** Functions common to OCamlbuild build and doc plugin *) - + open OASISGettext open BaseEnv open BaseStandardVar - + let ocamlbuild_clean_ev = "ocamlbuild-clean" - + let ocamlbuildflags = var_define ~short_desc:(fun () -> "OCamlbuild additional flags") "ocamlbuildflags" (fun () -> "") - + (** Fix special arguments depending on environment *) let fix_args args extra_argv = List.flatten @@ -4756,7 +5264,7 @@ module OCamlbuildCommon = struct ] else []; - + if not (bool_of_string (is_native ())) || (os_type ()) = "Win32" then [ "-byte-plugin" @@ -4764,22 +5272,22 @@ module OCamlbuildCommon = struct else []; args; - + if bool_of_string (debug ()) then ["-tag"; "debug"] else []; - + if bool_of_string (profile ()) then ["-tag"; "profile"] else []; - - OASISUtils.split ' ' (ocamlbuildflags ()); - + + OASISString.nsplit (ocamlbuildflags ()) ' '; + Array.to_list extra_argv; ] - + (** Run 'ocamlbuild -clean' if not already done *) let run_clean extra_argv = let extra_cli = @@ -4788,7 +5296,8 @@ module OCamlbuildCommon = struct (* Run if never called with these args *) if not (BaseLog.exists ocamlbuild_clean_ev extra_cli) then begin - BaseExec.run (ocamlbuild ()) (fix_args ["-clean"] extra_argv); + OASISExec.run ~ctxt:!BaseContext.default + (ocamlbuild ()) (fix_args ["-clean"] extra_argv); BaseLog.register ocamlbuild_clean_ev extra_cli; at_exit (fun () -> @@ -4797,17 +5306,18 @@ module OCamlbuildCommon = struct with _ -> ()) end - + (** Run ocamlbuild, unregister all clean events *) let run_ocamlbuild args extra_argv = (* TODO: enforce that target in args must be UNIX encoded i.e. toto/index.html *) - BaseExec.run (ocamlbuild ()) (fix_args args extra_argv); + OASISExec.run ~ctxt:!BaseContext.default + (ocamlbuild ()) (fix_args args extra_argv); (* Remove any clean event, we must run it again *) List.iter (fun (e, d) -> BaseLog.unregister e d) (BaseLog.filter [ocamlbuild_clean_ev]) - + (** Determine real build directory *) let build_dir extra_argv = let rec search_args dir = @@ -4820,16 +5330,16 @@ module OCamlbuildCommon = struct dir in search_args "_build" (fix_args [] extra_argv) - + end module OCamlbuildPlugin = struct -# 21 "/Users/dbuenzli/tmp/ocaml/oasis-0.3.0~rc2/src/plugins/ocamlbuild/OCamlbuildPlugin.ml" - +# 21 "/Users/dbuenzli/.odb/install-oasis/oasis-0.3.0/src/plugins/ocamlbuild/OCamlbuildPlugin.ml" + (** Build using ocamlbuild @author Sylvain Le Gall *) - + open OASISTypes open OASISGettext open OASISUtils @@ -4837,24 +5347,24 @@ module OCamlbuildPlugin = struct open OCamlbuildCommon open BaseStandardVar open BaseMessage - + let cond_targets_hook = ref (fun lst -> lst) - + let build pkg argv = - + (* Return the filename in build directory *) let in_build_dir fn = Filename.concat (build_dir argv) fn in - + (* Return the unix filename in host build directory *) let in_build_dir_of_unix fn = - in_build_dir (BaseFilePath.of_unix fn) + in_build_dir (OASISHostPath.of_unix fn) in - + let cond_targets = List.fold_left (fun acc -> @@ -4866,7 +5376,7 @@ module OCamlbuildPlugin = struct in_build_dir_of_unix (cs, bs, lib) in - + let ends_with nd fn = let nd_len = String.length nd @@ -4878,7 +5388,7 @@ module OCamlbuildPlugin = struct (String.length fn - nd_len) nd_len) = nd in - + let tgts = List.flatten (List.filter @@ -4886,13 +5396,14 @@ module OCamlbuildPlugin = struct (List.map (List.filter (fun fn -> - ends_with ".cma" fn || - ends_with ".cmxa" fn || - ends_with (ext_lib ()) fn || - ends_with (ext_dll ()) fn)) + ends_with ".cma" fn + || ends_with ".cmxs" fn + || ends_with ".cmxa" fn + || ends_with (ext_lib ()) fn + || ends_with (ext_dll ()) fn)) unix_files)) in - + match tgts with | _ :: _ -> (evs, tgts) :: acc @@ -4901,7 +5412,7 @@ module OCamlbuildPlugin = struct (f_ "No possible ocamlbuild targets for library %s") cs.cs_name end - + | Executable (cs, bs, exec) when var_choose bs.bs_build -> begin let evs, unix_exec_is, unix_dll_opt = @@ -4909,12 +5420,12 @@ module OCamlbuildPlugin = struct in_build_dir_of_unix (cs, bs, exec) in - + let target ext = let unix_tgt = - (BaseFilePath.Unix.concat + (OASISUnixPath.concat bs.bs_path - (BaseFilePath.Unix.chop_extension + (OASISUnixPath.chop_extension exec.exec_main_is))^ext in let evs = @@ -4929,7 +5440,7 @@ module OCamlbuildPlugin = struct in evs, [unix_tgt] in - + (* Add executable *) let acc = match bs.bs_compiled_object with @@ -4943,7 +5454,7 @@ module OCamlbuildPlugin = struct in acc end - + | Library _ | Executable _ | Test _ | SrcRepo _ | Flag _ | Doc _ -> acc) @@ -4951,24 +5462,24 @@ module OCamlbuildPlugin = struct (* Keep the pkg.sections ordered *) (List.rev pkg.sections); in - + (* Check and register built files *) let check_and_register (bt, bnm, lst) = List.iter (fun fns -> - if not (List.exists Sys.file_exists fns) then + if not (List.exists OASISFileUtil.file_exists_case fns) then failwithf (f_ "No one of expected built files %s exists") (String.concat (s_ ", ") (List.map (Printf.sprintf "'%s'") fns))) lst; (BaseBuilt.register bt bnm lst) in - + let cond_targets = (* Run the hook *) !cond_targets_hook cond_targets in - + (* Run a list of target... *) run_ocamlbuild (List.flatten @@ -4978,8 +5489,8 @@ module OCamlbuildPlugin = struct List.iter check_and_register (List.flatten (List.map fst cond_targets)) - - + + let clean pkg extra_args = run_clean extra_args; List.iter @@ -4992,27 +5503,27 @@ module OCamlbuildPlugin = struct | _ -> ()) pkg.sections - + end module OCamlbuildDocPlugin = struct -# 21 "/Users/dbuenzli/tmp/ocaml/oasis-0.3.0~rc2/src/plugins/ocamlbuild/OCamlbuildDocPlugin.ml" - +# 21 "/Users/dbuenzli/.odb/install-oasis/oasis-0.3.0/src/plugins/ocamlbuild/OCamlbuildDocPlugin.ml" + (* Create documentation using ocamlbuild .odocl files @author Sylvain Le Gall *) - + open OASISTypes open OASISGettext open OASISMessage open OCamlbuildCommon open BaseStandardVar - - - + + + let doc_build path pkg (cs, doc) argv = let index_html = - BaseFilePath.Unix.make + OASISUnixPath.make [ path; cs.cs_name^".docdir"; @@ -5020,10 +5531,10 @@ module OCamlbuildDocPlugin = struct ] in let tgt_dir = - BaseFilePath.make + OASISHostPath.make [ build_dir argv; - BaseFilePath.of_unix path; + OASISHostPath.of_unix path; cs.cs_name^".docdir"; ] in @@ -5033,58 +5544,60 @@ module OCamlbuildDocPlugin = struct BaseBuilt.register BaseBuilt.BDoc cs.cs_name - [BaseFileUtil.glob + [OASISFileUtil.glob ~ctxt:!BaseContext.default (Filename.concat tgt_dir glb)]) ["*.html"; "*.css"] - + let doc_clean t pkg (cs, doc) argv = run_clean argv; BaseBuilt.unregister BaseBuilt.BDoc cs.cs_name - + end +# 5558 "setup.ml" module NonePlugin = struct -# 21 "/Users/dbuenzli/tmp/ocaml/oasis-0.3.0~rc2/src/plugins/none/NonePlugin.ml" - +# 21 "/Users/dbuenzli/.odb/install-oasis/oasis-0.3.0/src/plugins/none/NonePlugin.ml" + (** Plugin to handle "none" generation @author Sylvain Le Gall *) - + open OASISGettext open OASISUtils - + let not_implemented str _ _ = failwithf (f_ "No implementation for %s") str - + let section_not_implemented str pkg _ _ extra_args = not_implemented str pkg extra_args - + end +# 5578 "setup.ml" module CustomPlugin = struct -# 21 "/Users/dbuenzli/tmp/ocaml/oasis-0.3.0~rc2/src/plugins/custom/CustomPlugin.ml" - +# 21 "/Users/dbuenzli/.odb/install-oasis/oasis-0.3.0/src/plugins/custom/CustomPlugin.ml" + (** Generate custom configure/build/doc/test/install system @author *) - + open BaseEnv open OASISGettext open OASISTypes - - - + + + type t = { cmd_main: command_line conditional; cmd_clean: (command_line option) conditional; cmd_distclean: (command_line option) conditional; } - + let run = BaseCustom.run - + let main t _ extra_args = let cmd, args = var_choose @@ -5092,21 +5605,21 @@ module CustomPlugin = struct t.cmd_main in run cmd args extra_args - + let clean t pkg extra_args = match var_choose t.cmd_clean with | Some (cmd, args) -> run cmd args extra_args | _ -> () - + let distclean t pkg extra_args = match var_choose t.cmd_distclean with | Some (cmd, args) -> run cmd args extra_args | _ -> () - + module Build = struct let main t pkg extra_args = @@ -5119,7 +5632,7 @@ module CustomPlugin = struct begin let evs, _ = BaseBuilt.of_library - BaseFilePath.of_unix + OASISHostPath.of_unix (cs, bs, lib) in evs @@ -5128,7 +5641,7 @@ module CustomPlugin = struct begin let evs, _, _ = BaseBuilt.of_executable - BaseFilePath.of_unix + OASISHostPath.of_unix (cs, bs, exec) in evs @@ -5140,7 +5653,7 @@ module CustomPlugin = struct (fun (bt, bnm, lst) -> BaseBuilt.register bt bnm lst) evs) pkg.sections - + let clean t pkg extra_args = clean t pkg extra_args; (* TODO: this seems to be pretty generic (at least wrt to ocamlbuild @@ -5156,11 +5669,11 @@ module CustomPlugin = struct | _ -> ()) pkg.sections - + let distclean t pkg extra_args = distclean t pkg extra_args end - + module Test = struct let main t pkg (cs, test) extra_args = @@ -5173,31 +5686,32 @@ module CustomPlugin = struct cs.cs_name s; 1.0 - + let clean t pkg (cs, test) extra_args = clean t pkg extra_args - + let distclean t pkg (cs, test) extra_args = distclean t pkg extra_args end - + module Doc = struct let main t pkg (cs, _) extra_args = main t pkg extra_args; BaseBuilt.register BaseBuilt.BDoc cs.cs_name [] - + let clean t pkg (cs, _) extra_args = clean t pkg extra_args; BaseBuilt.unregister BaseBuilt.BDoc cs.cs_name - + let distclean t pkg (cs, _) extra_args = distclean t pkg extra_args end - + end +# 5714 "setup.ml" open OASISTypes;; let setup_t = @@ -5218,9 +5732,9 @@ let setup_t = doc = [ ("api", OCamlbuildDocPlugin.doc_build "doc"); - ("samples", NonePlugin.not_implemented "doc of section samples"); ("distribution", - NonePlugin.not_implemented "doc of section distribution") + NonePlugin.not_implemented "doc of section distribution"); + ("samples", NonePlugin.not_implemented "doc of section samples") ]; install = InternalInstallPlugin.install; uninstall = InternalInstallPlugin.uninstall; @@ -5256,14 +5770,15 @@ let setup_t = ocaml_version = Some (OASISVersion.VGreaterEqual "3.11.0"); findlib_version = None; name = "react"; - version = "0.9.3"; + version = "0.9.4"; license = OASISLicense.DEP5License - { - OASISLicense.license = "BSD3"; - exceptions = []; - version = OASISLicense.NoVersion; - }; + (OASISLicense.DEP5Unit + { + OASISLicense.license = "BSD3"; + excption = None; + version = OASISLicense.NoVersion; + }); license_file = None; copyrights = ["(c) 2009-2012 Daniel C. Bünzli"]; maintainers = []; @@ -5367,51 +5882,6 @@ let setup_t = bs_nativeopt = [(OASISExpr.EBool true, [])]; }, {exec_custom = false; exec_main_is = "clock.ml"; }); - SrcRepo - ({ - cs_name = "head"; - cs_data = PropList.Data.create (); - cs_plugin_data = []; - }, - { - src_repo_type = Git; - src_repo_location = - "git://erratique.ch/repos/react.git"; - src_repo_browser = - Some "http://erratique.ch/repos/react"; - src_repo_module = None; - src_repo_branch = None; - src_repo_tag = None; - src_repo_subdir = None; - }); - Doc - ({ - cs_name = "api"; - cs_data = PropList.Data.create (); - cs_plugin_data = []; - }, - { - doc_type = (`Doc, "ocamlbuild", Some "0.3"); - doc_custom = - { - pre_command = [(OASISExpr.EBool true, None)]; - post_command = [(OASISExpr.EBool true, None)]; - }; - doc_build = - [ - (OASISExpr.EBool true, false); - (OASISExpr.EFlag "docs", true) - ]; - doc_install = [(OASISExpr.EBool true, true)]; - doc_install_dir = "$docdir"; - doc_title = "React's documentation and API reference"; - doc_authors = []; - doc_abstract = None; - doc_format = OtherDoc; - doc_data_files = []; - doc_build_tools = - [ExternalTool "ocamlbuild"; ExternalTool "ocamldoc"]; - }); Executable ({ cs_name = "breakout"; @@ -5439,6 +5909,29 @@ let setup_t = bs_nativeopt = [(OASISExpr.EBool true, [])]; }, {exec_custom = false; exec_main_is = "breakout.ml"; }); + Executable + ({ + cs_name = "test"; + cs_data = PropList.Data.create (); + cs_plugin_data = []; + }, + { + bs_build = [(OASISExpr.EBool true, true)]; + bs_install = [(OASISExpr.EBool true, false)]; + bs_path = "test"; + bs_compiled_object = Best; + bs_build_depends = [InternalLibrary "react"]; + bs_build_tools = [ExternalTool "ocamlbuild"]; + bs_c_sources = []; + bs_data_files = []; + bs_ccopt = [(OASISExpr.EBool true, [])]; + bs_cclib = [(OASISExpr.EBool true, [])]; + bs_dlllib = [(OASISExpr.EBool true, [])]; + bs_dllpath = [(OASISExpr.EBool true, [])]; + bs_byteopt = [(OASISExpr.EBool true, [])]; + bs_nativeopt = [(OASISExpr.EBool true, [])]; + }, + {exec_custom = false; exec_main_is = "test.ml"; }); Test ({ cs_name = "test"; @@ -5456,19 +5949,19 @@ let setup_t = test_working_directory = None; test_run = [ - (OASISExpr.EBool true, false); + (OASISExpr.ENot (OASISExpr.EFlag "tests"), false); (OASISExpr.EFlag "tests", true) ]; test_tools = [ExternalTool "ocamlbuild"]; }); Doc ({ - cs_name = "samples"; + cs_name = "api"; cs_data = PropList.Data.create (); cs_plugin_data = []; }, { - doc_type = (`Doc, "none", Some "0.3"); + doc_type = (`Doc, "ocamlbuild", Some "0.3"); doc_custom = { pre_command = [(OASISExpr.EBool true, None)]; @@ -5476,44 +5969,49 @@ let setup_t = }; doc_build = [ - (OASISExpr.EBool true, false); + (OASISExpr.ENot (OASISExpr.EFlag "docs"), false); (OASISExpr.EFlag "docs", true) ]; doc_install = [(OASISExpr.EBool true, true)]; doc_install_dir = "$docdir"; - doc_title = "\"React's sample code\""; + doc_title = "React's documentation and API reference"; doc_authors = []; doc_abstract = None; doc_format = OtherDoc; - doc_data_files = [("test/*.ml", None)]; - doc_build_tools = [ExternalTool "ocamlbuild"]; + doc_data_files = []; + doc_build_tools = + [ExternalTool "ocamlbuild"; ExternalTool "ocamldoc"]; }); - Executable + Doc ({ - cs_name = "test"; + cs_name = "distribution"; cs_data = PropList.Data.create (); cs_plugin_data = []; }, { - bs_build = [(OASISExpr.EBool true, true)]; - bs_install = [(OASISExpr.EBool true, false)]; - bs_path = "test"; - bs_compiled_object = Best; - bs_build_depends = [InternalLibrary "react"]; - bs_build_tools = [ExternalTool "ocamlbuild"]; - bs_c_sources = []; - bs_data_files = []; - bs_ccopt = [(OASISExpr.EBool true, [])]; - bs_cclib = [(OASISExpr.EBool true, [])]; - bs_dlllib = [(OASISExpr.EBool true, [])]; - bs_dllpath = [(OASISExpr.EBool true, [])]; - bs_byteopt = [(OASISExpr.EBool true, [])]; - bs_nativeopt = [(OASISExpr.EBool true, [])]; - }, - {exec_custom = false; exec_main_is = "test.ml"; }); + doc_type = (`Doc, "none", Some "0.3"); + doc_custom = + { + pre_command = [(OASISExpr.EBool true, None)]; + post_command = [(OASISExpr.EBool true, None)]; + }; + doc_build = + [ + (OASISExpr.ENot (OASISExpr.EFlag "docs"), false); + (OASISExpr.EFlag "docs", true) + ]; + doc_install = [(OASISExpr.EBool true, true)]; + doc_install_dir = "$docdir"; + doc_title = "\"React's README and CHANGES files\""; + doc_authors = []; + doc_abstract = None; + doc_format = OtherDoc; + doc_data_files = [("README CHANGES", None)]; + doc_build_tools = [ExternalTool "ocamlbuild"]; + }); Doc ({ - cs_name = "distribution"; + cs_name = "samples"; cs_data = PropList.Data.create (); cs_plugin_data = []; }, @@ -5526,28 +6024,50 @@ let setup_t = }; doc_build = [ - (OASISExpr.EBool true, false); + (OASISExpr.ENot (OASISExpr.EFlag "docs"), false); (OASISExpr.EFlag "docs", true) ]; doc_install = [(OASISExpr.EBool true, true)]; doc_install_dir = "$docdir"; - doc_title = "\"React's README and CHANGES files\""; + doc_title = "\"React's sample code\""; doc_authors = []; doc_abstract = None; doc_format = OtherDoc; - doc_data_files = [("README CHANGES", None)]; + doc_data_files = [("test/*.ml", None)]; doc_build_tools = [ExternalTool "ocamlbuild"]; + }); + SrcRepo + ({ + cs_name = "head"; + cs_data = PropList.Data.create (); + cs_plugin_data = []; + }, + { + src_repo_type = Git; + src_repo_location = + "git://erratique.ch/repos/react.git"; + src_repo_browser = + Some "http://erratique.ch/repos/react"; + src_repo_module = None; + src_repo_branch = None; + src_repo_tag = None; + src_repo_subdir = None; }) ]; plugins = [(`Extra, "META", Some "0.3")]; schema_data = PropList.Data.create (); plugin_data = []; }; - version = "0.3.0~rc2"; + oasis_fn = Some "_oasis"; + oasis_version = "0.3.0"; + oasis_digest = Some "RÖH\127±\015tÝPX68Ý\002\025Á"; + oasis_exec = None; + oasis_setup_args = []; + setup_update = false; };; let setup () = BaseSetup.setup setup_t;; -# 5552 "setup.ml" +# 6072 "setup.ml" (* OASIS_STOP *) let () = setup ();; @@ -1,9 +1,11 @@ # OASIS_START -# DO NOT EDIT (digest: 67e0b4b952e6b53c1b8d47309f63f507) -version = "0.9.3" +# DO NOT EDIT (digest: d8fbd39ff38100842999af9571ea8121) +version = "0.9.4" description = "Declarative events and signals for OCaml" archive(byte) = "react.cma" +archive(byte, plugin) = "react.cma" archive(native) = "react.cmxa" +archive(native, plugin) = "react.cmxs" exists_if = "react.cma" # OASIS_STOP diff --git a/src/react.ml b/src/react.ml index ea4dfe3..402ed55 100644 --- a/src/react.ml +++ b/src/react.ml @@ -1,7 +1,7 @@ (*--------------------------------------------------------------------------- Copyright (c) 2009-2012 Daniel C. Bünzli. All rights reserved. Distributed under a BSD3 license, see license at the end of the file. - react release 0.9.3 + react release 0.9.4 ---------------------------------------------------------------------------*) let err_max_rank = "maximal rank exceeded" diff --git a/src/react.mli b/src/react.mli index 0a2b5d8..8a0388c 100644 --- a/src/react.mli +++ b/src/react.mli @@ -1,7 +1,7 @@ (*--------------------------------------------------------------------------- Copyright (c) 2009-2012 Daniel C. Bünzli. All rights reserved. Distributed under a BSD3 license, see license at the end of the file. - react release 0.9.3 + react release 0.9.4 ---------------------------------------------------------------------------*) (** Declarative events and signals. @@ -16,7 +16,7 @@ {{:#ex}examples}. Open the module to use it, this defines only two types and modules in your scope. - {e Release 0.9.3 - Daniel Bünzli <daniel.buenzli at erratique.ch> } *) + {e Release 0.9.4 - Daniel Bünzli <daniel.buenzli at erratique.ch> } *) (** {1 Interface} *) |