diff options
Diffstat (limited to 'tests/disjoint.ur')
-rw-r--r-- | tests/disjoint.ur | 35 |
1 files changed, 35 insertions, 0 deletions
diff --git a/tests/disjoint.ur b/tests/disjoint.ur new file mode 100644 index 00000000..26278014 --- /dev/null +++ b/tests/disjoint.ur @@ -0,0 +1,35 @@ +con c1 = fn x :: Name => [x] ~ [A] => [x = int, A = string] +con c2 = fn x :: Name => [x] ~ [A] => [A, x] +con c3 = fn x :: Name => [A] ~ [x] => [x, A] +con c4 = fn x :: Name => [A] ~ [x] => [A, x] + +con c5 = fn r1 :: {Type} => fn r2 => r1 ~ r2 => r1 ++ r2 +con c6 = fn r1 :: {Type} => fn r2 => r2 ~ r1 => r1 ++ r2 + +con c7 = fn x :: Name => fn r => [x] ~ r => [x = int] ++ r + +val vt1 = fn x : $(c1 #B) => x.B +val vt2 = fn x : $(c1 #B) => x.A +val vt3 = fn x : $(c1 #C) => x.A +val vt4 = fn x : $(c1 #C) => x.A +(* +val vtX = fn x : $(c1 #A) => x.A +val vtX = fn x : $(c1 #A) => x.A +*) + +val v1 = fn x :: Name => fn [x] ~ [A] => fn y : {x : int, A : string} => y.x + +val vt5 = v1 [#B] {A = "Hi", B = 0} +(* +val vtX = v1 [#A] {A = "Hi", A = 0} +*) + +val v2 = fn x :: Name => fn r :: {Type} => fn y : $(c7 x r) => fn [x] ~ r => y.x +val vt6 = v2 [#A] [[B = float, C = string]] {A = 8, B = 8.0, C = "8"} + +(* +val vtX = v2 [#A] [[B = float, B = string]] {A = 8, B = 8.0, B = "8"} +val vtX = v2 [#A] [[A = float, B = string]] {A = 8, A = 8.0, B = "8"} +*) + +val main = vt6 |