Interface CoProduct4<A,​B,​C,​D,​CP4 extends CoProduct4<A,​B,​C,​D,​?>>

  • Type Parameters:
    A - the first possible type
    B - the second possible type
    C - the third possible type
    D - the fourth possible type
    CP4 - the recursive type of this coproduct (used for embedding)
    All Known Implementing Classes:
    Choice4, Choice4._A, Choice4._B, Choice4._C, Choice4._D
    Functional Interface:
    This is a functional interface and can therefore be used as the assignment target for a lambda expression or method reference.

    @FunctionalInterface
    public interface CoProduct4<A,​B,​C,​D,​CP4 extends CoProduct4<A,​B,​C,​D,​?>>
    A generalization of the coproduct of four types.
    See Also:
    CoProduct2
    • Method Summary

      All Methods Instance Methods Abstract Methods Default Methods 
      Modifier and Type Method 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.
    • Method Detail

      • match

        <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.
        Type Parameters:
        R - result type
        Parameters:
        aFn - morphism A -> R
        bFn - morphism B -> R
        cFn - morphism C -> R
        dFn - morphism D -> R
        Returns:
        the result of applying the appropriate morphism from whichever type is represented by this coproduct to R
        See Also:
        CoProduct2.match(Fn1, Fn1)
      • diverge

        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.
        Type Parameters:
        E - the additional possible type of this coproduct
        Returns:
        a Coproduct5<A, B, C, D, E>
        See Also:
        CoProduct2.diverge()
      • projectA

        default Maybe<A> 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

        default Maybe<B> 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

        default Maybe<C> 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
      • projectD

        default Maybe<D> projectD()
        Convenience method for projecting this coproduct onto a product and then extracting the fourth slot value.
        Returns:
        an optional value representing the projection of the "d" type index