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>
|