cuelang.org/go@v0.10.1/cue/testdata/cycle/structural.txtar (about)

     1  -- in.cue --
     2  a1: {
     3  	f: [f]
     4  }
     5  
     6  a2: {
     7  	f: f
     8  }
     9  
    10  a3: {
    11  	f: {g: f}
    12  }
    13  
    14  a4: {
    15  	a: [a | int]
    16  }
    17  
    18  a5: {
    19  	a: b: a | int
    20  }
    21  
    22  a6: {
    23  	a: a | int
    24  }
    25  
    26  a7: {
    27  	a: c.x
    28  	b: {
    29  		x: c
    30  		y: "foo"
    31  	}
    32  	c: {
    33  		x: b.y
    34  		y: 3
    35  	}
    36  }
    37  
    38  b1: {
    39  	b: a & [1]
    40  	a: [a | int]
    41  }
    42  
    43  b2: {
    44  	a: [a | int]
    45  	b: a & [1]
    46  }
    47  
    48  b3: {
    49  	x: a: [a | int]
    50  	b: x & {a: [1]}
    51  }
    52  
    53  b4: {
    54  	b: x.y & [1]
    55  	x: y: [y]
    56  }
    57  
    58  // Ensure that the cycle error is not blindly copied to a referring field,
    59  // as the cycle may not persist.
    60  b4: cond1: {
    61  	b: x.y & { _z: false, [1] }
    62  	x: y: {
    63  		_z: *true | bool
    64  		if _z {
    65  			[y]
    66  		}
    67  	}
    68  }
    69  
    70  // This reports a structural cycle at b4.cond2.b, because the value it refers
    71  // has a structural cycle. Technically, this is incorrect, as the cycle
    72  // really only occurs in b4.cond2.x.y. But since structural cycles are
    73  // permanent, the entire configuration is invalidated, so the spurious
    74  // additional cycle is merely cosmetic. By most logical standards, one can prove
    75  // any fact from a contradiction. So assuming that, this is not incorrect.
    76  // TODO: fix this cosmetic blemish.
    77  b4: cond2: {
    78  	x: y: {
    79  		_z: *true | bool
    80  		if _z {
    81  			[y]
    82  		}
    83  	}
    84  	b: x.y & { _z: false, [1] }
    85  }
    86  
    87  b5: {
    88  	b: x.y & {a: [1]}
    89  	x: y: a: [a | int]
    90  }
    91  
    92  b6: {
    93  	b: x & {a: [1]}
    94  	x: a: [a]
    95  }
    96  
    97  b7: {
    98  	b: a & [[1]]
    99  	a: [a]
   100  }
   101  
   102  // Issue #555
   103  b8: {
   104  	x: a
   105  	a: f: b
   106  	b: a | string
   107  }
   108  
   109  // Issue #555
   110  b9: {
   111  	#a: string | #b | #ref
   112  	#b: {
   113  		c: [#a, #a, #a]
   114  	}
   115  	#ref: ref: string
   116  	x: #b | #ref
   117  }
   118  
   119  // Issue #534
   120  // TODO: the resolution here is arguably incorrect: c should be
   121  // 		d: string | { b: string }
   122  // However, this is not the end of the world, as the disjunction is preserved
   123  // under the hood and still unifies with extended structure.
   124  b10: {
   125  	a: close({
   126  		b: string | a | c
   127  	})
   128  	c: close({
   129  		d: string | a
   130  	})
   131  
   132  	d: d: b: string
   133  }
   134  
   135  // Issue #509 -- with comprehension
   136  b11: {
   137  	#list: {
   138  		tail: #list | *null
   139  		if tail != null {
   140  		}
   141  	}
   142  }
   143  
   144  // Issue #509 -- with comprehension
   145  b12: {
   146  	#list: {
   147  		V=value: int
   148  		T=tail:  #list | *null
   149  		if T != null {
   150  			sum: V + T.sum
   151  		}
   152  		if T == null {
   153  			sum: V
   154  		}
   155  	}
   156  
   157  	list1: #list
   158  	list1: {
   159  		value: 1
   160  		tail: {
   161  			value: 2
   162  			tail: {
   163  				value: 3
   164  				tail: {
   165  					value: 4
   166  				}
   167  			}
   168  		}
   169  	}
   170  }
   171  
   172  // More trigger happy on stack overflows.
   173  b12b: {
   174  	#list: {
   175  		tail: #list
   176  
   177  		if tail != null {
   178  			sum: tail.sum
   179  		}
   180  	}
   181  
   182  	list1: #list
   183  	list1: {
   184  		tail: {
   185  			tail: {
   186  			}
   187  		}
   188  	}
   189  }
   190  
   191  // Issue #587
   192  b13: root: a: [for x in root {x}]
   193  
   194  // Issue #587
   195  // TODO: this should probably be okay if we allow shallow evaluation of
   196  // comprehension sources. See #1881.
   197  b14: {
   198  	root: {
   199  		a: [...int]
   200  
   201  		for x in a {
   202  			"\(x)": {}
   203  		}
   204  
   205  		b: [for x in root {x}]
   206  	}
   207  }
   208  
   209  // This is okay
   210  // Issue #587
   211  b15: root: a: {for x in root {x}}
   212  
   213  // Issue #502 -- unused bulk constraints are not cyclic
   214  p1: {
   215  	#T: {
   216  		a: [string]: link: #T
   217  	}
   218  
   219  	a: #T & {
   220  		a: one: link: a: two: {}
   221  	}
   222  }
   223  
   224  // Issue #502 -- but they are if it is invoked within the struct.
   225  p2: {
   226  	#T: {
   227  		a: [string]: link: #T
   228  		a: b: {}
   229  	}
   230  
   231  	a: #T & {
   232  		a: one: link: a: two: {}
   233  	}
   234  }
   235  
   236  // Issue #502 -- or added later.
   237  p3: {
   238  	#S: #T: {
   239  		a: [string]: link: #T
   240  	}
   241  
   242  	#U: {
   243  		#S
   244  		#T: a: b: {}
   245  	}
   246  
   247  	a: #U.#T & {
   248  		a: one: link: a: two: {}
   249  	}
   250  }
   251  
   252  // Issue #502 -- unused bulk constraints are not cyclic
   253  p4: {
   254  	#T: {
   255  		a: [...{link: #T}]
   256  	}
   257  
   258  	a: #T & {
   259  		a: [{link: a: [{}]}]
   260  	}
   261  }
   262  
   263  // Issue #502 -- but they are if it is invoked within the struct.
   264  p5: {
   265  	#T: {
   266  		a: [...{link: #T}]
   267  		a: [{}]
   268  	}
   269  
   270  	a: #T & {
   271  		a: [{link: a: [{}]}]
   272  	}
   273  }
   274  
   275  // Issue #502 -- or added later.
   276  p6: {
   277  	#S: #T: {
   278  		a: [...{link: #T}]
   279  	}
   280  
   281  	#U: {
   282  		#S
   283  		#T: a: [{}]
   284  	}
   285  
   286  	a: #U.#T & {
   287  		a: [{link: a: [{}]}]
   288  	}
   289  }
   290  
   291  c1: {
   292  	a: {
   293  		b: {}
   294  		c: a & b
   295  	}
   296  }
   297  
   298  // indirection
   299  d1: {
   300  	a: b: c: d: {h: int, t: r}
   301  	r: a.b
   302  
   303  	x: a.b.c
   304  }
   305  
   306  d2: {
   307  	x: a.b.c
   308  
   309  	r: a.b
   310  	a: b: c: d: {h: int, t: r}
   311  }
   312  
   313  d3: {
   314  	config: {
   315  		a: b: c: indirect
   316  		indirect: [a.b, null][i]
   317  		i:        int | *1
   318  	}
   319  	x: config & {i: 0}
   320  }
   321  
   322  // Ensure that the cycles here fail early.
   323  // TODO: they can still be shorter.
   324  shortPathFail: _
   325  
   326  shortPathFail: doubleRef: {
   327  	// Avoid this: the first #List reference is different from the second, so
   328  	// the second #List reference counts as a first occurrence, causing the
   329  	// result to be longer than perhaps expected.
   330  	a: #List
   331  	#List: Next: #List | *null
   332  }
   333  
   334  shortPathFail: elipsis: {
   335  	// Avoid this: the elipsis causes `_` to be mixed in with the #Foo
   336  	// reference, causing the first cycle to be discounted.
   337  	t1: {
   338  		#Foo: ref:  null | #Foo
   339  		#Foo: { ... }
   340  	}
   341  	t2: {
   342  		Foo: ref:  Foo
   343  		Foo: {...}
   344  	}
   345  }
   346  
   347  patternFail: issue2374: {
   348  	r=[string]: {b: r}
   349  	a: {r: 0}
   350  }
   351  
   352  shortPathFail: comprehension: {
   353  	#list: {
   354  		tail: #list | *null
   355  		if tail != null {
   356  		}
   357  	}
   358  }
   359  
   360  withLetFail: {
   361  	schema: next:  _schema_1
   362  	let _schema_1 = schema
   363  }
   364  
   365  listOptOK: {
   366  	list: {
   367  		head: int
   368  		tail?: list
   369  	}
   370  	a: list & {head: 3, tail: head: 2}
   371  }
   372  
   373  // combining structural with reference cycles
   374  e1: {
   375  	a: a
   376  	a: c: a
   377  
   378  	b: c: b
   379  	b: b
   380  }
   381  
   382  e2: {
   383  	a: {a}
   384  	a: c: a
   385  
   386  	b: c: b
   387  	b: {b}
   388  }
   389  
   390  e3: {
   391  	a: [a]
   392  	a: c: a
   393  
   394  	b: [b]
   395  	b: c: b
   396  }
   397  
   398  e4: {
   399  	a: [a | {}]
   400  	a: [[{c: 1}]]
   401  
   402  	b: [[{c: 1}]]
   403  	b: [b | {}]
   404  }
   405  
   406  e5: {
   407  	a: c: a | int
   408  	a: a | int
   409  
   410  	b: b | int
   411  	b: c: b | int
   412  }
   413  
   414  // validating values
   415  nestedList: {
   416  	v1e: {
   417  		x: [x | int, 1]
   418  		y: x & [[[2], 1], 1]
   419  	}
   420  
   421  	v2e: {
   422  		y: x & [[[2], 1], 1]
   423  		x: [x | int, 1]
   424  	}
   425  
   426  	v1: {
   427  		x: [x | int, 1]
   428  		y: x & [[[2, 1], 1], 1]
   429  	}
   430  
   431  	v2: {
   432  		y: x & [[[2, 1], 1], 1]
   433  		x: [x | int, 1]
   434  	}
   435  }
   436  
   437  v3: {
   438  	list: {
   439  		head: int
   440  		tail: list | null
   441  	}
   442  
   443  	myList: list
   444  	myList: {
   445  		head: 2
   446  		tail: {
   447  			head: 3
   448  			tail: {
   449  				head: 4
   450  			}
   451  		}
   452  	}
   453  }
   454  
   455  v4: {
   456  	list: {
   457  		head: int
   458  		tail: list | 1
   459  	}
   460  
   461  	myList: list
   462  	myList: {
   463  		head: 2
   464  		tail: head: 3
   465  	}
   466  }
   467  
   468  v5: {
   469  	list: {
   470  		head: int
   471  		tail: list | {}
   472  	}
   473  
   474  	myList: list
   475  	myList: {
   476  		head: 2
   477  		tail: head: 3
   478  	}
   479  }
   480  
   481  // Example from "The Logic of Type Feature Structures" (Bob Carpenter)/
   482  z1: {
   483  	y: {
   484  		f: h: g
   485  		g: _
   486  	}
   487  	x: {
   488  		f: _
   489  		g: f
   490  	}
   491  	z: x & y
   492  }
   493  
   494  // Cross references. Here there is no cycle, but the repeated instantiations
   495  // of T will cause, in turn, cause repeated resolution of `x`. The algorithm
   496  // should not identify these as cyclic references. Instead, it should be
   497  // noted that the reference is each time referring to new content.
   498  // Issue #754
   499  crossRefNoCycle: t1: {
   500  	T: {
   501  		x: _
   502  		y: x
   503  	}
   504  	C: { x: T } & T
   505  }
   506  
   507  crossRefNoCycle: t2: {
   508  	T: {
   509  		x: _
   510  		y: x
   511  	}
   512  	C: T & { x: T }
   513  }
   514  
   515  crossRefNoCycle: t3: {
   516  	T: {
   517  		x: _
   518  		y: x
   519  		z: y
   520  	}
   521  	C: T & { x: T }
   522  }
   523  
   524  crossRefNoCycle: t4: {
   525  	T: {
   526  		x: _
   527  		y: x
   528  		z: y
   529  	}
   530  	C: T & { x: T & { x: T } }
   531  }
   532  
   533  // Ensure these are NOT treated as structural errors.
   534  
   535  n1: a: b: int
   536  n2: n1 & {a: n1}
   537  n3: n1 & {n1}
   538  n4: n1 & {x: n1 & {y: n1 & {z: int}}}
   539  -- out/eval/stats --
   540  Leaks:  15
   541  Freed:  800
   542  Reused: 788
   543  Allocs: 27
   544  Retain: 61
   545  
   546  Unifications: 629
   547  Conjuncts:    1224
   548  Disjuncts:    847
   549  -- out/evalalpha --
   550  Errors:
   551  a1.f.0: structural cycle
   552  a3.f.g: structural cycle
   553  b12b.#list.tail: structural cycle
   554  b12b.list1.tail.tail.tail: structural cycle
   555  b13.root.a.0.0: structural cycle
   556  b14.root.b.1.1: structural cycle
   557  b4.b.0: conflicting values 1 and [y] (mismatched types int and list):
   558      ./in.cue:53:12
   559      ./in.cue:54:8
   560  b4.b.0.0: structural cycle
   561  b4.cond1.x.y.0: structural cycle
   562  b4.cond2.x.y.0: structural cycle
   563  b4.x.y.0: structural cycle
   564  b6.b.a.0: conflicting values 1 and [1] (mismatched types int and list):
   565      ./in.cue:92:13
   566      ./in.cue:92:14
   567  b6.b.a.0.0: structural cycle
   568  b6.x.a.0: structural cycle
   569  b7.a.0: structural cycle
   570  b7.b.0.0: conflicting values 1 and [a] (mismatched types int and list):
   571      ./in.cue:97:11
   572      ./in.cue:98:5
   573  b7.b.0.0.0: structural cycle
   574  c1.a.c: structural cycle
   575  d1.r: structural cycle
   576  e1.a.c: structural cycle
   577  e1.b.c: structural cycle
   578  e2.a.c: structural cycle
   579  e2.b.c: structural cycle
   580  e3.a: conflicting values [a] and {c:a} (mismatched types list and struct):
   581      ./in.cue:390:5
   582      ./in.cue:391:5
   583  e3.a.c: structural cycle
   584  e3.b: conflicting values [b] and {c:b} (mismatched types list and struct):
   585      ./in.cue:393:5
   586      ./in.cue:394:5
   587  e3.b.c: structural cycle
   588  e4.a.0: conflicting values [{c:1}] and {} (mismatched types list and struct):
   589      ./in.cue:398:10
   590      ./in.cue:399:6
   591  e4.a.0.0: conflicting values [{c:1}] and {c:1} (mismatched types list and struct):
   592      ./in.cue:399:6
   593      ./in.cue:399:7
   594  e4.a.0.0: conflicting values [{c:1}] and {} (mismatched types list and struct):
   595      ./in.cue:398:10
   596      ./in.cue:399:6
   597  e4.a.0.0.0: conflicting values [{c:1}] and {c:1} (mismatched types list and struct):
   598      ./in.cue:399:6
   599      ./in.cue:399:7
   600  e4.a.0.0.0: conflicting values [{c:1}] and {} (mismatched types list and struct):
   601      ./in.cue:398:10
   602      ./in.cue:399:6
   603  e4.a.0.0.0: structural cycle
   604  e4.b.0: conflicting values [{c:1}] and {} (mismatched types list and struct):
   605      ./in.cue:401:6
   606      ./in.cue:402:10
   607  e4.b.0.0: conflicting values [{c:1}] and {c:1} (mismatched types list and struct):
   608      ./in.cue:401:6
   609      ./in.cue:401:7
   610  e4.b.0.0: conflicting values [{c:1}] and {} (mismatched types list and struct):
   611      ./in.cue:401:6
   612      ./in.cue:402:10
   613  e4.b.0.0.0: conflicting values [{c:1}] and {c:1} (mismatched types list and struct):
   614      ./in.cue:401:6
   615      ./in.cue:401:7
   616  e4.b.0.0.0: conflicting values [{c:1}] and {} (mismatched types list and struct):
   617      ./in.cue:401:6
   618      ./in.cue:402:10
   619  e4.b.0.0.0: structural cycle
   620  nestedList.v1e.y.0: conflicting values int and [[2],1] (mismatched types int and list):
   621      ./in.cue:416:11
   622      ./in.cue:417:11
   623  nestedList.v1e.y.0.0: conflicting values int and [2] (mismatched types int and list):
   624      ./in.cue:416:11
   625      ./in.cue:417:12
   626  nestedList.v2e.y.0: conflicting values int and [[2],1] (mismatched types int and list):
   627      ./in.cue:421:11
   628      ./in.cue:422:11
   629  nestedList.v2e.y.0.0: conflicting values int and [2] (mismatched types int and list):
   630      ./in.cue:421:12
   631      ./in.cue:422:11
   632  p2.#T.a.b.link: structural cycle
   633  p3.#U.#T.a.b.link: structural cycle
   634  p5.#T.a.0.link: structural cycle
   635  p6.#U.#T.a.0.link: structural cycle
   636  patternFail.issue2374.a.b: structural cycle
   637  shortPathFail.elipsis.t2.Foo.ref: structural cycle
   638  z1.z.g.h: structural cycle
   639  p3.a.a: field not allowed:
   640      ./in.cue:246:5
   641      ./in.cue:247:3
   642  p6.a.a: field not allowed:
   643      ./in.cue:285:5
   644      ./in.cue:286:3
   645  d3.config.0: structural cycle:
   646      ./in.cue:315:13
   647  d3.x.0: structural cycle:
   648      ./in.cue:315:13
   649  withLetFail._schema_1: structural cycle:
   650      ./in.cue:360:17
   651  e4.a.0.0: cannot combine regular field "c" with [1,{c:1} & (a|{}) & [{c:1}]]:
   652      ./in.cue:399:11
   653  e4.a.0.0.0: cannot combine regular field "c" with [1,{c:1}]:
   654      ./in.cue:399:11
   655  e4.b.0.0: cannot combine regular field "c" with [1,{c:1} & [{c:1}] & (b|{})]:
   656      ./in.cue:401:11
   657  e4.b.0.0.0: cannot combine regular field "c" with [1,{c:1}]:
   658      ./in.cue:401:11
   659  nestedList.v1e.y.0.0: incompatible list lengths (1 and 2):
   660      ./in.cue:416:6
   661  nestedList.v2e.y.0.0: incompatible list lengths (1 and 2):
   662      ./in.cue:422:6
   663  
   664  Result:
   665  (_|_){
   666    // [eval]
   667    a1: (_|_){
   668      // [structural cycle]
   669      f: (_|_){
   670        // [structural cycle]
   671        0: (_|_){
   672          // [structural cycle] a1.f.0: structural cycle
   673        }
   674      }
   675    }
   676    a2: (struct){
   677      f: (_){ _ }
   678    }
   679    a3: (_|_){
   680      // [structural cycle]
   681      f: (_|_){
   682        // [structural cycle]
   683        g: (_|_){
   684          // [structural cycle] a3.f.g: structural cycle
   685        }
   686      }
   687    }
   688    a4: (struct){
   689      a: (#list){
   690        0: (int){ int }
   691      }
   692    }
   693    a5: (struct){
   694      a: (struct){
   695        b: (int){ int }
   696      }
   697    }
   698    a6: (struct){
   699      a: (_){ |((_){ _ }, (int){ int }) }
   700    }
   701    a7: (struct){
   702      a: (string){ "foo" }
   703      b: (struct){
   704        x: (struct){
   705          x: (string){ "foo" }
   706          y: (int){ 3 }
   707        }
   708        y: (string){ "foo" }
   709      }
   710      c: (struct){
   711        x: (string){ "foo" }
   712        y: (int){ 3 }
   713      }
   714    }
   715    b1: (struct){
   716      b: (#list){
   717        0: (int){ 1 }
   718      }
   719      a: (#list){
   720        0: (int){ int }
   721      }
   722    }
   723    b2: (struct){
   724      a: (#list){
   725        0: (int){ int }
   726      }
   727      b: (#list){
   728        0: (int){ 1 }
   729      }
   730    }
   731    b3: (struct){
   732      x: (struct){
   733        a: (#list){
   734          0: (int){ int }
   735        }
   736      }
   737      b: (struct){
   738        a: (#list){
   739          0: (int){ 1 }
   740        }
   741      }
   742    }
   743    b4: (_|_){
   744      // [eval]
   745      b: (_|_){
   746        // [eval]
   747        0: (_|_){
   748          // [eval] b4.b.0: conflicting values 1 and [y] (mismatched types int and list):
   749          //     ./in.cue:53:12
   750          //     ./in.cue:54:8
   751          // b4.b.0.0: structural cycle
   752          0: (_|_){
   753            // [structural cycle] b4.b.0.0: structural cycle
   754          }
   755        }
   756      }
   757      x: (_|_){
   758        // [structural cycle]
   759        y: (_|_){
   760          // [structural cycle]
   761          0: (_|_){
   762            // [structural cycle] b4.x.y.0: structural cycle
   763          }
   764        }
   765      }
   766      cond1: (_|_){
   767        // [structural cycle]
   768        b: (#list){
   769          _z: (bool){ false }
   770          0: (int){ 1 }
   771        }
   772        x: (_|_){
   773          // [structural cycle]
   774          y: (_|_){
   775            // [structural cycle]
   776            _z: (bool){ |(*(bool){ true }, (bool){ bool }) }
   777            0: (_|_){
   778              // [structural cycle] b4.cond1.x.y.0: structural cycle
   779            }
   780          }
   781        }
   782      }
   783      cond2: (_|_){
   784        // [structural cycle]
   785        x: (_|_){
   786          // [structural cycle]
   787          y: (_|_){
   788            // [structural cycle]
   789            _z: (bool){ |(*(bool){ true }, (bool){ bool }) }
   790            0: (_|_){
   791              // [structural cycle] b4.cond2.x.y.0: structural cycle
   792            }
   793          }
   794        }
   795        b: (_|_){
   796          // [structural cycle] b4.cond2.x.y.0: structural cycle
   797        }
   798      }
   799    }
   800    b5: (struct){
   801      b: (struct){
   802        a: (#list){
   803          0: (int){ 1 }
   804        }
   805      }
   806      x: (struct){
   807        y: (struct){
   808          a: (#list){
   809            0: (int){ int }
   810          }
   811        }
   812      }
   813    }
   814    b6: (_|_){
   815      // [eval]
   816      b: (_|_){
   817        // [eval]
   818        a: (_|_){
   819          // [eval]
   820          0: (_|_){
   821            // [eval] b6.b.a.0: conflicting values 1 and [1] (mismatched types int and list):
   822            //     ./in.cue:92:13
   823            //     ./in.cue:92:14
   824            // b6.b.a.0.0: structural cycle
   825            0: (_|_){
   826              // [structural cycle] b6.b.a.0.0: structural cycle
   827            }
   828          }
   829        }
   830      }
   831      x: (_|_){
   832        // [structural cycle]
   833        a: (_|_){
   834          // [structural cycle]
   835          0: (_|_){
   836            // [structural cycle] b6.x.a.0: structural cycle
   837          }
   838        }
   839      }
   840    }
   841    b7: (_|_){
   842      // [eval]
   843      b: (_|_){
   844        // [eval]
   845        0: (_|_){
   846          // [eval]
   847          0: (_|_){
   848            // [eval] b7.b.0.0: conflicting values 1 and [a] (mismatched types int and list):
   849            //     ./in.cue:97:11
   850            //     ./in.cue:98:5
   851            // b7.b.0.0.0: structural cycle
   852            0: (_|_){
   853              // [structural cycle] b7.b.0.0.0: structural cycle
   854            }
   855          }
   856        }
   857      }
   858      a: (_|_){
   859        // [structural cycle]
   860        0: (_|_){
   861          // [structural cycle] b7.a.0: structural cycle
   862        }
   863      }
   864    }
   865    b8: (struct){
   866      x: (struct){
   867        f: (string){ string }
   868      }
   869      a: (struct){
   870        f: (string){ string }
   871      }
   872      b: (string){ string }
   873    }
   874    b9: (struct){
   875      #a: ((string|struct)){ |((string){ string }, (#struct){
   876          ref: (string){ string }
   877        }) }
   878      #b: (#struct){
   879        c: (#list){
   880          0: ((string|struct)){ |((string){ string }, (#struct){
   881              ref: (string){ string }
   882            }) }
   883          1: ((string|struct)){ |((string){ string }, (#struct){
   884              ref: (string){ string }
   885            }) }
   886          2: ((string|struct)){ |((string){ string }, (#struct){
   887              ref: (string){ string }
   888            }) }
   889        }
   890      }
   891      #ref: (#struct){
   892        ref: (string){ string }
   893      }
   894      x: (struct){ |((#struct){
   895          c: (#list){
   896            0: ((string|struct)){ |((string){ string }, (#struct){
   897                ref: (string){ string }
   898              }) }
   899            1: ((string|struct)){ |((string){ string }, (#struct){
   900                ref: (string){ string }
   901              }) }
   902            2: ((string|struct)){ |((string){ string }, (#struct){
   903                ref: (string){ string }
   904              }) }
   905          }
   906        }, (#struct){
   907          ref: (string){ string }
   908        }) }
   909    }
   910    b10: (struct){
   911      a: (#struct){
   912        b: ((string|struct)){ |((string){ string }, (#struct){
   913            d: (string){ string }
   914          }) }
   915      }
   916      c: (#struct){
   917        d: ((string|struct)){ |((string){ string }, (#struct){
   918            b: (string){ string }
   919          }) }
   920      }
   921      d: (struct){
   922        d: (struct){
   923          b: (string){ string }
   924        }
   925      }
   926    }
   927    b11: (struct){
   928      #list: (#struct){
   929        tail: ((null|struct)){ |(*(null){ null }, (#struct){
   930            tail: (null){ null }
   931          }) }
   932      }
   933    }
   934    b12: (struct){
   935      #list: (#struct){
   936        value: (int){ int }
   937        tail: (null){ null }
   938        sum: (int){ int }
   939      }
   940      list1: (#struct){
   941        value: (int){ 1 }
   942        tail: (#struct){
   943          value: (int){ 2 }
   944          tail: (#struct){
   945            value: (int){ 3 }
   946            tail: (#struct){
   947              value: (int){ 4 }
   948              tail: (null){ null }
   949              sum: (int){ 4 }
   950            }
   951            sum: (int){ 7 }
   952          }
   953          sum: (int){ 9 }
   954        }
   955        sum: (int){ 10 }
   956      }
   957    }
   958    b12b: (_|_){
   959      // [structural cycle]
   960      #list: (_|_){
   961        // [structural cycle] b12b.#list.tail: structural cycle
   962      }
   963      list1: (_|_){
   964        // [structural cycle] b12b.list1.tail.tail.tail: structural cycle
   965      }
   966    }
   967    b13: (_|_){
   968      // [structural cycle]
   969      root: (_|_){
   970        // [structural cycle]
   971        a: (_|_){
   972          // [structural cycle]
   973          0: (_|_){
   974            // [structural cycle]
   975            0: (_|_){
   976              // [structural cycle] b13.root.a.0.0: structural cycle
   977            }
   978          }
   979        }
   980      }
   981    }
   982    b14: (_|_){
   983      // [structural cycle]
   984      root: (_|_){
   985        // [structural cycle]
   986        a: (list){
   987        }
   988        b: (_|_){
   989          // [structural cycle]
   990          0: (list){
   991          }
   992          1: (_|_){
   993            // [structural cycle]
   994            0: (list){
   995            }
   996            1: (_|_){
   997              // [structural cycle] b14.root.b.1.1: structural cycle
   998            }
   999          }
  1000        }
  1001      }
  1002    }
  1003    b15: (struct){
  1004      root: (struct){
  1005        a: (struct){
  1006        }
  1007      }
  1008    }
  1009    p1: (struct){
  1010      #T: (#struct){
  1011        a: (#struct){
  1012        }
  1013      }
  1014      a: (#struct){
  1015        a: (#struct){
  1016          one: (#struct){
  1017            link: (#struct){
  1018              a: (#struct){
  1019                two: (#struct){
  1020                  link: (#struct){
  1021                    a: (#struct){
  1022                    }
  1023                  }
  1024                }
  1025              }
  1026            }
  1027          }
  1028        }
  1029      }
  1030    }
  1031    p2: (_|_){
  1032      // [structural cycle]
  1033      #T: (_|_){
  1034        // [structural cycle]
  1035        a: (_|_){
  1036          // [structural cycle]
  1037          b: (_|_){
  1038            // [structural cycle]
  1039            link: (_|_){
  1040              // [structural cycle] p2.#T.a.b.link: structural cycle
  1041            }
  1042          }
  1043        }
  1044      }
  1045      a: (_|_){
  1046        // [structural cycle]
  1047        a: (_|_){
  1048          // [structural cycle]
  1049          one: (_|_){
  1050            // [structural cycle]
  1051            link: (_|_){
  1052              // [structural cycle]
  1053              a: (_|_){
  1054                // [structural cycle]
  1055                two: (_|_){
  1056                  // [structural cycle]
  1057                  link: ~(p2.#T)
  1058                }
  1059                b: (_|_){
  1060                  // [structural cycle]
  1061                  link: ~(p2.#T)
  1062                }
  1063              }
  1064            }
  1065          }
  1066          b: (_|_){
  1067            // [structural cycle]
  1068            link: ~(p2.#T)
  1069          }
  1070        }
  1071      }
  1072    }
  1073    p3: (_|_){
  1074      // [eval]
  1075      #S: (#struct){
  1076        #T: (#struct){
  1077          a: (#struct){
  1078          }
  1079        }
  1080      }
  1081      #U: (_|_){
  1082        // [structural cycle]
  1083        #T: (_|_){
  1084          // [structural cycle]
  1085          a: (_|_){
  1086            // [structural cycle]
  1087            b: (_|_){
  1088              // [structural cycle]
  1089              link: (_|_){
  1090                // [structural cycle] p3.#U.#T.a.b.link: structural cycle
  1091              }
  1092            }
  1093          }
  1094        }
  1095      }
  1096      a: (_|_){
  1097        // [eval] p3.#U.#T.a.b.link: structural cycle
  1098        // p3.a.a: field not allowed:
  1099        //     ./in.cue:246:5
  1100        //     ./in.cue:247:3
  1101        a: (_|_){
  1102          // [eval] p3.a.a: field not allowed:
  1103          //     ./in.cue:246:5
  1104          //     ./in.cue:247:3
  1105        }
  1106      }
  1107    }
  1108    p4: (struct){
  1109      #T: (#struct){
  1110        a: (list){
  1111        }
  1112      }
  1113      a: (#struct){
  1114        a: (#list){
  1115          0: (#struct){
  1116            link: (#struct){
  1117              a: (#list){
  1118                0: (#struct){
  1119                  link: (#struct){
  1120                    a: (list){
  1121                    }
  1122                  }
  1123                }
  1124              }
  1125            }
  1126          }
  1127        }
  1128      }
  1129    }
  1130    p5: (_|_){
  1131      // [structural cycle]
  1132      #T: (_|_){
  1133        // [structural cycle]
  1134        a: (_|_){
  1135          // [structural cycle]
  1136          0: (_|_){
  1137            // [structural cycle]
  1138            link: (_|_){
  1139              // [structural cycle] p5.#T.a.0.link: structural cycle
  1140            }
  1141          }
  1142        }
  1143      }
  1144      a: (_|_){
  1145        // [structural cycle]
  1146        a: (_|_){
  1147          // [structural cycle]
  1148          0: (_|_){
  1149            // [structural cycle]
  1150            link: (_|_){
  1151              // [structural cycle]
  1152              a: (_|_){
  1153                // [structural cycle]
  1154                0: (_|_){
  1155                  // [structural cycle]
  1156                  link: ~(p5.#T)
  1157                }
  1158              }
  1159            }
  1160          }
  1161        }
  1162      }
  1163    }
  1164    p6: (_|_){
  1165      // [eval]
  1166      #S: (#struct){
  1167        #T: (#struct){
  1168          a: (list){
  1169          }
  1170        }
  1171      }
  1172      #U: (_|_){
  1173        // [structural cycle]
  1174        #T: (_|_){
  1175          // [structural cycle]
  1176          a: (_|_){
  1177            // [structural cycle]
  1178            0: (_|_){
  1179              // [structural cycle]
  1180              link: (_|_){
  1181                // [structural cycle] p6.#U.#T.a.0.link: structural cycle
  1182              }
  1183            }
  1184          }
  1185        }
  1186      }
  1187      a: (_|_){
  1188        // [eval] p6.#U.#T.a.0.link: structural cycle
  1189        // p6.a.a: field not allowed:
  1190        //     ./in.cue:285:5
  1191        //     ./in.cue:286:3
  1192        a: (_|_){
  1193          // [eval] p6.a.a: field not allowed:
  1194          //     ./in.cue:285:5
  1195          //     ./in.cue:286:3
  1196        }
  1197      }
  1198    }
  1199    c1: (_|_){
  1200      // [structural cycle]
  1201      a: (_|_){
  1202        // [structural cycle]
  1203        b: (struct){
  1204        }
  1205        c: (_|_){
  1206          // [structural cycle] c1.a.c: structural cycle
  1207        }
  1208      }
  1209    }
  1210    d1: (_|_){
  1211      // [structural cycle]
  1212      a: (_|_){
  1213        // [structural cycle]
  1214        b: (_|_){
  1215          // [structural cycle]
  1216          c: (_|_){
  1217            // [structural cycle]
  1218            d: (_|_){
  1219              // [structural cycle]
  1220              h: (int){ int }
  1221              t: (_|_){
  1222                // [structural cycle] d1.r: structural cycle
  1223              }
  1224            }
  1225          }
  1226        }
  1227      }
  1228      r: (_|_){
  1229        // [structural cycle] d1.r: structural cycle
  1230      }
  1231      x: (_|_){
  1232        // [structural cycle] d1.r: structural cycle
  1233      }
  1234    }
  1235    d2: (struct){
  1236      x: ~(d2.a.b.c)
  1237      r: (struct){
  1238        c: (_|_){
  1239          // [cycle] d2.a.b.c: mutual dependency
  1240        }
  1241      }
  1242      a: (struct){
  1243        b: (struct){
  1244          c: (_|_){
  1245            // [cycle] d2.a.b.c: mutual dependency
  1246          }
  1247        }
  1248      }
  1249    }
  1250    d3: (_|_){
  1251      // [structural cycle]
  1252      config: (_|_){
  1253        // [structural cycle]
  1254        a: (_|_){
  1255          // [structural cycle]
  1256          b: (_|_){
  1257            // [structural cycle]
  1258            c: (_|_){
  1259              // [structural cycle] d3.config.0: structural cycle:
  1260              //     ./in.cue:315:13
  1261            }
  1262          }
  1263        }
  1264        indirect: (_|_){
  1265          // [structural cycle] d3.config.0: structural cycle:
  1266          //     ./in.cue:315:13
  1267        }
  1268        i: (int){ |(*(int){ 1 }, (int){ int }) }
  1269      }
  1270      x: (_|_){
  1271        // [structural cycle]
  1272        i: (int){ 0 }
  1273        a: (_|_){
  1274          // [structural cycle]
  1275          b: (_|_){
  1276            // [structural cycle]
  1277            c: (_|_){
  1278              // [structural cycle] d3.x.0: structural cycle:
  1279              //     ./in.cue:315:13
  1280            }
  1281          }
  1282        }
  1283        indirect: (_|_){
  1284          // [structural cycle] d3.x.0: structural cycle:
  1285          //     ./in.cue:315:13
  1286        }
  1287      }
  1288    }
  1289    shortPathFail: (_|_){
  1290      // [structural cycle]
  1291      doubleRef: (struct){
  1292        a: (#struct){
  1293          Next: (null){ null }
  1294        }
  1295        #List: (#struct){
  1296          Next: (null){ null }
  1297        }
  1298      }
  1299      elipsis: (_|_){
  1300        // [structural cycle]
  1301        t1: (struct){
  1302          #Foo: (#struct){
  1303            ref: (null){ null }
  1304          }
  1305        }
  1306        t2: (_|_){
  1307          // [structural cycle]
  1308          Foo: (_|_){
  1309            // [structural cycle]
  1310            ref: (_|_){
  1311              // [structural cycle] shortPathFail.elipsis.t2.Foo.ref: structural cycle
  1312            }
  1313          }
  1314        }
  1315      }
  1316      comprehension: (struct){
  1317        #list: (#struct){
  1318          tail: ((null|struct)){ |(*(null){ null }, (#struct){
  1319              tail: (null){ null }
  1320            }) }
  1321        }
  1322      }
  1323    }
  1324    patternFail: (_|_){
  1325      // [structural cycle]
  1326      issue2374: (_|_){
  1327        // [structural cycle]
  1328        a: (_|_){
  1329          // [structural cycle]
  1330          r: (int){ 0 }
  1331          b: (_|_){
  1332            // [structural cycle] patternFail.issue2374.a.b: structural cycle
  1333          }
  1334        }
  1335      }
  1336    }
  1337    withLetFail: (_|_){
  1338      // [structural cycle]
  1339      schema: (_|_){
  1340        // [structural cycle]
  1341        next: (_|_){
  1342          // [structural cycle] withLetFail._schema_1: structural cycle:
  1343          //     ./in.cue:360:17
  1344        }
  1345      }
  1346      let _schema_1#1 = (_|_){
  1347        // [structural cycle] withLetFail._schema_1: structural cycle:
  1348        //     ./in.cue:360:17
  1349      }
  1350    }
  1351    listOptOK: (struct){
  1352      list: (struct){
  1353        head: (int){ int }
  1354        tail?: (_|_){
  1355          // [structural cycle] listOptOK.list.tail: structural cycle
  1356        }
  1357      }
  1358      a: (struct){
  1359        head: (int){ 3 }
  1360        tail: (struct){
  1361          head: (int){ 2 }
  1362          tail?: (_|_){
  1363            // [structural cycle] listOptOK.a.tail.tail: structural cycle
  1364          }
  1365        }
  1366      }
  1367    }
  1368    e1: (_|_){
  1369      // [structural cycle]
  1370      a: (_|_){
  1371        // [structural cycle]
  1372        c: (_|_){
  1373          // [structural cycle] e1.a.c: structural cycle
  1374        }
  1375      }
  1376      b: (_|_){
  1377        // [structural cycle]
  1378        c: (_|_){
  1379          // [structural cycle] e1.b.c: structural cycle
  1380        }
  1381      }
  1382    }
  1383    e2: (_|_){
  1384      // [structural cycle]
  1385      a: (_|_){
  1386        // [structural cycle]
  1387        c: (_|_){
  1388          // [structural cycle] e2.a.c: structural cycle
  1389        }
  1390      }
  1391      b: (_|_){
  1392        // [structural cycle]
  1393        c: (_|_){
  1394          // [structural cycle] e2.b.c: structural cycle
  1395        }
  1396      }
  1397    }
  1398    e3: (_|_){
  1399      // [eval]
  1400      a: (_|_){
  1401        // [eval] e3.a: conflicting values [a] and {c:a} (mismatched types list and struct):
  1402        //     ./in.cue:390:5
  1403        //     ./in.cue:391:5
  1404        // e3.a.c: structural cycle
  1405        c: (_|_){
  1406          // [structural cycle] e3.a.c: structural cycle
  1407        }
  1408        0: (_|_){
  1409          // [structural cycle] e3.a.0: structural cycle
  1410        }
  1411      }
  1412      b: (_|_){
  1413        // [eval] e3.b: conflicting values [b] and {c:b} (mismatched types list and struct):
  1414        //     ./in.cue:393:5
  1415        //     ./in.cue:394:5
  1416        // e3.b.c: structural cycle
  1417        c: (_|_){
  1418          // [structural cycle] e3.b.c: structural cycle
  1419        }
  1420        0: (_|_){
  1421          // [structural cycle] e3.b.0: structural cycle
  1422        }
  1423      }
  1424    }
  1425    e4: (_|_){
  1426      // [eval]
  1427      a: (_|_){
  1428        // [eval]
  1429        0: (_|_){
  1430          // [eval] e4.a.0: conflicting values [{c:1}] and {} (mismatched types list and struct):
  1431          //     ./in.cue:398:10
  1432          //     ./in.cue:399:6
  1433          // e4.a.0.0: conflicting values [{c:1}] and {c:1} (mismatched types list and struct):
  1434          //     ./in.cue:399:6
  1435          //     ./in.cue:399:7
  1436          // e4.a.0.0: conflicting values [{c:1}] and {} (mismatched types list and struct):
  1437          //     ./in.cue:398:10
  1438          //     ./in.cue:399:6
  1439          // e4.a.0.0.0: conflicting values [{c:1}] and {c:1} (mismatched types list and struct):
  1440          //     ./in.cue:399:6
  1441          //     ./in.cue:399:7
  1442          // e4.a.0.0.0: conflicting values [{c:1}] and {} (mismatched types list and struct):
  1443          //     ./in.cue:398:10
  1444          //     ./in.cue:399:6
  1445          // e4.a.0.0.0: structural cycle
  1446          // e4.a.0.0: cannot combine regular field "c" with [1,{c:1} & (a|{}) & [{c:1}]]:
  1447          //     ./in.cue:399:11
  1448          // e4.a.0.0.0: cannot combine regular field "c" with [1,{c:1}]:
  1449          //     ./in.cue:399:11
  1450        }
  1451      }
  1452      b: (_|_){
  1453        // [eval]
  1454        0: (_|_){
  1455          // [eval] e4.b.0: conflicting values [{c:1}] and {} (mismatched types list and struct):
  1456          //     ./in.cue:401:6
  1457          //     ./in.cue:402:10
  1458          // e4.b.0.0: conflicting values [{c:1}] and {c:1} (mismatched types list and struct):
  1459          //     ./in.cue:401:6
  1460          //     ./in.cue:401:7
  1461          // e4.b.0.0: conflicting values [{c:1}] and {} (mismatched types list and struct):
  1462          //     ./in.cue:401:6
  1463          //     ./in.cue:402:10
  1464          // e4.b.0.0.0: conflicting values [{c:1}] and {c:1} (mismatched types list and struct):
  1465          //     ./in.cue:401:6
  1466          //     ./in.cue:401:7
  1467          // e4.b.0.0.0: conflicting values [{c:1}] and {} (mismatched types list and struct):
  1468          //     ./in.cue:401:6
  1469          //     ./in.cue:402:10
  1470          // e4.b.0.0.0: structural cycle
  1471          // e4.b.0.0: cannot combine regular field "c" with [1,{c:1} & [{c:1}] & (b|{})]:
  1472          //     ./in.cue:401:11
  1473          // e4.b.0.0.0: cannot combine regular field "c" with [1,{c:1}]:
  1474          //     ./in.cue:401:11
  1475        }
  1476      }
  1477    }
  1478    e5: (struct){
  1479      a: (struct){
  1480        c: (int){ int }
  1481      }
  1482      b: (struct){
  1483        c: (int){ int }
  1484      }
  1485    }
  1486    nestedList: (_|_){
  1487      // [eval]
  1488      v1e: (_|_){
  1489        // [eval]
  1490        x: (#list){
  1491          0: (int){ int }
  1492          1: (int){ 1 }
  1493        }
  1494        y: (_|_){
  1495          // [eval]
  1496          0: (_|_){
  1497            // [eval] nestedList.v1e.y.0: conflicting values int and [[2],1] (mismatched types int and list):
  1498            //     ./in.cue:416:11
  1499            //     ./in.cue:417:11
  1500            // nestedList.v1e.y.0.0: conflicting values int and [2] (mismatched types int and list):
  1501            //     ./in.cue:416:11
  1502            //     ./in.cue:417:12
  1503            // nestedList.v1e.y.0.0: incompatible list lengths (1 and 2):
  1504            //     ./in.cue:416:6
  1505          }
  1506          1: (int){ 1 }
  1507        }
  1508      }
  1509      v2e: (_|_){
  1510        // [eval]
  1511        y: (_|_){
  1512          // [eval]
  1513          0: (_|_){
  1514            // [eval] nestedList.v2e.y.0: conflicting values int and [[2],1] (mismatched types int and list):
  1515            //     ./in.cue:421:11
  1516            //     ./in.cue:422:11
  1517            // nestedList.v2e.y.0.0: conflicting values int and [2] (mismatched types int and list):
  1518            //     ./in.cue:421:12
  1519            //     ./in.cue:422:11
  1520            // nestedList.v2e.y.0.0: incompatible list lengths (1 and 2):
  1521            //     ./in.cue:422:6
  1522          }
  1523          1: (int){ 1 }
  1524        }
  1525        x: (#list){
  1526          0: (int){ int }
  1527          1: (int){ 1 }
  1528        }
  1529      }
  1530      v1: (struct){
  1531        x: (#list){
  1532          0: (int){ int }
  1533          1: (int){ 1 }
  1534        }
  1535        y: (#list){
  1536          0: (#list){
  1537            0: (#list){
  1538              0: (int){ 2 }
  1539              1: (int){ 1 }
  1540            }
  1541            1: (int){ 1 }
  1542          }
  1543          1: (int){ 1 }
  1544        }
  1545      }
  1546      v2: (struct){
  1547        y: (#list){
  1548          0: (#list){
  1549            0: (#list){
  1550              0: (int){ 2 }
  1551              1: (int){ 1 }
  1552            }
  1553            1: (int){ 1 }
  1554          }
  1555          1: (int){ 1 }
  1556        }
  1557        x: (#list){
  1558          0: (int){ int }
  1559          1: (int){ 1 }
  1560        }
  1561      }
  1562    }
  1563    v3: (struct){
  1564      list: (struct){
  1565        head: (int){ int }
  1566        tail: (null){ null }
  1567      }
  1568      myList: (struct){
  1569        head: (int){ 2 }
  1570        tail: (struct){
  1571          head: (int){ 3 }
  1572          tail: (struct){
  1573            head: (int){ 4 }
  1574            tail: (null){ null }
  1575          }
  1576        }
  1577      }
  1578    }
  1579    v4: (struct){
  1580      list: (struct){
  1581        head: (int){ int }
  1582        tail: (int){ 1 }
  1583      }
  1584      myList: (struct){
  1585        head: (int){ 2 }
  1586        tail: (struct){
  1587          head: (int){ 3 }
  1588          tail: (int){ 1 }
  1589        }
  1590      }
  1591    }
  1592    v5: (struct){
  1593      list: (struct){
  1594        head: (int){ int }
  1595        tail: (struct){
  1596        }
  1597      }
  1598      myList: (struct){
  1599        head: (int){ 2 }
  1600        tail: (struct){ |((struct){
  1601            head: (int){ 3 }
  1602            tail: (struct){
  1603            }
  1604          }, (struct){
  1605            head: (int){ 3 }
  1606          }) }
  1607      }
  1608    }
  1609    z1: (_|_){
  1610      // [structural cycle]
  1611      y: (struct){
  1612        f: (struct){
  1613          h: (_){ _ }
  1614        }
  1615        g: (_){ _ }
  1616      }
  1617      x: (struct){
  1618        f: (_){ _ }
  1619        g: (_){ _ }
  1620      }
  1621      z: (_|_){
  1622        // [structural cycle]
  1623        f: (_|_){
  1624          // [structural cycle]
  1625          h: ~(z1.z.g)
  1626        }
  1627        g: (_|_){
  1628          // [structural cycle]
  1629          h: (_|_){
  1630            // [structural cycle] z1.z.g.h: structural cycle
  1631          }
  1632        }
  1633      }
  1634    }
  1635    crossRefNoCycle: (struct){
  1636      t1: (struct){
  1637        T: (struct){
  1638          x: (_){ _ }
  1639          y: (_){ _ }
  1640        }
  1641        C: (struct){
  1642          x: (struct){
  1643            x: (_){ _ }
  1644            y: (_){ _ }
  1645          }
  1646          y: (struct){
  1647            x: (_){ _ }
  1648            y: (_){ _ }
  1649          }
  1650        }
  1651      }
  1652      t2: (struct){
  1653        T: (struct){
  1654          x: (_){ _ }
  1655          y: (_){ _ }
  1656        }
  1657        C: (struct){
  1658          x: (struct){
  1659            x: (_){ _ }
  1660            y: (_){ _ }
  1661          }
  1662          y: (struct){
  1663            x: (_){ _ }
  1664            y: (_){ _ }
  1665          }
  1666        }
  1667      }
  1668      t3: (struct){
  1669        T: (struct){
  1670          x: (_){ _ }
  1671          y: (_){ _ }
  1672          z: (_){ _ }
  1673        }
  1674        C: (struct){
  1675          x: (struct){
  1676            x: (_){ _ }
  1677            y: (_){ _ }
  1678            z: (_){ _ }
  1679          }
  1680          y: (struct){
  1681            x: (_){ _ }
  1682            y: (_){ _ }
  1683            z: (_){ _ }
  1684          }
  1685          z: (struct){
  1686            x: (_){ _ }
  1687            y: (_){ _ }
  1688            z: (_){ _ }
  1689          }
  1690        }
  1691      }
  1692      t4: (struct){
  1693        T: (struct){
  1694          x: (_){ _ }
  1695          y: (_){ _ }
  1696          z: (_){ _ }
  1697        }
  1698        C: (struct){
  1699          x: (struct){
  1700            x: (struct){
  1701              x: (_){ _ }
  1702              y: (_){ _ }
  1703              z: (_){ _ }
  1704            }
  1705            y: (struct){
  1706              x: (_){ _ }
  1707              y: (_){ _ }
  1708              z: (_){ _ }
  1709            }
  1710            z: (struct){
  1711              x: (_){ _ }
  1712              y: (_){ _ }
  1713              z: (_){ _ }
  1714            }
  1715          }
  1716          y: (struct){
  1717            x: (struct){
  1718              x: (_){ _ }
  1719              y: (_){ _ }
  1720              z: (_){ _ }
  1721            }
  1722            y: (struct){
  1723              x: (_){ _ }
  1724              y: (_){ _ }
  1725              z: (_){ _ }
  1726            }
  1727            z: (struct){
  1728              x: (_){ _ }
  1729              y: (_){ _ }
  1730              z: (_){ _ }
  1731            }
  1732          }
  1733          z: (struct){
  1734            x: (struct){
  1735              x: (_){ _ }
  1736              y: (_){ _ }
  1737              z: (_){ _ }
  1738            }
  1739            y: (struct){
  1740              x: (_){ _ }
  1741              y: (_){ _ }
  1742              z: (_){ _ }
  1743            }
  1744            z: (struct){
  1745              x: (_){ _ }
  1746              y: (_){ _ }
  1747              z: (_){ _ }
  1748            }
  1749          }
  1750        }
  1751      }
  1752    }
  1753    n1: (struct){
  1754      a: (struct){
  1755        b: (int){ int }
  1756      }
  1757    }
  1758    n2: (struct){
  1759      a: (struct){
  1760        b: (int){ int }
  1761        a: (struct){
  1762          b: (int){ int }
  1763        }
  1764      }
  1765    }
  1766    n3: (struct){
  1767      a: (struct){
  1768        b: (int){ int }
  1769      }
  1770    }
  1771    n4: (struct){
  1772      x: (struct){
  1773        y: (struct){
  1774          z: (int){ int }
  1775          a: (struct){
  1776            b: (int){ int }
  1777          }
  1778        }
  1779        a: (struct){
  1780          b: (int){ int }
  1781        }
  1782      }
  1783      a: (struct){
  1784        b: (int){ int }
  1785      }
  1786    }
  1787  }
  1788  -- diff/-out/evalalpha<==>+out/eval --
  1789  diff old new
  1790  --- old
  1791  +++ new
  1792  @@ -2,24 +2,28 @@
  1793   a1.f.0: structural cycle
  1794   a3.f.g: structural cycle
  1795   b12b.#list.tail: structural cycle
  1796  +b12b.list1.tail.tail.tail: structural cycle
  1797   b13.root.a.0.0: structural cycle
  1798   b14.root.b.1.1: structural cycle
  1799  +b4.b.0: conflicting values 1 and [y] (mismatched types int and list):
  1800  +    ./in.cue:53:12
  1801  +    ./in.cue:54:8
  1802  +b4.b.0.0: structural cycle
  1803   b4.cond1.x.y.0: structural cycle
  1804   b4.cond2.x.y.0: structural cycle
  1805   b4.x.y.0: structural cycle
  1806   b6.b.a.0: conflicting values 1 and [1] (mismatched types int and list):
  1807  -    ./in.cue:92:5
  1808       ./in.cue:92:13
  1809       ./in.cue:92:14
  1810  -    ./in.cue:93:9
  1811   b6.b.a.0.0: structural cycle
  1812   b6.x.a.0: structural cycle
  1813   b7.a.0: structural cycle
  1814  -c1.a.c.c: structural cycle
  1815  -d1.a.b.c.d.t: structural cycle
  1816  -d2.a.b.c.d.t: structural cycle
  1817  -d2.r.c.d.t: structural cycle
  1818  -d3.x.a.b.c: structural cycle
  1819  +b7.b.0.0: conflicting values 1 and [a] (mismatched types int and list):
  1820  +    ./in.cue:97:11
  1821  +    ./in.cue:98:5
  1822  +b7.b.0.0.0: structural cycle
  1823  +c1.a.c: structural cycle
  1824  +d1.r: structural cycle
  1825   e1.a.c: structural cycle
  1826   e1.b.c: structural cycle
  1827   e2.a.c: structural cycle
  1828  @@ -32,61 +36,81 @@
  1829       ./in.cue:393:5
  1830       ./in.cue:394:5
  1831   e3.b.c: structural cycle
  1832  -e4.a.0: 4 errors in empty disjunction:
  1833   e4.a.0: conflicting values [{c:1}] and {} (mismatched types list and struct):
  1834       ./in.cue:398:10
  1835       ./in.cue:399:6
  1836  -e4.a.0.0: 2 errors in empty disjunction:
  1837  -e4.a.0.0: conflicting values [[{c:1}]] and {c:1} (mismatched types list and struct):
  1838  -    ./in.cue:399:5
  1839  +e4.a.0.0: conflicting values [{c:1}] and {c:1} (mismatched types list and struct):
  1840  +    ./in.cue:399:6
  1841       ./in.cue:399:7
  1842   e4.a.0.0: conflicting values [{c:1}] and {} (mismatched types list and struct):
  1843  -    ./in.cue:398:6
  1844  -    ./in.cue:398:10
  1845  -    ./in.cue:399:6
  1846  -e4.b.0: 4 errors in empty disjunction:
  1847  +    ./in.cue:398:10
  1848  +    ./in.cue:399:6
  1849  +e4.a.0.0.0: conflicting values [{c:1}] and {c:1} (mismatched types list and struct):
  1850  +    ./in.cue:399:6
  1851  +    ./in.cue:399:7
  1852  +e4.a.0.0.0: conflicting values [{c:1}] and {} (mismatched types list and struct):
  1853  +    ./in.cue:398:10
  1854  +    ./in.cue:399:6
  1855  +e4.a.0.0.0: structural cycle
  1856   e4.b.0: conflicting values [{c:1}] and {} (mismatched types list and struct):
  1857       ./in.cue:401:6
  1858       ./in.cue:402:10
  1859  -e4.b.0.0: 2 errors in empty disjunction:
  1860  -e4.b.0.0: conflicting values [(b|{})] and {c:1} (mismatched types list and struct):
  1861  -    ./in.cue:401:7
  1862  -    ./in.cue:402:5
  1863  +e4.b.0.0: conflicting values [{c:1}] and {c:1} (mismatched types list and struct):
  1864  +    ./in.cue:401:6
  1865  +    ./in.cue:401:7
  1866   e4.b.0.0: conflicting values [{c:1}] and {} (mismatched types list and struct):
  1867       ./in.cue:401:6
  1868  -    ./in.cue:402:6
  1869  -    ./in.cue:402:10
  1870  -nestedList.v1e.y.0: 4 errors in empty disjunction:
  1871  +    ./in.cue:402:10
  1872  +e4.b.0.0.0: conflicting values [{c:1}] and {c:1} (mismatched types list and struct):
  1873  +    ./in.cue:401:6
  1874  +    ./in.cue:401:7
  1875  +e4.b.0.0.0: conflicting values [{c:1}] and {} (mismatched types list and struct):
  1876  +    ./in.cue:401:6
  1877  +    ./in.cue:402:10
  1878  +e4.b.0.0.0: structural cycle
  1879   nestedList.v1e.y.0: conflicting values int and [[2],1] (mismatched types int and list):
  1880       ./in.cue:416:11
  1881       ./in.cue:417:11
  1882  -nestedList.v1e.y.0.0: 2 errors in empty disjunction:
  1883   nestedList.v1e.y.0.0: conflicting values int and [2] (mismatched types int and list):
  1884       ./in.cue:416:11
  1885       ./in.cue:417:12
  1886  -nestedList.v1e.y.0.0: incompatible list lengths (1 and 2)
  1887  -nestedList.v2e.y.0: 4 errors in empty disjunction:
  1888   nestedList.v2e.y.0: conflicting values int and [[2],1] (mismatched types int and list):
  1889       ./in.cue:421:11
  1890       ./in.cue:422:11
  1891  -nestedList.v2e.y.0.0: 2 errors in empty disjunction:
  1892   nestedList.v2e.y.0.0: conflicting values int and [2] (mismatched types int and list):
  1893       ./in.cue:421:12
  1894       ./in.cue:422:11
  1895  -nestedList.v2e.y.0.0: incompatible list lengths (1 and 2)
  1896   p2.#T.a.b.link: structural cycle
  1897   p3.#U.#T.a.b.link: structural cycle
  1898   p5.#T.a.0.link: structural cycle
  1899   p6.#U.#T.a.0.link: structural cycle
  1900   patternFail.issue2374.a.b: structural cycle
  1901  -shortPathFail.elipsis.t2.Foo.ref.ref: structural cycle
  1902  -withLetFail.schema.next: structural cycle
  1903  -z1.z.f.h: structural cycle
  1904  +shortPathFail.elipsis.t2.Foo.ref: structural cycle
  1905   z1.z.g.h: structural cycle
  1906  -d1.r: structural cycle:
  1907  -    ./in.cue:299:26
  1908  -d3.x.indirect: structural cycle:
  1909  -    ./in.cue:314:12
  1910  +p3.a.a: field not allowed:
  1911  +    ./in.cue:246:5
  1912  +    ./in.cue:247:3
  1913  +p6.a.a: field not allowed:
  1914  +    ./in.cue:285:5
  1915  +    ./in.cue:286:3
  1916  +d3.config.0: structural cycle:
  1917  +    ./in.cue:315:13
  1918  +d3.x.0: structural cycle:
  1919  +    ./in.cue:315:13
  1920  +withLetFail._schema_1: structural cycle:
  1921  +    ./in.cue:360:17
  1922  +e4.a.0.0: cannot combine regular field "c" with [1,{c:1} & (a|{}) & [{c:1}]]:
  1923  +    ./in.cue:399:11
  1924  +e4.a.0.0.0: cannot combine regular field "c" with [1,{c:1}]:
  1925  +    ./in.cue:399:11
  1926  +e4.b.0.0: cannot combine regular field "c" with [1,{c:1} & [{c:1}] & (b|{})]:
  1927  +    ./in.cue:401:11
  1928  +e4.b.0.0.0: cannot combine regular field "c" with [1,{c:1}]:
  1929  +    ./in.cue:401:11
  1930  +nestedList.v1e.y.0.0: incompatible list lengths (1 and 2):
  1931  +    ./in.cue:416:6
  1932  +nestedList.v2e.y.0.0: incompatible list lengths (1 and 2):
  1933  +    ./in.cue:422:6
  1934   
  1935   Result:
  1936   (_|_){
  1937  @@ -168,11 +192,17 @@
  1938       }
  1939     }
  1940     b4: (_|_){
  1941  -    // [structural cycle]
  1942  -    b: (_|_){
  1943  -      // [structural cycle]
  1944  -      0: (_|_){
  1945  -        // [structural cycle] b4.x.y.0: structural cycle
  1946  +    // [eval]
  1947  +    b: (_|_){
  1948  +      // [eval]
  1949  +      0: (_|_){
  1950  +        // [eval] b4.b.0: conflicting values 1 and [y] (mismatched types int and list):
  1951  +        //     ./in.cue:53:12
  1952  +        //     ./in.cue:54:8
  1953  +        // b4.b.0.0: structural cycle
  1954  +        0: (_|_){
  1955  +          // [structural cycle] b4.b.0.0: structural cycle
  1956  +        }
  1957         }
  1958       }
  1959       x: (_|_){
  1960  @@ -240,10 +270,9 @@
  1961           // [eval]
  1962           0: (_|_){
  1963             // [eval] b6.b.a.0: conflicting values 1 and [1] (mismatched types int and list):
  1964  -          //     ./in.cue:92:5
  1965             //     ./in.cue:92:13
  1966             //     ./in.cue:92:14
  1967  -          //     ./in.cue:93:9
  1968  +          // b6.b.a.0.0: structural cycle
  1969             0: (_|_){
  1970               // [structural cycle] b6.b.a.0.0: structural cycle
  1971             }
  1972  @@ -261,11 +290,20 @@
  1973       }
  1974     }
  1975     b7: (_|_){
  1976  -    // [structural cycle]
  1977  -    b: (_|_){
  1978  -      // [structural cycle]
  1979  -      0: (_|_){
  1980  -        // [structural cycle] b7.a.0: structural cycle
  1981  +    // [eval]
  1982  +    b: (_|_){
  1983  +      // [eval]
  1984  +      0: (_|_){
  1985  +        // [eval]
  1986  +        0: (_|_){
  1987  +          // [eval] b7.b.0.0: conflicting values 1 and [a] (mismatched types int and list):
  1988  +          //     ./in.cue:97:11
  1989  +          //     ./in.cue:98:5
  1990  +          // b7.b.0.0.0: structural cycle
  1991  +          0: (_|_){
  1992  +            // [structural cycle] b7.b.0.0.0: structural cycle
  1993  +          }
  1994  +        }
  1995         }
  1996       }
  1997       a: (_|_){
  1998  @@ -304,7 +342,7 @@
  1999       #ref: (#struct){
  2000         ref: (string){ string }
  2001       }
  2002  -    x: (#struct){ |((#struct){
  2003  +    x: (struct){ |((#struct){
  2004           c: (#list){
  2005             0: ((string|struct)){ |((string){ string }, (#struct){
  2006                 ref: (string){ string }
  2007  @@ -327,7 +365,9 @@
  2008           }) }
  2009       }
  2010       c: (#struct){
  2011  -      d: (string){ string }
  2012  +      d: ((string|struct)){ |((string){ string }, (#struct){
  2013  +          b: (string){ string }
  2014  +        }) }
  2015       }
  2016       d: (struct){
  2017         d: (struct){
  2018  @@ -372,7 +412,7 @@
  2019         // [structural cycle] b12b.#list.tail: structural cycle
  2020       }
  2021       list1: (_|_){
  2022  -      // [structural cycle] b12b.#list.tail: structural cycle
  2023  +      // [structural cycle] b12b.list1.tail.tail.tail: structural cycle
  2024       }
  2025     }
  2026     b13: (_|_){
  2027  @@ -455,20 +495,34 @@
  2028       }
  2029       a: (_|_){
  2030         // [structural cycle]
  2031  -      a: (struct){
  2032  -        one: (struct){
  2033  -          link: (struct){
  2034  -            a: (struct){
  2035  -              two: (struct){
  2036  -              }
  2037  -            }
  2038  -          }
  2039  +      a: (_|_){
  2040  +        // [structural cycle]
  2041  +        one: (_|_){
  2042  +          // [structural cycle]
  2043  +          link: (_|_){
  2044  +            // [structural cycle]
  2045  +            a: (_|_){
  2046  +              // [structural cycle]
  2047  +              two: (_|_){
  2048  +                // [structural cycle]
  2049  +                link: ~(p2.#T)
  2050  +              }
  2051  +              b: (_|_){
  2052  +                // [structural cycle]
  2053  +                link: ~(p2.#T)
  2054  +              }
  2055  +            }
  2056  +          }
  2057  +        }
  2058  +        b: (_|_){
  2059  +          // [structural cycle]
  2060  +          link: ~(p2.#T)
  2061           }
  2062         }
  2063       }
  2064     }
  2065     p3: (_|_){
  2066  -    // [structural cycle]
  2067  +    // [eval]
  2068       #S: (#struct){
  2069         #T: (#struct){
  2070           a: (#struct){
  2071  @@ -491,7 +545,15 @@
  2072         }
  2073       }
  2074       a: (_|_){
  2075  -      // [structural cycle] p3.#U.#T.a.b.link: structural cycle
  2076  +      // [eval] p3.#U.#T.a.b.link: structural cycle
  2077  +      // p3.a.a: field not allowed:
  2078  +      //     ./in.cue:246:5
  2079  +      //     ./in.cue:247:3
  2080  +      a: (_|_){
  2081  +        // [eval] p3.a.a: field not allowed:
  2082  +        //     ./in.cue:246:5
  2083  +        //     ./in.cue:247:3
  2084  +      }
  2085       }
  2086     }
  2087     p4: (struct){
  2088  @@ -532,11 +594,17 @@
  2089       }
  2090       a: (_|_){
  2091         // [structural cycle]
  2092  -      a: (#list){
  2093  -        0: (struct){
  2094  -          link: (struct){
  2095  -            a: (#list){
  2096  -              0: (struct){
  2097  +      a: (_|_){
  2098  +        // [structural cycle]
  2099  +        0: (_|_){
  2100  +          // [structural cycle]
  2101  +          link: (_|_){
  2102  +            // [structural cycle]
  2103  +            a: (_|_){
  2104  +              // [structural cycle]
  2105  +              0: (_|_){
  2106  +                // [structural cycle]
  2107  +                link: ~(p5.#T)
  2108                 }
  2109               }
  2110             }
  2111  @@ -545,7 +613,7 @@
  2112       }
  2113     }
  2114     p6: (_|_){
  2115  -    // [structural cycle]
  2116  +    // [eval]
  2117       #S: (#struct){
  2118         #T: (#struct){
  2119           a: (list){
  2120  @@ -568,7 +636,15 @@
  2121         }
  2122       }
  2123       a: (_|_){
  2124  -      // [structural cycle] p6.#U.#T.a.0.link: structural cycle
  2125  +      // [eval] p6.#U.#T.a.0.link: structural cycle
  2126  +      // p6.a.a: field not allowed:
  2127  +      //     ./in.cue:285:5
  2128  +      //     ./in.cue:286:3
  2129  +      a: (_|_){
  2130  +        // [eval] p6.a.a: field not allowed:
  2131  +        //     ./in.cue:285:5
  2132  +        //     ./in.cue:286:3
  2133  +      }
  2134       }
  2135     }
  2136     c1: (_|_){
  2137  @@ -578,12 +654,7 @@
  2138         b: (struct){
  2139         }
  2140         c: (_|_){
  2141  -        // [structural cycle]
  2142  -        b: (struct){
  2143  -        }
  2144  -        c: (_|_){
  2145  -          // [structural cycle] c1.a.c.c: structural cycle
  2146  -        }
  2147  +        // [structural cycle] c1.a.c: structural cycle
  2148         }
  2149       }
  2150     }
  2151  @@ -599,56 +670,30 @@
  2152               // [structural cycle]
  2153               h: (int){ int }
  2154               t: (_|_){
  2155  -              // [structural cycle] d1.a.b.c.d.t: structural cycle
  2156  -            }
  2157  -          }
  2158  -        }
  2159  -      }
  2160  -    }
  2161  -    r: (_|_){
  2162  -      // [structural cycle] d1.r: structural cycle:
  2163  -      //     ./in.cue:299:26
  2164  -    }
  2165  -    x: (_|_){
  2166  -      // [structural cycle] d1.a.b.c.d.t: structural cycle
  2167  -    }
  2168  -  }
  2169  -  d2: (_|_){
  2170  -    // [structural cycle]
  2171  -    x: (_|_){
  2172  -      // [structural cycle]
  2173  -      d: (_|_){
  2174  -        // [structural cycle]
  2175  -        h: (int){ int }
  2176  -        t: (_|_){
  2177  -          // [structural cycle]
  2178  -        }
  2179  -      }
  2180  -    }
  2181  -    r: (_|_){
  2182  -      // [structural cycle]
  2183  -      c: (_|_){
  2184  -        // [structural cycle]
  2185  -        d: (_|_){
  2186  -          // [structural cycle]
  2187  -          h: (int){ int }
  2188  -          t: (_|_){
  2189  -            // [structural cycle] d2.r.c.d.t: structural cycle
  2190  -          }
  2191  -        }
  2192  -      }
  2193  -    }
  2194  -    a: (struct){
  2195  -      b: (struct){
  2196  -        c: (_|_){
  2197  -          // [structural cycle]
  2198  -          d: (_|_){
  2199  -            // [structural cycle]
  2200  -            h: (int){ int }
  2201  -            t: (_|_){
  2202  -              // [structural cycle] d2.a.b.c.d.t: structural cycle
  2203  -            }
  2204  -          }
  2205  +              // [structural cycle] d1.r: structural cycle
  2206  +            }
  2207  +          }
  2208  +        }
  2209  +      }
  2210  +    }
  2211  +    r: (_|_){
  2212  +      // [structural cycle] d1.r: structural cycle
  2213  +    }
  2214  +    x: (_|_){
  2215  +      // [structural cycle] d1.r: structural cycle
  2216  +    }
  2217  +  }
  2218  +  d2: (struct){
  2219  +    x: ~(d2.a.b.c)
  2220  +    r: (struct){
  2221  +      c: (_|_){
  2222  +        // [cycle] d2.a.b.c: mutual dependency
  2223  +      }
  2224  +    }
  2225  +    a: (struct){
  2226  +      b: (struct){
  2227  +        c: (_|_){
  2228  +          // [cycle] d2.a.b.c: mutual dependency
  2229           }
  2230         }
  2231       }
  2232  @@ -655,31 +700,41 @@
  2233     }
  2234     d3: (_|_){
  2235       // [structural cycle]
  2236  -    config: (struct){
  2237  -      a: (struct){
  2238  -        b: (struct){
  2239  -          c: (null){ null }
  2240  -        }
  2241  -      }
  2242  -      indirect: (null){ null }
  2243  +    config: (_|_){
  2244  +      // [structural cycle]
  2245  +      a: (_|_){
  2246  +        // [structural cycle]
  2247  +        b: (_|_){
  2248  +          // [structural cycle]
  2249  +          c: (_|_){
  2250  +            // [structural cycle] d3.config.0: structural cycle:
  2251  +            //     ./in.cue:315:13
  2252  +          }
  2253  +        }
  2254  +      }
  2255  +      indirect: (_|_){
  2256  +        // [structural cycle] d3.config.0: structural cycle:
  2257  +        //     ./in.cue:315:13
  2258  +      }
  2259         i: (int){ |(*(int){ 1 }, (int){ int }) }
  2260       }
  2261       x: (_|_){
  2262         // [structural cycle]
  2263  -      a: (_|_){
  2264  -        // [structural cycle]
  2265  -        b: (_|_){
  2266  -          // [structural cycle]
  2267  -          c: (_|_){
  2268  -            // [structural cycle] d3.x.a.b.c: structural cycle
  2269  -          }
  2270  -        }
  2271  -      }
  2272  -      indirect: (_|_){
  2273  -        // [structural cycle] d3.x.indirect: structural cycle:
  2274  -        //     ./in.cue:314:12
  2275  -      }
  2276         i: (int){ 0 }
  2277  +      a: (_|_){
  2278  +        // [structural cycle]
  2279  +        b: (_|_){
  2280  +          // [structural cycle]
  2281  +          c: (_|_){
  2282  +            // [structural cycle] d3.x.0: structural cycle:
  2283  +            //     ./in.cue:315:13
  2284  +          }
  2285  +        }
  2286  +      }
  2287  +      indirect: (_|_){
  2288  +        // [structural cycle] d3.x.0: structural cycle:
  2289  +        //     ./in.cue:315:13
  2290  +      }
  2291       }
  2292     }
  2293     shortPathFail: (_|_){
  2294  @@ -696,9 +751,7 @@
  2295         // [structural cycle]
  2296         t1: (struct){
  2297           #Foo: (#struct){
  2298  -          ref: ((null|struct)){ |((null){ null }, (#struct){
  2299  -              ref: (null){ null }
  2300  -            }) }
  2301  +          ref: (null){ null }
  2302           }
  2303         }
  2304         t2: (_|_){
  2305  @@ -706,10 +759,7 @@
  2306           Foo: (_|_){
  2307             // [structural cycle]
  2308             ref: (_|_){
  2309  -            // [structural cycle]
  2310  -            ref: (_|_){
  2311  -              // [structural cycle] shortPathFail.elipsis.t2.Foo.ref.ref: structural cycle
  2312  -            }
  2313  +            // [structural cycle] shortPathFail.elipsis.t2.Foo.ref: structural cycle
  2314             }
  2315           }
  2316         }
  2317  @@ -740,7 +790,8 @@
  2318       schema: (_|_){
  2319         // [structural cycle]
  2320         next: (_|_){
  2321  -        // [structural cycle] withLetFail.schema.next: structural cycle
  2322  +        // [structural cycle] withLetFail._schema_1: structural cycle:
  2323  +        //     ./in.cue:360:17
  2324         }
  2325       }
  2326       let _schema_1#1 = (_|_){
  2327  @@ -801,11 +852,12 @@
  2328         // [eval] e3.a: conflicting values [a] and {c:a} (mismatched types list and struct):
  2329         //     ./in.cue:390:5
  2330         //     ./in.cue:391:5
  2331  -      c: (_|_){
  2332  -        // [structural cycle] e3.a.c: structural cycle
  2333  -      }
  2334  -      0: (_|_){
  2335  -        // [structural cycle] e3.a.c: structural cycle
  2336  +      // e3.a.c: structural cycle
  2337  +      c: (_|_){
  2338  +        // [structural cycle] e3.a.c: structural cycle
  2339  +      }
  2340  +      0: (_|_){
  2341  +        // [structural cycle] e3.a.0: structural cycle
  2342         }
  2343       }
  2344       b: (_|_){
  2345  @@ -812,11 +864,12 @@
  2346         // [eval] e3.b: conflicting values [b] and {c:b} (mismatched types list and struct):
  2347         //     ./in.cue:393:5
  2348         //     ./in.cue:394:5
  2349  -      c: (_|_){
  2350  -        // [structural cycle] e3.b.c: structural cycle
  2351  -      }
  2352  -      0: (_|_){
  2353  -        // [structural cycle] e3.b.c: structural cycle
  2354  +      // e3.b.c: structural cycle
  2355  +      c: (_|_){
  2356  +        // [structural cycle] e3.b.c: structural cycle
  2357  +      }
  2358  +      0: (_|_){
  2359  +        // [structural cycle] e3.b.0: structural cycle
  2360         }
  2361       }
  2362     }
  2363  @@ -825,41 +878,51 @@
  2364       a: (_|_){
  2365         // [eval]
  2366         0: (_|_){
  2367  -        // [eval] e4.a.0: 4 errors in empty disjunction:
  2368  -        // e4.a.0: conflicting values [{c:1}] and {} (mismatched types list and struct):
  2369  -        //     ./in.cue:398:10
  2370  -        //     ./in.cue:399:6
  2371  -        // e4.a.0.0: 2 errors in empty disjunction:
  2372  -        // e4.a.0.0: conflicting values [[{c:1}]] and {c:1} (mismatched types list and struct):
  2373  -        //     ./in.cue:399:5
  2374  +        // [eval] e4.a.0: conflicting values [{c:1}] and {} (mismatched types list and struct):
  2375  +        //     ./in.cue:398:10
  2376  +        //     ./in.cue:399:6
  2377  +        // e4.a.0.0: conflicting values [{c:1}] and {c:1} (mismatched types list and struct):
  2378  +        //     ./in.cue:399:6
  2379           //     ./in.cue:399:7
  2380           // e4.a.0.0: conflicting values [{c:1}] and {} (mismatched types list and struct):
  2381  -        //     ./in.cue:398:6
  2382  -        //     ./in.cue:398:10
  2383  -        //     ./in.cue:399:6
  2384  -        0: (struct){
  2385  -          c: (int){ 1 }
  2386  -        }
  2387  -      }
  2388  -    }
  2389  -    b: (_|_){
  2390  -      // [eval]
  2391  -      0: (_|_){
  2392  -        // [eval] e4.b.0: 4 errors in empty disjunction:
  2393  -        // e4.b.0: conflicting values [{c:1}] and {} (mismatched types list and struct):
  2394  -        //     ./in.cue:401:6
  2395  -        //     ./in.cue:402:10
  2396  -        // e4.b.0.0: 2 errors in empty disjunction:
  2397  -        // e4.b.0.0: conflicting values [(b|{})] and {c:1} (mismatched types list and struct):
  2398  -        //     ./in.cue:401:7
  2399  -        //     ./in.cue:402:5
  2400  +        //     ./in.cue:398:10
  2401  +        //     ./in.cue:399:6
  2402  +        // e4.a.0.0.0: conflicting values [{c:1}] and {c:1} (mismatched types list and struct):
  2403  +        //     ./in.cue:399:6
  2404  +        //     ./in.cue:399:7
  2405  +        // e4.a.0.0.0: conflicting values [{c:1}] and {} (mismatched types list and struct):
  2406  +        //     ./in.cue:398:10
  2407  +        //     ./in.cue:399:6
  2408  +        // e4.a.0.0.0: structural cycle
  2409  +        // e4.a.0.0: cannot combine regular field "c" with [1,{c:1} & (a|{}) & [{c:1}]]:
  2410  +        //     ./in.cue:399:11
  2411  +        // e4.a.0.0.0: cannot combine regular field "c" with [1,{c:1}]:
  2412  +        //     ./in.cue:399:11
  2413  +      }
  2414  +    }
  2415  +    b: (_|_){
  2416  +      // [eval]
  2417  +      0: (_|_){
  2418  +        // [eval] e4.b.0: conflicting values [{c:1}] and {} (mismatched types list and struct):
  2419  +        //     ./in.cue:401:6
  2420  +        //     ./in.cue:402:10
  2421  +        // e4.b.0.0: conflicting values [{c:1}] and {c:1} (mismatched types list and struct):
  2422  +        //     ./in.cue:401:6
  2423  +        //     ./in.cue:401:7
  2424           // e4.b.0.0: conflicting values [{c:1}] and {} (mismatched types list and struct):
  2425           //     ./in.cue:401:6
  2426  -        //     ./in.cue:402:6
  2427  -        //     ./in.cue:402:10
  2428  -        0: (struct){
  2429  -          c: (int){ 1 }
  2430  -        }
  2431  +        //     ./in.cue:402:10
  2432  +        // e4.b.0.0.0: conflicting values [{c:1}] and {c:1} (mismatched types list and struct):
  2433  +        //     ./in.cue:401:6
  2434  +        //     ./in.cue:401:7
  2435  +        // e4.b.0.0.0: conflicting values [{c:1}] and {} (mismatched types list and struct):
  2436  +        //     ./in.cue:401:6
  2437  +        //     ./in.cue:402:10
  2438  +        // e4.b.0.0.0: structural cycle
  2439  +        // e4.b.0.0: cannot combine regular field "c" with [1,{c:1} & [{c:1}] & (b|{})]:
  2440  +        //     ./in.cue:401:11
  2441  +        // e4.b.0.0.0: cannot combine regular field "c" with [1,{c:1}]:
  2442  +        //     ./in.cue:401:11
  2443         }
  2444       }
  2445     }
  2446  @@ -882,19 +945,14 @@
  2447         y: (_|_){
  2448           // [eval]
  2449           0: (_|_){
  2450  -          // [eval] nestedList.v1e.y.0: 4 errors in empty disjunction:
  2451  -          // nestedList.v1e.y.0: conflicting values int and [[2],1] (mismatched types int and list):
  2452  +          // [eval] nestedList.v1e.y.0: conflicting values int and [[2],1] (mismatched types int and list):
  2453             //     ./in.cue:416:11
  2454             //     ./in.cue:417:11
  2455  -          // nestedList.v1e.y.0.0: 2 errors in empty disjunction:
  2456             // nestedList.v1e.y.0.0: conflicting values int and [2] (mismatched types int and list):
  2457             //     ./in.cue:416:11
  2458             //     ./in.cue:417:12
  2459  -          // nestedList.v1e.y.0.0: incompatible list lengths (1 and 2)
  2460  -          0: (#list){
  2461  -            0: (int){ 2 }
  2462  -          }
  2463  -          1: (int){ 1 }
  2464  +          // nestedList.v1e.y.0.0: incompatible list lengths (1 and 2):
  2465  +          //     ./in.cue:416:6
  2466           }
  2467           1: (int){ 1 }
  2468         }
  2469  @@ -904,19 +962,14 @@
  2470         y: (_|_){
  2471           // [eval]
  2472           0: (_|_){
  2473  -          // [eval] nestedList.v2e.y.0: 4 errors in empty disjunction:
  2474  -          // nestedList.v2e.y.0: conflicting values int and [[2],1] (mismatched types int and list):
  2475  +          // [eval] nestedList.v2e.y.0: conflicting values int and [[2],1] (mismatched types int and list):
  2476             //     ./in.cue:421:11
  2477             //     ./in.cue:422:11
  2478  -          // nestedList.v2e.y.0.0: 2 errors in empty disjunction:
  2479             // nestedList.v2e.y.0.0: conflicting values int and [2] (mismatched types int and list):
  2480             //     ./in.cue:421:12
  2481             //     ./in.cue:422:11
  2482  -          // nestedList.v2e.y.0.0: incompatible list lengths (1 and 2)
  2483  -          0: (#list){
  2484  -            0: (int){ 2 }
  2485  -          }
  2486  -          1: (int){ 1 }
  2487  +          // nestedList.v2e.y.0.0: incompatible list lengths (1 and 2):
  2488  +          //     ./in.cue:422:6
  2489           }
  2490           1: (int){ 1 }
  2491         }
  2492  @@ -1020,9 +1073,7 @@
  2493         // [structural cycle]
  2494         f: (_|_){
  2495           // [structural cycle]
  2496  -        h: (_|_){
  2497  -          // [structural cycle] z1.z.f.h: structural cycle
  2498  -        }
  2499  +        h: ~(z1.z.g)
  2500         }
  2501         g: (_|_){
  2502           // [structural cycle]
  2503  @@ -1169,19 +1220,19 @@
  2504       }
  2505     }
  2506     n4: (struct){
  2507  -    a: (struct){
  2508  -      b: (int){ int }
  2509  -    }
  2510  -    x: (struct){
  2511  -      a: (struct){
  2512  -        b: (int){ int }
  2513  -      }
  2514  -      y: (struct){
  2515  +    x: (struct){
  2516  +      y: (struct){
  2517  +        z: (int){ int }
  2518           a: (struct){
  2519             b: (int){ int }
  2520           }
  2521  -        z: (int){ int }
  2522  -      }
  2523  +      }
  2524  +      a: (struct){
  2525  +        b: (int){ int }
  2526  +      }
  2527  +    }
  2528  +    a: (struct){
  2529  +      b: (int){ int }
  2530       }
  2531     }
  2532   }
  2533  -- diff/todo/p1 --
  2534  d2.x: reports mutual dependency, instead of structural cycle.
  2535  Reducer:
  2536  	x: a.c
  2537  	r: a
  2538  	a: c: r
  2539  -- diff/todo/p2 --
  2540  TODO(share): fix the following bug once we have structure sharing.
  2541  d3.config: should structural cycle be reported?
  2542  p3.a.a: field not allowed incorrect?
  2543  -- diff/todo/p3 --
  2544  n4: Reordering.
  2545  b12b: reported at correct level, but investigate if it is not processing
  2546      too deep anyway.
  2547  -- diff/explanation --
  2548  Structural cycles are reported in all chains. compared to old implementation.
  2549  d3.config: reports cycle at correct position.
  2550  b4.b: Structural error converted to eval error: there is both a structural and
  2551     eval error at this field. The newly reported error is correct.
  2552  b7.b.0.0: structural cycle nested one too deep: the eval error takes precedence.
  2553     The cycle is reported at the correct level according to the spec.
  2554  b10.c.d: position now allows b: string as well. This is correct. This is mostly
  2555     a representational issue, as the evaluator would still accept such values
  2556     when merged, but it is still useful.
  2557  -- out/eval --
  2558  Errors:
  2559  a1.f.0: structural cycle
  2560  a3.f.g: structural cycle
  2561  b12b.#list.tail: structural cycle
  2562  b13.root.a.0.0: structural cycle
  2563  b14.root.b.1.1: structural cycle
  2564  b4.cond1.x.y.0: structural cycle
  2565  b4.cond2.x.y.0: structural cycle
  2566  b4.x.y.0: structural cycle
  2567  b6.b.a.0: conflicting values 1 and [1] (mismatched types int and list):
  2568      ./in.cue:92:5
  2569      ./in.cue:92:13
  2570      ./in.cue:92:14
  2571      ./in.cue:93:9
  2572  b6.b.a.0.0: structural cycle
  2573  b6.x.a.0: structural cycle
  2574  b7.a.0: structural cycle
  2575  c1.a.c.c: structural cycle
  2576  d1.a.b.c.d.t: structural cycle
  2577  d2.a.b.c.d.t: structural cycle
  2578  d2.r.c.d.t: structural cycle
  2579  d3.x.a.b.c: structural cycle
  2580  e1.a.c: structural cycle
  2581  e1.b.c: structural cycle
  2582  e2.a.c: structural cycle
  2583  e2.b.c: structural cycle
  2584  e3.a: conflicting values [a] and {c:a} (mismatched types list and struct):
  2585      ./in.cue:390:5
  2586      ./in.cue:391:5
  2587  e3.a.c: structural cycle
  2588  e3.b: conflicting values [b] and {c:b} (mismatched types list and struct):
  2589      ./in.cue:393:5
  2590      ./in.cue:394:5
  2591  e3.b.c: structural cycle
  2592  e4.a.0: 4 errors in empty disjunction:
  2593  e4.a.0: conflicting values [{c:1}] and {} (mismatched types list and struct):
  2594      ./in.cue:398:10
  2595      ./in.cue:399:6
  2596  e4.a.0.0: 2 errors in empty disjunction:
  2597  e4.a.0.0: conflicting values [[{c:1}]] and {c:1} (mismatched types list and struct):
  2598      ./in.cue:399:5
  2599      ./in.cue:399:7
  2600  e4.a.0.0: conflicting values [{c:1}] and {} (mismatched types list and struct):
  2601      ./in.cue:398:6
  2602      ./in.cue:398:10
  2603      ./in.cue:399:6
  2604  e4.b.0: 4 errors in empty disjunction:
  2605  e4.b.0: conflicting values [{c:1}] and {} (mismatched types list and struct):
  2606      ./in.cue:401:6
  2607      ./in.cue:402:10
  2608  e4.b.0.0: 2 errors in empty disjunction:
  2609  e4.b.0.0: conflicting values [(b|{})] and {c:1} (mismatched types list and struct):
  2610      ./in.cue:401:7
  2611      ./in.cue:402:5
  2612  e4.b.0.0: conflicting values [{c:1}] and {} (mismatched types list and struct):
  2613      ./in.cue:401:6
  2614      ./in.cue:402:6
  2615      ./in.cue:402:10
  2616  nestedList.v1e.y.0: 4 errors in empty disjunction:
  2617  nestedList.v1e.y.0: conflicting values int and [[2],1] (mismatched types int and list):
  2618      ./in.cue:416:11
  2619      ./in.cue:417:11
  2620  nestedList.v1e.y.0.0: 2 errors in empty disjunction:
  2621  nestedList.v1e.y.0.0: conflicting values int and [2] (mismatched types int and list):
  2622      ./in.cue:416:11
  2623      ./in.cue:417:12
  2624  nestedList.v1e.y.0.0: incompatible list lengths (1 and 2)
  2625  nestedList.v2e.y.0: 4 errors in empty disjunction:
  2626  nestedList.v2e.y.0: conflicting values int and [[2],1] (mismatched types int and list):
  2627      ./in.cue:421:11
  2628      ./in.cue:422:11
  2629  nestedList.v2e.y.0.0: 2 errors in empty disjunction:
  2630  nestedList.v2e.y.0.0: conflicting values int and [2] (mismatched types int and list):
  2631      ./in.cue:421:12
  2632      ./in.cue:422:11
  2633  nestedList.v2e.y.0.0: incompatible list lengths (1 and 2)
  2634  p2.#T.a.b.link: structural cycle
  2635  p3.#U.#T.a.b.link: structural cycle
  2636  p5.#T.a.0.link: structural cycle
  2637  p6.#U.#T.a.0.link: structural cycle
  2638  patternFail.issue2374.a.b: structural cycle
  2639  shortPathFail.elipsis.t2.Foo.ref.ref: structural cycle
  2640  withLetFail.schema.next: structural cycle
  2641  z1.z.f.h: structural cycle
  2642  z1.z.g.h: structural cycle
  2643  d1.r: structural cycle:
  2644      ./in.cue:299:26
  2645  d3.x.indirect: structural cycle:
  2646      ./in.cue:314:12
  2647  
  2648  Result:
  2649  (_|_){
  2650    // [eval]
  2651    a1: (_|_){
  2652      // [structural cycle]
  2653      f: (_|_){
  2654        // [structural cycle]
  2655        0: (_|_){
  2656          // [structural cycle] a1.f.0: structural cycle
  2657        }
  2658      }
  2659    }
  2660    a2: (struct){
  2661      f: (_){ _ }
  2662    }
  2663    a3: (_|_){
  2664      // [structural cycle]
  2665      f: (_|_){
  2666        // [structural cycle]
  2667        g: (_|_){
  2668          // [structural cycle] a3.f.g: structural cycle
  2669        }
  2670      }
  2671    }
  2672    a4: (struct){
  2673      a: (#list){
  2674        0: (int){ int }
  2675      }
  2676    }
  2677    a5: (struct){
  2678      a: (struct){
  2679        b: (int){ int }
  2680      }
  2681    }
  2682    a6: (struct){
  2683      a: (_){ |((_){ _ }, (int){ int }) }
  2684    }
  2685    a7: (struct){
  2686      a: (string){ "foo" }
  2687      b: (struct){
  2688        x: (struct){
  2689          x: (string){ "foo" }
  2690          y: (int){ 3 }
  2691        }
  2692        y: (string){ "foo" }
  2693      }
  2694      c: (struct){
  2695        x: (string){ "foo" }
  2696        y: (int){ 3 }
  2697      }
  2698    }
  2699    b1: (struct){
  2700      b: (#list){
  2701        0: (int){ 1 }
  2702      }
  2703      a: (#list){
  2704        0: (int){ int }
  2705      }
  2706    }
  2707    b2: (struct){
  2708      a: (#list){
  2709        0: (int){ int }
  2710      }
  2711      b: (#list){
  2712        0: (int){ 1 }
  2713      }
  2714    }
  2715    b3: (struct){
  2716      x: (struct){
  2717        a: (#list){
  2718          0: (int){ int }
  2719        }
  2720      }
  2721      b: (struct){
  2722        a: (#list){
  2723          0: (int){ 1 }
  2724        }
  2725      }
  2726    }
  2727    b4: (_|_){
  2728      // [structural cycle]
  2729      b: (_|_){
  2730        // [structural cycle]
  2731        0: (_|_){
  2732          // [structural cycle] b4.x.y.0: structural cycle
  2733        }
  2734      }
  2735      x: (_|_){
  2736        // [structural cycle]
  2737        y: (_|_){
  2738          // [structural cycle]
  2739          0: (_|_){
  2740            // [structural cycle] b4.x.y.0: structural cycle
  2741          }
  2742        }
  2743      }
  2744      cond1: (_|_){
  2745        // [structural cycle]
  2746        b: (#list){
  2747          _z: (bool){ false }
  2748          0: (int){ 1 }
  2749        }
  2750        x: (_|_){
  2751          // [structural cycle]
  2752          y: (_|_){
  2753            // [structural cycle]
  2754            _z: (bool){ |(*(bool){ true }, (bool){ bool }) }
  2755            0: (_|_){
  2756              // [structural cycle] b4.cond1.x.y.0: structural cycle
  2757            }
  2758          }
  2759        }
  2760      }
  2761      cond2: (_|_){
  2762        // [structural cycle]
  2763        x: (_|_){
  2764          // [structural cycle]
  2765          y: (_|_){
  2766            // [structural cycle]
  2767            _z: (bool){ |(*(bool){ true }, (bool){ bool }) }
  2768            0: (_|_){
  2769              // [structural cycle] b4.cond2.x.y.0: structural cycle
  2770            }
  2771          }
  2772        }
  2773        b: (_|_){
  2774          // [structural cycle] b4.cond2.x.y.0: structural cycle
  2775        }
  2776      }
  2777    }
  2778    b5: (struct){
  2779      b: (struct){
  2780        a: (#list){
  2781          0: (int){ 1 }
  2782        }
  2783      }
  2784      x: (struct){
  2785        y: (struct){
  2786          a: (#list){
  2787            0: (int){ int }
  2788          }
  2789        }
  2790      }
  2791    }
  2792    b6: (_|_){
  2793      // [eval]
  2794      b: (_|_){
  2795        // [eval]
  2796        a: (_|_){
  2797          // [eval]
  2798          0: (_|_){
  2799            // [eval] b6.b.a.0: conflicting values 1 and [1] (mismatched types int and list):
  2800            //     ./in.cue:92:5
  2801            //     ./in.cue:92:13
  2802            //     ./in.cue:92:14
  2803            //     ./in.cue:93:9
  2804            0: (_|_){
  2805              // [structural cycle] b6.b.a.0.0: structural cycle
  2806            }
  2807          }
  2808        }
  2809      }
  2810      x: (_|_){
  2811        // [structural cycle]
  2812        a: (_|_){
  2813          // [structural cycle]
  2814          0: (_|_){
  2815            // [structural cycle] b6.x.a.0: structural cycle
  2816          }
  2817        }
  2818      }
  2819    }
  2820    b7: (_|_){
  2821      // [structural cycle]
  2822      b: (_|_){
  2823        // [structural cycle]
  2824        0: (_|_){
  2825          // [structural cycle] b7.a.0: structural cycle
  2826        }
  2827      }
  2828      a: (_|_){
  2829        // [structural cycle]
  2830        0: (_|_){
  2831          // [structural cycle] b7.a.0: structural cycle
  2832        }
  2833      }
  2834    }
  2835    b8: (struct){
  2836      x: (struct){
  2837        f: (string){ string }
  2838      }
  2839      a: (struct){
  2840        f: (string){ string }
  2841      }
  2842      b: (string){ string }
  2843    }
  2844    b9: (struct){
  2845      #a: ((string|struct)){ |((string){ string }, (#struct){
  2846          ref: (string){ string }
  2847        }) }
  2848      #b: (#struct){
  2849        c: (#list){
  2850          0: ((string|struct)){ |((string){ string }, (#struct){
  2851              ref: (string){ string }
  2852            }) }
  2853          1: ((string|struct)){ |((string){ string }, (#struct){
  2854              ref: (string){ string }
  2855            }) }
  2856          2: ((string|struct)){ |((string){ string }, (#struct){
  2857              ref: (string){ string }
  2858            }) }
  2859        }
  2860      }
  2861      #ref: (#struct){
  2862        ref: (string){ string }
  2863      }
  2864      x: (#struct){ |((#struct){
  2865          c: (#list){
  2866            0: ((string|struct)){ |((string){ string }, (#struct){
  2867                ref: (string){ string }
  2868              }) }
  2869            1: ((string|struct)){ |((string){ string }, (#struct){
  2870                ref: (string){ string }
  2871              }) }
  2872            2: ((string|struct)){ |((string){ string }, (#struct){
  2873                ref: (string){ string }
  2874              }) }
  2875          }
  2876        }, (#struct){
  2877          ref: (string){ string }
  2878        }) }
  2879    }
  2880    b10: (struct){
  2881      a: (#struct){
  2882        b: ((string|struct)){ |((string){ string }, (#struct){
  2883            d: (string){ string }
  2884          }) }
  2885      }
  2886      c: (#struct){
  2887        d: (string){ string }
  2888      }
  2889      d: (struct){
  2890        d: (struct){
  2891          b: (string){ string }
  2892        }
  2893      }
  2894    }
  2895    b11: (struct){
  2896      #list: (#struct){
  2897        tail: ((null|struct)){ |(*(null){ null }, (#struct){
  2898            tail: (null){ null }
  2899          }) }
  2900      }
  2901    }
  2902    b12: (struct){
  2903      #list: (#struct){
  2904        value: (int){ int }
  2905        tail: (null){ null }
  2906        sum: (int){ int }
  2907      }
  2908      list1: (#struct){
  2909        value: (int){ 1 }
  2910        tail: (#struct){
  2911          value: (int){ 2 }
  2912          tail: (#struct){
  2913            value: (int){ 3 }
  2914            tail: (#struct){
  2915              value: (int){ 4 }
  2916              tail: (null){ null }
  2917              sum: (int){ 4 }
  2918            }
  2919            sum: (int){ 7 }
  2920          }
  2921          sum: (int){ 9 }
  2922        }
  2923        sum: (int){ 10 }
  2924      }
  2925    }
  2926    b12b: (_|_){
  2927      // [structural cycle]
  2928      #list: (_|_){
  2929        // [structural cycle] b12b.#list.tail: structural cycle
  2930      }
  2931      list1: (_|_){
  2932        // [structural cycle] b12b.#list.tail: structural cycle
  2933      }
  2934    }
  2935    b13: (_|_){
  2936      // [structural cycle]
  2937      root: (_|_){
  2938        // [structural cycle]
  2939        a: (_|_){
  2940          // [structural cycle]
  2941          0: (_|_){
  2942            // [structural cycle]
  2943            0: (_|_){
  2944              // [structural cycle] b13.root.a.0.0: structural cycle
  2945            }
  2946          }
  2947        }
  2948      }
  2949    }
  2950    b14: (_|_){
  2951      // [structural cycle]
  2952      root: (_|_){
  2953        // [structural cycle]
  2954        a: (list){
  2955        }
  2956        b: (_|_){
  2957          // [structural cycle]
  2958          0: (list){
  2959          }
  2960          1: (_|_){
  2961            // [structural cycle]
  2962            0: (list){
  2963            }
  2964            1: (_|_){
  2965              // [structural cycle] b14.root.b.1.1: structural cycle
  2966            }
  2967          }
  2968        }
  2969      }
  2970    }
  2971    b15: (struct){
  2972      root: (struct){
  2973        a: (struct){
  2974        }
  2975      }
  2976    }
  2977    p1: (struct){
  2978      #T: (#struct){
  2979        a: (#struct){
  2980        }
  2981      }
  2982      a: (#struct){
  2983        a: (#struct){
  2984          one: (#struct){
  2985            link: (#struct){
  2986              a: (#struct){
  2987                two: (#struct){
  2988                  link: (#struct){
  2989                    a: (#struct){
  2990                    }
  2991                  }
  2992                }
  2993              }
  2994            }
  2995          }
  2996        }
  2997      }
  2998    }
  2999    p2: (_|_){
  3000      // [structural cycle]
  3001      #T: (_|_){
  3002        // [structural cycle]
  3003        a: (_|_){
  3004          // [structural cycle]
  3005          b: (_|_){
  3006            // [structural cycle]
  3007            link: (_|_){
  3008              // [structural cycle] p2.#T.a.b.link: structural cycle
  3009            }
  3010          }
  3011        }
  3012      }
  3013      a: (_|_){
  3014        // [structural cycle]
  3015        a: (struct){
  3016          one: (struct){
  3017            link: (struct){
  3018              a: (struct){
  3019                two: (struct){
  3020                }
  3021              }
  3022            }
  3023          }
  3024        }
  3025      }
  3026    }
  3027    p3: (_|_){
  3028      // [structural cycle]
  3029      #S: (#struct){
  3030        #T: (#struct){
  3031          a: (#struct){
  3032          }
  3033        }
  3034      }
  3035      #U: (_|_){
  3036        // [structural cycle]
  3037        #T: (_|_){
  3038          // [structural cycle]
  3039          a: (_|_){
  3040            // [structural cycle]
  3041            b: (_|_){
  3042              // [structural cycle]
  3043              link: (_|_){
  3044                // [structural cycle] p3.#U.#T.a.b.link: structural cycle
  3045              }
  3046            }
  3047          }
  3048        }
  3049      }
  3050      a: (_|_){
  3051        // [structural cycle] p3.#U.#T.a.b.link: structural cycle
  3052      }
  3053    }
  3054    p4: (struct){
  3055      #T: (#struct){
  3056        a: (list){
  3057        }
  3058      }
  3059      a: (#struct){
  3060        a: (#list){
  3061          0: (#struct){
  3062            link: (#struct){
  3063              a: (#list){
  3064                0: (#struct){
  3065                  link: (#struct){
  3066                    a: (list){
  3067                    }
  3068                  }
  3069                }
  3070              }
  3071            }
  3072          }
  3073        }
  3074      }
  3075    }
  3076    p5: (_|_){
  3077      // [structural cycle]
  3078      #T: (_|_){
  3079        // [structural cycle]
  3080        a: (_|_){
  3081          // [structural cycle]
  3082          0: (_|_){
  3083            // [structural cycle]
  3084            link: (_|_){
  3085              // [structural cycle] p5.#T.a.0.link: structural cycle
  3086            }
  3087          }
  3088        }
  3089      }
  3090      a: (_|_){
  3091        // [structural cycle]
  3092        a: (#list){
  3093          0: (struct){
  3094            link: (struct){
  3095              a: (#list){
  3096                0: (struct){
  3097                }
  3098              }
  3099            }
  3100          }
  3101        }
  3102      }
  3103    }
  3104    p6: (_|_){
  3105      // [structural cycle]
  3106      #S: (#struct){
  3107        #T: (#struct){
  3108          a: (list){
  3109          }
  3110        }
  3111      }
  3112      #U: (_|_){
  3113        // [structural cycle]
  3114        #T: (_|_){
  3115          // [structural cycle]
  3116          a: (_|_){
  3117            // [structural cycle]
  3118            0: (_|_){
  3119              // [structural cycle]
  3120              link: (_|_){
  3121                // [structural cycle] p6.#U.#T.a.0.link: structural cycle
  3122              }
  3123            }
  3124          }
  3125        }
  3126      }
  3127      a: (_|_){
  3128        // [structural cycle] p6.#U.#T.a.0.link: structural cycle
  3129      }
  3130    }
  3131    c1: (_|_){
  3132      // [structural cycle]
  3133      a: (_|_){
  3134        // [structural cycle]
  3135        b: (struct){
  3136        }
  3137        c: (_|_){
  3138          // [structural cycle]
  3139          b: (struct){
  3140          }
  3141          c: (_|_){
  3142            // [structural cycle] c1.a.c.c: structural cycle
  3143          }
  3144        }
  3145      }
  3146    }
  3147    d1: (_|_){
  3148      // [structural cycle]
  3149      a: (_|_){
  3150        // [structural cycle]
  3151        b: (_|_){
  3152          // [structural cycle]
  3153          c: (_|_){
  3154            // [structural cycle]
  3155            d: (_|_){
  3156              // [structural cycle]
  3157              h: (int){ int }
  3158              t: (_|_){
  3159                // [structural cycle] d1.a.b.c.d.t: structural cycle
  3160              }
  3161            }
  3162          }
  3163        }
  3164      }
  3165      r: (_|_){
  3166        // [structural cycle] d1.r: structural cycle:
  3167        //     ./in.cue:299:26
  3168      }
  3169      x: (_|_){
  3170        // [structural cycle] d1.a.b.c.d.t: structural cycle
  3171      }
  3172    }
  3173    d2: (_|_){
  3174      // [structural cycle]
  3175      x: (_|_){
  3176        // [structural cycle]
  3177        d: (_|_){
  3178          // [structural cycle]
  3179          h: (int){ int }
  3180          t: (_|_){
  3181            // [structural cycle]
  3182          }
  3183        }
  3184      }
  3185      r: (_|_){
  3186        // [structural cycle]
  3187        c: (_|_){
  3188          // [structural cycle]
  3189          d: (_|_){
  3190            // [structural cycle]
  3191            h: (int){ int }
  3192            t: (_|_){
  3193              // [structural cycle] d2.r.c.d.t: structural cycle
  3194            }
  3195          }
  3196        }
  3197      }
  3198      a: (struct){
  3199        b: (struct){
  3200          c: (_|_){
  3201            // [structural cycle]
  3202            d: (_|_){
  3203              // [structural cycle]
  3204              h: (int){ int }
  3205              t: (_|_){
  3206                // [structural cycle] d2.a.b.c.d.t: structural cycle
  3207              }
  3208            }
  3209          }
  3210        }
  3211      }
  3212    }
  3213    d3: (_|_){
  3214      // [structural cycle]
  3215      config: (struct){
  3216        a: (struct){
  3217          b: (struct){
  3218            c: (null){ null }
  3219          }
  3220        }
  3221        indirect: (null){ null }
  3222        i: (int){ |(*(int){ 1 }, (int){ int }) }
  3223      }
  3224      x: (_|_){
  3225        // [structural cycle]
  3226        a: (_|_){
  3227          // [structural cycle]
  3228          b: (_|_){
  3229            // [structural cycle]
  3230            c: (_|_){
  3231              // [structural cycle] d3.x.a.b.c: structural cycle
  3232            }
  3233          }
  3234        }
  3235        indirect: (_|_){
  3236          // [structural cycle] d3.x.indirect: structural cycle:
  3237          //     ./in.cue:314:12
  3238        }
  3239        i: (int){ 0 }
  3240      }
  3241    }
  3242    shortPathFail: (_|_){
  3243      // [structural cycle]
  3244      doubleRef: (struct){
  3245        a: (#struct){
  3246          Next: (null){ null }
  3247        }
  3248        #List: (#struct){
  3249          Next: (null){ null }
  3250        }
  3251      }
  3252      elipsis: (_|_){
  3253        // [structural cycle]
  3254        t1: (struct){
  3255          #Foo: (#struct){
  3256            ref: ((null|struct)){ |((null){ null }, (#struct){
  3257                ref: (null){ null }
  3258              }) }
  3259          }
  3260        }
  3261        t2: (_|_){
  3262          // [structural cycle]
  3263          Foo: (_|_){
  3264            // [structural cycle]
  3265            ref: (_|_){
  3266              // [structural cycle]
  3267              ref: (_|_){
  3268                // [structural cycle] shortPathFail.elipsis.t2.Foo.ref.ref: structural cycle
  3269              }
  3270            }
  3271          }
  3272        }
  3273      }
  3274      comprehension: (struct){
  3275        #list: (#struct){
  3276          tail: ((null|struct)){ |(*(null){ null }, (#struct){
  3277              tail: (null){ null }
  3278            }) }
  3279        }
  3280      }
  3281    }
  3282    patternFail: (_|_){
  3283      // [structural cycle]
  3284      issue2374: (_|_){
  3285        // [structural cycle]
  3286        a: (_|_){
  3287          // [structural cycle]
  3288          r: (int){ 0 }
  3289          b: (_|_){
  3290            // [structural cycle] patternFail.issue2374.a.b: structural cycle
  3291          }
  3292        }
  3293      }
  3294    }
  3295    withLetFail: (_|_){
  3296      // [structural cycle]
  3297      schema: (_|_){
  3298        // [structural cycle]
  3299        next: (_|_){
  3300          // [structural cycle] withLetFail.schema.next: structural cycle
  3301        }
  3302      }
  3303      let _schema_1#1 = (_|_){
  3304        // [structural cycle] withLetFail._schema_1: structural cycle:
  3305        //     ./in.cue:360:17
  3306      }
  3307    }
  3308    listOptOK: (struct){
  3309      list: (struct){
  3310        head: (int){ int }
  3311        tail?: (_|_){
  3312          // [structural cycle] listOptOK.list.tail: structural cycle
  3313        }
  3314      }
  3315      a: (struct){
  3316        head: (int){ 3 }
  3317        tail: (struct){
  3318          head: (int){ 2 }
  3319          tail?: (_|_){
  3320            // [structural cycle] listOptOK.a.tail.tail: structural cycle
  3321          }
  3322        }
  3323      }
  3324    }
  3325    e1: (_|_){
  3326      // [structural cycle]
  3327      a: (_|_){
  3328        // [structural cycle]
  3329        c: (_|_){
  3330          // [structural cycle] e1.a.c: structural cycle
  3331        }
  3332      }
  3333      b: (_|_){
  3334        // [structural cycle]
  3335        c: (_|_){
  3336          // [structural cycle] e1.b.c: structural cycle
  3337        }
  3338      }
  3339    }
  3340    e2: (_|_){
  3341      // [structural cycle]
  3342      a: (_|_){
  3343        // [structural cycle]
  3344        c: (_|_){
  3345          // [structural cycle] e2.a.c: structural cycle
  3346        }
  3347      }
  3348      b: (_|_){
  3349        // [structural cycle]
  3350        c: (_|_){
  3351          // [structural cycle] e2.b.c: structural cycle
  3352        }
  3353      }
  3354    }
  3355    e3: (_|_){
  3356      // [eval]
  3357      a: (_|_){
  3358        // [eval] e3.a: conflicting values [a] and {c:a} (mismatched types list and struct):
  3359        //     ./in.cue:390:5
  3360        //     ./in.cue:391:5
  3361        c: (_|_){
  3362          // [structural cycle] e3.a.c: structural cycle
  3363        }
  3364        0: (_|_){
  3365          // [structural cycle] e3.a.c: structural cycle
  3366        }
  3367      }
  3368      b: (_|_){
  3369        // [eval] e3.b: conflicting values [b] and {c:b} (mismatched types list and struct):
  3370        //     ./in.cue:393:5
  3371        //     ./in.cue:394:5
  3372        c: (_|_){
  3373          // [structural cycle] e3.b.c: structural cycle
  3374        }
  3375        0: (_|_){
  3376          // [structural cycle] e3.b.c: structural cycle
  3377        }
  3378      }
  3379    }
  3380    e4: (_|_){
  3381      // [eval]
  3382      a: (_|_){
  3383        // [eval]
  3384        0: (_|_){
  3385          // [eval] e4.a.0: 4 errors in empty disjunction:
  3386          // e4.a.0: conflicting values [{c:1}] and {} (mismatched types list and struct):
  3387          //     ./in.cue:398:10
  3388          //     ./in.cue:399:6
  3389          // e4.a.0.0: 2 errors in empty disjunction:
  3390          // e4.a.0.0: conflicting values [[{c:1}]] and {c:1} (mismatched types list and struct):
  3391          //     ./in.cue:399:5
  3392          //     ./in.cue:399:7
  3393          // e4.a.0.0: conflicting values [{c:1}] and {} (mismatched types list and struct):
  3394          //     ./in.cue:398:6
  3395          //     ./in.cue:398:10
  3396          //     ./in.cue:399:6
  3397          0: (struct){
  3398            c: (int){ 1 }
  3399          }
  3400        }
  3401      }
  3402      b: (_|_){
  3403        // [eval]
  3404        0: (_|_){
  3405          // [eval] e4.b.0: 4 errors in empty disjunction:
  3406          // e4.b.0: conflicting values [{c:1}] and {} (mismatched types list and struct):
  3407          //     ./in.cue:401:6
  3408          //     ./in.cue:402:10
  3409          // e4.b.0.0: 2 errors in empty disjunction:
  3410          // e4.b.0.0: conflicting values [(b|{})] and {c:1} (mismatched types list and struct):
  3411          //     ./in.cue:401:7
  3412          //     ./in.cue:402:5
  3413          // e4.b.0.0: conflicting values [{c:1}] and {} (mismatched types list and struct):
  3414          //     ./in.cue:401:6
  3415          //     ./in.cue:402:6
  3416          //     ./in.cue:402:10
  3417          0: (struct){
  3418            c: (int){ 1 }
  3419          }
  3420        }
  3421      }
  3422    }
  3423    e5: (struct){
  3424      a: (struct){
  3425        c: (int){ int }
  3426      }
  3427      b: (struct){
  3428        c: (int){ int }
  3429      }
  3430    }
  3431    nestedList: (_|_){
  3432      // [eval]
  3433      v1e: (_|_){
  3434        // [eval]
  3435        x: (#list){
  3436          0: (int){ int }
  3437          1: (int){ 1 }
  3438        }
  3439        y: (_|_){
  3440          // [eval]
  3441          0: (_|_){
  3442            // [eval] nestedList.v1e.y.0: 4 errors in empty disjunction:
  3443            // nestedList.v1e.y.0: conflicting values int and [[2],1] (mismatched types int and list):
  3444            //     ./in.cue:416:11
  3445            //     ./in.cue:417:11
  3446            // nestedList.v1e.y.0.0: 2 errors in empty disjunction:
  3447            // nestedList.v1e.y.0.0: conflicting values int and [2] (mismatched types int and list):
  3448            //     ./in.cue:416:11
  3449            //     ./in.cue:417:12
  3450            // nestedList.v1e.y.0.0: incompatible list lengths (1 and 2)
  3451            0: (#list){
  3452              0: (int){ 2 }
  3453            }
  3454            1: (int){ 1 }
  3455          }
  3456          1: (int){ 1 }
  3457        }
  3458      }
  3459      v2e: (_|_){
  3460        // [eval]
  3461        y: (_|_){
  3462          // [eval]
  3463          0: (_|_){
  3464            // [eval] nestedList.v2e.y.0: 4 errors in empty disjunction:
  3465            // nestedList.v2e.y.0: conflicting values int and [[2],1] (mismatched types int and list):
  3466            //     ./in.cue:421:11
  3467            //     ./in.cue:422:11
  3468            // nestedList.v2e.y.0.0: 2 errors in empty disjunction:
  3469            // nestedList.v2e.y.0.0: conflicting values int and [2] (mismatched types int and list):
  3470            //     ./in.cue:421:12
  3471            //     ./in.cue:422:11
  3472            // nestedList.v2e.y.0.0: incompatible list lengths (1 and 2)
  3473            0: (#list){
  3474              0: (int){ 2 }
  3475            }
  3476            1: (int){ 1 }
  3477          }
  3478          1: (int){ 1 }
  3479        }
  3480        x: (#list){
  3481          0: (int){ int }
  3482          1: (int){ 1 }
  3483        }
  3484      }
  3485      v1: (struct){
  3486        x: (#list){
  3487          0: (int){ int }
  3488          1: (int){ 1 }
  3489        }
  3490        y: (#list){
  3491          0: (#list){
  3492            0: (#list){
  3493              0: (int){ 2 }
  3494              1: (int){ 1 }
  3495            }
  3496            1: (int){ 1 }
  3497          }
  3498          1: (int){ 1 }
  3499        }
  3500      }
  3501      v2: (struct){
  3502        y: (#list){
  3503          0: (#list){
  3504            0: (#list){
  3505              0: (int){ 2 }
  3506              1: (int){ 1 }
  3507            }
  3508            1: (int){ 1 }
  3509          }
  3510          1: (int){ 1 }
  3511        }
  3512        x: (#list){
  3513          0: (int){ int }
  3514          1: (int){ 1 }
  3515        }
  3516      }
  3517    }
  3518    v3: (struct){
  3519      list: (struct){
  3520        head: (int){ int }
  3521        tail: (null){ null }
  3522      }
  3523      myList: (struct){
  3524        head: (int){ 2 }
  3525        tail: (struct){
  3526          head: (int){ 3 }
  3527          tail: (struct){
  3528            head: (int){ 4 }
  3529            tail: (null){ null }
  3530          }
  3531        }
  3532      }
  3533    }
  3534    v4: (struct){
  3535      list: (struct){
  3536        head: (int){ int }
  3537        tail: (int){ 1 }
  3538      }
  3539      myList: (struct){
  3540        head: (int){ 2 }
  3541        tail: (struct){
  3542          head: (int){ 3 }
  3543          tail: (int){ 1 }
  3544        }
  3545      }
  3546    }
  3547    v5: (struct){
  3548      list: (struct){
  3549        head: (int){ int }
  3550        tail: (struct){
  3551        }
  3552      }
  3553      myList: (struct){
  3554        head: (int){ 2 }
  3555        tail: (struct){ |((struct){
  3556            head: (int){ 3 }
  3557            tail: (struct){
  3558            }
  3559          }, (struct){
  3560            head: (int){ 3 }
  3561          }) }
  3562      }
  3563    }
  3564    z1: (_|_){
  3565      // [structural cycle]
  3566      y: (struct){
  3567        f: (struct){
  3568          h: (_){ _ }
  3569        }
  3570        g: (_){ _ }
  3571      }
  3572      x: (struct){
  3573        f: (_){ _ }
  3574        g: (_){ _ }
  3575      }
  3576      z: (_|_){
  3577        // [structural cycle]
  3578        f: (_|_){
  3579          // [structural cycle]
  3580          h: (_|_){
  3581            // [structural cycle] z1.z.f.h: structural cycle
  3582          }
  3583        }
  3584        g: (_|_){
  3585          // [structural cycle]
  3586          h: (_|_){
  3587            // [structural cycle] z1.z.g.h: structural cycle
  3588          }
  3589        }
  3590      }
  3591    }
  3592    crossRefNoCycle: (struct){
  3593      t1: (struct){
  3594        T: (struct){
  3595          x: (_){ _ }
  3596          y: (_){ _ }
  3597        }
  3598        C: (struct){
  3599          x: (struct){
  3600            x: (_){ _ }
  3601            y: (_){ _ }
  3602          }
  3603          y: (struct){
  3604            x: (_){ _ }
  3605            y: (_){ _ }
  3606          }
  3607        }
  3608      }
  3609      t2: (struct){
  3610        T: (struct){
  3611          x: (_){ _ }
  3612          y: (_){ _ }
  3613        }
  3614        C: (struct){
  3615          x: (struct){
  3616            x: (_){ _ }
  3617            y: (_){ _ }
  3618          }
  3619          y: (struct){
  3620            x: (_){ _ }
  3621            y: (_){ _ }
  3622          }
  3623        }
  3624      }
  3625      t3: (struct){
  3626        T: (struct){
  3627          x: (_){ _ }
  3628          y: (_){ _ }
  3629          z: (_){ _ }
  3630        }
  3631        C: (struct){
  3632          x: (struct){
  3633            x: (_){ _ }
  3634            y: (_){ _ }
  3635            z: (_){ _ }
  3636          }
  3637          y: (struct){
  3638            x: (_){ _ }
  3639            y: (_){ _ }
  3640            z: (_){ _ }
  3641          }
  3642          z: (struct){
  3643            x: (_){ _ }
  3644            y: (_){ _ }
  3645            z: (_){ _ }
  3646          }
  3647        }
  3648      }
  3649      t4: (struct){
  3650        T: (struct){
  3651          x: (_){ _ }
  3652          y: (_){ _ }
  3653          z: (_){ _ }
  3654        }
  3655        C: (struct){
  3656          x: (struct){
  3657            x: (struct){
  3658              x: (_){ _ }
  3659              y: (_){ _ }
  3660              z: (_){ _ }
  3661            }
  3662            y: (struct){
  3663              x: (_){ _ }
  3664              y: (_){ _ }
  3665              z: (_){ _ }
  3666            }
  3667            z: (struct){
  3668              x: (_){ _ }
  3669              y: (_){ _ }
  3670              z: (_){ _ }
  3671            }
  3672          }
  3673          y: (struct){
  3674            x: (struct){
  3675              x: (_){ _ }
  3676              y: (_){ _ }
  3677              z: (_){ _ }
  3678            }
  3679            y: (struct){
  3680              x: (_){ _ }
  3681              y: (_){ _ }
  3682              z: (_){ _ }
  3683            }
  3684            z: (struct){
  3685              x: (_){ _ }
  3686              y: (_){ _ }
  3687              z: (_){ _ }
  3688            }
  3689          }
  3690          z: (struct){
  3691            x: (struct){
  3692              x: (_){ _ }
  3693              y: (_){ _ }
  3694              z: (_){ _ }
  3695            }
  3696            y: (struct){
  3697              x: (_){ _ }
  3698              y: (_){ _ }
  3699              z: (_){ _ }
  3700            }
  3701            z: (struct){
  3702              x: (_){ _ }
  3703              y: (_){ _ }
  3704              z: (_){ _ }
  3705            }
  3706          }
  3707        }
  3708      }
  3709    }
  3710    n1: (struct){
  3711      a: (struct){
  3712        b: (int){ int }
  3713      }
  3714    }
  3715    n2: (struct){
  3716      a: (struct){
  3717        b: (int){ int }
  3718        a: (struct){
  3719          b: (int){ int }
  3720        }
  3721      }
  3722    }
  3723    n3: (struct){
  3724      a: (struct){
  3725        b: (int){ int }
  3726      }
  3727    }
  3728    n4: (struct){
  3729      a: (struct){
  3730        b: (int){ int }
  3731      }
  3732      x: (struct){
  3733        a: (struct){
  3734          b: (int){ int }
  3735        }
  3736        y: (struct){
  3737          a: (struct){
  3738            b: (int){ int }
  3739          }
  3740          z: (int){ int }
  3741        }
  3742      }
  3743    }
  3744  }
  3745  -- out/compile --
  3746  --- in.cue
  3747  {
  3748    a1: {
  3749      f: [
  3750        〈1;f〉,
  3751      ]
  3752    }
  3753    a2: {
  3754      f: 〈0;f〉
  3755    }
  3756    a3: {
  3757      f: {
  3758        g: 〈1;f〉
  3759      }
  3760    }
  3761    a4: {
  3762      a: [
  3763        (〈1;a〉|int),
  3764      ]
  3765    }
  3766    a5: {
  3767      a: {
  3768        b: (〈1;a〉|int)
  3769      }
  3770    }
  3771    a6: {
  3772      a: (〈0;a〉|int)
  3773    }
  3774    a7: {
  3775      a: 〈0;c〉.x
  3776      b: {
  3777        x: 〈1;c〉
  3778        y: "foo"
  3779      }
  3780      c: {
  3781        x: 〈1;b〉.y
  3782        y: 3
  3783      }
  3784    }
  3785    b1: {
  3786      b: (〈0;a〉 & [
  3787        1,
  3788      ])
  3789      a: [
  3790        (〈1;a〉|int),
  3791      ]
  3792    }
  3793    b2: {
  3794      a: [
  3795        (〈1;a〉|int),
  3796      ]
  3797      b: (〈0;a〉 & [
  3798        1,
  3799      ])
  3800    }
  3801    b3: {
  3802      x: {
  3803        a: [
  3804          (〈1;a〉|int),
  3805        ]
  3806      }
  3807      b: (〈0;x〉 & {
  3808        a: [
  3809          1,
  3810        ]
  3811      })
  3812    }
  3813    b4: {
  3814      b: (〈0;x〉.y & [
  3815        1,
  3816      ])
  3817      x: {
  3818        y: [
  3819          〈1;y〉,
  3820        ]
  3821      }
  3822    }
  3823    b4: {
  3824      cond1: {
  3825        b: (〈0;x〉.y & {
  3826          _z: false
  3827          [
  3828            1,
  3829          ]
  3830        })
  3831        x: {
  3832          y: {
  3833            _z: (*true|bool)
  3834            if 〈0;_z〉 {
  3835              [
  3836                〈3;y〉,
  3837              ]
  3838            }
  3839          }
  3840        }
  3841      }
  3842    }
  3843    b4: {
  3844      cond2: {
  3845        x: {
  3846          y: {
  3847            _z: (*true|bool)
  3848            if 〈0;_z〉 {
  3849              [
  3850                〈3;y〉,
  3851              ]
  3852            }
  3853          }
  3854        }
  3855        b: (〈0;x〉.y & {
  3856          _z: false
  3857          [
  3858            1,
  3859          ]
  3860        })
  3861      }
  3862    }
  3863    b5: {
  3864      b: (〈0;x〉.y & {
  3865        a: [
  3866          1,
  3867        ]
  3868      })
  3869      x: {
  3870        y: {
  3871          a: [
  3872            (〈1;a〉|int),
  3873          ]
  3874        }
  3875      }
  3876    }
  3877    b6: {
  3878      b: (〈0;x〉 & {
  3879        a: [
  3880          1,
  3881        ]
  3882      })
  3883      x: {
  3884        a: [
  3885          〈1;a〉,
  3886        ]
  3887      }
  3888    }
  3889    b7: {
  3890      b: (〈0;a〉 & [
  3891        [
  3892          1,
  3893        ],
  3894      ])
  3895      a: [
  3896        〈1;a〉,
  3897      ]
  3898    }
  3899    b8: {
  3900      x: 〈0;a〉
  3901      a: {
  3902        f: 〈1;b〉
  3903      }
  3904      b: (〈0;a〉|string)
  3905    }
  3906    b9: {
  3907      #a: (string|〈0;#b〉|〈0;#ref〉)
  3908      #b: {
  3909        c: [
  3910          〈2;#a〉,
  3911          〈2;#a〉,
  3912          〈2;#a〉,
  3913        ]
  3914      }
  3915      #ref: {
  3916        ref: string
  3917      }
  3918      x: (〈0;#b〉|〈0;#ref〉)
  3919    }
  3920    b10: {
  3921      a: close({
  3922        b: (string|〈1;a〉|〈1;c〉)
  3923      })
  3924      c: close({
  3925        d: (string|〈1;a〉)
  3926      })
  3927      d: {
  3928        d: {
  3929          b: string
  3930        }
  3931      }
  3932    }
  3933    b11: {
  3934      #list: {
  3935        tail: (〈1;#list〉|*null)
  3936        if (〈0;tail〉 != null) {}
  3937      }
  3938    }
  3939    b12: {
  3940      #list: {
  3941        value: int
  3942        tail: (〈1;#list〉|*null)
  3943        if (〈0;tail〉 != null) {
  3944          sum: (〈1;value〉 + 〈1;tail〉.sum)
  3945        }
  3946        if (〈0;tail〉 == null) {
  3947          sum: 〈1;value〉
  3948        }
  3949      }
  3950      list1: 〈0;#list〉
  3951      list1: {
  3952        value: 1
  3953        tail: {
  3954          value: 2
  3955          tail: {
  3956            value: 3
  3957            tail: {
  3958              value: 4
  3959            }
  3960          }
  3961        }
  3962      }
  3963    }
  3964    b12b: {
  3965      #list: {
  3966        tail: 〈1;#list〉
  3967        if (〈0;tail〉 != null) {
  3968          sum: 〈1;tail〉.sum
  3969        }
  3970      }
  3971      list1: 〈0;#list〉
  3972      list1: {
  3973        tail: {
  3974          tail: {}
  3975        }
  3976      }
  3977    }
  3978    b13: {
  3979      root: {
  3980        a: [
  3981          for _, x in 〈2;root〉 {
  3982            〈1;x〉
  3983          },
  3984        ]
  3985      }
  3986    }
  3987    b14: {
  3988      root: {
  3989        a: [
  3990          ...int,
  3991        ]
  3992        for _, x in 〈0;a〉 {
  3993          "\(〈1;x〉)": {}
  3994        }
  3995        b: [
  3996          for _, x in 〈2;root〉 {
  3997            〈1;x〉
  3998          },
  3999        ]
  4000      }
  4001    }
  4002    b15: {
  4003      root: {
  4004        a: {
  4005          for _, x in 〈2;root〉 {
  4006            〈1;x〉
  4007          }
  4008        }
  4009      }
  4010    }
  4011    p1: {
  4012      #T: {
  4013        a: {
  4014          [string]: {
  4015            link: 〈3;#T〉
  4016          }
  4017        }
  4018      }
  4019      a: (〈0;#T〉 & {
  4020        a: {
  4021          one: {
  4022            link: {
  4023              a: {
  4024                two: {}
  4025              }
  4026            }
  4027          }
  4028        }
  4029      })
  4030    }
  4031    p2: {
  4032      #T: {
  4033        a: {
  4034          [string]: {
  4035            link: 〈3;#T〉
  4036          }
  4037        }
  4038        a: {
  4039          b: {}
  4040        }
  4041      }
  4042      a: (〈0;#T〉 & {
  4043        a: {
  4044          one: {
  4045            link: {
  4046              a: {
  4047                two: {}
  4048              }
  4049            }
  4050          }
  4051        }
  4052      })
  4053    }
  4054    p3: {
  4055      #S: {
  4056        #T: {
  4057          a: {
  4058            [string]: {
  4059              link: 〈3;#T〉
  4060            }
  4061          }
  4062        }
  4063      }
  4064      #U: {
  4065        〈1;#S〉
  4066        #T: {
  4067          a: {
  4068            b: {}
  4069          }
  4070        }
  4071      }
  4072      a: (〈0;#U〉.#T & {
  4073        a: {
  4074          one: {
  4075            link: {
  4076              a: {
  4077                two: {}
  4078              }
  4079            }
  4080          }
  4081        }
  4082      })
  4083    }
  4084    p4: {
  4085      #T: {
  4086        a: [
  4087          ...{
  4088            link: 〈3;#T〉
  4089          },
  4090        ]
  4091      }
  4092      a: (〈0;#T〉 & {
  4093        a: [
  4094          {
  4095            link: {
  4096              a: [
  4097                {},
  4098              ]
  4099            }
  4100          },
  4101        ]
  4102      })
  4103    }
  4104    p5: {
  4105      #T: {
  4106        a: [
  4107          ...{
  4108            link: 〈3;#T〉
  4109          },
  4110        ]
  4111        a: [
  4112          {},
  4113        ]
  4114      }
  4115      a: (〈0;#T〉 & {
  4116        a: [
  4117          {
  4118            link: {
  4119              a: [
  4120                {},
  4121              ]
  4122            }
  4123          },
  4124        ]
  4125      })
  4126    }
  4127    p6: {
  4128      #S: {
  4129        #T: {
  4130          a: [
  4131            ...{
  4132              link: 〈3;#T〉
  4133            },
  4134          ]
  4135        }
  4136      }
  4137      #U: {
  4138        〈1;#S〉
  4139        #T: {
  4140          a: [
  4141            {},
  4142          ]
  4143        }
  4144      }
  4145      a: (〈0;#U〉.#T & {
  4146        a: [
  4147          {
  4148            link: {
  4149              a: [
  4150                {},
  4151              ]
  4152            }
  4153          },
  4154        ]
  4155      })
  4156    }
  4157    c1: {
  4158      a: {
  4159        b: {}
  4160        c: (〈1;a〉 & 〈0;b〉)
  4161      }
  4162    }
  4163    d1: {
  4164      a: {
  4165        b: {
  4166          c: {
  4167            d: {
  4168              h: int
  4169              t: 〈4;r〉
  4170            }
  4171          }
  4172        }
  4173      }
  4174      r: 〈0;a〉.b
  4175      x: 〈0;a〉.b.c
  4176    }
  4177    d2: {
  4178      x: 〈0;a〉.b.c
  4179      r: 〈0;a〉.b
  4180      a: {
  4181        b: {
  4182          c: {
  4183            d: {
  4184              h: int
  4185              t: 〈4;r〉
  4186            }
  4187          }
  4188        }
  4189      }
  4190    }
  4191    d3: {
  4192      config: {
  4193        a: {
  4194          b: {
  4195            c: 〈2;indirect〉
  4196          }
  4197        }
  4198        indirect: [
  4199          〈1;a〉.b,
  4200          null,
  4201        ][〈0;i〉]
  4202        i: (int|*1)
  4203      }
  4204      x: (〈0;config〉 & {
  4205        i: 0
  4206      })
  4207    }
  4208    shortPathFail: _
  4209    shortPathFail: {
  4210      doubleRef: {
  4211        a: 〈0;#List〉
  4212        #List: {
  4213          Next: (〈1;#List〉|*null)
  4214        }
  4215      }
  4216    }
  4217    shortPathFail: {
  4218      elipsis: {
  4219        t1: {
  4220          #Foo: {
  4221            ref: (null|〈1;#Foo〉)
  4222          }
  4223          #Foo: {
  4224            ...
  4225          }
  4226        }
  4227        t2: {
  4228          Foo: {
  4229            ref: 〈1;Foo〉
  4230          }
  4231          Foo: {
  4232            ...
  4233          }
  4234        }
  4235      }
  4236    }
  4237    patternFail: {
  4238      issue2374: {
  4239        [string]: {
  4240          b: 〈1;(〈0;-〉)〉
  4241        }
  4242        a: {
  4243          r: 0
  4244        }
  4245      }
  4246    }
  4247    shortPathFail: {
  4248      comprehension: {
  4249        #list: {
  4250          tail: (〈1;#list〉|*null)
  4251          if (〈0;tail〉 != null) {}
  4252        }
  4253      }
  4254    }
  4255    withLetFail: {
  4256      schema: {
  4257        next: 〈1;let _schema_1#1〉
  4258      }
  4259      let _schema_1#1 = 〈0;schema〉
  4260    }
  4261    listOptOK: {
  4262      list: {
  4263        head: int
  4264        tail?: 〈1;list〉
  4265      }
  4266      a: (〈0;list〉 & {
  4267        head: 3
  4268        tail: {
  4269          head: 2
  4270        }
  4271      })
  4272    }
  4273    e1: {
  4274      a: 〈0;a〉
  4275      a: {
  4276        c: 〈1;a〉
  4277      }
  4278      b: {
  4279        c: 〈1;b〉
  4280      }
  4281      b: 〈0;b〉
  4282    }
  4283    e2: {
  4284      a: {
  4285        〈1;a〉
  4286      }
  4287      a: {
  4288        c: 〈1;a〉
  4289      }
  4290      b: {
  4291        c: 〈1;b〉
  4292      }
  4293      b: {
  4294        〈1;b〉
  4295      }
  4296    }
  4297    e3: {
  4298      a: [
  4299        〈1;a〉,
  4300      ]
  4301      a: {
  4302        c: 〈1;a〉
  4303      }
  4304      b: [
  4305        〈1;b〉,
  4306      ]
  4307      b: {
  4308        c: 〈1;b〉
  4309      }
  4310    }
  4311    e4: {
  4312      a: [
  4313        (〈1;a〉|{}),
  4314      ]
  4315      a: [
  4316        [
  4317          {
  4318            c: 1
  4319          },
  4320        ],
  4321      ]
  4322      b: [
  4323        [
  4324          {
  4325            c: 1
  4326          },
  4327        ],
  4328      ]
  4329      b: [
  4330        (〈1;b〉|{}),
  4331      ]
  4332    }
  4333    e5: {
  4334      a: {
  4335        c: (〈1;a〉|int)
  4336      }
  4337      a: (〈0;a〉|int)
  4338      b: (〈0;b〉|int)
  4339      b: {
  4340        c: (〈1;b〉|int)
  4341      }
  4342    }
  4343    nestedList: {
  4344      v1e: {
  4345        x: [
  4346          (〈1;x〉|int),
  4347          1,
  4348        ]
  4349        y: (〈0;x〉 & [
  4350          [
  4351            [
  4352              2,
  4353            ],
  4354            1,
  4355          ],
  4356          1,
  4357        ])
  4358      }
  4359      v2e: {
  4360        y: (〈0;x〉 & [
  4361          [
  4362            [
  4363              2,
  4364            ],
  4365            1,
  4366          ],
  4367          1,
  4368        ])
  4369        x: [
  4370          (〈1;x〉|int),
  4371          1,
  4372        ]
  4373      }
  4374      v1: {
  4375        x: [
  4376          (〈1;x〉|int),
  4377          1,
  4378        ]
  4379        y: (〈0;x〉 & [
  4380          [
  4381            [
  4382              2,
  4383              1,
  4384            ],
  4385            1,
  4386          ],
  4387          1,
  4388        ])
  4389      }
  4390      v2: {
  4391        y: (〈0;x〉 & [
  4392          [
  4393            [
  4394              2,
  4395              1,
  4396            ],
  4397            1,
  4398          ],
  4399          1,
  4400        ])
  4401        x: [
  4402          (〈1;x〉|int),
  4403          1,
  4404        ]
  4405      }
  4406    }
  4407    v3: {
  4408      list: {
  4409        head: int
  4410        tail: (〈1;list〉|null)
  4411      }
  4412      myList: 〈0;list〉
  4413      myList: {
  4414        head: 2
  4415        tail: {
  4416          head: 3
  4417          tail: {
  4418            head: 4
  4419          }
  4420        }
  4421      }
  4422    }
  4423    v4: {
  4424      list: {
  4425        head: int
  4426        tail: (〈1;list〉|1)
  4427      }
  4428      myList: 〈0;list〉
  4429      myList: {
  4430        head: 2
  4431        tail: {
  4432          head: 3
  4433        }
  4434      }
  4435    }
  4436    v5: {
  4437      list: {
  4438        head: int
  4439        tail: (〈1;list〉|{})
  4440      }
  4441      myList: 〈0;list〉
  4442      myList: {
  4443        head: 2
  4444        tail: {
  4445          head: 3
  4446        }
  4447      }
  4448    }
  4449    z1: {
  4450      y: {
  4451        f: {
  4452          h: 〈1;g〉
  4453        }
  4454        g: _
  4455      }
  4456      x: {
  4457        f: _
  4458        g: 〈0;f〉
  4459      }
  4460      z: (〈0;x〉 & 〈0;y〉)
  4461    }
  4462    crossRefNoCycle: {
  4463      t1: {
  4464        T: {
  4465          x: _
  4466          y: 〈0;x〉
  4467        }
  4468        C: ({
  4469          x: 〈1;T〉
  4470        } & 〈0;T〉)
  4471      }
  4472    }
  4473    crossRefNoCycle: {
  4474      t2: {
  4475        T: {
  4476          x: _
  4477          y: 〈0;x〉
  4478        }
  4479        C: (〈0;T〉 & {
  4480          x: 〈1;T〉
  4481        })
  4482      }
  4483    }
  4484    crossRefNoCycle: {
  4485      t3: {
  4486        T: {
  4487          x: _
  4488          y: 〈0;x〉
  4489          z: 〈0;y〉
  4490        }
  4491        C: (〈0;T〉 & {
  4492          x: 〈1;T〉
  4493        })
  4494      }
  4495    }
  4496    crossRefNoCycle: {
  4497      t4: {
  4498        T: {
  4499          x: _
  4500          y: 〈0;x〉
  4501          z: 〈0;y〉
  4502        }
  4503        C: (〈0;T〉 & {
  4504          x: (〈1;T〉 & {
  4505            x: 〈2;T〉
  4506          })
  4507        })
  4508      }
  4509    }
  4510    n1: {
  4511      a: {
  4512        b: int
  4513      }
  4514    }
  4515    n2: (〈0;n1〉 & {
  4516      a: 〈1;n1〉
  4517    })
  4518    n3: (〈0;n1〉 & {
  4519      〈1;n1〉
  4520    })
  4521    n4: (〈0;n1〉 & {
  4522      x: (〈1;n1〉 & {
  4523        y: (〈2;n1〉 & {
  4524          z: int
  4525        })
  4526      })
  4527    })
  4528  }