changeset 465:ddd363e856ff

Cookie prose; fix bugs that broke demo compilation
author Adam Chlipala <adamc@hcoop.net>
date Thu, 06 Nov 2008 12:46:45 -0500
parents 91914c15a85b
children 1626dcba13ee
files demo/cookie.ur demo/prose src/mono_reduce.sml src/monoize.sml
diffstat 4 files changed, 22 insertions(+), 24 deletions(-) [+]
line wrap: on
line diff
--- a/demo/cookie.ur	Thu Nov 06 12:22:50 2008 -0500
+++ b/demo/cookie.ur	Thu Nov 06 12:46:45 2008 -0500
@@ -6,21 +6,16 @@
 
 fun main () =
     ro <- getCookie c;
-    let
-        val xml = case ro of
-                      None => <xml>No cookie set.</xml>
-                    | Some v => <xml>Cookie: A = {[v.A]}, B = {[v.B]}, C = {[v.C]}</xml>
-    in
-        return <xml><body>
-          {xml}<br/><br/>
+    return <xml><body>
+      {case ro of
+           None => <xml>No cookie set.</xml>
+         | Some v => <xml>Cookie: A = {[v.A]}, B = {[v.B]}, C = {[v.C]}</xml>}
+      <br/><br/>
 
-          <form>
-            A: <textbox{#A}/><br/>
-            B: <textbox{#B}/><br/>
-            C: <textbox{#C}/><br/>
-            <submit action={set}/>
-          </form>
-        </body></xml>
-    end
-
-
+      <form>
+        A: <textbox{#A}/><br/>
+        B: <textbox{#B}/><br/>
+        C: <textbox{#C}/><br/>
+        <submit action={set}/>
+      </form>
+    </body></xml>
--- a/demo/prose	Thu Nov 06 12:22:50 2008 -0500
+++ b/demo/prose	Thu Nov 06 12:46:45 2008 -0500
@@ -58,6 +58,12 @@
 
 <p>Here is an implementation of the tiny challenge problem from <a href="http://www.accursoft.co.uk/web/">this web framework comparison</a>.  Using nested function definitions, it is easy to persist state across clicks.</p>
 
+cookie.urp
+
+<p>Often, it is useful to associate persistent data with particular web clients.  Ur/Web includes an easy facility for using type-safe cookies.  This example shows how to use a form to set a named cookie.</p>
+
+<p>After setting the cookie, try browsing back to this demo from the main index.  The data you entered should still be there.</p>
+
 listShop.urp
 
 <p>This example shows off algebraic datatypes, parametric polymorphism, and functors.</p>
--- a/src/mono_reduce.sml	Thu Nov 06 12:22:50 2008 -0500
+++ b/src/mono_reduce.sml	Thu Nov 06 12:46:45 2008 -0500
@@ -352,9 +352,10 @@
                                          (EApp (b, liftExpInExp 0 e'), loc)), loc))
 
               | ELet (x, t, e', (EAbs (x', t' as (TRecord [], _), ran, e''), loc)) =>
-                if impure e' then
+                (*if impure e' then
                     e
-                else
+                else*)
+                (* Seems unsound in general without the check... should revisit later *)
                     EAbs (x', t', ran, (ELet (x, t, liftExpInExp 0 e', swapExpVars 0 e''), loc))
 
               | ELet (x, t, e', b) =>
--- a/src/monoize.sml	Thu Nov 06 12:22:50 2008 -0500
+++ b/src/monoize.sml	Thu Nov 06 12:46:45 2008 -0500
@@ -1565,13 +1565,9 @@
 
           | L.EFfiApp ("Basis", "nextval", [e]) =>
             let
-                val un = (L'.TRecord [], loc)
-                val int = (L'.TFfi ("Basis", "int"), loc)
                 val (e, fm) = monoExp (env, st, fm) e
             in
-                ((L'.EAbs ("_", un, int,
-                           (L'.ENextval (liftExpInExp 0 e), loc)), loc),
-                 fm)
+                ((L'.ENextval e, loc), fm)
             end
 
           | L.EApp (