Lots of cycle-reference goodness.

-- in.cue --
[!~"^[.]"]: c
a:          b
b: [string]: int
c: a:        int
[string]: c
a:        b
b: [string]: int
c: a:        int
-- out/eval/stats --
Leaks:  0
Freed:  7
Reused: 2
Allocs: 5
Retain: 2

Unifications: 7
Conjuncts:    59
Disjuncts:    9
-- out/eval --
(struct){
  a: (struct){
    a: (int){ int }
  }
  b: (struct){
    a: (int){ int }
  }
  c: (struct){
    a: (int){ int }
  }
}
-- out/compile --
--- in.cue
{
  [!~"^[.]"]: 〈0;c〉
  a: 〈0;b〉
  b: {
    [string]: int
  }
  c: {
    a: int
  }
  [string]: 〈0;c〉
  a: 〈0;b〉
  b: {
    [string]: int
  }
  c: {
    a: int
  }
}