code: @SafeVarargs
      public static <T, X extends Throwable> Try<T, X> fromPublisher(final Publisher<T> pub, final Class<X>... classes) {
          return new Try<T,X>(LazyEither.fromPublisher(pub).<X>mapLeft(t->{
              if (classes.length == 0)
                  return (X) t;
              val error = Stream.of(classes)
                  .filter(c -> c.isAssignableFrom(t.getClass()))
                  .findFirst();
              if (error.isPresent())
                  return (X) t;
              else
                  throw ExceptionSoftener.throwSoftenedException(t);
          }),classes);
      }
docs: Construct a Try  that contains a single value extracted from the supplied reactive-streams Publisher, will catch any Exceptions
  of the provided types
  <pre>
  {@code
  ReactiveSeq<Integer> stream =  Spouts.of(1,2,3);
  
  Try<Integer,Throwable> recover = Try.fromPublisher(stream, RuntimeException.class);
  
  Try[1]
  
  }
  </pre>
  
  @param pub Publisher to extract value from
  @return Try populated with first value from Publisher