TODO: the new evaluator currently does not normalize disjuncts.
It needs to be determined under which circumstances is desirable.
The redundancy that remains from not normalizing can be useful.

#name: normalization
#evalFull
-- in.cue --
a: string | string
b: *1 | *int
c: *1.0 | *float
-- out/def --
a: string
b: int
c: float
-- out/legacy-debug --
<0>{a: string, b: int, c: float}
-- out/compile --
--- in.cue
{
  a: (string|string)
  b: (*1|*int)
  c: (*1.0|*float)
}
-- out/eval/stats --
Leaks:  0
Freed:  10
Reused: 6
Allocs: 4
Retain: 0

Unifications: 4
Conjuncts:    10
Disjuncts:    10
-- out/eval --
(struct){
  a: (string){ string }
  b: (int){ |(*(int){ 1 }, *(int){ int }) }
  c: (float){ |(*(float){ 1.0 }, *(float){ float }) }
}