package fj.data.vector; import fj.F0; import fj.F2; import fj.F3; import fj.F4; import fj.F5; import fj.P; import fj.P1; /** * Functions across vectors. */ public final class V { private V() { } /** * Puts elements in a vector-2. * * @param a1 An element to put in a vector. * @param a2 An element to put in a vector. * @return The vector-2. */ public static <A> V2<A> v(final A a1, final A a2) { return V2.p(P.p(a1, a2)); } /** * Puts elements in a vector-2. * * @param a1 An element to put in a vector. * @param a2 An element to put in a vector. * @return The vector-2. */ public static <A> V2<A> v(final F0<A> a1, final F0<A> a2) { return V2.p(P.lazy(a1, a2)); } /** * Returns a function that puts elements in a vector-2. * * @return A function that puts elements in a vector-2. */ public static <A> F2<A, A, V2<A>> v2() { return V::v; } /** * Puts elements in a vector-3. * * @param a1 An element to put in a vector. * @param a2 An element to put in a vector. * @param a3 An element to put in a vector. * @return The vector-3. */ public static <A> V3<A> v(final A a1, final A a2, final A a3) { return V3.p(P.p(a1, a2, a3)); } /** * Puts elements in a vector-3. * * @param a1 An element to put in a vector. * @param a2 An element to put in a vector. * @param a3 An element to put in a vector. * @return The vector-3. */ public static <A> V3<A> v(final P1<A> a1, final F0<A> a2, final F0<A> a3) { return V3.cons(a1, v(a2, a3)); } /** * Returns a function that puts elements in a vector-3. * * @return A function that puts elements in a vector-3. */ public static <A> F3<A, A, A, V3<A>> v3() { return V::v; } /** * Puts elements in a vector-4. * * @param a1 An element to put in a vector. * @param a2 An element to put in a vector. * @param a3 An element to put in a vector. * @param a4 An element to put in a vector. * @return The vector-4. */ public static <A> V4<A> v(final A a1, final A a2, final A a3, final A a4) { return V4.p(P.p(a1, a2, a3, a4)); } /** * Puts elements in a vector-4. * * @param a1 An element to put in a vector. * @param a2 An element to put in a vector. * @param a3 An element to put in a vector. * @param a4 An element to put in a vector. * @return The vector-4. */ public static <A> V4<A> v(final P1<A> a1, final P1<A> a2, final F0<A> a3, final F0<A> a4) { return V4.cons(a1, v(a2, a3, a4)); } /** * Returns a function that puts elements in a vector-4. * * @return A function that puts elements in a vector-4. */ public static <A> F4<A, A, A, A, V4<A>> v4() { return V::v; } /** * Puts elements in a vector-5. * * @param a1 An element to put in a vector. * @param a2 An element to put in a vector. * @param a3 An element to put in a vector. * @param a4 An element to put in a vector. * @param a5 An element to put in a vector. * @return The vector-5. */ public static <A> V5<A> v(final A a1, final A a2, final A a3, final A a4, final A a5) { return V5.p(P.p(a1, a2, a3, a4, a5)); } /** * Puts elements in a vector-5. * * @param a1 An element to put in a vector. * @param a2 An element to put in a vector. * @param a3 An element to put in a vector. * @param a4 An element to put in a vector. * @param a5 An element to put in a vector. * @return The vector-5. */ public static <A> V5<A> v(final P1<A> a1, final P1<A> a2, final P1<A> a3, final F0<A> a4, final F0<A> a5) { return V5.cons(a1, v(a2, a3, a4, a5)); } /** * Returns a function that puts elements in a vector-5. * * @return A function that puts elements in a vector-5. */ public static <A> F5<A, A, A, A, A, V5<A>> v5() { return V::v; } }