annotate tests/jsinj.ur @ 596:d1ec54288b1a

Injected a polymorphic, recursive type
author Adam Chlipala <adamc@hcoop.net>
date Thu, 08 Jan 2009 10:15:45 -0500
parents 02c8ab9f3e8b
children d49d58a69877
rev   line source
adamc@590 1 fun getOpt (t ::: Type) (o : option t) (v : t) : t =
adamc@590 2 case o of
adamc@590 3 None => v
adamc@590 4 | Some x => x
adamc@590 5
adamc@595 6 datatype color = Red | White | Blue
adamc@595 7
adamc@595 8 fun colorToString c =
adamc@595 9 case c of
adamc@595 10 Red => "R"
adamc@595 11 | White => "W"
adamc@595 12 | Blue => "B"
adamc@595 13
adamc@595 14 val show_color = mkShow colorToString
adamc@595 15
adamc@596 16 datatype list a = Nil | Cons of a * list a
adamc@596 17
adamc@596 18 fun delist ls : xbody =
adamc@596 19 case ls of
adamc@596 20 Nil => <xml>Nil</xml>
adamc@596 21 | Cons (h, t) => <xml>{cdata h} :: {delist t}</xml>
adamc@596 22
adamc@591 23 cookie int : int
adamc@591 24 cookie float : float
adamc@592 25 cookie string : string
adamc@592 26 cookie bool : bool
adamc@593 27 cookie pair : int * float
adamc@594 28 cookie option : option int
adamc@595 29 cookie color : color
adamc@596 30 cookie list : list string
adamc@591 31
adamc@590 32 fun main () : transaction page =
adamc@590 33 n <- getCookie int;
adamc@591 34 n <- return (getOpt n 7);
adamc@591 35 sn <- source 6;
adamc@591 36
adamc@591 37 f <- getCookie float;
adamc@591 38 f <- return (getOpt f 1.23);
adamc@591 39 sf <- source 4.56;
adamc@591 40
adamc@592 41 s <- getCookie string;
adamc@592 42 s <- return (getOpt s "Hi");
adamc@592 43 ss <- source "Bye";
adamc@592 44
adamc@592 45 b <- getCookie bool;
adamc@592 46 b <- return (getOpt b True);
adamc@592 47 sb <- source False;
adamc@592 48
adamc@593 49 p <- getCookie pair;
adamc@593 50 p <- return (getOpt p (1, 2.3));
adamc@593 51 sp <- source (4, 5.6);
adamc@593 52
adamc@594 53 o <- getCookie option;
adamc@594 54 o <- return (getOpt o (Some 1));
adamc@595 55 so <- source None;
adamc@595 56
adamc@595 57 c <- getCookie color;
adamc@595 58 c <- return (getOpt c White);
adamc@595 59 sc <- source Blue;
adamc@594 60
adamc@596 61 l <- getCookie list;
adamc@596 62 l <- return (getOpt l (Cons ("A", Cons ("B", Nil))));
adamc@596 63 sl <- source Nil;
adamc@596 64
adamc@590 65 return <xml><body>
adamc@590 66 <dyn signal={n <- signal sn; return <xml>{[n]}</xml>}/>
adamc@591 67 <a onclick={set sn n}>CHANGE</a><br/>
adamc@591 68
adamc@591 69 <dyn signal={f <- signal sf; return <xml>{[f]}</xml>}/>
adamc@591 70 <a onclick={set sf f}>CHANGE</a><br/>
adamc@592 71
adamc@592 72 <dyn signal={s <- signal ss; return <xml>{[s]}</xml>}/>
adamc@592 73 <a onclick={set ss s}>CHANGE</a><br/>
adamc@592 74
adamc@592 75 <dyn signal={b <- signal sb; return <xml>{[b]}</xml>}/>
adamc@592 76 <a onclick={set sb b}>CHANGE</a><br/>
adamc@593 77
adamc@593 78 <dyn signal={p <- signal sp; return <xml>{[p.1]}, {[p.2]}</xml>}/>
adamc@593 79 <a onclick={set sp p}>CHANGE</a><br/>
adamc@594 80
adamc@595 81 <dyn signal={o <- signal so; case o of
adamc@594 82 None => return <xml>None</xml>
adamc@594 83 | Some x => return <xml>{[x]}</xml>}/>
adamc@595 84 <a onclick={set so o}>CHANGE</a><br/>
adamc@595 85
adamc@595 86 <dyn signal={c <- signal sc; return <xml>{[c]}</xml>}/>
adamc@595 87 <a onclick={set sc c}>CHANGE</a><br/>
adamc@596 88
adamc@596 89 <dyn signal={l <- signal sl; return <xml>{delist l}</xml>}/>
adamc@596 90 <a onclick={set sl l}>CHANGE</a><br/>
adamc@590 91 </body></xml>