#name: recursive evaluation within list
#evalFull
-- in.cue --
l: [a]
a: b & {c: "t"}
b: {
	d: c
	c: string
}
l1: [a1]
a1: b1 & {c: "t"}
b1: {
	d: "s" + c
	c: string
}
-- out/def --
l: [a]
a: b & {
	c: "t"
}
b: {
	c: string
	d: c
}
l1: [a1]
a1: b1 & {
	c: "t"
}
b1: {
	c: string
	d: "s" + c
}
-- out/legacy-debug --
<0>{l: [<1>{c: "t", d: "t"}], a: <2>{c: "t", d: "t"}, b: <3>{c: string, d: string}, l1: [<4>{c: "t", d: "st"}], a1: <5>{c: "t", d: "st"}, b1: <6>{c: string, d: ("s" + <7>.c)}}
-- out/compile --
--- in.cue
{
  l: [
    〈1;a〉,
  ]
  a: (〈0;b〉 & {
    c: "t"
  })
  b: {
    d: 〈0;c〉
    c: string
  }
  l1: [
    〈1;a1〉,
  ]
  a1: (〈0;b1〉 & {
    c: "t"
  })
  b1: {
    d: ("s" + 〈0;c〉)
    c: string
  }
}
-- out/eval/stats --
Leaks:  0
Freed:  21
Reused: 14
Allocs: 7
Retain: 14

Unifications: 21
Conjuncts:    40
Disjuncts:    31
-- out/evalalpha --
(struct){
  l: (#list){
    0: ~(a)
  }
  a: (struct){
    c: (string){ "t" }
    d: (string){ "t" }
  }
  b: (struct){
    d: (string){ string }
    c: (string){ string }
  }
  l1: (#list){
    0: ~(a1)
  }
  a1: (struct){
    c: (string){ "t" }
    d: (string){ "st" }
  }
  b1: (struct){
    d: (_|_){
      // [incomplete] b1.d: non-concrete value string in operand to +:
      //     ./in.cue:10:5
      //     ./in.cue:11:5
    }
    c: (string){ string }
  }
}
-- diff/-out/evalalpha<==>+out/eval --
diff old new
--- old
+++ new
@@ -1,13 +1,10 @@
 (struct){
   l: (#list){
-    0: (struct){
-      d: (string){ "t" }
-      c: (string){ "t" }
-    }
+    0: ~(a)
   }
   a: (struct){
+    c: (string){ "t" }
     d: (string){ "t" }
-    c: (string){ "t" }
   }
   b: (struct){
     d: (string){ string }
@@ -14,14 +11,11 @@
     c: (string){ string }
   }
   l1: (#list){
-    0: (struct){
-      d: (string){ "st" }
-      c: (string){ "t" }
-    }
+    0: ~(a1)
   }
   a1: (struct){
+    c: (string){ "t" }
     d: (string){ "st" }
-    c: (string){ "t" }
   }
   b1: (struct){
     d: (_|_){
-- diff/todo/p3 --
Reordering
-- out/eval --
(struct){
  l: (#list){
    0: (struct){
      d: (string){ "t" }
      c: (string){ "t" }
    }
  }
  a: (struct){
    d: (string){ "t" }
    c: (string){ "t" }
  }
  b: (struct){
    d: (string){ string }
    c: (string){ string }
  }
  l1: (#list){
    0: (struct){
      d: (string){ "st" }
      c: (string){ "t" }
    }
  }
  a1: (struct){
    d: (string){ "st" }
    c: (string){ "t" }
  }
  b1: (struct){
    d: (_|_){
      // [incomplete] b1.d: non-concrete value string in operand to +:
      //     ./in.cue:10:5
      //     ./in.cue:11:5
    }
    c: (string){ string }
  }
}
