diff tests/tryRpc.ur @ 1848:e15234fbb163

Basis.tryRpc
author Adam Chlipala <adam@chlipala.net>
date Tue, 16 Apr 2013 10:55:48 -0400
parents
children
line wrap: on
line diff
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/tests/tryRpc.ur	Tue Apr 16 10:55:48 2013 -0400
@@ -0,0 +1,46 @@
+fun isBeppo (s : string) : transaction string =
+    case s of
+        "Beppo" => return "Yup, that's him!"
+      | "Mephisto" => error <xml>Great googely moogely!</xml>
+      | _ => return "Who's that?"
+
+fun listOf (n : int) =
+    if n < 0 then
+        error <xml>Negative!</xml>
+    else if n = 0 then
+        return []
+    else
+        ls <- listOf (n - 1);
+        return (n :: ls)
+
+fun length ls =
+    case ls of
+        [] => 0
+      | _ :: ls' => 1 + length ls'
+
+fun main () : transaction page =
+    s <- source "";
+    ns <- source "";
+    return <xml><body>
+      <ctextbox source={s}/>
+      <button value="rpc" onclick={fn _ => v <- get s;
+                                      r <- rpc (isBeppo v);
+                                      alert r}/>
+      <button value="tryRpc" onclick={fn _ => v <- get s;
+                                         r <- tryRpc (isBeppo v);
+                                         case r of
+                                             None => alert "Faaaaaailure."
+                                           | Some r => alert ("Success: " ^ r)}/>
+
+      <hr/>
+
+      <ctextbox source={ns}/>
+      <button value="rpc" onclick={fn _ => v <- get ns;
+                                      r <- rpc (listOf (readError v));
+                                      alert (show (length r))}/>
+      <button value="tryRpc" onclick={fn _ => v <- get ns;
+                                         r <- tryRpc (listOf (readError v));
+                                         case r of
+                                             None => alert "Faaaaaailure."
+                                           | Some r => alert ("Success: " ^ show (length r))}/>
+    </body></xml>