code: public <E extends Exception> boolean setMiddleIf(final M newMiddle, Try.BiPredicate<? super Triple<L, M, R>, ? super M, E> predicate) throws E {
          if (predicate.test(this, newMiddle)) {
              this.middle = newMiddle;
              return true;
          }
  
          return false;
      }
docs: Set to the specified <code>newMiddle</code> and returns <code>true</code>
  if <code>predicate</code> returns true. Otherwise returns
  <code>false</code> without setting the value to new value.
  
  @param newMiddle
  @param predicate - the first parameter is current pair, the second
  parameter is the <code>newMiddle</code>
  @return