@NotNull
  @Override
  default DfType join(@NotNull DfType other) {
    if (other == DfType.BOTTOM) return this;
    if (!(other instanceof DfIntegralType)) return DfType.TOP;
    if (((DfIntegralType)other).getLongRangeType() != getLongRangeType()) return DfType.TOP;
    LongRangeSet range = ((DfIntegralType)other).getRange().join(getRange());
    LongRangeSet wideRange = ((DfIntegralType)other).getWideRange().join(getWideRange());
    return DfTypes.range(range, wideRange, getLongRangeType());
  }
@NotNull
  @Override
  default DfType join(@NotNull DfType other)