@Nullable
  @Contract(value = "!null, !null -> !null; null, null -> null", pure = true)
  public <T> T select(@Nullable T left, @Nullable T right) {
    return isLeft() ? left : right;
  }
@Nullable
  @Contract(value = "!null, !null -> !null; null, null -> null", pure = true)
  public <T> T select(@Nullable T left, @Nullable T right)