Class Tuple4<_1,_2,_3,_4>
- java.lang.Object
-
- com.jnape.palatable.lambda.adt.hlist.HList
-
- com.jnape.palatable.lambda.adt.hlist.HList.HCons<_1,Tuple3<_2,_3,_4>>
-
- com.jnape.palatable.lambda.adt.hlist.Tuple4<_1,_2,_3,_4>
-
- Type Parameters:
_1- The first slot element type_2- The second slot element type_3- The third slot element type_4- The fourth slot element type
- All Implemented Interfaces:
Product2<_1,_2>,Product3<_1,_2,_3>,Product4<_1,_2,_3,_4>,Applicative<_4,Tuple4<_1,_2,_3,?>>,Bifunctor<_3,_4,Tuple4<_1,_2,?,?>>,BoundedBifunctor<_3,_4,java.lang.Object,java.lang.Object,Tuple4<_1,_2,?,?>>,Functor<_4,Tuple4<_1,_2,_3,?>>,Monad<_4,Tuple4<_1,_2,_3,?>>,MonadRec<_4,Tuple4<_1,_2,_3,?>>,Traversable<_4,Tuple4<_1,_2,_3,?>>,java.util.Map.Entry<_1,_2>
public class Tuple4<_1,_2,_3,_4> extends HList.HCons<_1,Tuple3<_2,_3,_4>> implements Product4<_1,_2,_3,_4>, MonadRec<_4,Tuple4<_1,_2,_3,?>>, Bifunctor<_3,_4,Tuple4<_1,_2,?,?>>, Traversable<_4,Tuple4<_1,_2,_3,?>>
A 4-element tuple product type, implemented as a specialized HList. Supports random access.
-
-
Nested Class Summary
-
Nested classes/interfaces inherited from class com.jnape.palatable.lambda.adt.hlist.HList
HList.HCons<Head,Tail extends HList>, HList.HNil
-
-
Method Summary
All Methods Static Methods Instance Methods Concrete Methods Modifier and Type Method Description _1_1()Retrieve the first element._2_2()Retrieve the second element._3_3()Retrieve the third element._4_4()Retrieve the fourth element.<_3Prime,_4Prime>
Tuple4<_1,_2,_3Prime,_4Prime>biMap(Fn1<? super _3,? extends _3Prime> lFn, Fn1<? super _4,? extends _4Prime> rFn)Dually map covariantly over both the left and right parameters.<_3Prime> Tuple4<_1,_2,_3Prime,_4>biMapL(Fn1<? super _3,? extends _3Prime> fn)Covariantly map over the left parameter.<_4Prime> Tuple4<_1,_2,_3,_4Prime>biMapR(Fn1<? super _4,? extends _4Prime> fn)Covariantly map over the right parameter.<_0> Tuple5<_0,_1,_2,_3,_4>cons(_0 _0)Cons an element onto the front of this HList.<_4Prime> Tuple4<_1,_2,_3,_4Prime>discardL(Applicative<_4Prime,Tuple4<_1,_2,_3,?>> appB)Sequence both thisApplicativeandappB, discarding thisApplicative'sresult and returningappB.<_4Prime> Tuple4<_1,_2,_3,_4>discardR(Applicative<_4Prime,Tuple4<_1,_2,_3,?>> appB)Sequence both thisApplicativeandappB, discardingappB'sresult and returning thisApplicative.static <A> Tuple4<A,A,A,A>fill(A a)Given a value of typeA, produced an instance of this tuple with each slot set to that value.<_4Prime> Tuple4<_1,_2,_3,_4Prime>flatMap(Fn1<? super _4,? extends Monad<_4Prime,Tuple4<_1,_2,_3,?>>> f)Chain dependent computations that may continue or short-circuit based on previous results.<_4Prime> Tuple4<_1,_2,_3,_4Prime>fmap(Fn1<? super _4,? extends _4Prime> fn)Covariantly transmute this functor's parameter using the given mapping function.static <A> Maybe<Tuple4<A,A,A,A>>fromIterable(java.lang.Iterable<A> as)Tuple3<_1,_2,_3>init()Tuple4<_2,_1,_3,_4>invert()Rotate the first two slots of this product.<_4Prime> Lazy<Tuple4<_1,_2,_3,_4Prime>>lazyZip(Lazy<? extends Applicative<Fn1<? super _4,? extends _4Prime>,Tuple4<_1,_2,_3,?>>> lazyAppFn)Given alazyinstance of this applicative over a mapping function, "zip" the two instances together using whatever application semantics the current applicative supports.<_4Prime> Tuple4<_1,_2,_3,_4Prime>pure(_4Prime _4Prime)Lift the valuebinto this applicative functor.static <_1,_2,_3>
Pure<Tuple4<_1,_2,_3,?>>pureTuple(_1 _1, _2 _2, _3 _3)Tuple4<_2,_3,_1,_4>rotateL3()Rotate the first three values of this product one slot to the left.Tuple4<_2,_3,_4,_1>rotateL4()Rotate the first four values of this product one slot to the left.Tuple4<_3,_1,_2,_4>rotateR3()Rotate the first three values of this product one slot to the right.Tuple4<_4,_1,_2,_3>rotateR4()Rotate the first four values of this product one slot to the right.<_5> Tuple5<_1,_2,_3,_4,_5>snoc(_5 _5)Snoc an element onto the back of thisTuple4.<_4Prime> Tuple4<_1,_2,_3,_4Prime>trampolineM(Fn1<? super _4,? extends MonadRec<RecursiveResult<_4,_4Prime>,Tuple4<_1,_2,_3,?>>> fn)Given some operation yielding aRecursiveResultinside thisMonadRec, internally trampoline the operation until it yields aterminationinstruction.<_4Prime,App extends Applicative<?,App>,TravB extends Traversable<_4Prime,Tuple4<_1,_2,_3,?>>,AppTrav extends Applicative<TravB,App>>
AppTravtraverse(Fn1<? super _4,? extends Applicative<_4Prime,App>> fn, Fn1<? super TravB,? extends AppTrav> pure)Applyfnto each element of this traversable from left to right, and collapse the results into a single resulting applicative, potentially with the assistance of the applicative's pure function.<_4Prime> Tuple4<_1,_2,_3,_4Prime>zip(Applicative<Fn1<? super _4,? extends _4Prime>,Tuple4<_1,_2,_3,?>> appFn)Given another instance of this applicative over a mapping function, "zip" the two instances together using whatever application semantics the current applicative supports.-
Methods inherited from class com.jnape.palatable.lambda.adt.hlist.HList.HCons
equals, hashCode, head, tail
-
Methods inherited from class com.jnape.palatable.lambda.adt.hlist.HList
cons, nil, singletonHList, toString, tuple, tuple, tuple, tuple, tuple, tuple, tuple
-
Methods inherited from class java.lang.Object
clone, finalize, getClass, notify, notifyAll, wait, wait, wait
-
-
-
-
Method Detail
-
cons
public <_0> Tuple5<_0,_1,_2,_3,_4> cons(_0 _0)
Cons an element onto the front of this HList.
-
snoc
public <_5> Tuple5<_1,_2,_3,_4,_5> snoc(_5 _5)
Snoc an element onto the back of thisTuple4.- Type Parameters:
_5- the new last element type- Parameters:
_5- the new last element- Returns:
- the new
Tuple5
-
_1
public _1 _1()
Retrieve the first element.
-
_2
public _2 _2()
Retrieve the second element.
-
_3
public _3 _3()
Retrieve the third element.
-
_4
public _4 _4()
Retrieve the fourth element.
-
rotateL4
public Tuple4<_2,_3,_4,_1> rotateL4()
Rotate the first four values of this product one slot to the left.
-
rotateR4
public Tuple4<_4,_1,_2,_3> rotateR4()
Rotate the first four values of this product one slot to the right.
-
rotateL3
public Tuple4<_2,_3,_1,_4> rotateL3()
Rotate the first three values of this product one slot to the left.
-
rotateR3
public Tuple4<_3,_1,_2,_4> rotateR3()
Rotate the first three values of this product one slot to the right.
-
fmap
public <_4Prime> Tuple4<_1,_2,_3,_4Prime> fmap(Fn1<? super _4,? extends _4Prime> fn)
Covariantly transmute this functor's parameter using the given mapping function. Generally this method is specialized to return an instance of the class implementing Functor.- Specified by:
fmapin interfaceApplicative<_1,_2>- Specified by:
fmapin interfaceFunctor<_1,_2>- Specified by:
fmapin interfaceMonad<_1,_2>- Specified by:
fmapin interfaceMonadRec<_1,_2>- Specified by:
fmapin interfaceTraversable<_1,_2>- Type Parameters:
_4Prime- the new parameter type- Parameters:
fn- the mapping function- Returns:
- a functor over B (the new parameter type)
-
biMapL
public <_3Prime> Tuple4<_1,_2,_3Prime,_4> biMapL(Fn1<? super _3,? extends _3Prime> fn)
Covariantly map over the left parameter.- Specified by:
biMapLin interfaceBifunctor<_1,_2,_3>- Specified by:
biMapLin interfaceBoundedBifunctor<_3,_4,java.lang.Object,java.lang.Object,Tuple4<_1,_2,?,?>>- Type Parameters:
_3Prime- the new left parameter type- Parameters:
fn- the mapping function- Returns:
- a bifunctor over C (the new left parameter) and B (the same right parameter)
-
biMapR
public <_4Prime> Tuple4<_1,_2,_3,_4Prime> biMapR(Fn1<? super _4,? extends _4Prime> fn)
Covariantly map over the right parameter. For all bifunctors that are also functors, it should hold thatbiMapR(f) == fmap(f).- Specified by:
biMapRin interfaceBifunctor<_1,_2,_3>- Specified by:
biMapRin interfaceBoundedBifunctor<_3,_4,java.lang.Object,java.lang.Object,Tuple4<_1,_2,?,?>>- Type Parameters:
_4Prime- the new right parameter type- Parameters:
fn- the mapping function- Returns:
- a bifunctor over A (the same left parameter) and C (the new right parameter)
-
biMap
public <_3Prime,_4Prime> Tuple4<_1,_2,_3Prime,_4Prime> biMap(Fn1<? super _3,? extends _3Prime> lFn, Fn1<? super _4,? extends _4Prime> rFn)
Dually map covariantly over both the left and right parameters. This is isomorphic tobiMapL(lFn).biMapR(rFn).- Specified by:
biMapin interfaceBifunctor<_1,_2,_3>- Specified by:
biMapin interfaceBoundedBifunctor<_3,_4,java.lang.Object,java.lang.Object,Tuple4<_1,_2,?,?>>- Type Parameters:
_3Prime- the new left parameter type_4Prime- the new right parameter type- Parameters:
lFn- the left parameter mapping functionrFn- the right parameter mapping function- Returns:
- a bifunctor over C (the new left parameter type) and D (the new right parameter type)
-
pure
public <_4Prime> Tuple4<_1,_2,_3,_4Prime> pure(_4Prime _4Prime)
Lift the valuebinto this applicative functor.- Specified by:
purein interfaceApplicative<_1,_2>- Specified by:
purein interfaceMonad<_1,_2>- Specified by:
purein interfaceMonadRec<_1,_2>- Type Parameters:
_4Prime- the type of the returned applicative's parameter- Parameters:
_4Prime- the value- Returns:
- an instance of this applicative over b
-
zip
public <_4Prime> Tuple4<_1,_2,_3,_4Prime> zip(Applicative<Fn1<? super _4,? extends _4Prime>,Tuple4<_1,_2,_3,?>> appFn)
Given another instance of this applicative over a mapping function, "zip" the two instances together using whatever application semantics the current applicative supports.
-
lazyZip
public <_4Prime> Lazy<Tuple4<_1,_2,_3,_4Prime>> lazyZip(Lazy<? extends Applicative<Fn1<? super _4,? extends _4Prime>,Tuple4<_1,_2,_3,?>>> lazyAppFn)
Given alazyinstance of this applicative over a mapping function, "zip" the two instances together using whatever application semantics the current applicative supports. This is useful for applicatives that support lazy evaluation and early termination.- Specified by:
lazyZipin interfaceApplicative<_1,_2>- Specified by:
lazyZipin interfaceMonad<_1,_2>- Specified by:
lazyZipin interfaceMonadRec<_1,_2>- Type Parameters:
_4Prime- the resulting applicative parameter type- Parameters:
lazyAppFn- the lazy other applicative instance- Returns:
- the mapped applicative
- See Also:
Maybe,Either
-
discardL
public <_4Prime> Tuple4<_1,_2,_3,_4Prime> discardL(Applicative<_4Prime,Tuple4<_1,_2,_3,?>> appB)
Sequence both thisApplicativeandappB, discarding thisApplicative'sresult and returningappB. This is generally useful for sequentially performing side-effects.
-
discardR
public <_4Prime> Tuple4<_1,_2,_3,_4> discardR(Applicative<_4Prime,Tuple4<_1,_2,_3,?>> appB)
Sequence both thisApplicativeandappB, discardingappB'sresult and returning thisApplicative. This is generally useful for sequentially performing side-effects.
-
flatMap
public <_4Prime> Tuple4<_1,_2,_3,_4Prime> flatMap(Fn1<? super _4,? extends Monad<_4Prime,Tuple4<_1,_2,_3,?>>> f)
Chain dependent computations that may continue or short-circuit based on previous results.
-
trampolineM
public <_4Prime> Tuple4<_1,_2,_3,_4Prime> trampolineM(Fn1<? super _4,? extends MonadRec<RecursiveResult<_4,_4Prime>,Tuple4<_1,_2,_3,?>>> fn)
Given some operation yielding aRecursiveResultinside thisMonadRec, internally trampoline the operation until it yields aterminationinstruction.Stack-safety depends on implementations guaranteeing that the growth of the call stack is a constant factor independent of the number of invocations of the operation. For various examples of how this can be achieved in stereotypical circumstances, see the referenced types.
- Specified by:
trampolineMin interfaceMonadRec<_1,_2>- Type Parameters:
_4Prime- the ultimate resulting carrier type- Parameters:
fn- the function to internally trampoline- Returns:
- the trampolined
MonadRec - See Also:
for a basic implementation,for a implementation,for an implementation leveraging an already stack-safe,for a implementation
-
traverse
public <_4Prime,App extends Applicative<?,App>,TravB extends Traversable<_4Prime,Tuple4<_1,_2,_3,?>>,AppTrav extends Applicative<TravB,App>> AppTrav traverse(Fn1<? super _4,? extends Applicative<_4Prime,App>> fn, Fn1<? super TravB,? extends AppTrav> pure)
Applyfnto each element of this traversable from left to right, and collapse the results into a single resulting applicative, potentially with the assistance of the applicative's pure function.- Specified by:
traversein interfaceTraversable<_1,_2>- Type Parameters:
_4Prime- the resulting element typeApp- the result applicative typeTravB- this Traversable instance over BAppTrav- the full inferred resulting type from the traversal- Parameters:
fn- the function to applypure- the applicative pure function- Returns:
- the traversed Traversable, wrapped inside an applicative
-
init
public Tuple3<_1,_2,_3> init()
- Returns:
- The
Tuple3<_1, _2, _3> representing all but the last element
-
fill
public static <A> Tuple4<A,A,A,A> fill(A a)
Given a value of typeA, produced an instance of this tuple with each slot set to that value.- Type Parameters:
A- the value type- Parameters:
a- the value to fill the tuple with- Returns:
- the filled tuple
- See Also:
Tuple2.fill(A)
-
fromIterable
public static <A> Maybe<Tuple4<A,A,A,A>> fromIterable(java.lang.Iterable<A> as)
Returnjustthe first four elements from the givenIterable, ornothingif there are less than four elements.- Type Parameters:
A- theIterableelement type- Parameters:
as- theIterable- Returns:
Maybethe first four elements of the givenIterable
-
pureTuple
public static <_1,_2,_3> Pure<Tuple4<_1,_2,_3,?>> pureTuple(_1 _1, _2 _2, _3 _3)
- Type Parameters:
_1- the head element type_2- the second element type_3- the third element type- Parameters:
_1- the head element_2- the second element_3- the third element- Returns:
- the
Pureinstance
-
-