#name: closing structs
#evalPartial
-- in.cue --
op: {x: int} // {x: int}
ot: {x: int, ...} // {x: int, ...}
cp: close({x: int})      // closed({x: int})
ct: close({x: int, ...}) // {x: int, ...}

opot: op & ot // {x: int, ...}
otop: ot & op // {x: int, ...}
opcp: op & cp // closed({x: int})
cpop: cp & op // closed({x: int})
opct: op & ct // {x: int, ...}
ctop: ct & op // {x: int, ...}
otcp: ot & cp // closed({x: int})
cpot: cp & ot // closed({x: int})
otct: ot & ct // {x: int, ...}
ctot: ct & ot // {x: int, ...}
cpct: cp & ct // closed({x: int})
ctcp: ct & cp // closed({x: int})
ctct: ct & ct // {x: int, ...}
-- out/def --
op: {
	x: int
}
ot: {
	x: int
	...
}
cp: close({
	x: int
})
ct: {
	x: int
	...
}
opot: op & ot
otop: ot & op
opcp: op & cp
cpop: cp & op
opct: op & ct
ctop: ct & op
otcp: ot & cp
cpot: cp & ot
otct: ot & ct
ctot: ct & ot
cpct: cp & ct
ctcp: ct & cp
ctct: ct & ct
-- out/legacy-debug --
<0>{op: <1>{x: int}, ot: <2>{x: int, ...}, cp: <3>C{x: int}, ct: <4>{x: int, ...}, opot: <5>{x: int, ...}, otop: <6>{x: int, ...}, opcp: <7>C{x: int}, cpop: <8>C{x: int}, opct: <9>{x: int, ...}, ctop: <10>{x: int, ...}, otcp: <11>C{x: int}, cpot: <12>C{x: int}, otct: <13>{x: int, ...}, ctot: <14>{x: int, ...}, cpct: <15>C{x: int}, ctcp: <16>C{x: int}, ctct: <17>{x: int, ...}}
-- out/eval/stats --
Leaks:  15
Freed:  35
Reused: 32
Allocs: 18
Retain: 15

Unifications: 50
Conjuncts:    115
Disjuncts:    50
-- out/evalalpha --
(struct){
  op: (struct){
    x: (int){ int }
  }
  ot: (struct){
    x: (int){ int }
  }
  cp: (#struct){
    x: (int){ int }
  }
  ct: (#struct){
    x: (int){ int }
  }
  opot: (struct){
    x: (int){ int }
  }
  otop: (struct){
    x: (int){ int }
  }
  opcp: (#struct){
    x: (int){ int }
  }
  cpop: (#struct){
    x: (int){ int }
  }
  opct: (#struct){
    x: (int){ int }
  }
  ctop: (#struct){
    x: (int){ int }
  }
  otcp: (#struct){
    x: (int){ int }
  }
  cpot: (#struct){
    x: (int){ int }
  }
  otct: (#struct){
    x: (int){ int }
  }
  ctot: (#struct){
    x: (int){ int }
  }
  cpct: (#struct){
    x: (int){ int }
  }
  ctcp: (#struct){
    x: (int){ int }
  }
  ctct: ~(ct)
}
-- diff/-out/evalalpha<==>+out/eval --
diff old new
--- old
+++ new
@@ -47,7 +47,5 @@
   ctcp: (#struct){
     x: (int){ int }
   }
-  ctct: (#struct){
-    x: (int){ int }
-  }
+  ctct: ~(ct)
 }
-- out/eval --
(struct){
  op: (struct){
    x: (int){ int }
  }
  ot: (struct){
    x: (int){ int }
  }
  cp: (#struct){
    x: (int){ int }
  }
  ct: (#struct){
    x: (int){ int }
  }
  opot: (struct){
    x: (int){ int }
  }
  otop: (struct){
    x: (int){ int }
  }
  opcp: (#struct){
    x: (int){ int }
  }
  cpop: (#struct){
    x: (int){ int }
  }
  opct: (#struct){
    x: (int){ int }
  }
  ctop: (#struct){
    x: (int){ int }
  }
  otcp: (#struct){
    x: (int){ int }
  }
  cpot: (#struct){
    x: (int){ int }
  }
  otct: (#struct){
    x: (int){ int }
  }
  ctot: (#struct){
    x: (int){ int }
  }
  cpct: (#struct){
    x: (int){ int }
  }
  ctcp: (#struct){
    x: (int){ int }
  }
  ctct: (#struct){
    x: (int){ int }
  }
}
-- out/compile --
--- in.cue
{
  op: {
    x: int
  }
  ot: {
    x: int
    ...
  }
  cp: close({
    x: int
  })
  ct: close({
    x: int
    ...
  })
  opot: (〈0;op〉 & 〈0;ot〉)
  otop: (〈0;ot〉 & 〈0;op〉)
  opcp: (〈0;op〉 & 〈0;cp〉)
  cpop: (〈0;cp〉 & 〈0;op〉)
  opct: (〈0;op〉 & 〈0;ct〉)
  ctop: (〈0;ct〉 & 〈0;op〉)
  otcp: (〈0;ot〉 & 〈0;cp〉)
  cpot: (〈0;cp〉 & 〈0;ot〉)
  otct: (〈0;ot〉 & 〈0;ct〉)
  ctot: (〈0;ct〉 & 〈0;ot〉)
  cpct: (〈0;cp〉 & 〈0;ct〉)
  ctcp: (〈0;ct〉 & 〈0;cp〉)
  ctct: (〈0;ct〉 & 〈0;ct〉)
}
