1-module(para4).
2
3-compile(export_all).
4
5-export_type([d_atom/0, d_integer/0, d_tuple/0, d_all/0]).
6
7-export_type([t/1]).
8
9-type ai() :: atom() | integer().
10
11-type d(T) :: dict:dict(T, T).
12
13-opaque d_atom() :: d(atom()).
14-opaque d_integer() :: d(integer()).
15-opaque d_tuple() :: d(tuple()).
16-opaque d_all() :: d(ai()).
17
18b(D) ->
19    a(D) ++ i(D).
20
21-spec a(d_atom()) -> [{atom(), atom()}]. % Invalid type spec
22
23a(D) ->
24    c(D).
25
26-spec i(d_integer()) -> [{integer(), integer()}]. % Invalid type spec
27
28i(D) ->
29    c(D).
30
31-spec t(d_tuple()) -> [{tuple(), tuple()}]. % Invalid type spec.
32
33t(D) ->
34    c(D).
35
36-spec c(d_all()) -> [{ai(), ai()}].
37
38c(D) ->
39    dict:to_list(D).
40
41
42
43
44-opaque t(A) :: {A, A}.
45
46adt_tt5() ->
47    I1 = adt_y1(),
48    I2 = adt_y3(),
49    I1 =:= I2.
50
51adt_tt6() ->
52    I1 = adt_y2(),
53    I2 = adt_y3(),
54    I1 =:= I2.
55
56adt_tt7() ->
57    I1 = adt_t1(),
58    I2 = adt_t3(),
59    I1 =:= I2. % opaque attempt
60
61adt_tt8() ->
62    I1 = adt_t2(),
63    I2 = adt_t3(),
64    I1 =:= I2. % opaque attempt
65
66adt_tt9() ->
67    I1 = adt_int2(),
68    I2 = adt_int4(),
69    I1 =:= I2. % opaque attempt
70
71adt_tt10() ->
72    I1 = adt_int2(),
73    I2 = adt_int2_4(),
74    I1 =:= I2. % opaque attempt
75
76adt_tt11() ->
77    I1 = adt_int5_7(),
78    I2 = adt_int2_4(),
79    I1 =:= I2. % opaque attempt
80
81adt_tt12() ->
82    I1 = adt_un1_2(),
83    I2 = adt_un3_4(),
84    I1 =:= I2. % opaque attempt
85
86adt_tt13() ->
87    I1 = adt_tup(),
88    I2 = adt_tup2(),
89    I1 =:= I2. % opaque attempt
90
91adt_tt14() ->
92    I1 = adt_map(),
93    I2 = adt_map2(),
94    I1 =:= I2.
95
96y3() ->
97    {a, 3}.
98
99adt_t1() ->
100    para4_adt:t1().
101
102adt_t2() ->
103    para4_adt:t2().
104
105adt_t3() ->
106    para4_adt:t3().
107
108adt_y1() ->
109    para4_adt:y1().
110
111adt_y2() ->
112    para4_adt:y2().
113
114adt_y3() ->
115    para4_adt:y3().
116
117adt_int2() ->
118    para4_adt:int2().
119
120adt_int4() ->
121    para4_adt:int4().
122
123adt_int2_4() ->
124    para4_adt:int2_4().
125
126adt_int5_7() ->
127    para4_adt:int5_7().
128
129adt_un1_2() ->
130    para4_adt:un1_2().
131
132adt_un3_4() ->
133    para4_adt:un3_4().
134
135adt_tup() ->
136    para4_adt:tup().
137
138adt_tup2() ->
139    para4_adt:tup2().
140
141adt_map() ->
142    para4_adt:map().
143
144adt_map2() ->
145    para4_adt:map2().
146