diff demo/listEdit.ur @ 646:fb2a0e76dcef

ListEdit demo, minus prose
author Adam Chlipala <adamc@hcoop.net>
date Tue, 10 Mar 2009 12:44:40 -0400
parents
children e6bc6bbd7a32
line wrap: on
line diff
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/demo/listEdit.ur	Tue Mar 10 12:44:40 2009 -0400
@@ -0,0 +1,54 @@
+datatype rlist = Nil | Cons of {Data : source string,
+                                NewData : source string,
+                                Tail : source rlist}
+
+fun showString ss =
+    s <- signal ss;
+    return <xml>{[s]}</xml>
+
+fun show rls =
+    v <- signal rls;
+    show' v
+
+and show' rl =
+    case rl of
+        Nil => return <xml/>
+      | Cons {Data = ss, NewData = ss', Tail = rls} => return <xml>
+        <dyn signal={showString ss}/>
+        <button value="Change to:" onclick={s <- get ss'; set ss s}/>
+        <ctextbox source={ss'}/><br/>
+        <dyn signal={show rls}/>
+      </xml>
+
+fun main () =
+    head <- source Nil;
+    tailP <- source head;
+    data <- source "";
+
+    let
+        fun add () =
+            data <- get data;
+            data <- source data;
+            ndata <- source "";
+            tail <- get tailP;
+            tail' <- source Nil;
+
+            let
+                val cons = Cons {Data = data, NewData = ndata, Tail = tail'}
+            in
+                set tail cons;
+                set tailP tail';
+
+                head' <- get head;
+                case head' of
+                    Nil => set head cons
+                  | _ => return ()
+            end
+    in
+        return <xml><body>
+          <ctextbox source={data}/> <button value="Add" onclick={add ()}/><br/>
+          <br/>
+
+          <dyn signal={show head}/>
+        </body></xml>
+    end