Import Upstream version 20180207
[hcoop/debian/mlton.git] / regression / flexrecord.sml
CommitLineData
7f918cf1
CE
1(* flexrecord.sml *)
2
3(* Checks type inference for flexible records. *)
4
5(* flexrecord1 *)
6fun f(r as {...}) =
7let
8 fun g() = r
9in
10 [r, {a=1}]
11end;
12(* flexrecord1 *)
13
14(* flexrecord2 *)
15val _ =
16 let
17 val g = #foo
18 val _ = g {foo = 13}
19 val _ = g {foo = "yes"}
20 in
21 ()
22 end
23(* flexrecord2 *)
24
25(* flexrecord3 *)
26val _ =
27 let
28 val g = #foo
29 val _ = g {foo = 13, goo = 1.0}
30 val _ = g {foo = "yes", goo = 1.0}
31 in
32 ()
33 end
34(* flexrecord3 *)
35
36(* flexrecord4 *)
37val _ =
38 let
39 val g = #foo
40 val _ = g {foo = 13, goo = 1.0}
41 val _ = g {foo = "yes", goo = false}
42 in
43 ()
44 end
45(* flexrecord4 *)
46
47(* flexrecord5 *)
48val _ =
49 let
50 val f = #foo
51 val g = fn h => fn y => h (f y)
52 val h = fn x => f x
53 val _ = f {foo=0, bar=1}
54 in
55 ()
56 end
57(* flexrecord5 *)
58
59(* flexrecord6 *)
60val _ =
61 fn x =>
62 let
63 val _: string = #1 x
64 fun id z = z
65 fun g () =
66 let
67 val (_, a) = x
68 in a
69 end
70 in
71 g ()
72 end
73(* flexrecord6 *)
74
75(* flexrecord7 *)
76val _ =
77 let
78 fun f r = { a = #a r, b = #b r }
79 val _ = f { a = 0.0, b = 0.0 }
80 in
81 ()
82 end
83(* flexrecord7 *)
84
85(* flexrecord8 *)
86val _ =
87 fn _ =>
88 let
89 val f = #foo
90 val g = (fn x => x) f
91 val _ = f {foo=0, bar=1}
92 in
93 ()
94 end
95(* flexrecord8 *)
96
97(* flexrecord9 *)
98val g = fn {...} => ()
99and h = fn () => ()
100val () = (h (); g {a = 13})
101(* flexrecord9 *)