public static <S, A> Traversal<S, A> traversal( final F<S, A> get1, final F<S, A> get2, final F<S, A> get3, final F<S, A> get4, final F5<A, A, A, A, S, S> set) { return new Traversal<>(PTraversal.pTraversal(get1, get2, get3, get4, set)); }
@Override public F<S, P1<S>> modifyP1F(final F<A, P1<A>> f) { return pTraversal.modifyP1F(f); }
@Override public F<S, Stream<S>> modifyStreamF(final F<A, Stream<A>> f) { return pTraversal.modifyStreamF(f); }
@Override public F<S, Option<S>> modifyOptionF(final F<A, Option<A>> f) { return pTraversal.modifyOptionF(f); }
@Override public F<S, List<S>> modifyListF(final F<A, List<A>> f) { return pTraversal.modifyListF(f); }
@Override public F<S, Promise<S>> modifyPromiseF(final F<A, Promise<A>> f) { return pTraversal.modifyPromiseF(f); }
/** compose a {@link Traversal} with a {@link Traversal} */ public <C> Traversal<S, C> composeTraversal(final Traversal<A, C> other) { return new Traversal<>(pTraversal.composeTraversal(other.pTraversal)); }
@Override public <M> F<S, M> foldMap(final Monoid<M> monoid, final F<A, M> f) { return pTraversal.foldMap(monoid, f); }
@Override public <L> F<S, Either<L, S>> modifyEitherF(final F<A, Either<L, A>> f) { return pTraversal.modifyEitherF(f); }
@Override public <C> F<S, F<C, S>> modifyFunctionF(final F<A, F<C, A>> f) { return pTraversal.modifyFunctionF(f); }
public static <S> Traversal<Either<S, S>, S> codiagonal() { return new Traversal<>(PTraversal.pCodiagonal()); }
public static <S> Traversal<S, S> id() { return new Traversal<>(PTraversal.pId()); }
/** view a {@link Traversal} as a {@link Setter} */ @Override public Setter<S, A> asSetter() { return new Setter<>(pTraversal.asSetter()); }
@Override public <E> F<S, Validation<E, S>> modifyValidationF( Semigroup<E> s, final F<A, Validation<E, A>> f) { return pTraversal.modifyValidationF(s, f); }
@Override public F<S, IO<S>> modifyIOF(final F<A, IO<A>> f) { return pTraversal.modifyIOF(f); }
@Override public F<S, V2<S>> modifyV2F(final F<A, V2<A>> f) { return pTraversal.modifyV2F(f); }
@Override public F<S, Trampoline<S>> modifyTrampolineF(final F<A, Trampoline<A>> f) { return pTraversal.modifyTrampolineF(f); }
/** join two {@link Traversal} with the same target */ public <S1> Traversal<Either<S, S1>, A> sum(final Traversal<S1, A> other) { return new Traversal<>(pTraversal.sum(other.pTraversal)); }
/** compose a {@link Traversal} with a {@link Setter} */ public <C> Setter<S, C> composeSetter(final Setter<A, C> other) { return new Setter<>(pTraversal.composeSetter(other.pSetter)); }