summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorGravatar Adam Chlipala <adamc@hcoop.net>2008-10-21 17:34:20 -0400
committerGravatar Adam Chlipala <adamc@hcoop.net>2008-10-21 17:34:20 -0400
commitbda701f557d0e9aadd4717dd4fd6a38ac8ceb1eb (patch)
treee4635d5a6f6b89dfa6beb1fcc253363184d2a01e
parentd4e5d7bbce0aac719ac2c6451e0a6bfb675ab641 (diff)
Rec demo
-rw-r--r--demo/prose4
-rw-r--r--demo/rec.ur7
-rw-r--r--demo/rec.urp2
-rw-r--r--demo/rec.urs1
-rw-r--r--lib/basis.urs1
5 files changed, 15 insertions, 0 deletions
diff --git a/demo/prose b/demo/prose
index fe4eb1ea..a22e1968 100644
--- a/demo/prose
+++ b/demo/prose
@@ -38,6 +38,10 @@ link.urp
<p>In <tt>link.ur</tt>, we see how easy it is to link to another page. The Ur/Web compiler guarantees that all links are valid. We just write some Ur/Web code inside an "antiquote" in our XML, denoting a transaction that will produce the new page if the link is clicked.</p>
+rec.urp
+
+<p>Crafting webs of interlinked pages is easy, using recursion.</p>
+
form.urp
<p>Here we see a basic form. The type system tracks which form inputs we include, and it enforces that the form handler function expects a record containing exactly those fields, with exactly the proper types.</p>
diff --git a/demo/rec.ur b/demo/rec.ur
new file mode 100644
index 00000000..a8084462
--- /dev/null
+++ b/demo/rec.ur
@@ -0,0 +1,7 @@
+fun main () = return <xml><body>
+ <a link={other ()}>Go to the other one!</a>
+</body></xml>
+
+and other () = return <xml><body>
+ <a link={main ()}>Return to <tt>main</tt>!</a>
+</body></xml>
diff --git a/demo/rec.urp b/demo/rec.urp
new file mode 100644
index 00000000..979d20d5
--- /dev/null
+++ b/demo/rec.urp
@@ -0,0 +1,2 @@
+
+rec
diff --git a/demo/rec.urs b/demo/rec.urs
new file mode 100644
index 00000000..6ac44e0b
--- /dev/null
+++ b/demo/rec.urs
@@ -0,0 +1 @@
+val main : unit -> transaction page
diff --git a/lib/basis.urs b/lib/basis.urs
index 212cccc6..53c4529d 100644
--- a/lib/basis.urs
+++ b/lib/basis.urs
@@ -333,6 +333,7 @@ val br : bodyTagStandalone []
val p : bodyTag []
val b : bodyTag []
val i : bodyTag []
+val tt : bodyTag []
val font : bodyTag [Size = int, Face = string]
val h1 : bodyTag []