summaryrefslogtreecommitdiff
path: root/doc
diff options
context:
space:
mode:
authorGravatar Adam Chlipala <adam@chlipala.net>2011-09-03 12:51:05 -0400
committerGravatar Adam Chlipala <adam@chlipala.net>2011-09-03 12:51:05 -0400
commitcd28ea2ee01ac023b7b1dfac39ae5ddf4ded5c4e (patch)
treed792d445b5fbc6b0a16eadef95d70510f9037dd6 /doc
parent3c860c3c95d4d085499fd01e3140f32aafbc1bd7 (diff)
An abstract type of IDs
Diffstat (limited to 'doc')
-rw-r--r--doc/manual.tex11
1 files changed, 11 insertions, 0 deletions
diff --git a/doc/manual.tex b/doc/manual.tex
index a3800e17..e6a96c05 100644
--- a/doc/manual.tex
+++ b/doc/manual.tex
@@ -1983,6 +1983,17 @@ $$\begin{array}{l}
\mt{val} \; \mt{onMouseup} : \mt{transaction} \; \mt{unit} \to \mt{transaction} \; \mt{unit}
\end{array}$$
+\subsubsection{Node IDs}
+
+There is an abstract type of node IDs that may be assigned to \cd{id} attributes of most HTML tags.
+
+$$\begin{array}{l}
+ \mt{type} \; \mt{id} \\
+ \mt{val} \; \mt{fresh} : \mt{transaction} \; \mt{id}
+\end{array}$$
+
+The \cd{fresh} function is allowed on both server and client, but there is no other way to create IDs, which includes lack of a way to force an ID to match a particular string. The only semantic importance of IDs within Ur/Web is in uses of the HTML \cd{<label>} tag. IDs play a much more central role in mainstream JavaScript programming, but Ur/Web uses a very different model to enable changes to particular nodes of a page tree, as the next manual subsection explains. IDs may still be useful in interfacing with JavaScript code (for instance, through Ur/Web's FFI).
+
\subsubsection{Functional-Reactive Page Generation}
Most approaches to ``AJAX''-style coding involve imperative manipulation of the DOM tree representing an HTML document's structure. Ur/Web follows the \emph{functional-reactive} approach instead. Programs may allocate mutable \emph{sources} of arbitrary types, and an HTML page is effectively a pure function over the latest values of the sources. The page is not mutated directly, but rather it changes automatically as the sources are mutated.