Import Upstream version 20180207
[hcoop/debian/mlton.git] / regression / abstype.sml
1 abstype t = T
2 with
3 val eq = op =
4 end
5 val _ = eq (3, 3)
6
7 abstype t = T
8 with
9 val t = T
10 val eq = op =
11 end
12 val _ = eq (t, t)
13
14 abstype t = T
15 with
16 val t = T
17 val eq = op =
18 val _ = eq (t, t)
19 end
20 val _ = eq (2, 3)
21
22 abstype t = T
23 with
24 val t = T
25 val eq = op =
26 val _ = eq (t, t)
27 end
28 val _ = eq (t, t)
29
30 abstype t = T
31 with
32 val t = T
33 val eq = op =
34 val _ = eq (t, t) andalso eq (2, 3)
35 end
36 val _ = eq (2, 3)
37
38 (* with abstype *)
39
40 structure S =
41 struct
42 abstype s = S
43 with
44 val a = S
45 end
46 end
47
48 signature F =
49 sig
50 val b : S.s
51 end
52
53 functor F() : F =
54 struct
55 type s = S.s
56 val b = S.a
57 end
58
59
60 functor K() =
61 struct
62 structure F = F()
63 end
64
65 structure K = K()
66
67 (* abstype.sml *)
68
69 (* Checks equality inferred for abstype environments. *)
70
71 abstype t = T with
72 datatype u = U of t
73 val eq = op=
74 end
75
76 fun eq1(t1, t2) = U t1 = U t2;
77 fun eq2(t1, t2 : t) = eq(t1, t2);