def apply[X, A, B]()

in algebird-core/src/main/scala/com/twitter/algebird/GeneratedProductAlgebra.scala [4776:5450]


  def apply[X, A, B](
      applyX: (A, B) => X,
      unapplyX: X => Option[(A, B)]
  )(implicit asemigroup: Semigroup[A], bsemigroup: Semigroup[B]): Semigroup[X] =
    new Product2Semigroup[X, A, B](applyX, unapplyX)(asemigroup, bsemigroup)

  def apply[X, A, B, C](
      applyX: (A, B, C) => X,
      unapplyX: X => Option[(A, B, C)]
  )(implicit asemigroup: Semigroup[A], bsemigroup: Semigroup[B], csemigroup: Semigroup[C]): Semigroup[X] =
    new Product3Semigroup[X, A, B, C](applyX, unapplyX)(asemigroup, bsemigroup, csemigroup)

  def apply[X, A, B, C, D](applyX: (A, B, C, D) => X, unapplyX: X => Option[(A, B, C, D)])(implicit
      asemigroup: Semigroup[A],
      bsemigroup: Semigroup[B],
      csemigroup: Semigroup[C],
      dsemigroup: Semigroup[D]
  ): Semigroup[X] =
    new Product4Semigroup[X, A, B, C, D](applyX, unapplyX)(asemigroup, bsemigroup, csemigroup, dsemigroup)

  def apply[X, A, B, C, D, E](applyX: (A, B, C, D, E) => X, unapplyX: X => Option[(A, B, C, D, E)])(implicit
      asemigroup: Semigroup[A],
      bsemigroup: Semigroup[B],
      csemigroup: Semigroup[C],
      dsemigroup: Semigroup[D],
      esemigroup: Semigroup[E]
  ): Semigroup[X] =
    new Product5Semigroup[X, A, B, C, D, E](applyX, unapplyX)(
      asemigroup,
      bsemigroup,
      csemigroup,
      dsemigroup,
      esemigroup
    )

  def apply[X, A, B, C, D, E, F](applyX: (A, B, C, D, E, F) => X, unapplyX: X => Option[(A, B, C, D, E, F)])(
      implicit
      asemigroup: Semigroup[A],
      bsemigroup: Semigroup[B],
      csemigroup: Semigroup[C],
      dsemigroup: Semigroup[D],
      esemigroup: Semigroup[E],
      fsemigroup: Semigroup[F]
  ): Semigroup[X] =
    new Product6Semigroup[X, A, B, C, D, E, F](applyX, unapplyX)(
      asemigroup,
      bsemigroup,
      csemigroup,
      dsemigroup,
      esemigroup,
      fsemigroup
    )

  def apply[X, A, B, C, D, E, F, G](
      applyX: (A, B, C, D, E, F, G) => X,
      unapplyX: X => Option[(A, B, C, D, E, F, G)]
  )(implicit
      asemigroup: Semigroup[A],
      bsemigroup: Semigroup[B],
      csemigroup: Semigroup[C],
      dsemigroup: Semigroup[D],
      esemigroup: Semigroup[E],
      fsemigroup: Semigroup[F],
      gsemigroup: Semigroup[G]
  ): Semigroup[X] =
    new Product7Semigroup[X, A, B, C, D, E, F, G](applyX, unapplyX)(
      asemigroup,
      bsemigroup,
      csemigroup,
      dsemigroup,
      esemigroup,
      fsemigroup,
      gsemigroup
    )

  def apply[X, A, B, C, D, E, F, G, H](
      applyX: (A, B, C, D, E, F, G, H) => X,
      unapplyX: X => Option[(A, B, C, D, E, F, G, H)]
  )(implicit
      asemigroup: Semigroup[A],
      bsemigroup: Semigroup[B],
      csemigroup: Semigroup[C],
      dsemigroup: Semigroup[D],
      esemigroup: Semigroup[E],
      fsemigroup: Semigroup[F],
      gsemigroup: Semigroup[G],
      hsemigroup: Semigroup[H]
  ): Semigroup[X] =
    new Product8Semigroup[X, A, B, C, D, E, F, G, H](applyX, unapplyX)(
      asemigroup,
      bsemigroup,
      csemigroup,
      dsemigroup,
      esemigroup,
      fsemigroup,
      gsemigroup,
      hsemigroup
    )

  def apply[X, A, B, C, D, E, F, G, H, I](
      applyX: (A, B, C, D, E, F, G, H, I) => X,
      unapplyX: X => Option[(A, B, C, D, E, F, G, H, I)]
  )(implicit
      asemigroup: Semigroup[A],
      bsemigroup: Semigroup[B],
      csemigroup: Semigroup[C],
      dsemigroup: Semigroup[D],
      esemigroup: Semigroup[E],
      fsemigroup: Semigroup[F],
      gsemigroup: Semigroup[G],
      hsemigroup: Semigroup[H],
      isemigroup: Semigroup[I]
  ): Semigroup[X] =
    new Product9Semigroup[X, A, B, C, D, E, F, G, H, I](applyX, unapplyX)(
      asemigroup,
      bsemigroup,
      csemigroup,
      dsemigroup,
      esemigroup,
      fsemigroup,
      gsemigroup,
      hsemigroup,
      isemigroup
    )

  def apply[X, A, B, C, D, E, F, G, H, I, J](
      applyX: (A, B, C, D, E, F, G, H, I, J) => X,
      unapplyX: X => Option[(A, B, C, D, E, F, G, H, I, J)]
  )(implicit
      asemigroup: Semigroup[A],
      bsemigroup: Semigroup[B],
      csemigroup: Semigroup[C],
      dsemigroup: Semigroup[D],
      esemigroup: Semigroup[E],
      fsemigroup: Semigroup[F],
      gsemigroup: Semigroup[G],
      hsemigroup: Semigroup[H],
      isemigroup: Semigroup[I],
      jsemigroup: Semigroup[J]
  ): Semigroup[X] =
    new Product10Semigroup[X, A, B, C, D, E, F, G, H, I, J](applyX, unapplyX)(
      asemigroup,
      bsemigroup,
      csemigroup,
      dsemigroup,
      esemigroup,
      fsemigroup,
      gsemigroup,
      hsemigroup,
      isemigroup,
      jsemigroup
    )

  def apply[X, A, B, C, D, E, F, G, H, I, J, K](
      applyX: (A, B, C, D, E, F, G, H, I, J, K) => X,
      unapplyX: X => Option[(A, B, C, D, E, F, G, H, I, J, K)]
  )(implicit
      asemigroup: Semigroup[A],
      bsemigroup: Semigroup[B],
      csemigroup: Semigroup[C],
      dsemigroup: Semigroup[D],
      esemigroup: Semigroup[E],
      fsemigroup: Semigroup[F],
      gsemigroup: Semigroup[G],
      hsemigroup: Semigroup[H],
      isemigroup: Semigroup[I],
      jsemigroup: Semigroup[J],
      ksemigroup: Semigroup[K]
  ): Semigroup[X] =
    new Product11Semigroup[X, A, B, C, D, E, F, G, H, I, J, K](applyX, unapplyX)(
      asemigroup,
      bsemigroup,
      csemigroup,
      dsemigroup,
      esemigroup,
      fsemigroup,
      gsemigroup,
      hsemigroup,
      isemigroup,
      jsemigroup,
      ksemigroup
    )

  def apply[X, A, B, C, D, E, F, G, H, I, J, K, L](
      applyX: (A, B, C, D, E, F, G, H, I, J, K, L) => X,
      unapplyX: X => Option[(A, B, C, D, E, F, G, H, I, J, K, L)]
  )(implicit
      asemigroup: Semigroup[A],
      bsemigroup: Semigroup[B],
      csemigroup: Semigroup[C],
      dsemigroup: Semigroup[D],
      esemigroup: Semigroup[E],
      fsemigroup: Semigroup[F],
      gsemigroup: Semigroup[G],
      hsemigroup: Semigroup[H],
      isemigroup: Semigroup[I],
      jsemigroup: Semigroup[J],
      ksemigroup: Semigroup[K],
      lsemigroup: Semigroup[L]
  ): Semigroup[X] =
    new Product12Semigroup[X, A, B, C, D, E, F, G, H, I, J, K, L](applyX, unapplyX)(
      asemigroup,
      bsemigroup,
      csemigroup,
      dsemigroup,
      esemigroup,
      fsemigroup,
      gsemigroup,
      hsemigroup,
      isemigroup,
      jsemigroup,
      ksemigroup,
      lsemigroup
    )

  def apply[X, A, B, C, D, E, F, G, H, I, J, K, L, M](
      applyX: (A, B, C, D, E, F, G, H, I, J, K, L, M) => X,
      unapplyX: X => Option[(A, B, C, D, E, F, G, H, I, J, K, L, M)]
  )(implicit
      asemigroup: Semigroup[A],
      bsemigroup: Semigroup[B],
      csemigroup: Semigroup[C],
      dsemigroup: Semigroup[D],
      esemigroup: Semigroup[E],
      fsemigroup: Semigroup[F],
      gsemigroup: Semigroup[G],
      hsemigroup: Semigroup[H],
      isemigroup: Semigroup[I],
      jsemigroup: Semigroup[J],
      ksemigroup: Semigroup[K],
      lsemigroup: Semigroup[L],
      msemigroup: Semigroup[M]
  ): Semigroup[X] =
    new Product13Semigroup[X, A, B, C, D, E, F, G, H, I, J, K, L, M](applyX, unapplyX)(
      asemigroup,
      bsemigroup,
      csemigroup,
      dsemigroup,
      esemigroup,
      fsemigroup,
      gsemigroup,
      hsemigroup,
      isemigroup,
      jsemigroup,
      ksemigroup,
      lsemigroup,
      msemigroup
    )

  def apply[X, A, B, C, D, E, F, G, H, I, J, K, L, M, N](
      applyX: (A, B, C, D, E, F, G, H, I, J, K, L, M, N) => X,
      unapplyX: X => Option[(A, B, C, D, E, F, G, H, I, J, K, L, M, N)]
  )(implicit
      asemigroup: Semigroup[A],
      bsemigroup: Semigroup[B],
      csemigroup: Semigroup[C],
      dsemigroup: Semigroup[D],
      esemigroup: Semigroup[E],
      fsemigroup: Semigroup[F],
      gsemigroup: Semigroup[G],
      hsemigroup: Semigroup[H],
      isemigroup: Semigroup[I],
      jsemigroup: Semigroup[J],
      ksemigroup: Semigroup[K],
      lsemigroup: Semigroup[L],
      msemigroup: Semigroup[M],
      nsemigroup: Semigroup[N]
  ): Semigroup[X] =
    new Product14Semigroup[X, A, B, C, D, E, F, G, H, I, J, K, L, M, N](
      applyX,
      unapplyX
    )(
      asemigroup,
      bsemigroup,
      csemigroup,
      dsemigroup,
      esemigroup,
      fsemigroup,
      gsemigroup,
      hsemigroup,
      isemigroup,
      jsemigroup,
      ksemigroup,
      lsemigroup,
      msemigroup,
      nsemigroup
    )

  def apply[X, A, B, C, D, E, F, G, H, I, J, K, L, M, N, O](
      applyX: (A, B, C, D, E, F, G, H, I, J, K, L, M, N, O) => X,
      unapplyX: X => Option[(A, B, C, D, E, F, G, H, I, J, K, L, M, N, O)]
  )(implicit
      asemigroup: Semigroup[A],
      bsemigroup: Semigroup[B],
      csemigroup: Semigroup[C],
      dsemigroup: Semigroup[D],
      esemigroup: Semigroup[E],
      fsemigroup: Semigroup[F],
      gsemigroup: Semigroup[G],
      hsemigroup: Semigroup[H],
      isemigroup: Semigroup[I],
      jsemigroup: Semigroup[J],
      ksemigroup: Semigroup[K],
      lsemigroup: Semigroup[L],
      msemigroup: Semigroup[M],
      nsemigroup: Semigroup[N],
      osemigroup: Semigroup[O]
  ): Semigroup[X] =
    new Product15Semigroup[X, A, B, C, D, E, F, G, H, I, J, K, L, M, N, O](
      applyX,
      unapplyX
    )(
      asemigroup,
      bsemigroup,
      csemigroup,
      dsemigroup,
      esemigroup,
      fsemigroup,
      gsemigroup,
      hsemigroup,
      isemigroup,
      jsemigroup,
      ksemigroup,
      lsemigroup,
      msemigroup,
      nsemigroup,
      osemigroup
    )

  def apply[X, A, B, C, D, E, F, G, H, I, J, K, L, M, N, O, P](
      applyX: (A, B, C, D, E, F, G, H, I, J, K, L, M, N, O, P) => X,
      unapplyX: X => Option[(A, B, C, D, E, F, G, H, I, J, K, L, M, N, O, P)]
  )(implicit
      asemigroup: Semigroup[A],
      bsemigroup: Semigroup[B],
      csemigroup: Semigroup[C],
      dsemigroup: Semigroup[D],
      esemigroup: Semigroup[E],
      fsemigroup: Semigroup[F],
      gsemigroup: Semigroup[G],
      hsemigroup: Semigroup[H],
      isemigroup: Semigroup[I],
      jsemigroup: Semigroup[J],
      ksemigroup: Semigroup[K],
      lsemigroup: Semigroup[L],
      msemigroup: Semigroup[M],
      nsemigroup: Semigroup[N],
      osemigroup: Semigroup[O],
      psemigroup: Semigroup[P]
  ): Semigroup[X] =
    new Product16Semigroup[X, A, B, C, D, E, F, G, H, I, J, K, L, M, N, O, P](
      applyX,
      unapplyX
    )(
      asemigroup,
      bsemigroup,
      csemigroup,
      dsemigroup,
      esemigroup,
      fsemigroup,
      gsemigroup,
      hsemigroup,
      isemigroup,
      jsemigroup,
      ksemigroup,
      lsemigroup,
      msemigroup,
      nsemigroup,
      osemigroup,
      psemigroup
    )

  def apply[X, A, B, C, D, E, F, G, H, I, J, K, L, M, N, O, P, Q](
      applyX: (A, B, C, D, E, F, G, H, I, J, K, L, M, N, O, P, Q) => X,
      unapplyX: X => Option[(A, B, C, D, E, F, G, H, I, J, K, L, M, N, O, P, Q)]
  )(implicit
      asemigroup: Semigroup[A],
      bsemigroup: Semigroup[B],
      csemigroup: Semigroup[C],
      dsemigroup: Semigroup[D],
      esemigroup: Semigroup[E],
      fsemigroup: Semigroup[F],
      gsemigroup: Semigroup[G],
      hsemigroup: Semigroup[H],
      isemigroup: Semigroup[I],
      jsemigroup: Semigroup[J],
      ksemigroup: Semigroup[K],
      lsemigroup: Semigroup[L],
      msemigroup: Semigroup[M],
      nsemigroup: Semigroup[N],
      osemigroup: Semigroup[O],
      psemigroup: Semigroup[P],
      qsemigroup: Semigroup[Q]
  ): Semigroup[X] =
    new Product17Semigroup[X, A, B, C, D, E, F, G, H, I, J, K, L, M, N, O, P, Q](
      applyX,
      unapplyX
    )(
      asemigroup,
      bsemigroup,
      csemigroup,
      dsemigroup,
      esemigroup,
      fsemigroup,
      gsemigroup,
      hsemigroup,
      isemigroup,
      jsemigroup,
      ksemigroup,
      lsemigroup,
      msemigroup,
      nsemigroup,
      osemigroup,
      psemigroup,
      qsemigroup
    )

  def apply[X, A, B, C, D, E, F, G, H, I, J, K, L, M, N, O, P, Q, R](
      applyX: (A, B, C, D, E, F, G, H, I, J, K, L, M, N, O, P, Q, R) => X,
      unapplyX: X => Option[(A, B, C, D, E, F, G, H, I, J, K, L, M, N, O, P, Q, R)]
  )(implicit
      asemigroup: Semigroup[A],
      bsemigroup: Semigroup[B],
      csemigroup: Semigroup[C],
      dsemigroup: Semigroup[D],
      esemigroup: Semigroup[E],
      fsemigroup: Semigroup[F],
      gsemigroup: Semigroup[G],
      hsemigroup: Semigroup[H],
      isemigroup: Semigroup[I],
      jsemigroup: Semigroup[J],
      ksemigroup: Semigroup[K],
      lsemigroup: Semigroup[L],
      msemigroup: Semigroup[M],
      nsemigroup: Semigroup[N],
      osemigroup: Semigroup[O],
      psemigroup: Semigroup[P],
      qsemigroup: Semigroup[Q],
      rsemigroup: Semigroup[R]
  ): Semigroup[X] =
    new Product18Semigroup[X, A, B, C, D, E, F, G, H, I, J, K, L, M, N, O, P, Q, R](
      applyX,
      unapplyX
    )(
      asemigroup,
      bsemigroup,
      csemigroup,
      dsemigroup,
      esemigroup,
      fsemigroup,
      gsemigroup,
      hsemigroup,
      isemigroup,
      jsemigroup,
      ksemigroup,
      lsemigroup,
      msemigroup,
      nsemigroup,
      osemigroup,
      psemigroup,
      qsemigroup,
      rsemigroup
    )

  def apply[X, A, B, C, D, E, F, G, H, I, J, K, L, M, N, O, P, Q, R, S](
      applyX: (A, B, C, D, E, F, G, H, I, J, K, L, M, N, O, P, Q, R, S) => X,
      unapplyX: X => Option[(A, B, C, D, E, F, G, H, I, J, K, L, M, N, O, P, Q, R, S)]
  )(implicit
      asemigroup: Semigroup[A],
      bsemigroup: Semigroup[B],
      csemigroup: Semigroup[C],
      dsemigroup: Semigroup[D],
      esemigroup: Semigroup[E],
      fsemigroup: Semigroup[F],
      gsemigroup: Semigroup[G],
      hsemigroup: Semigroup[H],
      isemigroup: Semigroup[I],
      jsemigroup: Semigroup[J],
      ksemigroup: Semigroup[K],
      lsemigroup: Semigroup[L],
      msemigroup: Semigroup[M],
      nsemigroup: Semigroup[N],
      osemigroup: Semigroup[O],
      psemigroup: Semigroup[P],
      qsemigroup: Semigroup[Q],
      rsemigroup: Semigroup[R],
      ssemigroup: Semigroup[S]
  ): Semigroup[X] =
    new Product19Semigroup[X, A, B, C, D, E, F, G, H, I, J, K, L, M, N, O, P, Q, R, S](
      applyX,
      unapplyX
    )(
      asemigroup,
      bsemigroup,
      csemigroup,
      dsemigroup,
      esemigroup,
      fsemigroup,
      gsemigroup,
      hsemigroup,
      isemigroup,
      jsemigroup,
      ksemigroup,
      lsemigroup,
      msemigroup,
      nsemigroup,
      osemigroup,
      psemigroup,
      qsemigroup,
      rsemigroup,
      ssemigroup
    )

  def apply[X, A, B, C, D, E, F, G, H, I, J, K, L, M, N, O, P, Q, R, S, T](
      applyX: (A, B, C, D, E, F, G, H, I, J, K, L, M, N, O, P, Q, R, S, T) => X,
      unapplyX: X => Option[(A, B, C, D, E, F, G, H, I, J, K, L, M, N, O, P, Q, R, S, T)]
  )(implicit
      asemigroup: Semigroup[A],
      bsemigroup: Semigroup[B],
      csemigroup: Semigroup[C],
      dsemigroup: Semigroup[D],
      esemigroup: Semigroup[E],
      fsemigroup: Semigroup[F],
      gsemigroup: Semigroup[G],
      hsemigroup: Semigroup[H],
      isemigroup: Semigroup[I],
      jsemigroup: Semigroup[J],
      ksemigroup: Semigroup[K],
      lsemigroup: Semigroup[L],
      msemigroup: Semigroup[M],
      nsemigroup: Semigroup[N],
      osemigroup: Semigroup[O],
      psemigroup: Semigroup[P],
      qsemigroup: Semigroup[Q],
      rsemigroup: Semigroup[R],
      ssemigroup: Semigroup[S],
      tsemigroup: Semigroup[T]
  ): Semigroup[X] =
    new Product20Semigroup[X, A, B, C, D, E, F, G, H, I, J, K, L, M, N, O, P, Q, R, S, T](
      applyX,
      unapplyX
    )(
      asemigroup,
      bsemigroup,
      csemigroup,
      dsemigroup,
      esemigroup,
      fsemigroup,
      gsemigroup,
      hsemigroup,
      isemigroup,
      jsemigroup,
      ksemigroup,
      lsemigroup,
      msemigroup,
      nsemigroup,
      osemigroup,
      psemigroup,
      qsemigroup,
      rsemigroup,
      ssemigroup,
      tsemigroup
    )

  def apply[X, A, B, C, D, E, F, G, H, I, J, K, L, M, N, O, P, Q, R, S, T, U](
      applyX: (A, B, C, D, E, F, G, H, I, J, K, L, M, N, O, P, Q, R, S, T, U) => X,
      unapplyX: X => Option[(A, B, C, D, E, F, G, H, I, J, K, L, M, N, O, P, Q, R, S, T, U)]
  )(implicit
      asemigroup: Semigroup[A],
      bsemigroup: Semigroup[B],
      csemigroup: Semigroup[C],
      dsemigroup: Semigroup[D],
      esemigroup: Semigroup[E],
      fsemigroup: Semigroup[F],
      gsemigroup: Semigroup[G],
      hsemigroup: Semigroup[H],
      isemigroup: Semigroup[I],
      jsemigroup: Semigroup[J],
      ksemigroup: Semigroup[K],
      lsemigroup: Semigroup[L],
      msemigroup: Semigroup[M],
      nsemigroup: Semigroup[N],
      osemigroup: Semigroup[O],
      psemigroup: Semigroup[P],
      qsemigroup: Semigroup[Q],
      rsemigroup: Semigroup[R],
      ssemigroup: Semigroup[S],
      tsemigroup: Semigroup[T],
      usemigroup: Semigroup[U]
  ): Semigroup[X] =
    new Product21Semigroup[X, A, B, C, D, E, F, G, H, I, J, K, L, M, N, O, P, Q, R, S, T, U](
      applyX,
      unapplyX
    )(
      asemigroup,
      bsemigroup,
      csemigroup,
      dsemigroup,
      esemigroup,
      fsemigroup,
      gsemigroup,
      hsemigroup,
      isemigroup,
      jsemigroup,
      ksemigroup,
      lsemigroup,
      msemigroup,
      nsemigroup,
      osemigroup,
      psemigroup,
      qsemigroup,
      rsemigroup,
      ssemigroup,
      tsemigroup,
      usemigroup
    )

  def apply[X, A, B, C, D, E, F, G, H, I, J, K, L, M, N, O, P, Q, R, S, T, U, V](
      applyX: (A, B, C, D, E, F, G, H, I, J, K, L, M, N, O, P, Q, R, S, T, U, V) => X,
      unapplyX: X => Option[(A, B, C, D, E, F, G, H, I, J, K, L, M, N, O, P, Q, R, S, T, U, V)]
  )(implicit
      asemigroup: Semigroup[A],
      bsemigroup: Semigroup[B],
      csemigroup: Semigroup[C],
      dsemigroup: Semigroup[D],
      esemigroup: Semigroup[E],
      fsemigroup: Semigroup[F],
      gsemigroup: Semigroup[G],
      hsemigroup: Semigroup[H],
      isemigroup: Semigroup[I],
      jsemigroup: Semigroup[J],
      ksemigroup: Semigroup[K],
      lsemigroup: Semigroup[L],
      msemigroup: Semigroup[M],
      nsemigroup: Semigroup[N],
      osemigroup: Semigroup[O],
      psemigroup: Semigroup[P],
      qsemigroup: Semigroup[Q],
      rsemigroup: Semigroup[R],
      ssemigroup: Semigroup[S],
      tsemigroup: Semigroup[T],
      usemigroup: Semigroup[U],
      vsemigroup: Semigroup[V]
  ): Semigroup[X] =
    new Product22Semigroup[X, A, B, C, D, E, F, G, H, I, J, K, L, M, N, O, P, Q, R, S, T, U, V](
      applyX,
      unapplyX
    )(
      asemigroup,
      bsemigroup,
      csemigroup,
      dsemigroup,
      esemigroup,
      fsemigroup,
      gsemigroup,
      hsemigroup,
      isemigroup,
      jsemigroup,
      ksemigroup,
      lsemigroup,
      msemigroup,
      nsemigroup,
      osemigroup,
      psemigroup,
      qsemigroup,
      rsemigroup,
      ssemigroup,
      tsemigroup,
      usemigroup,
      vsemigroup
    )

}

trait ProductMonoids {