comparison tests/stypes.ur @ 588:5803b4f041cb

Basic datatype reactives
author Adam Chlipala <adamc@hcoop.net>
date Thu, 01 Jan 2009 11:26:34 -0500
parents 4c899701bd28
children 102e81d975e3
comparison
equal deleted inserted replaced
587:4c899701bd28 588:5803b4f041cb
1 datatype color = Red | White | Blue
2
3 fun c2s c =
4 case c of
5 Red => "Red"
6 | White => "White"
7 | Blue => "Blue"
8
9 val show_color = mkShow c2s
10
11 datatype list a = Nil | Cons of a * list a
12
13 fun isNil (t ::: Type) (ls : list t) =
14 case ls of
15 Nil => True
16 | _ => False
17
18 fun delist (ls : list string) : xml body [] [] =
19 case ls of
20 Nil => <xml>Nil</xml>
21 | Cons (h, t) => <xml>{[h]} :: {delist t}</xml>
22
1 fun main () : transaction page = 23 fun main () : transaction page =
2 sInt <- source 0; 24 sInt <- source 0;
3 sFloat <- source 1.23; 25 sFloat <- source 1.23;
4 sBoth <- source (7, 42.1); 26 sBoth <- source (7, 42.1);
5 27
6 sOpt <- source None; 28 sOpt <- source None;
7 sBool <- source True; 29 sBool <- source True;
30
31 sColor <- source White;
32 sList <- source Nil;
8 33
9 return <xml><body> 34 return <xml><body>
10 <dyn signal={n <- signal sInt; return <xml>{[n + 3]}</xml>}/> <a onclick={set sInt 1}>Change</a><br/> 35 <dyn signal={n <- signal sInt; return <xml>{[n + 3]}</xml>}/> <a onclick={set sInt 1}>Change</a><br/>
11 36
12 <dyn signal={n <- signal sFloat; return <xml>{[n + 1.0]}</xml>}/> <a onclick={set sFloat 4.56}>Change</a><br/> 37 <dyn signal={n <- signal sFloat; return <xml>{[n + 1.0]}</xml>}/> <a onclick={set sFloat 4.56}>Change</a><br/>
23 <a onclick={set sOpt (Some 7)}>Change</a><br/> 48 <a onclick={set sOpt (Some 7)}>Change</a><br/>
24 49
25 <dyn signal={b <- signal sBool; return <xml>{[b]}</xml>}/> 50 <dyn signal={b <- signal sBool; return <xml>{[b]}</xml>}/>
26 <dyn signal={b <- signal sBool; if b then return <xml>Yes</xml> else return <xml>No</xml>}/> 51 <dyn signal={b <- signal sBool; if b then return <xml>Yes</xml> else return <xml>No</xml>}/>
27 <a onclick={set sBool False}>Change</a><br/> 52 <a onclick={set sBool False}>Change</a><br/>
53
54 <dyn signal={c <- signal sColor; return <xml>{[c]}</xml>}/>
55 <a onclick={set sColor Red}>Red</a>
56 <a onclick={set sColor White}>White</a>
57 <a onclick={set sColor Blue}>Blue</a><br/>
58
59 <dyn signal={ls <- signal sList; return <xml>{[isNil ls]}</xml>}/>
60 <a onclick={set sList (Cons ("A", Cons ("B", Nil)))}>Change</a><br/>
28 </body></xml> 61 </body></xml>