@@ -30,12 +30,12 @@ region x in
30
30
//│ ║ l.28: fork((_ => x.ref 1), (_ => x.ref 2))
31
31
//│ ║ ^^^^^^^
32
32
//│ ╟── because: cannot constrain 'reg <: 'B
33
- //│ ╟── because: cannot constrain 'reg <: ¬(¬'B)
34
- //│ ╟── because: cannot constrain x <: ¬(¬'B)
33
+ //│ ╟── because: cannot constrain 'reg <: 'B
34
+ //│ ╟── because: cannot constrain x <: 'B
35
35
//│ ╟── because: cannot constrain x <: 'B
36
36
//│ ╟── because: cannot constrain x <: ¬'A
37
- //│ ╟── because: cannot constrain 'A <: ¬(x)
38
- //│ ╙── because: cannot constrain x <: ¬(x)
37
+ //│ ╟── because: cannot constrain 'A <: ¬x
38
+ //│ ╙── because: cannot constrain x <: ¬x
39
39
//│ Type: Pair[out Ref[Int, ?], out Ref[Int, ?]]
40
40
41
41
@@ -63,37 +63,38 @@ region x in
63
63
//│ ║ l.61: naive_helper(x)
64
64
//│ ║ ^
65
65
//│ ╟── because: cannot constrain Region[x] <: 'r1
66
- //│ ╟── because: cannot constrain Region[in ¬⊥ ∧ 'x1 out ¬⊥ ∧ 'x2] <: 'r1
67
- //│ ╟── because: cannot constrain Region[in ¬⊥ ∧ 'x1 out ¬⊥ ∧ 'x2] <: Region[in 'reg out 'reg1]
66
+ //│ ╟── because: cannot constrain Region[in 'x1 out 'x2] <: 'r1
67
+ //│ ╟── because: cannot constrain Region[in 'x1 out 'x2] <: Region[in 'reg out 'reg1]
68
+ //│ ╟── because: cannot constrain 'x2 <: 'reg1
68
69
//│ ╟── because: cannot constrain 'x2 <: 'reg1
69
- //│ ╟── because: cannot constrain 'x2 <: ¬(¬'reg1)
70
- //│ ╟── because: cannot constrain ⊤ <: ¬(¬'reg1)
70
+ //│ ╟── because: cannot constrain ⊤ <: 'reg1
71
71
//│ ╟── because: cannot constrain ⊤ <: 'reg1
72
72
//│ ╙── because: cannot constrain ⊤ <: ⊥
73
73
//│ ╔══[ERROR] Type error in reference with expected type 'r1
74
74
//│ ║ l.61: naive_helper(x)
75
75
//│ ║ ^
76
76
//│ ╟── because: cannot constrain Region[x] <: 'r1
77
- //│ ╟── because: cannot constrain Region[in ¬⊥ ∧ 'x1 out ¬⊥ ∧ 'x2] <: 'r1
78
- //│ ╟── because: cannot constrain Region[in ¬⊥ ∧ 'x1 out ¬⊥ ∧ 'x2] <: Region[in 'reg out 'reg1]
77
+ //│ ╟── because: cannot constrain Region[in 'x1 out 'x2] <: 'r1
78
+ //│ ╟── because: cannot constrain Region[in 'x1 out 'x2] <: Region[in 'reg out 'reg1]
79
+ //│ ╟── because: cannot constrain 'x2 <: 'reg1
79
80
//│ ╟── because: cannot constrain 'x2 <: 'reg1
80
- //│ ╟── because: cannot constrain 'x2 <: ¬(¬'reg1)
81
- //│ ╟── because: cannot constrain ⊤ <: ¬(¬'reg1)
81
+ //│ ╟── because: cannot constrain ⊤ <: 'reg1
82
82
//│ ╟── because: cannot constrain ⊤ <: 'reg1
83
83
//│ ╟── because: cannot constrain ⊤ <: 'reg
84
- //│ ╙── because: cannot constrain ⊤ <: ¬()
84
+ //│ ╟── because: cannot constrain ⊤ <: 'reg
85
+ //│ ╙── because: cannot constrain ⊤ <: ⊥
85
86
//│ ╔══[ERROR] Type error in block
86
87
//│ ║ l.61: naive_helper(x)
87
88
//│ ║ ^^^^^^^^^^^^^^^
88
89
//│ ╟── because: cannot constrain 'eff <: ⊥
89
- //│ ╟── because: cannot constrain 'eff <: ¬()
90
- //│ ╟── because: cannot constrain 'eff1 ∧ ¬'x3 <: ¬()
90
+ //│ ╟── because: cannot constrain 'eff <: ⊥
91
+ //│ ╟── because: cannot constrain ¬'x3 ∧ 'eff1 <: ⊥
91
92
//│ ╟── because: cannot constrain 'eff1 <: 'x3
92
- //│ ╟── because: cannot constrain 'eff1 <: ¬()
93
- //│ ╟── because: cannot constrain 'eff1 <: ¬()
94
- //│ ╟── because: cannot constrain 'reg1 <: ¬()
95
- //│ ╟── because: cannot constrain 'reg1 <: ¬()
96
- //│ ╙── because: cannot constrain ⊤ <: ¬()
93
+ //│ ╟── because: cannot constrain 'eff1 <: ⊥
94
+ //│ ╟── because: cannot constrain 'eff1 <: ⊥
95
+ //│ ╟── because: cannot constrain 'reg1 <: ⊥
96
+ //│ ╟── because: cannot constrain 'reg1 <: ⊥
97
+ //│ ╙── because: cannot constrain ⊤ <: ⊥
97
98
//│ Type: Pair[out Ref[Int, ?], out Ref[Int, ?]]
98
99
99
100
@@ -127,22 +128,24 @@ region x in
127
128
region x in
128
129
(region y in let t = helper(x) in 42) as [A] -> Int
129
130
//│ ╔══[ERROR] Type error in reference with expected type 'r1
130
- //│ ║ l.128 : (region y in let t = helper(x) in 42) as [A] -> Int
131
+ //│ ║ l.129 : (region y in let t = helper(x) in 42) as [A] -> Int
131
132
//│ ║ ^
132
133
//│ ╟── because: cannot constrain Region[x] <: 'r1
133
- //│ ╟── because: cannot constrain Region[in x out x] <: 'r1
134
- //│ ╟── because: cannot constrain Region[in x out x] <: Region[in 'reg out 'reg1]
134
+ //│ ╟── because: cannot constrain Region[x] <: 'r1
135
+ //│ ╟── because: cannot constrain Region[x] <: Region[in 'reg out 'reg1]
135
136
//│ ╟── because: cannot constrain x <: 'reg1
137
+ //│ ╟── because: cannot constrain x <: 'reg1
138
+ //│ ╟── because: cannot constrain x <: 'env
136
139
//│ ╟── because: cannot constrain x <: 'env
137
140
//│ ╙── because: cannot constrain x <: outer ∨ y
138
141
//│ ╔══[ERROR] Type error in region expression with expected type [outer, 'A] -> Int
139
- //│ ║ l.128 : (region y in let t = helper(x) in 42) as [A] -> Int
142
+ //│ ║ l.129 : (region y in let t = helper(x) in 42) as [A] -> Int
140
143
//│ ║ ^^^^^^^^^^^^^^^
141
144
//│ ╟── because: cannot constrain 'eff <: ⊥
142
- //│ ╟── because: cannot constrain 'eff <: ¬()
143
- //│ ╟── because: cannot constrain ¬'y1 ∧ x <: ¬()
145
+ //│ ╟── because: cannot constrain 'eff <: ⊥
146
+ //│ ╟── because: cannot constrain ¬'y1 ∧ x <: ⊥
144
147
//│ ╟── because: cannot constrain x <: 'y1
145
- //│ ╙── because: cannot constrain x <: ¬()
148
+ //│ ╙── because: cannot constrain x <: ⊥
146
149
//│ Type: Int
147
150
148
151
@@ -163,10 +166,10 @@ fun badanno: outer
163
166
:e
164
167
fun badanno2: [outer A, outer B] -> Int ->{A | B} Int
165
168
//│ ╔══[ERROR] Only one outer variable can be bound.
166
- //│ ║ l.164 : fun badanno2: [outer A, outer B] -> Int ->{A | B} Int
169
+ //│ ║ l.167 : fun badanno2: [outer A, outer B] -> Int ->{A | B} Int
167
170
//│ ╙── ^^^^^^^^^^^^^^^^^^
168
171
//│ ╔══[ERROR] Illegal forall annotation.
169
- //│ ║ l.164 : fun badanno2: [outer A, outer B] -> Int ->{A | B} Int
172
+ //│ ║ l.167 : fun badanno2: [outer A, outer B] -> Int ->{A | B} Int
170
173
//│ ╙── ^^^^^^^^^^^^^^^^^^
171
174
//│ ═══[ERROR] Invalid type
172
175
//│ Type: ⊤
@@ -210,48 +213,49 @@ fun foo(r1) =
210
213
fork((_ => r1.ref 1), (_ => r2.ref 2))
211
214
foo(r2)
212
215
//│ ╔══[ERROR] Type error in function literal
213
- //│ ║ l.208 : fun foo(r1) =
216
+ //│ ║ l.211 : fun foo(r1) =
214
217
//│ ║ ^^^^^
215
- //│ ║ l.209 : region r2 in
218
+ //│ ║ l.212 : region r2 in
216
219
//│ ║ ^^^^^^^^^^^^^^
217
- //│ ║ l.210 : fork((_ => r1.ref 1), (_ => r2.ref 2))
220
+ //│ ║ l.213 : fork((_ => r1.ref 1), (_ => r2.ref 2))
218
221
//│ ║ ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
219
- //│ ║ l.211 : foo(r2)
222
+ //│ ║ l.214 : foo(r2)
220
223
//│ ║ ^^^^^^^^^^^
221
- //│ ╟── because: cannot constrain 'r1 ->{'eff} 'app <: 'foo
222
224
//│ ╟── because: cannot constrain ('r1) ->{'eff} ('app) <: 'foo
223
- //│ ╟── because: cannot constrain ('r1) ->{'eff} ('app) <: Region[in 'r2 out 'r21] ->{'eff1} 'app1
225
+ //│ ╟── because: cannot constrain ('r1) ->{'eff} ('app) <: 'foo
226
+ //│ ╟── because: cannot constrain ('r1) ->{'eff} ('app) <: (Region[in 'r2 out 'r21]) ->{'eff1} ('app1)
224
227
//│ ╟── because: cannot constrain Region[in 'r2 out 'r21] <: 'r1
225
228
//│ ╟── because: cannot constrain Region[in 'r2 out 'r21] <: 'r1
226
229
//│ ╟── because: cannot constrain Region[in 'r2 out 'r21] <: Region[in 'reg out 'reg1]
227
230
//│ ╟── because: cannot constrain 'r21 <: 'reg1
228
- //│ ╟── because: cannot constrain 'r21 <: ¬(¬ 'reg1)
229
- //│ ╟── because: cannot constrain ¬outer <: ¬(¬ 'reg1)
231
+ //│ ╟── because: cannot constrain 'r21 <: 'reg1
232
+ //│ ╟── because: cannot constrain ¬outer <: 'reg1
230
233
//│ ╟── because: cannot constrain ¬outer <: 'reg1
231
234
//│ ╟── because: cannot constrain ¬outer <: ¬'r22 ∨ outer
232
- //│ ╟── because: cannot constrain 'r22 <: ¬(¬ outer)
233
- //│ ╙── because: cannot constrain ¬outer <: ¬(¬ outer)
235
+ //│ ╟── because: cannot constrain 'r22 <: outer
236
+ //│ ╙── because: cannot constrain ¬outer <: outer
234
237
//│ ╔══[ERROR] Type error in function literal
235
- //│ ║ l.208 : fun foo(r1) =
238
+ //│ ║ l.211 : fun foo(r1) =
236
239
//│ ║ ^^^^^
237
- //│ ║ l.209 : region r2 in
240
+ //│ ║ l.212 : region r2 in
238
241
//│ ║ ^^^^^^^^^^^^^^
239
- //│ ║ l.210 : fork((_ => r1.ref 1), (_ => r2.ref 2))
242
+ //│ ║ l.213 : fork((_ => r1.ref 1), (_ => r2.ref 2))
240
243
//│ ║ ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
241
- //│ ║ l.211 : foo(r2)
244
+ //│ ║ l.214 : foo(r2)
242
245
//│ ║ ^^^^^^^^^^^
243
- //│ ╟── because: cannot constrain 'r1 ->{'eff} 'app <: 'foo
244
246
//│ ╟── because: cannot constrain ('r1) ->{'eff} ('app) <: 'foo
245
- //│ ╟── because: cannot constrain ('r1) ->{'eff} ('app) <: Region[in 'r2 out 'r21] ->{'eff1} 'app1
247
+ //│ ╟── because: cannot constrain ('r1) ->{'eff} ('app) <: 'foo
248
+ //│ ╟── because: cannot constrain ('r1) ->{'eff} ('app) <: (Region[in 'r2 out 'r21]) ->{'eff1} ('app1)
246
249
//│ ╟── because: cannot constrain Region[in 'r2 out 'r21] <: 'r1
247
250
//│ ╟── because: cannot constrain Region[in 'r2 out 'r21] <: 'r1
248
251
//│ ╟── because: cannot constrain Region[in 'r2 out 'r21] <: Region[in 'reg out 'reg1]
249
252
//│ ╟── because: cannot constrain 'r21 <: 'reg1
250
- //│ ╟── because: cannot constrain 'r21 <: ¬(¬'reg1)
251
- //│ ╟── because: cannot constrain ¬outer <: ¬(¬'reg1)
253
+ //│ ╟── because: cannot constrain 'r21 <: 'reg1
252
254
//│ ╟── because: cannot constrain ¬outer <: 'reg1
255
+ //│ ╟── because: cannot constrain ¬outer <: 'reg1
256
+ //│ ╟── because: cannot constrain ¬outer <: 'reg
253
257
//│ ╟── because: cannot constrain ¬outer <: 'reg
254
- //│ ╙── because: cannot constrain ¬outer <: ¬()
258
+ //│ ╙── because: cannot constrain ¬outer <: ⊥
255
259
//│ Type: ⊤
256
260
257
261
0 commit comments