<div dir="ltr"><font face="monospace, monospace">I'm trying to do a very minimal example to get started using source / signal - based on some existing examples.</font><div><font face="monospace, monospace"><br></font></div><div><font face="monospace, monospace">(1) Existing example:</font></div><div><font face="monospace, monospace"><br></font></div><div><font face="monospace, monospace">I'm getting guidance from an existing example called cselect.ur:</font></div><div><font face="monospace, monospace"><br></font></div><div><font face="monospace, monospace">  <a href="https://github.com/urweb/urweb/blob/master/tests/cselect.ur">https://github.com/urweb/urweb/blob/master/tests/cselect.ur</a><br></font></div><div><font face="monospace, monospace"><br></font></div><div><font face="monospace, monospace"><div>fun main () =</div><div>    s <- source "";</div><div>    return <xml><body></div><div>      <cselect source={s} onchange={v <- get s; alert ("Now it's " ^ v)}></div><div>        <coption>Wilbur</coption></div><div>        <coption>Walbur</coption></div><div>      </cselect></div><div><br></div><div>      Hello, I'm <dyn signal={s <- signal s; return <xml>{[s]}</xml>}/>.</div><div>      I'll be your waiter for this evening.</div><div>    </body></xml></div><div><br></div><div><br></div><div>(2) Another existing example - the 'increment' demo:</div><div><br></div><div>  <a href="http://www.impredicative.com/ur/demo/increment.html">http://www.impredicative.com/ur/demo/increment.html</a><br></div></font></div><div><font face="monospace, monospace"><br></font></div><div><font face="monospace, monospace"><br></font></div><div><font face="monospace, monospace">(3) Initial coding attempt:</font></div><div><font face="monospace, monospace"><br></font></div><div><font face="monospace, monospace">I thought I could just make some minor modifications, to change the <cselect> in (1) to a <textbox>, as follows:</font></div><div><font face="monospace, monospace"><br></font></div><div><div style="font-family:monospace,monospace">fun main () =</div><div style="font-family:monospace,monospace">    s <- source "";</div><div style="font-family:monospace,monospace">    return <xml><body></div><div style="font-family:monospace,monospace">      <textbox source={s} onchange={v <- get s; alert ("Now it's " ^ v)}></div><div style="font-family:monospace,monospace">      </textbox></div><div style="font-family:monospace,monospace"><br></div><div style="font-family:monospace,monospace">      Hello, I'm <dyn signal={s <- signal s; return <xml>{[s]}</xml>}/>.</div><div style="font-family:monospace,monospace">    </body></xml><br></div></div><div><font face="monospace, monospace"><br></font></div><div><font face="monospace, monospace">However, this is giving lots of compile errors. </font></div><div><font face="monospace, monospace"><br></font></div><div><font face="monospace, monospace">I don't understand the correct way to connect the source and the signal together, along with the controls on the page, plus the code inside the curly brackets { } . </font></div><div><font face="monospace, monospace"><br></font></div><div><font face="monospace, monospace"><br></font></div><div><font face="monospace, monospace">(4) Ultimately, what I want to develop is:</font></div><div><font face="monospace, monospace"><br></font></div><div><font face="monospace, monospace">(a) a <textbox> on the client, called `txbx`, which the user can change by typing</font></div><div><font face="monospace, monospace"><br></font></div><div><font face="monospace, monospace">(b) a table `t` on the server, which will be "live-queryable" using the <textbox>:</font></div><div><font face="monospace, monospace"><br></font></div><div><font face="monospace, monospace">(c) when user types something different in the <textbox>, there is an <xml> fragment below the <textbox> which instantly changes:</font></div><div><font face="monospace, monospace"><br></font></div><div><font face="monospace, monospace">eg - the <xml> fragment might be something like this:</font></div><div><font face="monospace, monospace"><br></font></div><div><font face="monospace, monospace">  return queryX1 (SELECT Nam FROM t WHERE Nam LIKE '*' ^ {[txbx]} '*')</font></div><div><font face="monospace, monospace">                 (fn r => <xml>{[r.Nam]}<br/></xml>);</font></div><div><font face="monospace, monospace"><br></font></div><div><font face="monospace, monospace">I can't even get the simpler case (3) above to work. After I get (3) to work, then I can try (4).</font></div><div><font face="monospace, monospace"><br></font></div><div><font face="monospace, monospace"><br></font></div><div><font face="monospace, monospace">(5) Possibly elated work from 1998:</font></div><div><font face="monospace, monospace"><br></font></div><div><font face="monospace, monospace">Version 2.0 of a high-performance applicative / impredicative / functional columnar database called K from <a href="http://kx.com">kx.com</a> had a GUI which implemented something called "triggers" and "dependencies", similar to "sources" and "signals". </font></div><div><font face="monospace, monospace"><br></font></div><div><font face="monospace, monospace">The manual can still be read, via <a href="http://archive.org">archive.org</a>:</font></div><div><font face="monospace, monospace"><br></font></div><div><font face="monospace, monospace">  <a href="http://web.archive.org/web/20050504070651/http://www.kx.com/technical/documents/kreflite.pdf">http://web.archive.org/web/20050504070651/http://www.kx.com/technical/documents/kreflite.pdf</a><br></font></div><div><font face="monospace, monospace"><br></font></div><div><font face="monospace, monospace">Pages 35, 45 and 14 describe "dependencies" and "triggers" as used in the GUI:</font></div><div><font face="monospace, monospace"><br></font></div><div><font face="monospace, monospace">  <a href="https://github.com/kevinlawler/kona/issues/304">https://github.com/kevinlawler/kona/issues/304</a><br></font></div><div><font face="monospace, monospace"><br></font></div><div><font face="monospace, monospace">The syntax in K was a bit more limited than Ur/Web's: </font></div><div><font face="monospace, monospace"><br></font></div><div><font face="monospace, monospace"><div>Dependency:</div><div><br></div><div>  v..d: "b + c" </div><div><br></div><div>means:</div><div><br></div><div>  if b or c changes, then update v to equal b + c</div><div><br></div><div><br></div><div>Trigger:</div><div><br></div><div>  x..t: "pid 3: (`b; 0; :; x)"</div><div><br></div><div>means:</div><div><br></div><div>  if x changes, then execute "pid 3: (`b; 0; :; x)"</div><div><br></div><div>I think Ur/Web's source and signal syntax is more general than the syntax for dependencies and triggers in K from <a href="http://kx.com">kx.com</a>. However it can be interesting to compare this historical example of "dataflow". Meanwhile, due to the greater flexibility of Ur/Web's syntax, the programmer needs to take more care to correctly "wire" the pieces together. </div><div><br></div><div>This is where I'm getting confused - the "dataflow wiring" in minimal example (3) above!</div></font></div><div><font face="monospace, monospace"><br></font></div><div><font face="monospace, monospace"><br></font></div><div><font face="monospace, monospace">Thanks for any help!</font></div><div><font face="monospace, monospace"><br></font></div><div><font face="monospace, monospace">###</font></div></div>