@Override
    default @Nullable TypeConstraint tryJoinExactly(TypeConstraint other) {
      if (other == BOTTOM || this.equals(other)) return this;
      if (other == TOP) return other;
      return new Constrained(Collections.singleton(this), Collections.emptySet()).tryJoinExactly(other);
    }
@Override
    default @Nullable TypeConstraint tryJoinExactly(TypeConstraint other)