@NotNull
  @Contract(pure = true)
  public <T> T selectNotNull(@NotNull T left, @NotNull T right) {
    return isLeft() ? left : right;
  }
@NotNull
  @Contract(pure = true)
  public <T> T selectNotNull(@NotNull T left, @NotNull T right)