public List<InferredType> materializeWithoutUnions() {
   List<InferredType> allOptions = new ArrayList<InferredType>();
   for (InferredType branch : unionTypes) {
     allOptions.addAll(branch.materializeWithoutUnions());
   }
   return allOptions;
 }
 public List<InferredType> materializeWithoutUnions() {
   List<InferredType> newArrays = new ArrayList<InferredType>();
   for (InferredType subtype : bodyType.materializeWithoutUnions()) {
     newArrays.add(new ArrayType(subtype));
   }
   return newArrays;
 }