anchor.diff:  
   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 {
  +class ObjectType extends ConstraintType {
     Map<Name, ConstraintType> properties = <Name, ConstraintType>{};
     
     ConstraintType type;
  
positive.code:   ConstraintType union(ConstraintType type) {
      if (type == this) 
        return this;
      else if (type is AdvancedType)
        return type.union(this);
      else if (type is UnionType)
        return type.union(this);
  
negative.code:   }
  }
  
  class UnionType extends ConstraintType {
    List<ConstraintType> types;
    
    UnionType(List<ConstraintType> this.types);
  