From ff7d750d978e9db883fe470eb936160568981cdd Mon Sep 17 00:00:00 2001 From: "Dr. Carsten Leue" Date: Thu, 20 Jul 2023 23:22:02 +0200 Subject: [PATCH] fix: auto generate SequenceTuple for ReaderIOEither Signed-off-by: Dr. Carsten Leue --- cli/contextreaderioeither.go | 88 +++++++- context/readerioeither/gen.go | 52 ++++- context/readerioeither/generic/gen.go | 312 +++++++++++++++++++++++++- 3 files changed, 446 insertions(+), 6 deletions(-) diff --git a/cli/contextreaderioeither.go b/cli/contextreaderioeither.go index dcb25bb..270c2dc 100644 --- a/cli/contextreaderioeither.go +++ b/cli/contextreaderioeither.go @@ -25,6 +25,88 @@ func generateNestedCallbacks(i, total int) string { return buf.String() } +func generateContextReaderIOEitherSequenceTuple(f, fg *os.File, i int) { + // tuple type + tuple := tupleType(i) + + // non-generic version + // generic version + fmt.Fprintf(f, "\n// SequenceTuple%d converts a [T.Tuple%d] of [ReaderIOEither] into a [ReaderIOEither] of a [T.Tuple%d].\n", i, i, i) + fmt.Fprintf(f, "func SequenceTuple%d[", i) + for j := 0; j < i; j++ { + if j > 0 { + fmt.Fprintf(f, ", ") + } + fmt.Fprintf(f, "T%d", j+1) + } + fmt.Fprintf(f, " any](t T.Tuple%d[", i) + for j := 0; j < i; j++ { + if j > 0 { + fmt.Fprintf(f, ", ") + } + fmt.Fprintf(f, "ReaderIOEither[T%d]", j+1) + } + fmt.Fprintf(f, "]) ReaderIOEither[%s] {\n", tuple) + fmt.Fprintf(f, " return G.SequenceTuple%d[ReaderIOEither[%s]](t)\n", i, tuple) + fmt.Fprintf(f, "}\n") + + // generic version + fmt.Fprintf(fg, "\n// SequenceTuple%d converts a [T.Tuple%d] of readers into a reader of a [T.Tuple%d].\n", i, i, i) + fmt.Fprintf(fg, "func SequenceTuple%d[\n", i) + + fmt.Fprintf(fg, " GR_TUPLE%d ~func(context.Context) GIO_TUPLE%d,\n", i, i) + for j := 0; j < i; j++ { + fmt.Fprintf(fg, " GR_T%d ~func(context.Context) GIO_T%d,\n", j+1, j+1) + } + + fmt.Fprintf(fg, " GIO_TUPLE%d ~func() E.Either[error, %s],\n", i, tuple) + for j := 0; j < i; j++ { + fmt.Fprintf(fg, " GIO_T%d ~func() E.Either[error, T%d],\n", j+1, j+1) + } + + for j := 0; j < i; j++ { + fmt.Fprintf(fg, " T%d", j+1) + if j < i-1 { + fmt.Fprintf(fg, ",\n") + } + } + fmt.Fprintf(fg, " any](t T.Tuple%d[", i) + for j := 0; j < i; j++ { + if j > 0 { + fmt.Fprintf(fg, ", ") + } + fmt.Fprintf(fg, "GR_T%d", j+1) + } + fmt.Fprintf(fg, "]) GR_TUPLE%d {\n", i) + fmt.Fprintf(fg, " return A.SequenceTuple%d(\n", i) + // map call + var cr string + if i > 1 { + cb := generateNestedCallbacks(1, i) + cio := fmt.Sprintf("func() E.Either[error, %s]", cb) + cr = fmt.Sprintf("func(context.Context) %s", cio) + } else { + cr = fmt.Sprintf("GR_TUPLE%d", i) + } + fmt.Fprintf(fg, " Map[GR_T%d, %s, GIO_T%d],\n", 1, cr, 1) + // the apply calls + for j := 1; j < i; j++ { + if j < i-1 { + cb := generateNestedCallbacks(j+1, i) + cio := fmt.Sprintf("func() E.Either[error, %s]", cb) + cr = fmt.Sprintf("func(context.Context) %s", cio) + } else { + cr = fmt.Sprintf("GR_TUPLE%d", i) + } + fmt.Fprintf(fg, " Ap[%s, func(context.Context) func() E.Either[error, %s], GR_T%d],\n", cr, generateNestedCallbacks(j, i), j+1) + } + // raw parameters + fmt.Fprintf(fg, " t,\n") + + fmt.Fprintf(fg, " )\n") + fmt.Fprintf(fg, "}\n") +} + func generateContextReaderIOEitherSequenceT(f, fg *os.File, i int) { // tuple type tuple := tupleType(i) @@ -108,11 +190,7 @@ func generateContextReaderIOEitherSequenceT(f, fg *os.File, i int) { for j := 0; j < i; j++ { fmt.Fprintf(fg, " t%d,\n", j+1) } - // // map - // Ap[GB, func(E) func() ET.Either[L, func(C) T.Tuple3[A, B, C]], func(E) func() ET.Either[L, func(B) func(C) T.Tuple3[A, B, C]], GIOB, func() ET.Either[L, func(C) T.Tuple3[A, B, C]], func() ET.Either[L, func(B) func(C) T.Tuple3[A, B, C]], E, L, B, func(C) T.Tuple3[A, B, C]], - // Ap[GC, GTABC, func(E) func() ET.Either[L, func(C) T.Tuple3[A, B, C]], GIOC, GIOTABC, func() ET.Either[L, func(C) T.Tuple3[A, B, C]], E, L, C, T.Tuple3[A, B, C]], - // a, b, c, fmt.Fprintf(fg, " )\n") fmt.Fprintf(fg, "}\n") } @@ -222,6 +300,8 @@ import ( generateContextReaderIOEitherEitherize(f, fg, i) // sequenceT generateContextReaderIOEitherSequenceT(f, fg, i) + // sequenceTuple + generateContextReaderIOEitherSequenceTuple(f, fg, i) } return nil diff --git a/context/readerioeither/gen.go b/context/readerioeither/gen.go index 19b2dd8..423cb98 100644 --- a/context/readerioeither/gen.go +++ b/context/readerioeither/gen.go @@ -2,7 +2,7 @@ package readerioeither // Code generated by go generate; DO NOT EDIT. // This file was generated by robots at -// 2023-07-20 16:14:27.3155005 +0200 CEST m=+0.020795301 +// 2023-07-20 23:13:55.3160763 +0200 CEST m=+0.008374301 import ( "context" @@ -28,6 +28,11 @@ func SequenceT1[T1 any](t1 ReaderIOEither[T1]) ReaderIOEither[T.Tuple1[T1]] { return G.SequenceT1[ReaderIOEither[T.Tuple1[T1]]](t1) } +// SequenceTuple1 converts a [T.Tuple1] of [ReaderIOEither] into a [ReaderIOEither] of a [T.Tuple1]. +func SequenceTuple1[T1 any](t T.Tuple1[ReaderIOEither[T1]]) ReaderIOEither[T.Tuple1[T1]] { + return G.SequenceTuple1[ReaderIOEither[T.Tuple1[T1]]](t) +} + // Eitherize2 converts a function with 2 parameters returning a tuple into a function with 2 parameters returning a [ReaderIOEither[R]] // The inverse function is [Uneitherize2] func Eitherize2[F ~func(context.Context, T0, T1) (R, error), T0, T1, R any](f F) func(T0, T1) ReaderIOEither[R] { @@ -39,6 +44,11 @@ func SequenceT2[T1, T2 any](t1 ReaderIOEither[T1], t2 ReaderIOEither[T2]) Reader return G.SequenceT2[ReaderIOEither[T.Tuple2[T1, T2]]](t1, t2) } +// SequenceTuple2 converts a [T.Tuple2] of [ReaderIOEither] into a [ReaderIOEither] of a [T.Tuple2]. +func SequenceTuple2[T1, T2 any](t T.Tuple2[ReaderIOEither[T1], ReaderIOEither[T2]]) ReaderIOEither[T.Tuple2[T1, T2]] { + return G.SequenceTuple2[ReaderIOEither[T.Tuple2[T1, T2]]](t) +} + // Eitherize3 converts a function with 3 parameters returning a tuple into a function with 3 parameters returning a [ReaderIOEither[R]] // The inverse function is [Uneitherize3] func Eitherize3[F ~func(context.Context, T0, T1, T2) (R, error), T0, T1, T2, R any](f F) func(T0, T1, T2) ReaderIOEither[R] { @@ -50,6 +60,11 @@ func SequenceT3[T1, T2, T3 any](t1 ReaderIOEither[T1], t2 ReaderIOEither[T2], t3 return G.SequenceT3[ReaderIOEither[T.Tuple3[T1, T2, T3]]](t1, t2, t3) } +// SequenceTuple3 converts a [T.Tuple3] of [ReaderIOEither] into a [ReaderIOEither] of a [T.Tuple3]. +func SequenceTuple3[T1, T2, T3 any](t T.Tuple3[ReaderIOEither[T1], ReaderIOEither[T2], ReaderIOEither[T3]]) ReaderIOEither[T.Tuple3[T1, T2, T3]] { + return G.SequenceTuple3[ReaderIOEither[T.Tuple3[T1, T2, T3]]](t) +} + // Eitherize4 converts a function with 4 parameters returning a tuple into a function with 4 parameters returning a [ReaderIOEither[R]] // The inverse function is [Uneitherize4] func Eitherize4[F ~func(context.Context, T0, T1, T2, T3) (R, error), T0, T1, T2, T3, R any](f F) func(T0, T1, T2, T3) ReaderIOEither[R] { @@ -61,6 +76,11 @@ func SequenceT4[T1, T2, T3, T4 any](t1 ReaderIOEither[T1], t2 ReaderIOEither[T2] return G.SequenceT4[ReaderIOEither[T.Tuple4[T1, T2, T3, T4]]](t1, t2, t3, t4) } +// SequenceTuple4 converts a [T.Tuple4] of [ReaderIOEither] into a [ReaderIOEither] of a [T.Tuple4]. +func SequenceTuple4[T1, T2, T3, T4 any](t T.Tuple4[ReaderIOEither[T1], ReaderIOEither[T2], ReaderIOEither[T3], ReaderIOEither[T4]]) ReaderIOEither[T.Tuple4[T1, T2, T3, T4]] { + return G.SequenceTuple4[ReaderIOEither[T.Tuple4[T1, T2, T3, T4]]](t) +} + // Eitherize5 converts a function with 5 parameters returning a tuple into a function with 5 parameters returning a [ReaderIOEither[R]] // The inverse function is [Uneitherize5] func Eitherize5[F ~func(context.Context, T0, T1, T2, T3, T4) (R, error), T0, T1, T2, T3, T4, R any](f F) func(T0, T1, T2, T3, T4) ReaderIOEither[R] { @@ -72,6 +92,11 @@ func SequenceT5[T1, T2, T3, T4, T5 any](t1 ReaderIOEither[T1], t2 ReaderIOEither return G.SequenceT5[ReaderIOEither[T.Tuple5[T1, T2, T3, T4, T5]]](t1, t2, t3, t4, t5) } +// SequenceTuple5 converts a [T.Tuple5] of [ReaderIOEither] into a [ReaderIOEither] of a [T.Tuple5]. +func SequenceTuple5[T1, T2, T3, T4, T5 any](t T.Tuple5[ReaderIOEither[T1], ReaderIOEither[T2], ReaderIOEither[T3], ReaderIOEither[T4], ReaderIOEither[T5]]) ReaderIOEither[T.Tuple5[T1, T2, T3, T4, T5]] { + return G.SequenceTuple5[ReaderIOEither[T.Tuple5[T1, T2, T3, T4, T5]]](t) +} + // Eitherize6 converts a function with 6 parameters returning a tuple into a function with 6 parameters returning a [ReaderIOEither[R]] // The inverse function is [Uneitherize6] func Eitherize6[F ~func(context.Context, T0, T1, T2, T3, T4, T5) (R, error), T0, T1, T2, T3, T4, T5, R any](f F) func(T0, T1, T2, T3, T4, T5) ReaderIOEither[R] { @@ -83,6 +108,11 @@ func SequenceT6[T1, T2, T3, T4, T5, T6 any](t1 ReaderIOEither[T1], t2 ReaderIOEi return G.SequenceT6[ReaderIOEither[T.Tuple6[T1, T2, T3, T4, T5, T6]]](t1, t2, t3, t4, t5, t6) } +// SequenceTuple6 converts a [T.Tuple6] of [ReaderIOEither] into a [ReaderIOEither] of a [T.Tuple6]. +func SequenceTuple6[T1, T2, T3, T4, T5, T6 any](t T.Tuple6[ReaderIOEither[T1], ReaderIOEither[T2], ReaderIOEither[T3], ReaderIOEither[T4], ReaderIOEither[T5], ReaderIOEither[T6]]) ReaderIOEither[T.Tuple6[T1, T2, T3, T4, T5, T6]] { + return G.SequenceTuple6[ReaderIOEither[T.Tuple6[T1, T2, T3, T4, T5, T6]]](t) +} + // Eitherize7 converts a function with 7 parameters returning a tuple into a function with 7 parameters returning a [ReaderIOEither[R]] // The inverse function is [Uneitherize7] func Eitherize7[F ~func(context.Context, T0, T1, T2, T3, T4, T5, T6) (R, error), T0, T1, T2, T3, T4, T5, T6, R any](f F) func(T0, T1, T2, T3, T4, T5, T6) ReaderIOEither[R] { @@ -94,6 +124,11 @@ func SequenceT7[T1, T2, T3, T4, T5, T6, T7 any](t1 ReaderIOEither[T1], t2 Reader return G.SequenceT7[ReaderIOEither[T.Tuple7[T1, T2, T3, T4, T5, T6, T7]]](t1, t2, t3, t4, t5, t6, t7) } +// SequenceTuple7 converts a [T.Tuple7] of [ReaderIOEither] into a [ReaderIOEither] of a [T.Tuple7]. +func SequenceTuple7[T1, T2, T3, T4, T5, T6, T7 any](t T.Tuple7[ReaderIOEither[T1], ReaderIOEither[T2], ReaderIOEither[T3], ReaderIOEither[T4], ReaderIOEither[T5], ReaderIOEither[T6], ReaderIOEither[T7]]) ReaderIOEither[T.Tuple7[T1, T2, T3, T4, T5, T6, T7]] { + return G.SequenceTuple7[ReaderIOEither[T.Tuple7[T1, T2, T3, T4, T5, T6, T7]]](t) +} + // Eitherize8 converts a function with 8 parameters returning a tuple into a function with 8 parameters returning a [ReaderIOEither[R]] // The inverse function is [Uneitherize8] func Eitherize8[F ~func(context.Context, T0, T1, T2, T3, T4, T5, T6, T7) (R, error), T0, T1, T2, T3, T4, T5, T6, T7, R any](f F) func(T0, T1, T2, T3, T4, T5, T6, T7) ReaderIOEither[R] { @@ -105,6 +140,11 @@ func SequenceT8[T1, T2, T3, T4, T5, T6, T7, T8 any](t1 ReaderIOEither[T1], t2 Re return G.SequenceT8[ReaderIOEither[T.Tuple8[T1, T2, T3, T4, T5, T6, T7, T8]]](t1, t2, t3, t4, t5, t6, t7, t8) } +// SequenceTuple8 converts a [T.Tuple8] of [ReaderIOEither] into a [ReaderIOEither] of a [T.Tuple8]. +func SequenceTuple8[T1, T2, T3, T4, T5, T6, T7, T8 any](t T.Tuple8[ReaderIOEither[T1], ReaderIOEither[T2], ReaderIOEither[T3], ReaderIOEither[T4], ReaderIOEither[T5], ReaderIOEither[T6], ReaderIOEither[T7], ReaderIOEither[T8]]) ReaderIOEither[T.Tuple8[T1, T2, T3, T4, T5, T6, T7, T8]] { + return G.SequenceTuple8[ReaderIOEither[T.Tuple8[T1, T2, T3, T4, T5, T6, T7, T8]]](t) +} + // Eitherize9 converts a function with 9 parameters returning a tuple into a function with 9 parameters returning a [ReaderIOEither[R]] // The inverse function is [Uneitherize9] func Eitherize9[F ~func(context.Context, T0, T1, T2, T3, T4, T5, T6, T7, T8) (R, error), T0, T1, T2, T3, T4, T5, T6, T7, T8, R any](f F) func(T0, T1, T2, T3, T4, T5, T6, T7, T8) ReaderIOEither[R] { @@ -116,6 +156,11 @@ func SequenceT9[T1, T2, T3, T4, T5, T6, T7, T8, T9 any](t1 ReaderIOEither[T1], t return G.SequenceT9[ReaderIOEither[T.Tuple9[T1, T2, T3, T4, T5, T6, T7, T8, T9]]](t1, t2, t3, t4, t5, t6, t7, t8, t9) } +// SequenceTuple9 converts a [T.Tuple9] of [ReaderIOEither] into a [ReaderIOEither] of a [T.Tuple9]. +func SequenceTuple9[T1, T2, T3, T4, T5, T6, T7, T8, T9 any](t T.Tuple9[ReaderIOEither[T1], ReaderIOEither[T2], ReaderIOEither[T3], ReaderIOEither[T4], ReaderIOEither[T5], ReaderIOEither[T6], ReaderIOEither[T7], ReaderIOEither[T8], ReaderIOEither[T9]]) ReaderIOEither[T.Tuple9[T1, T2, T3, T4, T5, T6, T7, T8, T9]] { + return G.SequenceTuple9[ReaderIOEither[T.Tuple9[T1, T2, T3, T4, T5, T6, T7, T8, T9]]](t) +} + // Eitherize10 converts a function with 10 parameters returning a tuple into a function with 10 parameters returning a [ReaderIOEither[R]] // The inverse function is [Uneitherize10] func Eitherize10[F ~func(context.Context, T0, T1, T2, T3, T4, T5, T6, T7, T8, T9) (R, error), T0, T1, T2, T3, T4, T5, T6, T7, T8, T9, R any](f F) func(T0, T1, T2, T3, T4, T5, T6, T7, T8, T9) ReaderIOEither[R] { @@ -126,3 +171,8 @@ func Eitherize10[F ~func(context.Context, T0, T1, T2, T3, T4, T5, T6, T7, T8, T9 func SequenceT10[T1, T2, T3, T4, T5, T6, T7, T8, T9, T10 any](t1 ReaderIOEither[T1], t2 ReaderIOEither[T2], t3 ReaderIOEither[T3], t4 ReaderIOEither[T4], t5 ReaderIOEither[T5], t6 ReaderIOEither[T6], t7 ReaderIOEither[T7], t8 ReaderIOEither[T8], t9 ReaderIOEither[T9], t10 ReaderIOEither[T10]) ReaderIOEither[T.Tuple10[T1, T2, T3, T4, T5, T6, T7, T8, T9, T10]] { return G.SequenceT10[ReaderIOEither[T.Tuple10[T1, T2, T3, T4, T5, T6, T7, T8, T9, T10]]](t1, t2, t3, t4, t5, t6, t7, t8, t9, t10) } + +// SequenceTuple10 converts a [T.Tuple10] of [ReaderIOEither] into a [ReaderIOEither] of a [T.Tuple10]. +func SequenceTuple10[T1, T2, T3, T4, T5, T6, T7, T8, T9, T10 any](t T.Tuple10[ReaderIOEither[T1], ReaderIOEither[T2], ReaderIOEither[T3], ReaderIOEither[T4], ReaderIOEither[T5], ReaderIOEither[T6], ReaderIOEither[T7], ReaderIOEither[T8], ReaderIOEither[T9], ReaderIOEither[T10]]) ReaderIOEither[T.Tuple10[T1, T2, T3, T4, T5, T6, T7, T8, T9, T10]] { + return G.SequenceTuple10[ReaderIOEither[T.Tuple10[T1, T2, T3, T4, T5, T6, T7, T8, T9, T10]]](t) +} diff --git a/context/readerioeither/generic/gen.go b/context/readerioeither/generic/gen.go index bb6e8ff..da54123 100644 --- a/context/readerioeither/generic/gen.go +++ b/context/readerioeither/generic/gen.go @@ -2,7 +2,7 @@ package generic // Code generated by go generate; DO NOT EDIT. // This file was generated by robots at -// 2023-07-20 16:14:27.3155005 +0200 CEST m=+0.020795301 +// 2023-07-20 23:13:55.3160763 +0200 CEST m=+0.008374301 import ( "context" @@ -40,6 +40,19 @@ func SequenceT1[ ) } +// SequenceTuple1 converts a [T.Tuple1] of readers into a reader of a [T.Tuple1]. +func SequenceTuple1[ + GR_TUPLE1 ~func(context.Context) GIO_TUPLE1, + GR_T1 ~func(context.Context) GIO_T1, + GIO_TUPLE1 ~func() E.Either[error, T.Tuple1[T1]], + GIO_T1 ~func() E.Either[error, T1], + T1 any](t T.Tuple1[GR_T1]) GR_TUPLE1 { + return A.SequenceTuple1( + Map[GR_T1, GR_TUPLE1, GIO_T1], + t, + ) +} + // Eitherize2 converts a function with 2 parameters returning a tuple into a function with 2 parameters returning a [GRA] // The inverse function is [Uneitherize2] func Eitherize2[GRA ~func(context.Context) GIOA, F ~func(context.Context, T0, T1) (R, error), GIOA ~func() E.Either[error, R], T0, T1, R any](f F) func(T0, T1) GRA { @@ -67,6 +80,23 @@ func SequenceT2[ ) } +// SequenceTuple2 converts a [T.Tuple2] of readers into a reader of a [T.Tuple2]. +func SequenceTuple2[ + GR_TUPLE2 ~func(context.Context) GIO_TUPLE2, + GR_T1 ~func(context.Context) GIO_T1, + GR_T2 ~func(context.Context) GIO_T2, + GIO_TUPLE2 ~func() E.Either[error, T.Tuple2[T1, T2]], + GIO_T1 ~func() E.Either[error, T1], + GIO_T2 ~func() E.Either[error, T2], + T1, + T2 any](t T.Tuple2[GR_T1, GR_T2]) GR_TUPLE2 { + return A.SequenceTuple2( + Map[GR_T1, func(context.Context) func() E.Either[error, func(T2) T.Tuple2[T1, T2]], GIO_T1], + Ap[GR_TUPLE2, func(context.Context) func() E.Either[error, func(T2) T.Tuple2[T1, T2]], GR_T2], + t, + ) +} + // Eitherize3 converts a function with 3 parameters returning a tuple into a function with 3 parameters returning a [GRA] // The inverse function is [Uneitherize3] func Eitherize3[GRA ~func(context.Context) GIOA, F ~func(context.Context, T0, T1, T2) (R, error), GIOA ~func() E.Either[error, R], T0, T1, T2, R any](f F) func(T0, T1, T2) GRA { @@ -100,6 +130,27 @@ func SequenceT3[ ) } +// SequenceTuple3 converts a [T.Tuple3] of readers into a reader of a [T.Tuple3]. +func SequenceTuple3[ + GR_TUPLE3 ~func(context.Context) GIO_TUPLE3, + GR_T1 ~func(context.Context) GIO_T1, + GR_T2 ~func(context.Context) GIO_T2, + GR_T3 ~func(context.Context) GIO_T3, + GIO_TUPLE3 ~func() E.Either[error, T.Tuple3[T1, T2, T3]], + GIO_T1 ~func() E.Either[error, T1], + GIO_T2 ~func() E.Either[error, T2], + GIO_T3 ~func() E.Either[error, T3], + T1, + T2, + T3 any](t T.Tuple3[GR_T1, GR_T2, GR_T3]) GR_TUPLE3 { + return A.SequenceTuple3( + Map[GR_T1, func(context.Context) func() E.Either[error, func(T2) func(T3) T.Tuple3[T1, T2, T3]], GIO_T1], + Ap[func(context.Context) func() E.Either[error, func(T3) T.Tuple3[T1, T2, T3]], func(context.Context) func() E.Either[error, func(T2) func(T3) T.Tuple3[T1, T2, T3]], GR_T2], + Ap[GR_TUPLE3, func(context.Context) func() E.Either[error, func(T3) T.Tuple3[T1, T2, T3]], GR_T3], + t, + ) +} + // Eitherize4 converts a function with 4 parameters returning a tuple into a function with 4 parameters returning a [GRA] // The inverse function is [Uneitherize4] func Eitherize4[GRA ~func(context.Context) GIOA, F ~func(context.Context, T0, T1, T2, T3) (R, error), GIOA ~func() E.Either[error, R], T0, T1, T2, T3, R any](f F) func(T0, T1, T2, T3) GRA { @@ -139,6 +190,31 @@ func SequenceT4[ ) } +// SequenceTuple4 converts a [T.Tuple4] of readers into a reader of a [T.Tuple4]. +func SequenceTuple4[ + GR_TUPLE4 ~func(context.Context) GIO_TUPLE4, + GR_T1 ~func(context.Context) GIO_T1, + GR_T2 ~func(context.Context) GIO_T2, + GR_T3 ~func(context.Context) GIO_T3, + GR_T4 ~func(context.Context) GIO_T4, + GIO_TUPLE4 ~func() E.Either[error, T.Tuple4[T1, T2, T3, T4]], + GIO_T1 ~func() E.Either[error, T1], + GIO_T2 ~func() E.Either[error, T2], + GIO_T3 ~func() E.Either[error, T3], + GIO_T4 ~func() E.Either[error, T4], + T1, + T2, + T3, + T4 any](t T.Tuple4[GR_T1, GR_T2, GR_T3, GR_T4]) GR_TUPLE4 { + return A.SequenceTuple4( + Map[GR_T1, func(context.Context) func() E.Either[error, func(T2) func(T3) func(T4) T.Tuple4[T1, T2, T3, T4]], GIO_T1], + Ap[func(context.Context) func() E.Either[error, func(T3) func(T4) T.Tuple4[T1, T2, T3, T4]], func(context.Context) func() E.Either[error, func(T2) func(T3) func(T4) T.Tuple4[T1, T2, T3, T4]], GR_T2], + Ap[func(context.Context) func() E.Either[error, func(T4) T.Tuple4[T1, T2, T3, T4]], func(context.Context) func() E.Either[error, func(T3) func(T4) T.Tuple4[T1, T2, T3, T4]], GR_T3], + Ap[GR_TUPLE4, func(context.Context) func() E.Either[error, func(T4) T.Tuple4[T1, T2, T3, T4]], GR_T4], + t, + ) +} + // Eitherize5 converts a function with 5 parameters returning a tuple into a function with 5 parameters returning a [GRA] // The inverse function is [Uneitherize5] func Eitherize5[GRA ~func(context.Context) GIOA, F ~func(context.Context, T0, T1, T2, T3, T4) (R, error), GIOA ~func() E.Either[error, R], T0, T1, T2, T3, T4, R any](f F) func(T0, T1, T2, T3, T4) GRA { @@ -184,6 +260,35 @@ func SequenceT5[ ) } +// SequenceTuple5 converts a [T.Tuple5] of readers into a reader of a [T.Tuple5]. +func SequenceTuple5[ + GR_TUPLE5 ~func(context.Context) GIO_TUPLE5, + GR_T1 ~func(context.Context) GIO_T1, + GR_T2 ~func(context.Context) GIO_T2, + GR_T3 ~func(context.Context) GIO_T3, + GR_T4 ~func(context.Context) GIO_T4, + GR_T5 ~func(context.Context) GIO_T5, + GIO_TUPLE5 ~func() E.Either[error, T.Tuple5[T1, T2, T3, T4, T5]], + GIO_T1 ~func() E.Either[error, T1], + GIO_T2 ~func() E.Either[error, T2], + GIO_T3 ~func() E.Either[error, T3], + GIO_T4 ~func() E.Either[error, T4], + GIO_T5 ~func() E.Either[error, T5], + T1, + T2, + T3, + T4, + T5 any](t T.Tuple5[GR_T1, GR_T2, GR_T3, GR_T4, GR_T5]) GR_TUPLE5 { + return A.SequenceTuple5( + Map[GR_T1, func(context.Context) func() E.Either[error, func(T2) func(T3) func(T4) func(T5) T.Tuple5[T1, T2, T3, T4, T5]], GIO_T1], + Ap[func(context.Context) func() E.Either[error, func(T3) func(T4) func(T5) T.Tuple5[T1, T2, T3, T4, T5]], func(context.Context) func() E.Either[error, func(T2) func(T3) func(T4) func(T5) T.Tuple5[T1, T2, T3, T4, T5]], GR_T2], + Ap[func(context.Context) func() E.Either[error, func(T4) func(T5) T.Tuple5[T1, T2, T3, T4, T5]], func(context.Context) func() E.Either[error, func(T3) func(T4) func(T5) T.Tuple5[T1, T2, T3, T4, T5]], GR_T3], + Ap[func(context.Context) func() E.Either[error, func(T5) T.Tuple5[T1, T2, T3, T4, T5]], func(context.Context) func() E.Either[error, func(T4) func(T5) T.Tuple5[T1, T2, T3, T4, T5]], GR_T4], + Ap[GR_TUPLE5, func(context.Context) func() E.Either[error, func(T5) T.Tuple5[T1, T2, T3, T4, T5]], GR_T5], + t, + ) +} + // Eitherize6 converts a function with 6 parameters returning a tuple into a function with 6 parameters returning a [GRA] // The inverse function is [Uneitherize6] func Eitherize6[GRA ~func(context.Context) GIOA, F ~func(context.Context, T0, T1, T2, T3, T4, T5) (R, error), GIOA ~func() E.Either[error, R], T0, T1, T2, T3, T4, T5, R any](f F) func(T0, T1, T2, T3, T4, T5) GRA { @@ -235,6 +340,39 @@ func SequenceT6[ ) } +// SequenceTuple6 converts a [T.Tuple6] of readers into a reader of a [T.Tuple6]. +func SequenceTuple6[ + GR_TUPLE6 ~func(context.Context) GIO_TUPLE6, + GR_T1 ~func(context.Context) GIO_T1, + GR_T2 ~func(context.Context) GIO_T2, + GR_T3 ~func(context.Context) GIO_T3, + GR_T4 ~func(context.Context) GIO_T4, + GR_T5 ~func(context.Context) GIO_T5, + GR_T6 ~func(context.Context) GIO_T6, + GIO_TUPLE6 ~func() E.Either[error, T.Tuple6[T1, T2, T3, T4, T5, T6]], + GIO_T1 ~func() E.Either[error, T1], + GIO_T2 ~func() E.Either[error, T2], + GIO_T3 ~func() E.Either[error, T3], + GIO_T4 ~func() E.Either[error, T4], + GIO_T5 ~func() E.Either[error, T5], + GIO_T6 ~func() E.Either[error, T6], + T1, + T2, + T3, + T4, + T5, + T6 any](t T.Tuple6[GR_T1, GR_T2, GR_T3, GR_T4, GR_T5, GR_T6]) GR_TUPLE6 { + return A.SequenceTuple6( + Map[GR_T1, func(context.Context) func() E.Either[error, func(T2) func(T3) func(T4) func(T5) func(T6) T.Tuple6[T1, T2, T3, T4, T5, T6]], GIO_T1], + Ap[func(context.Context) func() E.Either[error, func(T3) func(T4) func(T5) func(T6) T.Tuple6[T1, T2, T3, T4, T5, T6]], func(context.Context) func() E.Either[error, func(T2) func(T3) func(T4) func(T5) func(T6) T.Tuple6[T1, T2, T3, T4, T5, T6]], GR_T2], + Ap[func(context.Context) func() E.Either[error, func(T4) func(T5) func(T6) T.Tuple6[T1, T2, T3, T4, T5, T6]], func(context.Context) func() E.Either[error, func(T3) func(T4) func(T5) func(T6) T.Tuple6[T1, T2, T3, T4, T5, T6]], GR_T3], + Ap[func(context.Context) func() E.Either[error, func(T5) func(T6) T.Tuple6[T1, T2, T3, T4, T5, T6]], func(context.Context) func() E.Either[error, func(T4) func(T5) func(T6) T.Tuple6[T1, T2, T3, T4, T5, T6]], GR_T4], + Ap[func(context.Context) func() E.Either[error, func(T6) T.Tuple6[T1, T2, T3, T4, T5, T6]], func(context.Context) func() E.Either[error, func(T5) func(T6) T.Tuple6[T1, T2, T3, T4, T5, T6]], GR_T5], + Ap[GR_TUPLE6, func(context.Context) func() E.Either[error, func(T6) T.Tuple6[T1, T2, T3, T4, T5, T6]], GR_T6], + t, + ) +} + // Eitherize7 converts a function with 7 parameters returning a tuple into a function with 7 parameters returning a [GRA] // The inverse function is [Uneitherize7] func Eitherize7[GRA ~func(context.Context) GIOA, F ~func(context.Context, T0, T1, T2, T3, T4, T5, T6) (R, error), GIOA ~func() E.Either[error, R], T0, T1, T2, T3, T4, T5, T6, R any](f F) func(T0, T1, T2, T3, T4, T5, T6) GRA { @@ -292,6 +430,43 @@ func SequenceT7[ ) } +// SequenceTuple7 converts a [T.Tuple7] of readers into a reader of a [T.Tuple7]. +func SequenceTuple7[ + GR_TUPLE7 ~func(context.Context) GIO_TUPLE7, + GR_T1 ~func(context.Context) GIO_T1, + GR_T2 ~func(context.Context) GIO_T2, + GR_T3 ~func(context.Context) GIO_T3, + GR_T4 ~func(context.Context) GIO_T4, + GR_T5 ~func(context.Context) GIO_T5, + GR_T6 ~func(context.Context) GIO_T6, + GR_T7 ~func(context.Context) GIO_T7, + GIO_TUPLE7 ~func() E.Either[error, T.Tuple7[T1, T2, T3, T4, T5, T6, T7]], + GIO_T1 ~func() E.Either[error, T1], + GIO_T2 ~func() E.Either[error, T2], + GIO_T3 ~func() E.Either[error, T3], + GIO_T4 ~func() E.Either[error, T4], + GIO_T5 ~func() E.Either[error, T5], + GIO_T6 ~func() E.Either[error, T6], + GIO_T7 ~func() E.Either[error, T7], + T1, + T2, + T3, + T4, + T5, + T6, + T7 any](t T.Tuple7[GR_T1, GR_T2, GR_T3, GR_T4, GR_T5, GR_T6, GR_T7]) GR_TUPLE7 { + return A.SequenceTuple7( + Map[GR_T1, func(context.Context) func() E.Either[error, func(T2) func(T3) func(T4) func(T5) func(T6) func(T7) T.Tuple7[T1, T2, T3, T4, T5, T6, T7]], GIO_T1], + Ap[func(context.Context) func() E.Either[error, func(T3) func(T4) func(T5) func(T6) func(T7) T.Tuple7[T1, T2, T3, T4, T5, T6, T7]], func(context.Context) func() E.Either[error, func(T2) func(T3) func(T4) func(T5) func(T6) func(T7) T.Tuple7[T1, T2, T3, T4, T5, T6, T7]], GR_T2], + Ap[func(context.Context) func() E.Either[error, func(T4) func(T5) func(T6) func(T7) T.Tuple7[T1, T2, T3, T4, T5, T6, T7]], func(context.Context) func() E.Either[error, func(T3) func(T4) func(T5) func(T6) func(T7) T.Tuple7[T1, T2, T3, T4, T5, T6, T7]], GR_T3], + Ap[func(context.Context) func() E.Either[error, func(T5) func(T6) func(T7) T.Tuple7[T1, T2, T3, T4, T5, T6, T7]], func(context.Context) func() E.Either[error, func(T4) func(T5) func(T6) func(T7) T.Tuple7[T1, T2, T3, T4, T5, T6, T7]], GR_T4], + Ap[func(context.Context) func() E.Either[error, func(T6) func(T7) T.Tuple7[T1, T2, T3, T4, T5, T6, T7]], func(context.Context) func() E.Either[error, func(T5) func(T6) func(T7) T.Tuple7[T1, T2, T3, T4, T5, T6, T7]], GR_T5], + Ap[func(context.Context) func() E.Either[error, func(T7) T.Tuple7[T1, T2, T3, T4, T5, T6, T7]], func(context.Context) func() E.Either[error, func(T6) func(T7) T.Tuple7[T1, T2, T3, T4, T5, T6, T7]], GR_T6], + Ap[GR_TUPLE7, func(context.Context) func() E.Either[error, func(T7) T.Tuple7[T1, T2, T3, T4, T5, T6, T7]], GR_T7], + t, + ) +} + // Eitherize8 converts a function with 8 parameters returning a tuple into a function with 8 parameters returning a [GRA] // The inverse function is [Uneitherize8] func Eitherize8[GRA ~func(context.Context) GIOA, F ~func(context.Context, T0, T1, T2, T3, T4, T5, T6, T7) (R, error), GIOA ~func() E.Either[error, R], T0, T1, T2, T3, T4, T5, T6, T7, R any](f F) func(T0, T1, T2, T3, T4, T5, T6, T7) GRA { @@ -355,6 +530,47 @@ func SequenceT8[ ) } +// SequenceTuple8 converts a [T.Tuple8] of readers into a reader of a [T.Tuple8]. +func SequenceTuple8[ + GR_TUPLE8 ~func(context.Context) GIO_TUPLE8, + GR_T1 ~func(context.Context) GIO_T1, + GR_T2 ~func(context.Context) GIO_T2, + GR_T3 ~func(context.Context) GIO_T3, + GR_T4 ~func(context.Context) GIO_T4, + GR_T5 ~func(context.Context) GIO_T5, + GR_T6 ~func(context.Context) GIO_T6, + GR_T7 ~func(context.Context) GIO_T7, + GR_T8 ~func(context.Context) GIO_T8, + GIO_TUPLE8 ~func() E.Either[error, T.Tuple8[T1, T2, T3, T4, T5, T6, T7, T8]], + GIO_T1 ~func() E.Either[error, T1], + GIO_T2 ~func() E.Either[error, T2], + GIO_T3 ~func() E.Either[error, T3], + GIO_T4 ~func() E.Either[error, T4], + GIO_T5 ~func() E.Either[error, T5], + GIO_T6 ~func() E.Either[error, T6], + GIO_T7 ~func() E.Either[error, T7], + GIO_T8 ~func() E.Either[error, T8], + T1, + T2, + T3, + T4, + T5, + T6, + T7, + T8 any](t T.Tuple8[GR_T1, GR_T2, GR_T3, GR_T4, GR_T5, GR_T6, GR_T7, GR_T8]) GR_TUPLE8 { + return A.SequenceTuple8( + Map[GR_T1, func(context.Context) func() E.Either[error, func(T2) func(T3) func(T4) func(T5) func(T6) func(T7) func(T8) T.Tuple8[T1, T2, T3, T4, T5, T6, T7, T8]], GIO_T1], + Ap[func(context.Context) func() E.Either[error, func(T3) func(T4) func(T5) func(T6) func(T7) func(T8) T.Tuple8[T1, T2, T3, T4, T5, T6, T7, T8]], func(context.Context) func() E.Either[error, func(T2) func(T3) func(T4) func(T5) func(T6) func(T7) func(T8) T.Tuple8[T1, T2, T3, T4, T5, T6, T7, T8]], GR_T2], + Ap[func(context.Context) func() E.Either[error, func(T4) func(T5) func(T6) func(T7) func(T8) T.Tuple8[T1, T2, T3, T4, T5, T6, T7, T8]], func(context.Context) func() E.Either[error, func(T3) func(T4) func(T5) func(T6) func(T7) func(T8) T.Tuple8[T1, T2, T3, T4, T5, T6, T7, T8]], GR_T3], + Ap[func(context.Context) func() E.Either[error, func(T5) func(T6) func(T7) func(T8) T.Tuple8[T1, T2, T3, T4, T5, T6, T7, T8]], func(context.Context) func() E.Either[error, func(T4) func(T5) func(T6) func(T7) func(T8) T.Tuple8[T1, T2, T3, T4, T5, T6, T7, T8]], GR_T4], + Ap[func(context.Context) func() E.Either[error, func(T6) func(T7) func(T8) T.Tuple8[T1, T2, T3, T4, T5, T6, T7, T8]], func(context.Context) func() E.Either[error, func(T5) func(T6) func(T7) func(T8) T.Tuple8[T1, T2, T3, T4, T5, T6, T7, T8]], GR_T5], + Ap[func(context.Context) func() E.Either[error, func(T7) func(T8) T.Tuple8[T1, T2, T3, T4, T5, T6, T7, T8]], func(context.Context) func() E.Either[error, func(T6) func(T7) func(T8) T.Tuple8[T1, T2, T3, T4, T5, T6, T7, T8]], GR_T6], + Ap[func(context.Context) func() E.Either[error, func(T8) T.Tuple8[T1, T2, T3, T4, T5, T6, T7, T8]], func(context.Context) func() E.Either[error, func(T7) func(T8) T.Tuple8[T1, T2, T3, T4, T5, T6, T7, T8]], GR_T7], + Ap[GR_TUPLE8, func(context.Context) func() E.Either[error, func(T8) T.Tuple8[T1, T2, T3, T4, T5, T6, T7, T8]], GR_T8], + t, + ) +} + // Eitherize9 converts a function with 9 parameters returning a tuple into a function with 9 parameters returning a [GRA] // The inverse function is [Uneitherize9] func Eitherize9[GRA ~func(context.Context) GIOA, F ~func(context.Context, T0, T1, T2, T3, T4, T5, T6, T7, T8) (R, error), GIOA ~func() E.Either[error, R], T0, T1, T2, T3, T4, T5, T6, T7, T8, R any](f F) func(T0, T1, T2, T3, T4, T5, T6, T7, T8) GRA { @@ -424,6 +640,51 @@ func SequenceT9[ ) } +// SequenceTuple9 converts a [T.Tuple9] of readers into a reader of a [T.Tuple9]. +func SequenceTuple9[ + GR_TUPLE9 ~func(context.Context) GIO_TUPLE9, + GR_T1 ~func(context.Context) GIO_T1, + GR_T2 ~func(context.Context) GIO_T2, + GR_T3 ~func(context.Context) GIO_T3, + GR_T4 ~func(context.Context) GIO_T4, + GR_T5 ~func(context.Context) GIO_T5, + GR_T6 ~func(context.Context) GIO_T6, + GR_T7 ~func(context.Context) GIO_T7, + GR_T8 ~func(context.Context) GIO_T8, + GR_T9 ~func(context.Context) GIO_T9, + GIO_TUPLE9 ~func() E.Either[error, T.Tuple9[T1, T2, T3, T4, T5, T6, T7, T8, T9]], + GIO_T1 ~func() E.Either[error, T1], + GIO_T2 ~func() E.Either[error, T2], + GIO_T3 ~func() E.Either[error, T3], + GIO_T4 ~func() E.Either[error, T4], + GIO_T5 ~func() E.Either[error, T5], + GIO_T6 ~func() E.Either[error, T6], + GIO_T7 ~func() E.Either[error, T7], + GIO_T8 ~func() E.Either[error, T8], + GIO_T9 ~func() E.Either[error, T9], + T1, + T2, + T3, + T4, + T5, + T6, + T7, + T8, + T9 any](t T.Tuple9[GR_T1, GR_T2, GR_T3, GR_T4, GR_T5, GR_T6, GR_T7, GR_T8, GR_T9]) GR_TUPLE9 { + return A.SequenceTuple9( + Map[GR_T1, func(context.Context) func() E.Either[error, func(T2) func(T3) func(T4) func(T5) func(T6) func(T7) func(T8) func(T9) T.Tuple9[T1, T2, T3, T4, T5, T6, T7, T8, T9]], GIO_T1], + Ap[func(context.Context) func() E.Either[error, func(T3) func(T4) func(T5) func(T6) func(T7) func(T8) func(T9) T.Tuple9[T1, T2, T3, T4, T5, T6, T7, T8, T9]], func(context.Context) func() E.Either[error, func(T2) func(T3) func(T4) func(T5) func(T6) func(T7) func(T8) func(T9) T.Tuple9[T1, T2, T3, T4, T5, T6, T7, T8, T9]], GR_T2], + Ap[func(context.Context) func() E.Either[error, func(T4) func(T5) func(T6) func(T7) func(T8) func(T9) T.Tuple9[T1, T2, T3, T4, T5, T6, T7, T8, T9]], func(context.Context) func() E.Either[error, func(T3) func(T4) func(T5) func(T6) func(T7) func(T8) func(T9) T.Tuple9[T1, T2, T3, T4, T5, T6, T7, T8, T9]], GR_T3], + Ap[func(context.Context) func() E.Either[error, func(T5) func(T6) func(T7) func(T8) func(T9) T.Tuple9[T1, T2, T3, T4, T5, T6, T7, T8, T9]], func(context.Context) func() E.Either[error, func(T4) func(T5) func(T6) func(T7) func(T8) func(T9) T.Tuple9[T1, T2, T3, T4, T5, T6, T7, T8, T9]], GR_T4], + Ap[func(context.Context) func() E.Either[error, func(T6) func(T7) func(T8) func(T9) T.Tuple9[T1, T2, T3, T4, T5, T6, T7, T8, T9]], func(context.Context) func() E.Either[error, func(T5) func(T6) func(T7) func(T8) func(T9) T.Tuple9[T1, T2, T3, T4, T5, T6, T7, T8, T9]], GR_T5], + Ap[func(context.Context) func() E.Either[error, func(T7) func(T8) func(T9) T.Tuple9[T1, T2, T3, T4, T5, T6, T7, T8, T9]], func(context.Context) func() E.Either[error, func(T6) func(T7) func(T8) func(T9) T.Tuple9[T1, T2, T3, T4, T5, T6, T7, T8, T9]], GR_T6], + Ap[func(context.Context) func() E.Either[error, func(T8) func(T9) T.Tuple9[T1, T2, T3, T4, T5, T6, T7, T8, T9]], func(context.Context) func() E.Either[error, func(T7) func(T8) func(T9) T.Tuple9[T1, T2, T3, T4, T5, T6, T7, T8, T9]], GR_T7], + Ap[func(context.Context) func() E.Either[error, func(T9) T.Tuple9[T1, T2, T3, T4, T5, T6, T7, T8, T9]], func(context.Context) func() E.Either[error, func(T8) func(T9) T.Tuple9[T1, T2, T3, T4, T5, T6, T7, T8, T9]], GR_T8], + Ap[GR_TUPLE9, func(context.Context) func() E.Either[error, func(T9) T.Tuple9[T1, T2, T3, T4, T5, T6, T7, T8, T9]], GR_T9], + t, + ) +} + // Eitherize10 converts a function with 10 parameters returning a tuple into a function with 10 parameters returning a [GRA] // The inverse function is [Uneitherize10] func Eitherize10[GRA ~func(context.Context) GIOA, F ~func(context.Context, T0, T1, T2, T3, T4, T5, T6, T7, T8, T9) (R, error), GIOA ~func() E.Either[error, R], T0, T1, T2, T3, T4, T5, T6, T7, T8, T9, R any](f F) func(T0, T1, T2, T3, T4, T5, T6, T7, T8, T9) GRA { @@ -498,3 +759,52 @@ func SequenceT10[ t10, ) } + +// SequenceTuple10 converts a [T.Tuple10] of readers into a reader of a [T.Tuple10]. +func SequenceTuple10[ + GR_TUPLE10 ~func(context.Context) GIO_TUPLE10, + GR_T1 ~func(context.Context) GIO_T1, + GR_T2 ~func(context.Context) GIO_T2, + GR_T3 ~func(context.Context) GIO_T3, + GR_T4 ~func(context.Context) GIO_T4, + GR_T5 ~func(context.Context) GIO_T5, + GR_T6 ~func(context.Context) GIO_T6, + GR_T7 ~func(context.Context) GIO_T7, + GR_T8 ~func(context.Context) GIO_T8, + GR_T9 ~func(context.Context) GIO_T9, + GR_T10 ~func(context.Context) GIO_T10, + GIO_TUPLE10 ~func() E.Either[error, T.Tuple10[T1, T2, T3, T4, T5, T6, T7, T8, T9, T10]], + GIO_T1 ~func() E.Either[error, T1], + GIO_T2 ~func() E.Either[error, T2], + GIO_T3 ~func() E.Either[error, T3], + GIO_T4 ~func() E.Either[error, T4], + GIO_T5 ~func() E.Either[error, T5], + GIO_T6 ~func() E.Either[error, T6], + GIO_T7 ~func() E.Either[error, T7], + GIO_T8 ~func() E.Either[error, T8], + GIO_T9 ~func() E.Either[error, T9], + GIO_T10 ~func() E.Either[error, T10], + T1, + T2, + T3, + T4, + T5, + T6, + T7, + T8, + T9, + T10 any](t T.Tuple10[GR_T1, GR_T2, GR_T3, GR_T4, GR_T5, GR_T6, GR_T7, GR_T8, GR_T9, GR_T10]) GR_TUPLE10 { + return A.SequenceTuple10( + Map[GR_T1, func(context.Context) func() E.Either[error, func(T2) func(T3) func(T4) func(T5) func(T6) func(T7) func(T8) func(T9) func(T10) T.Tuple10[T1, T2, T3, T4, T5, T6, T7, T8, T9, T10]], GIO_T1], + Ap[func(context.Context) func() E.Either[error, func(T3) func(T4) func(T5) func(T6) func(T7) func(T8) func(T9) func(T10) T.Tuple10[T1, T2, T3, T4, T5, T6, T7, T8, T9, T10]], func(context.Context) func() E.Either[error, func(T2) func(T3) func(T4) func(T5) func(T6) func(T7) func(T8) func(T9) func(T10) T.Tuple10[T1, T2, T3, T4, T5, T6, T7, T8, T9, T10]], GR_T2], + Ap[func(context.Context) func() E.Either[error, func(T4) func(T5) func(T6) func(T7) func(T8) func(T9) func(T10) T.Tuple10[T1, T2, T3, T4, T5, T6, T7, T8, T9, T10]], func(context.Context) func() E.Either[error, func(T3) func(T4) func(T5) func(T6) func(T7) func(T8) func(T9) func(T10) T.Tuple10[T1, T2, T3, T4, T5, T6, T7, T8, T9, T10]], GR_T3], + Ap[func(context.Context) func() E.Either[error, func(T5) func(T6) func(T7) func(T8) func(T9) func(T10) T.Tuple10[T1, T2, T3, T4, T5, T6, T7, T8, T9, T10]], func(context.Context) func() E.Either[error, func(T4) func(T5) func(T6) func(T7) func(T8) func(T9) func(T10) T.Tuple10[T1, T2, T3, T4, T5, T6, T7, T8, T9, T10]], GR_T4], + Ap[func(context.Context) func() E.Either[error, func(T6) func(T7) func(T8) func(T9) func(T10) T.Tuple10[T1, T2, T3, T4, T5, T6, T7, T8, T9, T10]], func(context.Context) func() E.Either[error, func(T5) func(T6) func(T7) func(T8) func(T9) func(T10) T.Tuple10[T1, T2, T3, T4, T5, T6, T7, T8, T9, T10]], GR_T5], + Ap[func(context.Context) func() E.Either[error, func(T7) func(T8) func(T9) func(T10) T.Tuple10[T1, T2, T3, T4, T5, T6, T7, T8, T9, T10]], func(context.Context) func() E.Either[error, func(T6) func(T7) func(T8) func(T9) func(T10) T.Tuple10[T1, T2, T3, T4, T5, T6, T7, T8, T9, T10]], GR_T6], + Ap[func(context.Context) func() E.Either[error, func(T8) func(T9) func(T10) T.Tuple10[T1, T2, T3, T4, T5, T6, T7, T8, T9, T10]], func(context.Context) func() E.Either[error, func(T7) func(T8) func(T9) func(T10) T.Tuple10[T1, T2, T3, T4, T5, T6, T7, T8, T9, T10]], GR_T7], + Ap[func(context.Context) func() E.Either[error, func(T9) func(T10) T.Tuple10[T1, T2, T3, T4, T5, T6, T7, T8, T9, T10]], func(context.Context) func() E.Either[error, func(T8) func(T9) func(T10) T.Tuple10[T1, T2, T3, T4, T5, T6, T7, T8, T9, T10]], GR_T8], + Ap[func(context.Context) func() E.Either[error, func(T10) T.Tuple10[T1, T2, T3, T4, T5, T6, T7, T8, T9, T10]], func(context.Context) func() E.Either[error, func(T9) func(T10) T.Tuple10[T1, T2, T3, T4, T5, T6, T7, T8, T9, T10]], GR_T9], + Ap[GR_TUPLE10, func(context.Context) func() E.Either[error, func(T10) T.Tuple10[T1, T2, T3, T4, T5, T6, T7, T8, T9, T10]], GR_T10], + t, + ) +}