cuelang.org/go@v0.13.0/cue/testdata/disjunctions/issue2209.txtar (about)

     1  -- input.cue --
     2  full: {
     3  	Foo: #Abstract & {spec: foo: {}}
     4  	Bar: #Abstract & {spec: bar: {}}
     5  
     6  	#Abstract: X={
     7  		spec: _#Spec
     8  
     9  		resource: _Thing & {_X: spec: X.spec}
    10  	}
    11  
    12  	_#Spec: *_#SpecFoo | _#SpecBar
    13  
    14  	_#SpecFoo: {
    15  		foo: {
    16  			min: int | *10
    17  			max: int | *20
    18  		}
    19  	}
    20  
    21  	_#SpecBar: {
    22  		bar: {
    23  			min: int | *30
    24  			max: int | *40
    25  		}
    26  	}
    27  
    28  	_Thing: #Constrained & {
    29  		_X: _
    30  
    31  		spec: {
    32  			if _X.spec.foo != _|_ {
    33  				minFoo: _X.spec.foo.min
    34  				maxFoo: _X.spec.foo.max
    35  			}
    36  
    37  			if _X.spec.bar != _|_ {
    38  				minBar: _X.spec.bar.min
    39  				maxBar: _X.spec.bar.max
    40  			}
    41  		}
    42  	}
    43  
    44  	#Constrained: #Base & {
    45  		spec: {
    46  			minFoo:  int | *10
    47  			maxFoo:  int | *20
    48  			minBar?: null
    49  			maxBar?: null
    50  		} | {
    51  			minBar:  int | *30
    52  			maxBar:  int | *40
    53  			minFoo?: null
    54  			maxFoo?: null
    55  		}
    56  
    57  		spec: *{
    58  			fuga?: null
    59  		} | {
    60  			hoge?: null
    61  		}
    62  	}
    63  
    64  	#Base: {
    65  		spec: {
    66  			minFoo?: null | int
    67  			maxFoo?: null | int
    68  			minBar?: null | int
    69  			maxBar?: null | int
    70  
    71  			hoge?: null | bool
    72  			fuga?: null | bool
    73  		}
    74  	}
    75  }
    76  
    77  reduced: {
    78  	Foo: #Obj & {spec: foo: {}}
    79  	Bar: #Obj & {spec: bar: {}}
    80  
    81  	#Obj: X={
    82  		spec: *#SpecFoo | #SpecBar
    83  
    84  		out: #Out & {
    85  			_Xspec: X.spec
    86  			if _Xspec.foo != _|_ {
    87  				minFoo: _Xspec.foo.min
    88  			}
    89  			if _Xspec.bar != _|_ {
    90  				minBar: _Xspec.bar.min
    91  			}
    92  		}
    93  	}
    94  
    95  	#SpecFoo: foo: min: int | *10
    96  	#SpecBar: bar: min: int | *20
    97  
    98  	#Out: {
    99  		{minFoo: int} | {minBar: int}
   100  
   101  		*{nullFoo: null} | {nullBar: null}
   102  	}
   103  }
   104  -- out/compile --
   105  --- input.cue
   106  {
   107    full: {
   108      Foo: (〈0;#Abstract〉 & {
   109        spec: {
   110          foo: {}
   111        }
   112      })
   113      Bar: (〈0;#Abstract〉 & {
   114        spec: {
   115          bar: {}
   116        }
   117      })
   118      #Abstract: {
   119        spec: 〈1;_#Spec〉
   120        resource: (〈1;_Thing〉 & {
   121          _X: {
   122            spec: 〈3〉.spec
   123          }
   124        })
   125      }
   126      _#Spec: (*〈0;_#SpecFoo〉|〈0;_#SpecBar〉)
   127      _#SpecFoo: {
   128        foo: {
   129          min: (int|*10)
   130          max: (int|*20)
   131        }
   132      }
   133      _#SpecBar: {
   134        bar: {
   135          min: (int|*30)
   136          max: (int|*40)
   137        }
   138      }
   139      _Thing: (〈0;#Constrained〉 & {
   140        _X: _
   141        spec: {
   142          if (〈1;_X〉.spec.foo != _|_(explicit error (_|_ literal) in source)) {
   143            minFoo: 〈2;_X〉.spec.foo.min
   144            maxFoo: 〈2;_X〉.spec.foo.max
   145          }
   146          if (〈1;_X〉.spec.bar != _|_(explicit error (_|_ literal) in source)) {
   147            minBar: 〈2;_X〉.spec.bar.min
   148            maxBar: 〈2;_X〉.spec.bar.max
   149          }
   150        }
   151      })
   152      #Constrained: (〈0;#Base〉 & {
   153        spec: ({
   154          minFoo: (int|*10)
   155          maxFoo: (int|*20)
   156          minBar?: null
   157          maxBar?: null
   158        }|{
   159          minBar: (int|*30)
   160          maxBar: (int|*40)
   161          minFoo?: null
   162          maxFoo?: null
   163        })
   164        spec: (*{
   165          fuga?: null
   166        }|{
   167          hoge?: null
   168        })
   169      })
   170      #Base: {
   171        spec: {
   172          minFoo?: (null|int)
   173          maxFoo?: (null|int)
   174          minBar?: (null|int)
   175          maxBar?: (null|int)
   176          hoge?: (null|bool)
   177          fuga?: (null|bool)
   178        }
   179      }
   180    }
   181    reduced: {
   182      Foo: (〈0;#Obj〉 & {
   183        spec: {
   184          foo: {}
   185        }
   186      })
   187      Bar: (〈0;#Obj〉 & {
   188        spec: {
   189          bar: {}
   190        }
   191      })
   192      #Obj: {
   193        spec: (*〈1;#SpecFoo〉|〈1;#SpecBar〉)
   194        out: (〈1;#Out〉 & {
   195          _Xspec: 〈2〉.spec
   196          if (〈0;_Xspec〉.foo != _|_(explicit error (_|_ literal) in source)) {
   197            minFoo: 〈1;_Xspec〉.foo.min
   198          }
   199          if (〈0;_Xspec〉.bar != _|_(explicit error (_|_ literal) in source)) {
   200            minBar: 〈1;_Xspec〉.bar.min
   201          }
   202        })
   203      }
   204      #SpecFoo: {
   205        foo: {
   206          min: (int|*10)
   207        }
   208      }
   209      #SpecBar: {
   210        bar: {
   211          min: (int|*20)
   212        }
   213      }
   214      #Out: {
   215        ({
   216          minFoo: int
   217        }|{
   218          minBar: int
   219        })
   220        (*{
   221          nullFoo: null
   222        }|{
   223          nullBar: null
   224        })
   225      }
   226    }
   227  }
   228  -- out/eval/stats --
   229  Leaks:  0
   230  Freed:  1141
   231  Reused: 1122
   232  Allocs: 19
   233  Retain: 51
   234  
   235  Unifications: 375
   236  Conjuncts:    1463
   237  Disjuncts:    1192
   238  -- out/evalalpha --
   239  (struct){
   240    full: (struct){
   241      Foo: (#struct){
   242        spec: (#struct){
   243          foo: (#struct){
   244            min: (int){ |(*(int){ 10 }, (int){ int }) }
   245            max: (int){ |(*(int){ 20 }, (int){ int }) }
   246          }
   247        }
   248        resource: (#struct){
   249          _X: (#struct){
   250            spec: ~(full.Foo.spec)
   251          }
   252          spec: (#struct){ |(*(#struct){
   253              minFoo: (int){ |(*(int){ 10 }, (int){ int }) }
   254              maxFoo: (int){ |(*(int){ 20 }, (int){ int }) }
   255              minBar?: (null){ null }
   256              maxBar?: (null){ null }
   257              hoge?: ((null|bool)){ |((null){ null }, (bool){ bool }) }
   258              fuga?: (null){ null }
   259            }, (#struct){
   260              minFoo: (int){ |(*(int){ 10 }, (int){ int }) }
   261              maxFoo: (int){ |(*(int){ 20 }, (int){ int }) }
   262              minBar?: (null){ null }
   263              maxBar?: (null){ null }
   264              hoge?: (null){ null }
   265              fuga?: ((null|bool)){ |((null){ null }, (bool){ bool }) }
   266            }) }
   267        }
   268      }
   269      Bar: (#struct){
   270        spec: (#struct){
   271          bar: (#struct){
   272            min: (int){ |(*(int){ 30 }, (int){ int }) }
   273            max: (int){ |(*(int){ 40 }, (int){ int }) }
   274          }
   275        }
   276        resource: (#struct){
   277          _X: (#struct){
   278            spec: ~(full.Bar.spec)
   279          }
   280          spec: (#struct){ |(*(#struct){
   281              minFoo?: (null){ null }
   282              maxFoo?: (null){ null }
   283              minBar: (int){ |(*(int){ 30 }, (int){ int }) }
   284              maxBar: (int){ |(*(int){ 40 }, (int){ int }) }
   285              hoge?: ((null|bool)){ |((null){ null }, (bool){ bool }) }
   286              fuga?: (null){ null }
   287            }, (#struct){
   288              minFoo?: (null){ null }
   289              maxFoo?: (null){ null }
   290              minBar: (int){ |(*(int){ 30 }, (int){ int }) }
   291              maxBar: (int){ |(*(int){ 40 }, (int){ int }) }
   292              hoge?: (null){ null }
   293              fuga?: ((null|bool)){ |((null){ null }, (bool){ bool }) }
   294            }) }
   295        }
   296      }
   297      #Abstract: (#struct){
   298        spec: (#struct){ |(*(#struct){
   299            foo: (#struct){
   300              min: (int){ |(*(int){ 10 }, (int){ int }) }
   301              max: (int){ |(*(int){ 20 }, (int){ int }) }
   302            }
   303          }, (#struct){
   304            bar: (#struct){
   305              min: (int){ |(*(int){ 30 }, (int){ int }) }
   306              max: (int){ |(*(int){ 40 }, (int){ int }) }
   307            }
   308          }) }
   309        resource: (#struct){
   310          _X: (#struct){
   311            spec: (#struct){ |(*(#struct){
   312                foo: (#struct){
   313                  min: (int){ |(*(int){ 10 }, (int){ int }) }
   314                  max: (int){ |(*(int){ 20 }, (int){ int }) }
   315                }
   316              }, (#struct){
   317                bar: (#struct){
   318                  min: (int){ |(*(int){ 30 }, (int){ int }) }
   319                  max: (int){ |(*(int){ 40 }, (int){ int }) }
   320                }
   321              }) }
   322          }
   323          spec: (#struct){ |(*(#struct){
   324              minFoo: (int){ |(*(int){ 10 }, (int){ int }) }
   325              maxFoo: (int){ |(*(int){ 20 }, (int){ int }) }
   326              minBar?: (null){ null }
   327              maxBar?: (null){ null }
   328              hoge?: ((null|bool)){ |((null){ null }, (bool){ bool }) }
   329              fuga?: (null){ null }
   330            }, (#struct){
   331              minFoo: (int){ |(*(int){ 10 }, (int){ int }) }
   332              maxFoo: (int){ |(*(int){ 20 }, (int){ int }) }
   333              minBar?: (null){ null }
   334              maxBar?: (null){ null }
   335              hoge?: (null){ null }
   336              fuga?: ((null|bool)){ |((null){ null }, (bool){ bool }) }
   337            }) }
   338        }
   339      }
   340      _#Spec: (#struct){ |(*(#struct){
   341          foo: (#struct){
   342            min: (int){ |(*(int){ 10 }, (int){ int }) }
   343            max: (int){ |(*(int){ 20 }, (int){ int }) }
   344          }
   345        }, (#struct){
   346          bar: (#struct){
   347            min: (int){ |(*(int){ 30 }, (int){ int }) }
   348            max: (int){ |(*(int){ 40 }, (int){ int }) }
   349          }
   350        }) }
   351      _#SpecFoo: (#struct){
   352        foo: (#struct){
   353          min: (int){ |(*(int){ 10 }, (int){ int }) }
   354          max: (int){ |(*(int){ 20 }, (int){ int }) }
   355        }
   356      }
   357      _#SpecBar: (#struct){
   358        bar: (#struct){
   359          min: (int){ |(*(int){ 30 }, (int){ int }) }
   360          max: (int){ |(*(int){ 40 }, (int){ int }) }
   361        }
   362      }
   363      _Thing: (#struct){
   364        _X: (_){ _ }
   365        spec: (#struct){ |(*(#struct){
   366            minFoo: (int){ |(*(int){ 10 }, (int){ int }) }
   367            maxFoo: (int){ |(*(int){ 20 }, (int){ int }) }
   368            minBar?: (null){ null }
   369            maxBar?: (null){ null }
   370            hoge?: ((null|bool)){ |((null){ null }, (bool){ bool }) }
   371            fuga?: (null){ null }
   372          }, *(#struct){
   373            minFoo?: (null){ null }
   374            maxFoo?: (null){ null }
   375            minBar: (int){ |(*(int){ 30 }, (int){ int }) }
   376            maxBar: (int){ |(*(int){ 40 }, (int){ int }) }
   377            hoge?: ((null|bool)){ |((null){ null }, (bool){ bool }) }
   378            fuga?: (null){ null }
   379          }, (#struct){
   380            minFoo: (int){ |(*(int){ 10 }, (int){ int }) }
   381            maxFoo: (int){ |(*(int){ 20 }, (int){ int }) }
   382            minBar?: (null){ null }
   383            maxBar?: (null){ null }
   384            hoge?: (null){ null }
   385            fuga?: ((null|bool)){ |((null){ null }, (bool){ bool }) }
   386          }, (#struct){
   387            minFoo?: (null){ null }
   388            maxFoo?: (null){ null }
   389            minBar: (int){ |(*(int){ 30 }, (int){ int }) }
   390            maxBar: (int){ |(*(int){ 40 }, (int){ int }) }
   391            hoge?: (null){ null }
   392            fuga?: ((null|bool)){ |((null){ null }, (bool){ bool }) }
   393          }) }
   394      }
   395      #Constrained: (#struct){
   396        spec: (#struct){ |(*(#struct){
   397            minFoo: (int){ |(*(int){ 10 }, (int){ int }) }
   398            maxFoo: (int){ |(*(int){ 20 }, (int){ int }) }
   399            minBar?: (null){ null }
   400            maxBar?: (null){ null }
   401            hoge?: ((null|bool)){ |((null){ null }, (bool){ bool }) }
   402            fuga?: (null){ null }
   403          }, *(#struct){
   404            minFoo?: (null){ null }
   405            maxFoo?: (null){ null }
   406            minBar: (int){ |(*(int){ 30 }, (int){ int }) }
   407            maxBar: (int){ |(*(int){ 40 }, (int){ int }) }
   408            hoge?: ((null|bool)){ |((null){ null }, (bool){ bool }) }
   409            fuga?: (null){ null }
   410          }, (#struct){
   411            minFoo: (int){ |(*(int){ 10 }, (int){ int }) }
   412            maxFoo: (int){ |(*(int){ 20 }, (int){ int }) }
   413            minBar?: (null){ null }
   414            maxBar?: (null){ null }
   415            hoge?: (null){ null }
   416            fuga?: ((null|bool)){ |((null){ null }, (bool){ bool }) }
   417          }, (#struct){
   418            minFoo?: (null){ null }
   419            maxFoo?: (null){ null }
   420            minBar: (int){ |(*(int){ 30 }, (int){ int }) }
   421            maxBar: (int){ |(*(int){ 40 }, (int){ int }) }
   422            hoge?: (null){ null }
   423            fuga?: ((null|bool)){ |((null){ null }, (bool){ bool }) }
   424          }) }
   425      }
   426      #Base: (#struct){
   427        spec: (#struct){
   428          minFoo?: ((null|int)){ |((null){ null }, (int){ int }) }
   429          maxFoo?: ((null|int)){ |((null){ null }, (int){ int }) }
   430          minBar?: ((null|int)){ |((null){ null }, (int){ int }) }
   431          maxBar?: ((null|int)){ |((null){ null }, (int){ int }) }
   432          hoge?: ((null|bool)){ |((null){ null }, (bool){ bool }) }
   433          fuga?: ((null|bool)){ |((null){ null }, (bool){ bool }) }
   434        }
   435      }
   436    }
   437    reduced: (struct){
   438      Foo: (#struct){
   439        spec: (#struct){
   440          foo: (#struct){
   441            min: (int){ |(*(int){ 10 }, (int){ int }) }
   442          }
   443        }
   444        out: (#struct){ |(*(#struct){
   445            _Xspec: ~(reduced.Foo.spec)
   446            minFoo: (int){ |(*(int){ 10 }, (int){ int }) }
   447            nullFoo: (null){ null }
   448          }, (#struct){
   449            _Xspec: ~(reduced.Foo.spec)
   450            minFoo: (int){ |(*(int){ 10 }, (int){ int }) }
   451            nullBar: (null){ null }
   452          }) }
   453      }
   454      Bar: (#struct){
   455        spec: (#struct){
   456          bar: (#struct){
   457            min: (int){ |(*(int){ 20 }, (int){ int }) }
   458          }
   459        }
   460        out: (#struct){ |(*(#struct){
   461            _Xspec: ~(reduced.Bar.spec)
   462            minBar: (int){ |(*(int){ 20 }, (int){ int }) }
   463            nullFoo: (null){ null }
   464          }, (#struct){
   465            _Xspec: ~(reduced.Bar.spec)
   466            minBar: (int){ |(*(int){ 20 }, (int){ int }) }
   467            nullBar: (null){ null }
   468          }) }
   469      }
   470      #Obj: (#struct){
   471        spec: (#struct){ |(*(#struct){
   472            foo: (#struct){
   473              min: (int){ |(*(int){ 10 }, (int){ int }) }
   474            }
   475          }, (#struct){
   476            bar: (#struct){
   477              min: (int){ |(*(int){ 20 }, (int){ int }) }
   478            }
   479          }) }
   480        out: (#struct){ |(*(#struct){
   481            _Xspec: (#struct){ |(*(#struct){
   482                foo: (#struct){
   483                  min: (int){ |(*(int){ 10 }, (int){ int }) }
   484                }
   485              }, (#struct){
   486                bar: (#struct){
   487                  min: (int){ |(*(int){ 20 }, (int){ int }) }
   488                }
   489              }) }
   490            minFoo: (int){ |(*(int){ 10 }, (int){ int }) }
   491            nullFoo: (null){ null }
   492          }, (#struct){
   493            _Xspec: (#struct){ |(*(#struct){
   494                foo: (#struct){
   495                  min: (int){ |(*(int){ 10 }, (int){ int }) }
   496                }
   497              }, (#struct){
   498                bar: (#struct){
   499                  min: (int){ |(*(int){ 20 }, (int){ int }) }
   500                }
   501              }) }
   502            minFoo: (int){ |(*(int){ 10 }, (int){ int }) }
   503            nullBar: (null){ null }
   504          }) }
   505      }
   506      #SpecFoo: (#struct){
   507        foo: (#struct){
   508          min: (int){ |(*(int){ 10 }, (int){ int }) }
   509        }
   510      }
   511      #SpecBar: (#struct){
   512        bar: (#struct){
   513          min: (int){ |(*(int){ 20 }, (int){ int }) }
   514        }
   515      }
   516      #Out: (#struct){ |(*(#struct){
   517          minFoo: (int){ int }
   518          nullFoo: (null){ null }
   519        }, *(#struct){
   520          minBar: (int){ int }
   521          nullFoo: (null){ null }
   522        }, (#struct){
   523          minFoo: (int){ int }
   524          nullBar: (null){ null }
   525        }, (#struct){
   526          minBar: (int){ int }
   527          nullBar: (null){ null }
   528        }) }
   529    }
   530  }
   531  -- diff/-out/evalalpha<==>+out/eval --
   532  diff old new
   533  --- old
   534  +++ new
   535  @@ -1,175 +1,59 @@
   536  -Errors:
   537  -full.Bar.resource.spec: 6 errors in empty disjunction:
   538  -full.Bar.resource.spec.minBar: 2 errors in empty disjunction:
   539  -full.Bar.resource.spec.minBar: conflicting values null and int (mismatched types null and int):
   540  -    ./input.cue:3:7
   541  -    ./input.cue:8:13
   542  -    ./input.cue:27:10
   543  -    ./input.cue:43:16
   544  -    ./input.cue:47:13
   545  -    ./input.cue:67:20
   546  -full.Bar.resource.spec.minFoo: 2 errors in empty disjunction:
   547  -full.Bar.resource.spec.minFoo: conflicting values null and 10 (mismatched types null and int):
   548  -    ./input.cue:3:7
   549  -    ./input.cue:8:13
   550  -    ./input.cue:15:16
   551  -    ./input.cue:31:4
   552  -    ./input.cue:32:13
   553  -    ./input.cue:52:13
   554  -full.Bar.resource.spec.minFoo: conflicting values null and int (mismatched types null and int):
   555  -    ./input.cue:3:7
   556  -    ./input.cue:8:13
   557  -    ./input.cue:27:10
   558  -    ./input.cue:43:16
   559  -    ./input.cue:52:13
   560  -    ./input.cue:65:20
   561  -full.Bar.resource.spec.minBar: undefined field: min:
   562  -    ./input.cue:37:25
   563  -reduced.Bar.out.minBar: undefined field: min:
   564  -    ./input.cue:89:24
   565  -
   566  -Result:
   567  -(_|_){
   568  -  // [eval]
   569  -  full: (_|_){
   570  -    // [eval]
   571  -    Foo: (#struct){
   572  -      spec: (#struct){
   573  -        foo: (#struct){
   574  -          min: (int){ |(*(int){ 10 }, (int){ int }) }
   575  -          max: (int){ |(*(int){ 20 }, (int){ int }) }
   576  -        }
   577  -      }
   578  -      resource: (#struct){
   579  -        spec: (#struct){ |(*(#struct){
   580  -            minFoo: (int){ |(*(int){ 10 }, (int){ int }) }
   581  -            maxFoo: (int){ |(*(int){ 20 }, (int){ int }) }
   582  -            minBar?: (null){ null }
   583  -            maxBar?: (null){ null }
   584  -            hoge?: ((null|bool)){ |((null){ null }, (bool){ bool }) }
   585  -            fuga?: (null){ null }
   586  -          }, (#struct){
   587  -            minFoo: (int){ |(*(int){ 10 }, (int){ int }) }
   588  -            maxFoo: (int){ |(*(int){ 20 }, (int){ int }) }
   589  -            minBar?: (null){ null }
   590  -            maxBar?: (null){ null }
   591  -            hoge?: (null){ null }
   592  -            fuga?: ((null|bool)){ |((null){ null }, (bool){ bool }) }
   593  -          }) }
   594  -        _X: (#struct){
   595  -          spec: (#struct){ |(*(#struct){
   596  -              foo: (#struct){
   597  -                min: (int){ |(*(int){ 10 }, (int){ int }) }
   598  -                max: (int){ |(*(int){ 20 }, (int){ int }) }
   599  -              }
   600  -            }, (#struct){
   601  -              foo: (#struct){
   602  -              }
   603  -              bar: (#struct){
   604  -                min: (int){ |(*(int){ 30 }, (int){ int }) }
   605  -                max: (int){ |(*(int){ 40 }, (int){ int }) }
   606  -              }
   607  -            }) }
   608  -        }
   609  -      }
   610  -    }
   611  -    Bar: (_|_){
   612  -      // [eval]
   613  -      spec: (#struct){
   614  -        bar: (#struct){
   615  -          min: (int){ |(*(int){ 30 }, (int){ int }) }
   616  -          max: (int){ |(*(int){ 40 }, (int){ int }) }
   617  -        }
   618  -      }
   619  -      resource: (_|_){
   620  -        // [eval]
   621  -        spec: (_|_){
   622  -          // [eval] full.Bar.resource.spec: 6 errors in empty disjunction:
   623  -          // full.Bar.resource.spec.minBar: 2 errors in empty disjunction:
   624  -          // full.Bar.resource.spec.minBar: conflicting values null and int (mismatched types null and int):
   625  -          //     ./input.cue:3:7
   626  -          //     ./input.cue:8:13
   627  -          //     ./input.cue:27:10
   628  -          //     ./input.cue:43:16
   629  -          //     ./input.cue:47:13
   630  -          //     ./input.cue:67:20
   631  -          // full.Bar.resource.spec.minFoo: 2 errors in empty disjunction:
   632  -          // full.Bar.resource.spec.minFoo: conflicting values null and 10 (mismatched types null and int):
   633  -          //     ./input.cue:3:7
   634  -          //     ./input.cue:8:13
   635  -          //     ./input.cue:15:16
   636  -          //     ./input.cue:31:4
   637  -          //     ./input.cue:32:13
   638  -          //     ./input.cue:52:13
   639  -          // full.Bar.resource.spec.minFoo: conflicting values null and int (mismatched types null and int):
   640  -          //     ./input.cue:3:7
   641  -          //     ./input.cue:8:13
   642  -          //     ./input.cue:27:10
   643  -          //     ./input.cue:43:16
   644  -          //     ./input.cue:52:13
   645  -          //     ./input.cue:65:20
   646  -          // full.Bar.resource.spec.minBar: undefined field: min:
   647  -          //     ./input.cue:37:25
   648  -          minFoo: (_|_){
   649  -            // [eval] full.Bar.resource.spec.minFoo: 2 errors in empty disjunction:
   650  -            // full.Bar.resource.spec.minFoo: conflicting values null and 10 (mismatched types null and int):
   651  -            //     ./input.cue:3:7
   652  -            //     ./input.cue:8:13
   653  -            //     ./input.cue:15:16
   654  -            //     ./input.cue:31:4
   655  -            //     ./input.cue:32:13
   656  -            //     ./input.cue:52:13
   657  -            // full.Bar.resource.spec.minFoo: conflicting values null and int (mismatched types null and int):
   658  -            //     ./input.cue:3:7
   659  -            //     ./input.cue:8:13
   660  -            //     ./input.cue:27:10
   661  -            //     ./input.cue:43:16
   662  -            //     ./input.cue:52:13
   663  -            //     ./input.cue:65:20
   664  -          }
   665  -          maxFoo: (_|_){
   666  -            // [eval] full.Bar.resource.spec.maxFoo: 2 errors in empty disjunction:
   667  -            // full.Bar.resource.spec.maxFoo: conflicting values null and 20 (mismatched types null and int):
   668  -            //     ./input.cue:3:7
   669  -            //     ./input.cue:8:13
   670  -            //     ./input.cue:16:16
   671  -            //     ./input.cue:31:4
   672  -            //     ./input.cue:33:13
   673  -            //     ./input.cue:53:13
   674  -            // full.Bar.resource.spec.maxFoo: conflicting values null and int (mismatched types null and int):
   675  -            //     ./input.cue:3:7
   676  -            //     ./input.cue:8:13
   677  -            //     ./input.cue:27:10
   678  -            //     ./input.cue:43:16
   679  -            //     ./input.cue:53:13
   680  -            //     ./input.cue:66:20
   681  -          }
   682  -          minBar: (_|_){
   683  -            // [eval] full.Bar.resource.spec.minBar: undefined field: min:
   684  -            //     ./input.cue:37:25
   685  -          }
   686  -          maxBar: (_|_){
   687  -            // [eval] full.Bar.resource.spec.maxBar: undefined field: max:
   688  -            //     ./input.cue:38:25
   689  -          }
   690  -          hoge?: ((null|bool)){ |((null){ null }, (bool){ bool }) }
   691  -          fuga?: ((null|bool)){ |((null){ null }, (bool){ bool }) }
   692  -        }
   693  -        _X: (#struct){
   694  -          spec: (#struct){ |(*(#struct){
   695  -              bar: (#struct){
   696  -              }
   697  -              foo: (#struct){
   698  -                min: (int){ |(*(int){ 10 }, (int){ int }) }
   699  -                max: (int){ |(*(int){ 20 }, (int){ int }) }
   700  -              }
   701  -            }, (#struct){
   702  -              bar: (#struct){
   703  -                min: (int){ |(*(int){ 30 }, (int){ int }) }
   704  -                max: (int){ |(*(int){ 40 }, (int){ int }) }
   705  -              }
   706  -            }) }
   707  -        }
   708  +(struct){
   709  +  full: (struct){
   710  +    Foo: (#struct){
   711  +      spec: (#struct){
   712  +        foo: (#struct){
   713  +          min: (int){ |(*(int){ 10 }, (int){ int }) }
   714  +          max: (int){ |(*(int){ 20 }, (int){ int }) }
   715  +        }
   716  +      }
   717  +      resource: (#struct){
   718  +        _X: (#struct){
   719  +          spec: ~(full.Foo.spec)
   720  +        }
   721  +        spec: (#struct){ |(*(#struct){
   722  +            minFoo: (int){ |(*(int){ 10 }, (int){ int }) }
   723  +            maxFoo: (int){ |(*(int){ 20 }, (int){ int }) }
   724  +            minBar?: (null){ null }
   725  +            maxBar?: (null){ null }
   726  +            hoge?: ((null|bool)){ |((null){ null }, (bool){ bool }) }
   727  +            fuga?: (null){ null }
   728  +          }, (#struct){
   729  +            minFoo: (int){ |(*(int){ 10 }, (int){ int }) }
   730  +            maxFoo: (int){ |(*(int){ 20 }, (int){ int }) }
   731  +            minBar?: (null){ null }
   732  +            maxBar?: (null){ null }
   733  +            hoge?: (null){ null }
   734  +            fuga?: ((null|bool)){ |((null){ null }, (bool){ bool }) }
   735  +          }) }
   736  +      }
   737  +    }
   738  +    Bar: (#struct){
   739  +      spec: (#struct){
   740  +        bar: (#struct){
   741  +          min: (int){ |(*(int){ 30 }, (int){ int }) }
   742  +          max: (int){ |(*(int){ 40 }, (int){ int }) }
   743  +        }
   744  +      }
   745  +      resource: (#struct){
   746  +        _X: (#struct){
   747  +          spec: ~(full.Bar.spec)
   748  +        }
   749  +        spec: (#struct){ |(*(#struct){
   750  +            minFoo?: (null){ null }
   751  +            maxFoo?: (null){ null }
   752  +            minBar: (int){ |(*(int){ 30 }, (int){ int }) }
   753  +            maxBar: (int){ |(*(int){ 40 }, (int){ int }) }
   754  +            hoge?: ((null|bool)){ |((null){ null }, (bool){ bool }) }
   755  +            fuga?: (null){ null }
   756  +          }, (#struct){
   757  +            minFoo?: (null){ null }
   758  +            maxFoo?: (null){ null }
   759  +            minBar: (int){ |(*(int){ 30 }, (int){ int }) }
   760  +            maxBar: (int){ |(*(int){ 40 }, (int){ int }) }
   761  +            hoge?: (null){ null }
   762  +            fuga?: ((null|bool)){ |((null){ null }, (bool){ bool }) }
   763  +          }) }
   764         }
   765       }
   766       #Abstract: (#struct){
   767  @@ -185,34 +69,34 @@
   768             }
   769           }) }
   770         resource: (#struct){
   771  -        spec: (#struct){ |(*(#struct){
   772  -            minFoo: (int){ |(*(int){ 10 }, (int){ int }) }
   773  -            maxFoo: (int){ |(*(int){ 20 }, (int){ int }) }
   774  -            minBar?: (null){ null }
   775  -            maxBar?: (null){ null }
   776  -            hoge?: ((null|bool)){ |((null){ null }, (bool){ bool }) }
   777  -            fuga?: (null){ null }
   778  -          }, (#struct){
   779  -            minFoo: (int){ |(*(int){ 10 }, (int){ int }) }
   780  -            maxFoo: (int){ |(*(int){ 20 }, (int){ int }) }
   781  -            minBar?: (null){ null }
   782  -            maxBar?: (null){ null }
   783  -            hoge?: (null){ null }
   784  -            fuga?: ((null|bool)){ |((null){ null }, (bool){ bool }) }
   785  -          }) }
   786  -        _X: (#struct){
   787  -          spec: (#struct){ |(*(#struct){
   788  -              foo: (#struct){
   789  -                min: (int){ |(*(int){ 10 }, (int){ int }) }
   790  -                max: (int){ |(*(int){ 20 }, (int){ int }) }
   791  -              }
   792  -            }, (#struct){
   793  -              bar: (#struct){
   794  -                min: (int){ |(*(int){ 30 }, (int){ int }) }
   795  -                max: (int){ |(*(int){ 40 }, (int){ int }) }
   796  -              }
   797  -            }) }
   798  -        }
   799  +        _X: (#struct){
   800  +          spec: (#struct){ |(*(#struct){
   801  +              foo: (#struct){
   802  +                min: (int){ |(*(int){ 10 }, (int){ int }) }
   803  +                max: (int){ |(*(int){ 20 }, (int){ int }) }
   804  +              }
   805  +            }, (#struct){
   806  +              bar: (#struct){
   807  +                min: (int){ |(*(int){ 30 }, (int){ int }) }
   808  +                max: (int){ |(*(int){ 40 }, (int){ int }) }
   809  +              }
   810  +            }) }
   811  +        }
   812  +        spec: (#struct){ |(*(#struct){
   813  +            minFoo: (int){ |(*(int){ 10 }, (int){ int }) }
   814  +            maxFoo: (int){ |(*(int){ 20 }, (int){ int }) }
   815  +            minBar?: (null){ null }
   816  +            maxBar?: (null){ null }
   817  +            hoge?: ((null|bool)){ |((null){ null }, (bool){ bool }) }
   818  +            fuga?: (null){ null }
   819  +          }, (#struct){
   820  +            minFoo: (int){ |(*(int){ 10 }, (int){ int }) }
   821  +            maxFoo: (int){ |(*(int){ 20 }, (int){ int }) }
   822  +            minBar?: (null){ null }
   823  +            maxBar?: (null){ null }
   824  +            hoge?: (null){ null }
   825  +            fuga?: ((null|bool)){ |((null){ null }, (bool){ bool }) }
   826  +          }) }
   827         }
   828       }
   829       _#Spec: (#struct){ |(*(#struct){
   830  @@ -239,36 +123,36 @@
   831         }
   832       }
   833       _Thing: (#struct){
   834  -      spec: (#struct){ |(*(#struct){
   835  -          minFoo: (int){ |(*(int){ 10 }, (int){ int }) }
   836  -          maxFoo: (int){ |(*(int){ 20 }, (int){ int }) }
   837  -          minBar?: (null){ null }
   838  -          maxBar?: (null){ null }
   839  -          hoge?: ((null|bool)){ |((null){ null }, (bool){ bool }) }
   840  -          fuga?: (null){ null }
   841  -        }, *(#struct){
   842  -          minFoo?: (null){ null }
   843  -          maxFoo?: (null){ null }
   844  -          minBar: (int){ |(*(int){ 30 }, (int){ int }) }
   845  -          maxBar: (int){ |(*(int){ 40 }, (int){ int }) }
   846  -          hoge?: ((null|bool)){ |((null){ null }, (bool){ bool }) }
   847  -          fuga?: (null){ null }
   848  -        }, (#struct){
   849  -          minFoo: (int){ |(*(int){ 10 }, (int){ int }) }
   850  -          maxFoo: (int){ |(*(int){ 20 }, (int){ int }) }
   851  -          minBar?: (null){ null }
   852  -          maxBar?: (null){ null }
   853  -          hoge?: (null){ null }
   854  -          fuga?: ((null|bool)){ |((null){ null }, (bool){ bool }) }
   855  -        }, (#struct){
   856  -          minFoo?: (null){ null }
   857  -          maxFoo?: (null){ null }
   858  -          minBar: (int){ |(*(int){ 30 }, (int){ int }) }
   859  -          maxBar: (int){ |(*(int){ 40 }, (int){ int }) }
   860  -          hoge?: (null){ null }
   861  -          fuga?: ((null|bool)){ |((null){ null }, (bool){ bool }) }
   862  -        }) }
   863         _X: (_){ _ }
   864  +      spec: (#struct){ |(*(#struct){
   865  +          minFoo: (int){ |(*(int){ 10 }, (int){ int }) }
   866  +          maxFoo: (int){ |(*(int){ 20 }, (int){ int }) }
   867  +          minBar?: (null){ null }
   868  +          maxBar?: (null){ null }
   869  +          hoge?: ((null|bool)){ |((null){ null }, (bool){ bool }) }
   870  +          fuga?: (null){ null }
   871  +        }, *(#struct){
   872  +          minFoo?: (null){ null }
   873  +          maxFoo?: (null){ null }
   874  +          minBar: (int){ |(*(int){ 30 }, (int){ int }) }
   875  +          maxBar: (int){ |(*(int){ 40 }, (int){ int }) }
   876  +          hoge?: ((null|bool)){ |((null){ null }, (bool){ bool }) }
   877  +          fuga?: (null){ null }
   878  +        }, (#struct){
   879  +          minFoo: (int){ |(*(int){ 10 }, (int){ int }) }
   880  +          maxFoo: (int){ |(*(int){ 20 }, (int){ int }) }
   881  +          minBar?: (null){ null }
   882  +          maxBar?: (null){ null }
   883  +          hoge?: (null){ null }
   884  +          fuga?: ((null|bool)){ |((null){ null }, (bool){ bool }) }
   885  +        }, (#struct){
   886  +          minFoo?: (null){ null }
   887  +          maxFoo?: (null){ null }
   888  +          minBar: (int){ |(*(int){ 30 }, (int){ int }) }
   889  +          maxBar: (int){ |(*(int){ 40 }, (int){ int }) }
   890  +          hoge?: (null){ null }
   891  +          fuga?: ((null|bool)){ |((null){ null }, (bool){ bool }) }
   892  +        }) }
   893       }
   894       #Constrained: (#struct){
   895         spec: (#struct){ |(*(#struct){
   896  @@ -312,59 +196,38 @@
   897         }
   898       }
   899     }
   900  -  reduced: (_|_){
   901  -    // [eval]
   902  -    Foo: (#struct){
   903  -      spec: (#struct){
   904  -        foo: (#struct){
   905  -          min: (int){ |(*(int){ 10 }, (int){ int }) }
   906  -        }
   907  -      }
   908  -      out: (#struct){ |(*(#struct){
   909  -          _Xspec: (#struct){
   910  -            foo: (#struct){
   911  -              min: (int){ |(*(int){ 10 }, (int){ int }) }
   912  -            }
   913  -          }
   914  -          minFoo: (int){ |(*(int){ 10 }, (int){ int }) }
   915  -          nullFoo: (null){ null }
   916  -        }, (#struct){
   917  -          _Xspec: (#struct){
   918  -            foo: (#struct){
   919  -              min: (int){ |(*(int){ 10 }, (int){ int }) }
   920  -            }
   921  -          }
   922  -          minFoo: (int){ |(*(int){ 10 }, (int){ int }) }
   923  -          nullBar: (null){ null }
   924  -        }) }
   925  -    }
   926  -    Bar: (_|_){
   927  -      // [eval]
   928  +  reduced: (struct){
   929  +    Foo: (#struct){
   930  +      spec: (#struct){
   931  +        foo: (#struct){
   932  +          min: (int){ |(*(int){ 10 }, (int){ int }) }
   933  +        }
   934  +      }
   935  +      out: (#struct){ |(*(#struct){
   936  +          _Xspec: ~(reduced.Foo.spec)
   937  +          minFoo: (int){ |(*(int){ 10 }, (int){ int }) }
   938  +          nullFoo: (null){ null }
   939  +        }, (#struct){
   940  +          _Xspec: ~(reduced.Foo.spec)
   941  +          minFoo: (int){ |(*(int){ 10 }, (int){ int }) }
   942  +          nullBar: (null){ null }
   943  +        }) }
   944  +    }
   945  +    Bar: (#struct){
   946         spec: (#struct){
   947           bar: (#struct){
   948             min: (int){ |(*(int){ 20 }, (int){ int }) }
   949           }
   950         }
   951  -      out: (_|_){
   952  -        // [eval] reduced.Bar.out.minBar: undefined field: min:
   953  -        //     ./input.cue:89:24
   954  -        _Xspec: (#struct){ |(*(#struct){
   955  -            bar: (#struct){
   956  -            }
   957  -            foo: (#struct){
   958  -              min: (int){ |(*(int){ 10 }, (int){ int }) }
   959  -            }
   960  -          }, (#struct){
   961  -            bar: (#struct){
   962  -              min: (int){ |(*(int){ 20 }, (int){ int }) }
   963  -            }
   964  -          }) }
   965  -        minFoo: (int){ |(*(int){ 10 }, (int){ int }) }
   966  -        minBar: (_|_){
   967  -          // [eval] reduced.Bar.out.minBar: undefined field: min:
   968  -          //     ./input.cue:89:24
   969  -        }
   970  -      }
   971  +      out: (#struct){ |(*(#struct){
   972  +          _Xspec: ~(reduced.Bar.spec)
   973  +          minBar: (int){ |(*(int){ 20 }, (int){ int }) }
   974  +          nullFoo: (null){ null }
   975  +        }, (#struct){
   976  +          _Xspec: ~(reduced.Bar.spec)
   977  +          minBar: (int){ |(*(int){ 20 }, (int){ int }) }
   978  +          nullBar: (null){ null }
   979  +        }) }
   980       }
   981       #Obj: (#struct){
   982         spec: (#struct){ |(*(#struct){
   983  -- out/eval --
   984  Errors:
   985  full.Bar.resource.spec: 6 errors in empty disjunction:
   986  full.Bar.resource.spec.minBar: 2 errors in empty disjunction:
   987  full.Bar.resource.spec.minBar: conflicting values null and int (mismatched types null and int):
   988      ./input.cue:3:7
   989      ./input.cue:8:13
   990      ./input.cue:27:10
   991      ./input.cue:43:16
   992      ./input.cue:47:13
   993      ./input.cue:67:20
   994  full.Bar.resource.spec.minFoo: 2 errors in empty disjunction:
   995  full.Bar.resource.spec.minFoo: conflicting values null and 10 (mismatched types null and int):
   996      ./input.cue:3:7
   997      ./input.cue:8:13
   998      ./input.cue:15:16
   999      ./input.cue:31:4
  1000      ./input.cue:32:13
  1001      ./input.cue:52:13
  1002  full.Bar.resource.spec.minFoo: conflicting values null and int (mismatched types null and int):
  1003      ./input.cue:3:7
  1004      ./input.cue:8:13
  1005      ./input.cue:27:10
  1006      ./input.cue:43:16
  1007      ./input.cue:52:13
  1008      ./input.cue:65:20
  1009  full.Bar.resource.spec.minBar: undefined field: min:
  1010      ./input.cue:37:25
  1011  reduced.Bar.out.minBar: undefined field: min:
  1012      ./input.cue:89:24
  1013  
  1014  Result:
  1015  (_|_){
  1016    // [eval]
  1017    full: (_|_){
  1018      // [eval]
  1019      Foo: (#struct){
  1020        spec: (#struct){
  1021          foo: (#struct){
  1022            min: (int){ |(*(int){ 10 }, (int){ int }) }
  1023            max: (int){ |(*(int){ 20 }, (int){ int }) }
  1024          }
  1025        }
  1026        resource: (#struct){
  1027          spec: (#struct){ |(*(#struct){
  1028              minFoo: (int){ |(*(int){ 10 }, (int){ int }) }
  1029              maxFoo: (int){ |(*(int){ 20 }, (int){ int }) }
  1030              minBar?: (null){ null }
  1031              maxBar?: (null){ null }
  1032              hoge?: ((null|bool)){ |((null){ null }, (bool){ bool }) }
  1033              fuga?: (null){ null }
  1034            }, (#struct){
  1035              minFoo: (int){ |(*(int){ 10 }, (int){ int }) }
  1036              maxFoo: (int){ |(*(int){ 20 }, (int){ int }) }
  1037              minBar?: (null){ null }
  1038              maxBar?: (null){ null }
  1039              hoge?: (null){ null }
  1040              fuga?: ((null|bool)){ |((null){ null }, (bool){ bool }) }
  1041            }) }
  1042          _X: (#struct){
  1043            spec: (#struct){ |(*(#struct){
  1044                foo: (#struct){
  1045                  min: (int){ |(*(int){ 10 }, (int){ int }) }
  1046                  max: (int){ |(*(int){ 20 }, (int){ int }) }
  1047                }
  1048              }, (#struct){
  1049                foo: (#struct){
  1050                }
  1051                bar: (#struct){
  1052                  min: (int){ |(*(int){ 30 }, (int){ int }) }
  1053                  max: (int){ |(*(int){ 40 }, (int){ int }) }
  1054                }
  1055              }) }
  1056          }
  1057        }
  1058      }
  1059      Bar: (_|_){
  1060        // [eval]
  1061        spec: (#struct){
  1062          bar: (#struct){
  1063            min: (int){ |(*(int){ 30 }, (int){ int }) }
  1064            max: (int){ |(*(int){ 40 }, (int){ int }) }
  1065          }
  1066        }
  1067        resource: (_|_){
  1068          // [eval]
  1069          spec: (_|_){
  1070            // [eval] full.Bar.resource.spec: 6 errors in empty disjunction:
  1071            // full.Bar.resource.spec.minBar: 2 errors in empty disjunction:
  1072            // full.Bar.resource.spec.minBar: conflicting values null and int (mismatched types null and int):
  1073            //     ./input.cue:3:7
  1074            //     ./input.cue:8:13
  1075            //     ./input.cue:27:10
  1076            //     ./input.cue:43:16
  1077            //     ./input.cue:47:13
  1078            //     ./input.cue:67:20
  1079            // full.Bar.resource.spec.minFoo: 2 errors in empty disjunction:
  1080            // full.Bar.resource.spec.minFoo: conflicting values null and 10 (mismatched types null and int):
  1081            //     ./input.cue:3:7
  1082            //     ./input.cue:8:13
  1083            //     ./input.cue:15:16
  1084            //     ./input.cue:31:4
  1085            //     ./input.cue:32:13
  1086            //     ./input.cue:52:13
  1087            // full.Bar.resource.spec.minFoo: conflicting values null and int (mismatched types null and int):
  1088            //     ./input.cue:3:7
  1089            //     ./input.cue:8:13
  1090            //     ./input.cue:27:10
  1091            //     ./input.cue:43:16
  1092            //     ./input.cue:52:13
  1093            //     ./input.cue:65:20
  1094            // full.Bar.resource.spec.minBar: undefined field: min:
  1095            //     ./input.cue:37:25
  1096            minFoo: (_|_){
  1097              // [eval] full.Bar.resource.spec.minFoo: 2 errors in empty disjunction:
  1098              // full.Bar.resource.spec.minFoo: conflicting values null and 10 (mismatched types null and int):
  1099              //     ./input.cue:3:7
  1100              //     ./input.cue:8:13
  1101              //     ./input.cue:15:16
  1102              //     ./input.cue:31:4
  1103              //     ./input.cue:32:13
  1104              //     ./input.cue:52:13
  1105              // full.Bar.resource.spec.minFoo: conflicting values null and int (mismatched types null and int):
  1106              //     ./input.cue:3:7
  1107              //     ./input.cue:8:13
  1108              //     ./input.cue:27:10
  1109              //     ./input.cue:43:16
  1110              //     ./input.cue:52:13
  1111              //     ./input.cue:65:20
  1112            }
  1113            maxFoo: (_|_){
  1114              // [eval] full.Bar.resource.spec.maxFoo: 2 errors in empty disjunction:
  1115              // full.Bar.resource.spec.maxFoo: conflicting values null and 20 (mismatched types null and int):
  1116              //     ./input.cue:3:7
  1117              //     ./input.cue:8:13
  1118              //     ./input.cue:16:16
  1119              //     ./input.cue:31:4
  1120              //     ./input.cue:33:13
  1121              //     ./input.cue:53:13
  1122              // full.Bar.resource.spec.maxFoo: conflicting values null and int (mismatched types null and int):
  1123              //     ./input.cue:3:7
  1124              //     ./input.cue:8:13
  1125              //     ./input.cue:27:10
  1126              //     ./input.cue:43:16
  1127              //     ./input.cue:53:13
  1128              //     ./input.cue:66:20
  1129            }
  1130            minBar: (_|_){
  1131              // [eval] full.Bar.resource.spec.minBar: undefined field: min:
  1132              //     ./input.cue:37:25
  1133            }
  1134            maxBar: (_|_){
  1135              // [eval] full.Bar.resource.spec.maxBar: undefined field: max:
  1136              //     ./input.cue:38:25
  1137            }
  1138            hoge?: ((null|bool)){ |((null){ null }, (bool){ bool }) }
  1139            fuga?: ((null|bool)){ |((null){ null }, (bool){ bool }) }
  1140          }
  1141          _X: (#struct){
  1142            spec: (#struct){ |(*(#struct){
  1143                bar: (#struct){
  1144                }
  1145                foo: (#struct){
  1146                  min: (int){ |(*(int){ 10 }, (int){ int }) }
  1147                  max: (int){ |(*(int){ 20 }, (int){ int }) }
  1148                }
  1149              }, (#struct){
  1150                bar: (#struct){
  1151                  min: (int){ |(*(int){ 30 }, (int){ int }) }
  1152                  max: (int){ |(*(int){ 40 }, (int){ int }) }
  1153                }
  1154              }) }
  1155          }
  1156        }
  1157      }
  1158      #Abstract: (#struct){
  1159        spec: (#struct){ |(*(#struct){
  1160            foo: (#struct){
  1161              min: (int){ |(*(int){ 10 }, (int){ int }) }
  1162              max: (int){ |(*(int){ 20 }, (int){ int }) }
  1163            }
  1164          }, (#struct){
  1165            bar: (#struct){
  1166              min: (int){ |(*(int){ 30 }, (int){ int }) }
  1167              max: (int){ |(*(int){ 40 }, (int){ int }) }
  1168            }
  1169          }) }
  1170        resource: (#struct){
  1171          spec: (#struct){ |(*(#struct){
  1172              minFoo: (int){ |(*(int){ 10 }, (int){ int }) }
  1173              maxFoo: (int){ |(*(int){ 20 }, (int){ int }) }
  1174              minBar?: (null){ null }
  1175              maxBar?: (null){ null }
  1176              hoge?: ((null|bool)){ |((null){ null }, (bool){ bool }) }
  1177              fuga?: (null){ null }
  1178            }, (#struct){
  1179              minFoo: (int){ |(*(int){ 10 }, (int){ int }) }
  1180              maxFoo: (int){ |(*(int){ 20 }, (int){ int }) }
  1181              minBar?: (null){ null }
  1182              maxBar?: (null){ null }
  1183              hoge?: (null){ null }
  1184              fuga?: ((null|bool)){ |((null){ null }, (bool){ bool }) }
  1185            }) }
  1186          _X: (#struct){
  1187            spec: (#struct){ |(*(#struct){
  1188                foo: (#struct){
  1189                  min: (int){ |(*(int){ 10 }, (int){ int }) }
  1190                  max: (int){ |(*(int){ 20 }, (int){ int }) }
  1191                }
  1192              }, (#struct){
  1193                bar: (#struct){
  1194                  min: (int){ |(*(int){ 30 }, (int){ int }) }
  1195                  max: (int){ |(*(int){ 40 }, (int){ int }) }
  1196                }
  1197              }) }
  1198          }
  1199        }
  1200      }
  1201      _#Spec: (#struct){ |(*(#struct){
  1202          foo: (#struct){
  1203            min: (int){ |(*(int){ 10 }, (int){ int }) }
  1204            max: (int){ |(*(int){ 20 }, (int){ int }) }
  1205          }
  1206        }, (#struct){
  1207          bar: (#struct){
  1208            min: (int){ |(*(int){ 30 }, (int){ int }) }
  1209            max: (int){ |(*(int){ 40 }, (int){ int }) }
  1210          }
  1211        }) }
  1212      _#SpecFoo: (#struct){
  1213        foo: (#struct){
  1214          min: (int){ |(*(int){ 10 }, (int){ int }) }
  1215          max: (int){ |(*(int){ 20 }, (int){ int }) }
  1216        }
  1217      }
  1218      _#SpecBar: (#struct){
  1219        bar: (#struct){
  1220          min: (int){ |(*(int){ 30 }, (int){ int }) }
  1221          max: (int){ |(*(int){ 40 }, (int){ int }) }
  1222        }
  1223      }
  1224      _Thing: (#struct){
  1225        spec: (#struct){ |(*(#struct){
  1226            minFoo: (int){ |(*(int){ 10 }, (int){ int }) }
  1227            maxFoo: (int){ |(*(int){ 20 }, (int){ int }) }
  1228            minBar?: (null){ null }
  1229            maxBar?: (null){ null }
  1230            hoge?: ((null|bool)){ |((null){ null }, (bool){ bool }) }
  1231            fuga?: (null){ null }
  1232          }, *(#struct){
  1233            minFoo?: (null){ null }
  1234            maxFoo?: (null){ null }
  1235            minBar: (int){ |(*(int){ 30 }, (int){ int }) }
  1236            maxBar: (int){ |(*(int){ 40 }, (int){ int }) }
  1237            hoge?: ((null|bool)){ |((null){ null }, (bool){ bool }) }
  1238            fuga?: (null){ null }
  1239          }, (#struct){
  1240            minFoo: (int){ |(*(int){ 10 }, (int){ int }) }
  1241            maxFoo: (int){ |(*(int){ 20 }, (int){ int }) }
  1242            minBar?: (null){ null }
  1243            maxBar?: (null){ null }
  1244            hoge?: (null){ null }
  1245            fuga?: ((null|bool)){ |((null){ null }, (bool){ bool }) }
  1246          }, (#struct){
  1247            minFoo?: (null){ null }
  1248            maxFoo?: (null){ null }
  1249            minBar: (int){ |(*(int){ 30 }, (int){ int }) }
  1250            maxBar: (int){ |(*(int){ 40 }, (int){ int }) }
  1251            hoge?: (null){ null }
  1252            fuga?: ((null|bool)){ |((null){ null }, (bool){ bool }) }
  1253          }) }
  1254        _X: (_){ _ }
  1255      }
  1256      #Constrained: (#struct){
  1257        spec: (#struct){ |(*(#struct){
  1258            minFoo: (int){ |(*(int){ 10 }, (int){ int }) }
  1259            maxFoo: (int){ |(*(int){ 20 }, (int){ int }) }
  1260            minBar?: (null){ null }
  1261            maxBar?: (null){ null }
  1262            hoge?: ((null|bool)){ |((null){ null }, (bool){ bool }) }
  1263            fuga?: (null){ null }
  1264          }, *(#struct){
  1265            minFoo?: (null){ null }
  1266            maxFoo?: (null){ null }
  1267            minBar: (int){ |(*(int){ 30 }, (int){ int }) }
  1268            maxBar: (int){ |(*(int){ 40 }, (int){ int }) }
  1269            hoge?: ((null|bool)){ |((null){ null }, (bool){ bool }) }
  1270            fuga?: (null){ null }
  1271          }, (#struct){
  1272            minFoo: (int){ |(*(int){ 10 }, (int){ int }) }
  1273            maxFoo: (int){ |(*(int){ 20 }, (int){ int }) }
  1274            minBar?: (null){ null }
  1275            maxBar?: (null){ null }
  1276            hoge?: (null){ null }
  1277            fuga?: ((null|bool)){ |((null){ null }, (bool){ bool }) }
  1278          }, (#struct){
  1279            minFoo?: (null){ null }
  1280            maxFoo?: (null){ null }
  1281            minBar: (int){ |(*(int){ 30 }, (int){ int }) }
  1282            maxBar: (int){ |(*(int){ 40 }, (int){ int }) }
  1283            hoge?: (null){ null }
  1284            fuga?: ((null|bool)){ |((null){ null }, (bool){ bool }) }
  1285          }) }
  1286      }
  1287      #Base: (#struct){
  1288        spec: (#struct){
  1289          minFoo?: ((null|int)){ |((null){ null }, (int){ int }) }
  1290          maxFoo?: ((null|int)){ |((null){ null }, (int){ int }) }
  1291          minBar?: ((null|int)){ |((null){ null }, (int){ int }) }
  1292          maxBar?: ((null|int)){ |((null){ null }, (int){ int }) }
  1293          hoge?: ((null|bool)){ |((null){ null }, (bool){ bool }) }
  1294          fuga?: ((null|bool)){ |((null){ null }, (bool){ bool }) }
  1295        }
  1296      }
  1297    }
  1298    reduced: (_|_){
  1299      // [eval]
  1300      Foo: (#struct){
  1301        spec: (#struct){
  1302          foo: (#struct){
  1303            min: (int){ |(*(int){ 10 }, (int){ int }) }
  1304          }
  1305        }
  1306        out: (#struct){ |(*(#struct){
  1307            _Xspec: (#struct){
  1308              foo: (#struct){
  1309                min: (int){ |(*(int){ 10 }, (int){ int }) }
  1310              }
  1311            }
  1312            minFoo: (int){ |(*(int){ 10 }, (int){ int }) }
  1313            nullFoo: (null){ null }
  1314          }, (#struct){
  1315            _Xspec: (#struct){
  1316              foo: (#struct){
  1317                min: (int){ |(*(int){ 10 }, (int){ int }) }
  1318              }
  1319            }
  1320            minFoo: (int){ |(*(int){ 10 }, (int){ int }) }
  1321            nullBar: (null){ null }
  1322          }) }
  1323      }
  1324      Bar: (_|_){
  1325        // [eval]
  1326        spec: (#struct){
  1327          bar: (#struct){
  1328            min: (int){ |(*(int){ 20 }, (int){ int }) }
  1329          }
  1330        }
  1331        out: (_|_){
  1332          // [eval] reduced.Bar.out.minBar: undefined field: min:
  1333          //     ./input.cue:89:24
  1334          _Xspec: (#struct){ |(*(#struct){
  1335              bar: (#struct){
  1336              }
  1337              foo: (#struct){
  1338                min: (int){ |(*(int){ 10 }, (int){ int }) }
  1339              }
  1340            }, (#struct){
  1341              bar: (#struct){
  1342                min: (int){ |(*(int){ 20 }, (int){ int }) }
  1343              }
  1344            }) }
  1345          minFoo: (int){ |(*(int){ 10 }, (int){ int }) }
  1346          minBar: (_|_){
  1347            // [eval] reduced.Bar.out.minBar: undefined field: min:
  1348            //     ./input.cue:89:24
  1349          }
  1350        }
  1351      }
  1352      #Obj: (#struct){
  1353        spec: (#struct){ |(*(#struct){
  1354            foo: (#struct){
  1355              min: (int){ |(*(int){ 10 }, (int){ int }) }
  1356            }
  1357          }, (#struct){
  1358            bar: (#struct){
  1359              min: (int){ |(*(int){ 20 }, (int){ int }) }
  1360            }
  1361          }) }
  1362        out: (#struct){ |(*(#struct){
  1363            _Xspec: (#struct){ |(*(#struct){
  1364                foo: (#struct){
  1365                  min: (int){ |(*(int){ 10 }, (int){ int }) }
  1366                }
  1367              }, (#struct){
  1368                bar: (#struct){
  1369                  min: (int){ |(*(int){ 20 }, (int){ int }) }
  1370                }
  1371              }) }
  1372            minFoo: (int){ |(*(int){ 10 }, (int){ int }) }
  1373            nullFoo: (null){ null }
  1374          }, (#struct){
  1375            _Xspec: (#struct){ |(*(#struct){
  1376                foo: (#struct){
  1377                  min: (int){ |(*(int){ 10 }, (int){ int }) }
  1378                }
  1379              }, (#struct){
  1380                bar: (#struct){
  1381                  min: (int){ |(*(int){ 20 }, (int){ int }) }
  1382                }
  1383              }) }
  1384            minFoo: (int){ |(*(int){ 10 }, (int){ int }) }
  1385            nullBar: (null){ null }
  1386          }) }
  1387      }
  1388      #SpecFoo: (#struct){
  1389        foo: (#struct){
  1390          min: (int){ |(*(int){ 10 }, (int){ int }) }
  1391        }
  1392      }
  1393      #SpecBar: (#struct){
  1394        bar: (#struct){
  1395          min: (int){ |(*(int){ 20 }, (int){ int }) }
  1396        }
  1397      }
  1398      #Out: (#struct){ |(*(#struct){
  1399          minFoo: (int){ int }
  1400          nullFoo: (null){ null }
  1401        }, *(#struct){
  1402          minBar: (int){ int }
  1403          nullFoo: (null){ null }
  1404        }, (#struct){
  1405          minFoo: (int){ int }
  1406          nullBar: (null){ null }
  1407        }, (#struct){
  1408          minBar: (int){ int }
  1409          nullBar: (null){ null }
  1410        }) }
  1411    }
  1412  }