-- in.cue -- x0: 5 x1: b5 & 30 b0: 0 b1: b0 & int b2: int & <5.5 b3: <10 & <=5 b4: >=20 & >20 b5: >=21 & >20 b6: int & >5 & <=6 simplifyExpr: { less1: <(<3) less2: <(<=3) less3: <=(<3) less4: <=(<=3) less5: <(!=3) less6: <=(!=3) gtr1: >(>3) gtr2: >(>=3) gtr3: >=(>3) gtr4: >=(>=3) gtr5: >(!=3) gtr6: >=(!=3) lg1: <(>3) lg2: <(>=3) lg3: <=(>3) lg4: <=(>=3) gl1: >(<3) gl2: >(<=3) gl3: >=(<3) gl4: >=(<=3) ne1: !=(!=3) ne2: !=(<3) ne3: !=(<=3) ne4: !=(>3) ne5: !=(>=3) s: string n: number i: int f: float b: bytes basic1: <(i) basic2: >(n) basic3: >=(s) basic4: <=(f) basic5: <=(b) // Do NOT interpret this the same as `!= type`. bne1: !=(s) bne2: !=(n) bne3: !=(n) bne4: !=(i) bne5: !=(b) e1: <(=~"foo") e2: >(null) } -- out/eval/stats -- Leaks: 0 Freed: 53 Reused: 50 Allocs: 3 Retain: 1 Unifications: 53 Conjuncts: 110 Disjuncts: 54 -- out/eval -- Errors: simplifyExpr.e2: cannot use null for bound >: ./in.cue:62:8 Result: (_|_){ // [eval] x0: (int){ 5 } x1: (int){ 30 } b0: (number){ &(>0, <5) } b1: (int){ &(>0, <5, int) } b2: (int){ &(<5.5, int) } b3: (number){ <=5 } b4: (number){ >20 } b5: (number){ >=21 } b6: (int){ 6 } simplifyExpr: (_|_){ // [eval] less1: (number){ <3 } less2: (number){ <3 } less3: (number){ <3 } less4: (number){ <=3 } less5: (number){ number } less6: (number){ number } gtr1: (number){ >3 } gtr2: (number){ >3 } gtr3: (number){ >3 } gtr4: (number){ >=3 } gtr5: (number){ number } gtr6: (number){ number } lg1: (number){ number } lg2: (number){ number } lg3: (number){ number } lg4: (number){ number } gl1: (number){ number } gl2: (number){ number } gl3: (number){ number } gl4: (number){ number } ne1: (int){ 3 } ne2: (number){ >=3 } ne3: (number){ >3 } ne4: (number){ <=3 } ne5: (number){ <3 } s: (string){ string } n: (number){ number } i: (int){ int } f: (float){ float } b: (bytes){ bytes } basic1: (_|_){ // [incomplete] simplifyExpr.basic1: non-concrete value i for bound <: // ./in.cue:48:12 } basic2: (_|_){ // [incomplete] simplifyExpr.basic2: non-concrete value n for bound >: // ./in.cue:49:12 } basic3: (_|_){ // [incomplete] simplifyExpr.basic3: non-concrete value s for bound >=: // ./in.cue:50:13 } basic4: (_|_){ // [incomplete] simplifyExpr.basic4: non-concrete value f for bound <=: // ./in.cue:51:13 } basic5: (_|_){ // [incomplete] simplifyExpr.basic5: non-concrete value b for bound <=: // ./in.cue:52:13 } bne1: (_|_){ // [incomplete] simplifyExpr.bne1: non-concrete value s for bound !=: // ./in.cue:55:11 } bne2: (_|_){ // [incomplete] simplifyExpr.bne2: non-concrete value n for bound !=: // ./in.cue:56:11 } bne3: (_|_){ // [incomplete] simplifyExpr.bne3: non-concrete value n for bound !=: // ./in.cue:57:11 } bne4: (_|_){ // [incomplete] simplifyExpr.bne4: non-concrete value i for bound !=: // ./in.cue:58:11 } bne5: (_|_){ // [incomplete] simplifyExpr.bne5: non-concrete value b for bound !=: // ./in.cue:59:11 } e1: (_|_){ // [incomplete] simplifyExpr.e1: non-concrete value =~"foo" for bound <: // ./in.cue:61:8 } e2: (_|_){ // [eval] simplifyExpr.e2: cannot use null for bound >: // ./in.cue:62:8 } } } -- out/compile -- --- in.cue { x0: 5 x1: (〈0;b5〉 & 30) b0: (<〈0;x0〉 & >0) b1: (〈0;b0〉 & int) b2: (int & <5.5) b3: (<10 & <=5) b4: (>=20 & >20) b5: (>=21 & >20) b6: ((int & >5) & <=6) simplifyExpr: { less1: <<3 less2: <<=3 less3: <=<3 less4: <=<=3 less5: >3 gtr2: >>=3 gtr3: >=>3 gtr4: >=>=3 gtr5: >!=3 gtr6: >=!=3 lg1: <>3 lg2: <>=3 lg3: <=>3 lg4: <=>=3 gl1: ><3 gl2: ><=3 gl3: >=<3 gl4: >=<=3 ne1: !=!=3 ne2: !=<3 ne3: !=<=3 ne4: !=>3 ne5: !=>=3 s: string n: number i: int f: float b: bytes basic1: <〈0;i〉 basic2: >〈0;n〉 basic3: >=〈0;s〉 basic4: <=〈0;f〉 basic5: <=〈0;b〉 bne1: !=〈0;s〉 bne2: !=〈0;n〉 bne3: !=〈0;n〉 bne4: !=〈0;i〉 bne5: !=〈0;b〉 e1: <=~"foo" e2: >null } }