Interface CoProduct3<A,B,C,CP3 extends CoProduct3<A,B,C,?>>
- Type Parameters:
A
- the first possible typeB
- the second possible typeC
- the third possible typeCP3
- the recursive type of this coproduct (used for embedding)
- All Known Implementing Classes:
Choice3
,Choice3._A
,Choice3._B
,Choice3._C
,ComparisonRelation
,ComparisonRelation.Equal
,ComparisonRelation.GreaterThan
,ComparisonRelation.LessThan
,These
,These._A
,These._B
,These.Both
- Functional Interface:
- This is a functional interface and can therefore be used as the assignment target for a lambda expression or method reference.
A generalization of the coproduct of three types.
- See Also:
-
Method Summary
Modifier and TypeMethodDescriptiondefault CoProduct2
<A, B, ? extends CoProduct2<A, B, ?>> Converge this coproduct down to a lower order coproduct by mapping the last possible type into an earlier possible type.default <D> CoProduct4
<A, B, C, D, ? extends CoProduct4<A, B, C, D, ?>> diverge()
Diverge this coproduct by introducing another possible type that it could represent.default <R> R
embed
(Fn1<? super CP3, ? extends R> aFn, Fn1<? super CP3, ? extends R> bFn, Fn1<? super CP3, ? extends R> cFn) Embed this coproduct inside another value; that is, given morphisms from this coproduct toR
, 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) Type-safe convergence requiring a match against all potential types.project()
Project this coproduct onto a product.projectA()
Convenience method for projecting this coproduct onto a product and then extracting the first slot value.projectB()
Convenience method for projecting this coproduct onto a product and then extracting the second slot value.projectC()
Convenience method for projecting this coproduct onto a product and then extracting the third slot value.
-
Method Details
-
match
<R> R match(Fn1<? super A, ? extends R> aFn, Fn1<? super B, ? extends R> bFn, Fn1<? super C, ? extends R> cFn) Type-safe convergence requiring a match against all potential types.- Type Parameters:
R
- result type- Parameters:
aFn
- morphismA -> R
bFn
- morphismB -> R
cFn
- morphismC -> R
- Returns:
- the result of applying the appropriate morphism to this coproduct's unwrapped value
- See Also:
-
diverge
Diverge this coproduct by introducing another possible type that it could represent.- Type Parameters:
D
- the additional possible type of this coproduct- Returns:
- a
CoProduct4
<A, B, C, D> - See Also:
-
converge
default CoProduct2<A,B, converge? extends CoProduct2<A, B, ?>> (Fn1<? super C, ? extends CoProduct2<A, B, ?>> convergenceFn) Converge this coproduct down to a lower order coproduct by mapping the last possible type into an earlier possible type. This is the categorical dual ofCoProduct2.diverge()
, which introduces the typeC
and raises the order from 2 to 3.The following laws hold for any two coproducts of single order difference:
- Cancellation:
coProductN.diverge().converge(CoProductN::a) == coProductN
- Parameters:
convergenceFn
- function from last possible type to earlier type- Returns:
- a
CoProduct2
<A, B>
- Cancellation:
-
project
Project this coproduct onto a product.- Returns:
- a product of the coproduct projection
- See Also:
-
projectA
Convenience method for projecting this coproduct onto a product and then extracting the first slot value.- Returns:
- an optional value representing the projection of the "a" type index
-
projectB
Convenience method for projecting this coproduct onto a product and then extracting the second slot value.- Returns:
- an optional value representing the projection of the "b" type index
-
projectC
Convenience method for projecting this coproduct onto a product and then extracting the third slot value.- Returns:
- an optional value representing the projection of the "c" type index
-
embed
default <R> R embed(Fn1<? super CP3, ? extends R> aFn, Fn1<? super CP3, ? extends R> bFn, Fn1<? super CP3, ? extends R> cFn) Embed this coproduct inside another value; that is, given morphisms from this coproduct toR
, apply the appropriate morphism to this coproduct as a whole. Likematch(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>)
, but without unwrapping the value.- Type Parameters:
R
- result type- Parameters:
aFn
- morphismA v B v C -> R
, applied in theA
casebFn
- morphismA v B v C -> R
, applied in theB
casecFn
- morphismA v B v C -> R
, applied in theC
case- Returns:
- the result of applying the appropriate morphism to this coproduct
-