adamc@674
|
1 datatype pair a b = Pair of a * b
|
adamc@211
|
2
|
adamc@674
|
3 structure M : sig
|
adamc@674
|
4 class default
|
adamc@674
|
5 val get : t ::: Type -> default t -> t
|
adamc@211
|
6
|
adamc@674
|
7 val string_default : default string
|
adamc@674
|
8 val int_default : default int
|
adamc@212
|
9
|
adamc@674
|
10 val option_default : t ::: Type -> default t -> default (option t)
|
adamc@674
|
11 val pair_default : a ::: Type -> b ::: Type -> default a -> default b -> default (pair a b)
|
adamc@675
|
12
|
adamc@675
|
13 class awesome
|
adamc@675
|
14 val awesome_default : t ::: Type -> awesome t -> default t
|
adamc@675
|
15
|
adamc@675
|
16 val float_awesome : awesome float
|
adamc@674
|
17 end = struct
|
adamc@674
|
18 class default t = t
|
adamc@674
|
19 fun get (t ::: Type) (x : t) = x
|
adamc@212
|
20
|
adamc@674
|
21 val string_default = "Hi"
|
adamc@674
|
22 val int_default = 0
|
adamc@674
|
23
|
adamc@674
|
24 fun option_default (t ::: Type) (x : t) = Some x
|
adamc@674
|
25 fun pair_default (a ::: Type) (b ::: Type) (x : a) (y : b) = Pair (x, y)
|
adamc@675
|
26
|
adamc@675
|
27 class awesome t = t
|
adamc@675
|
28 fun awesome_default (t ::: Type) (x : t) = x
|
adamc@675
|
29
|
adamc@675
|
30 val float_awesome = 1.23
|
adamc@674
|
31 end
|
adamc@674
|
32
|
adamc@674
|
33 open M
|
adamc@674
|
34
|
adamc@674
|
35 fun default (t ::: Type) (_ : default t) : t = get
|
adamc@674
|
36 val hi : string = default
|
adamc@674
|
37 val zero : int = default
|
adamc@674
|
38 val some_zero : option int = default
|
adamc@674
|
39 val hi_zero : pair string int = default
|
adamc@675
|
40 val ott : float = default
|
adamc@674
|
41
|
adamc@674
|
42 fun frob (t ::: Type) (_ : default t) : t = default
|
adamc@674
|
43 val hi_again : string = frob
|
adamc@674
|
44 val zero_again : int = frob
|
adamc@674
|
45
|
adamc@674
|
46 fun show_option (t ::: Type) (_ : show t) : show (option t) =
|
adamc@674
|
47 mkShow (fn x =>
|
adamc@674
|
48 case x of
|
adamc@674
|
49 None => "None"
|
adamc@674
|
50 | Some y => show y)
|
adamc@674
|
51
|
adamc@674
|
52 fun show_pair (a ::: Type) (b ::: Type) (_ : show a) (_ : show b) : show (pair a b) =
|
adamc@674
|
53 mkShow (fn x =>
|
adamc@674
|
54 case x of
|
adamc@674
|
55 Pair (y, z) => "(" ^ show y ^ "," ^ show z ^ ")")
|
adamc@674
|
56
|
adamc@674
|
57 fun main () : transaction page = return <xml><body>
|
adamc@675
|
58 {[hi_again]}, {[zero_again]}, {[some_zero]}, {[hi_zero]}, {[ott]}
|
adamc@674
|
59 </body></xml>
|