code: @Override
      public <R> Option<R> flatMap(ThrowableFunction1<T, Option<R>> function) {
          try {
              return function.apply(value);
          }
          catch (Throwable ex) {
              throw new BrokenFunctionException("Caught exception while applying function", ex);
          }
      }
docs: Returns an Option consisting of the result of applying the given function to the current value.
  
  @since 1.2