Mercurial > urweb
comparison demo/prose @ 645:1b571a05874c
React demo
author | Adam Chlipala <adamc@hcoop.net> |
---|---|
date | Tue, 10 Mar 2009 11:18:01 -0400 |
parents | 8e17e6b615bd |
children | ae374df5ccbd |
comparison
equal
deleted
inserted
replaced
644:8e17e6b615bd | 645:1b571a05874c |
---|---|
189 alert.urp | 189 alert.urp |
190 | 190 |
191 <p>Ur/Web makes it easy to write code whose execution should be distributed between the web server and client web browsers. Server-side code is compiled to efficient native code, and client-side code is compiled to JavaScript. Ur/Web programmers don't need to worry about these details, because the language and standard library provide a uniform ML-like interface for the whole process.</p> | 191 <p>Ur/Web makes it easy to write code whose execution should be distributed between the web server and client web browsers. Server-side code is compiled to efficient native code, and client-side code is compiled to JavaScript. Ur/Web programmers don't need to worry about these details, because the language and standard library provide a uniform ML-like interface for the whole process.</p> |
192 | 192 |
193 <p>Here's an example of a button that, when clicked, opens an alert dialog on the client.</p> | 193 <p>Here's an example of a button that, when clicked, opens an alert dialog on the client.</p> |
194 | |
195 react.urp | |
196 | |
197 <p>Most client-side JavaScript programs modify page contents imperatively, but Ur/Web is based on functional-reactive programming instead. Programs allocate data sources and then describe the page as a pure function of those data sources. When the sources change, the page changes automatically.</p> | |
198 | |
199 <p>Here's an example where a button modifies a data source that affects some text on the page. The affected portion of the page is indicated with the pseudo-HTML tag <tt>dyn</tt>, whose <tt>signal</tt> attribute specifies one of these pure functions over mutable sources. A source containing data of type <tt>t</tt> has type <tt>source t</tt> and is created with the <tt>source</tt> operation within the <tt>transaction</tt> monad. Functions over sources are represented in the monad <tt>signal</tt>. Like in Haskell, we overload monad notations, so that the same return and bind operators can be used to write signals and transactions. The <tt>signal</tt> function coerces a source to a signal.</p> |