anchor.diff:    }
   }
   
  -class UnionType extends AdvancedType {
  +class UnionType extends ConstraintType {
     List<ConstraintType> types;
     
     UnionType(List<ConstraintType> this.types);
  
positive.code: 
  abstract class ConstraintType {
    ConstraintType replace(Expression expression, ConstraintType type);
    
    ConstraintType addProperty(Name name, ConstraintType type);
    
    ConstraintType union(ConstraintType type);
  }
  
  abstract class AdvancedType extends ConstraintType {
    
  }
  
  class ObjectType extends AdvancedType {
    Map<Name, ConstraintType> properties = <Name, ConstraintType>{};
    
    ConstraintType type;
  
negative.code:   ConstraintType union(ConstraintType type) {
      if (type == this) 
        return this;
      else if (type is ObjectType)
        return type.union(this);
      else if (type is UnionType)
        return type.union(this);
  