A
- the first possible typeB
- the second possible typeC
- the third possible typeD
- the fourth possible typeCP4
- the recursive type of this coproduct (used for embedding)@FunctionalInterface public interface CoProduct4<A,B,C,D,CP4 extends CoProduct4<A,B,C,D,?>>
CoProduct2
Modifier and Type | Method and Description |
---|---|
default CoProduct3<A,B,C,? extends CoProduct3<A,B,C,?>> |
converge(Fn1<? super D,? extends CoProduct3<A,B,C,?>> convergenceFn)
Converge this coproduct down to a lower order coproduct by mapping the last possible type into an earlier
possible type.
|
default <E> CoProduct5<A,B,C,D,E,? extends CoProduct5<A,B,C,D,E,?>> |
diverge()
Diverge this coproduct by introducing another possible type that it could represent.
|
default <R> R |
embed(Fn1<? super CP4,? extends R> aFn,
Fn1<? super CP4,? extends R> bFn,
Fn1<? super CP4,? extends R> cFn,
Fn1<? super CP4,? extends R> dFn)
Embed this coproduct inside another value; that is, given morphisms from this coproduct to
R , apply
the appropriate morphism to this coproduct as a whole. |
<R> R |
match(Fn1<? super A,? extends R> aFn,
Fn1<? super B,? extends R> bFn,
Fn1<? super C,? extends R> cFn,
Fn1<? super D,? extends R> dFn)
Type-safe convergence requiring a match against all potential types.
|
default Product4<Maybe<A>,Maybe<B>,Maybe<C>,Maybe<D>> |
project()
Project this coproduct onto a product.
|
default Maybe<A> |
projectA()
Convenience method for projecting this coproduct onto a product and then extracting the first slot value.
|
default Maybe<B> |
projectB()
Convenience method for projecting this coproduct onto a product and then extracting the second slot value.
|
default Maybe<C> |
projectC()
Convenience method for projecting this coproduct onto a product and then extracting the third slot value.
|
default Maybe<D> |
projectD()
Convenience method for projecting this coproduct onto a product and then extracting the fourth slot value.
|
<R> R match(Fn1<? super A,? extends R> aFn, Fn1<? super B,? extends R> bFn, Fn1<? super C,? extends R> cFn, Fn1<? super D,? extends R> dFn)
R
- result typeaFn
- morphism A -> R
bFn
- morphism B -> R
cFn
- morphism C -> R
dFn
- morphism D -> R
CoProduct2.match(Fn1, Fn1)
default <E> CoProduct5<A,B,C,D,E,? extends CoProduct5<A,B,C,D,E,?>> diverge()
E
- the additional possible type of this coproductCoProduct2.diverge()
default CoProduct3<A,B,C,? extends CoProduct3<A,B,C,?>> converge(Fn1<? super D,? extends CoProduct3<A,B,C,?>> convergenceFn)
convergenceFn
- function from last possible type to earlier typeCoProduct3
<A, B, C>CoProduct3.converge(com.jnape.palatable.lambda.functions.Fn1<? super C, ? extends com.jnape.palatable.lambda.adt.coproduct.CoProduct2<A, B, ?>>)
default Product4<Maybe<A>,Maybe<B>,Maybe<C>,Maybe<D>> project()
CoProduct2.project()
default Maybe<A> projectA()
default Maybe<B> projectB()
default Maybe<C> projectC()
default Maybe<D> projectD()
default <R> R embed(Fn1<? super CP4,? extends R> aFn, Fn1<? super CP4,? extends R> bFn, Fn1<? super CP4,? extends R> cFn, Fn1<? super CP4,? extends R> dFn)
R
, apply
the appropriate morphism to this coproduct as a whole. Like match(com.jnape.palatable.lambda.functions.Fn1<? super A, ? extends R>, com.jnape.palatable.lambda.functions.Fn1<? super B, ? extends R>, com.jnape.palatable.lambda.functions.Fn1<? super C, ? extends R>, com.jnape.palatable.lambda.functions.Fn1<? super D, ? extends R>)
, but without unwrapping the
value.R
- result typeaFn
- morphism A v B v C v D -> R
, applied in the A
casebFn
- morphism A v B v C v D -> R
, applied in the B
casecFn
- morphism A v B v C v D -> R
, applied in the C
casedFn
- morphism A v B v C v D -> R
, applied in the D
case