diff --git a/README.md b/README.md index 26699c4..c76bc0d 100644 --- a/README.md +++ b/README.md @@ -1,5 +1,7 @@ # Functional programming library for golang +**Work in progress!** + ![logo](resources/images/logo.png) ## Design Goal diff --git a/cli/commands.go b/cli/commands.go index 1759d7d..48f4b7d 100644 --- a/cli/commands.go +++ b/cli/commands.go @@ -7,6 +7,7 @@ import ( func Commands() []*C.Command { return []*C.Command{ PipeCommand(), + IdentityCommand(), OptionCommand(), EitherCommand(), TupleCommand(), diff --git a/cli/either.go b/cli/either.go index 3d4a0bf..d7988ef 100644 --- a/cli/either.go +++ b/cli/either.go @@ -25,48 +25,7 @@ func generateEitherSequenceTuple(f *os.File, i int) { } func generateEitherSequenceT(f *os.File, i int) { - - tuple := tupleType(i) - - fmt.Fprintf(f, "\n// SequenceT%d converts %d parameters of [Either[E, T]] into an [Either] of a [Tuple%d].\n", i, i, i) - fmt.Fprintf(f, "func SequenceT%d[E", i) - for j := 0; j < i; j++ { - fmt.Fprintf(f, ", T%d", j+1) - } - fmt.Fprintf(f, " any](") - for j := 0; j < i; j++ { - if j > 0 { - fmt.Fprintf(f, ", ") - } - fmt.Fprintf(f, "t%d Either[E, T%d]", j+1, j+1) - } - fmt.Fprintf(f, ") Either[E, %s] {\n", tuple) - fmt.Fprintf(f, " return A.SequenceT%d(\n", i) - // map - fmt.Fprintf(f, " Map[E, T1,") - for j := 1; j < i; j++ { - fmt.Fprintf(f, " func(T%d)", j+1) - } - fmt.Fprintf(f, " %s],\n", tuple) - // applicatives - for j := 1; j < i; j++ { - fmt.Fprintf(f, " Ap[") - for k := j + 1; k < i; k++ { - if k > j+1 { - fmt.Fprintf(f, " ") - } - fmt.Fprintf(f, "func(T%d)", k+1) - } - if j < i-1 { - fmt.Fprintf(f, " ") - } - fmt.Fprintf(f, "%s, E, T%d],\n", tuple, j+1) - } - for j := 0; j < i; j++ { - fmt.Fprintf(f, " t%d,\n", j+1) - } - fmt.Fprintf(f, " )\n") - fmt.Fprintf(f, "}\n") + generateSequenceT1(eitherHKT("E"), "E")(f, i) } func generateUneitherize(f *os.File, i int) { diff --git a/cli/identity.go b/cli/identity.go new file mode 100644 index 0000000..e4e8f25 --- /dev/null +++ b/cli/identity.go @@ -0,0 +1,88 @@ +package cli + +import ( + "fmt" + "log" + "os" + "path/filepath" + "time" + + C "github.com/urfave/cli/v2" +) + +func identityHKT(typeA string) string { + return typeA +} + +func generateIdentityTraverseTuple(f *os.File, i int) { + generateTraverseTuple1(identityHKT, "")(f, i) +} + +func generateIdentitySequenceTuple(f *os.File, i int) { + generateSequenceTuple1(identityHKT, "")(f, i) +} + +func generateIdentitySequenceT(f *os.File, i int) { + generateSequenceT1(identityHKT, "")(f, i) +} + +func generateIdentityHelpers(filename string, count int) error { + dir, err := os.Getwd() + if err != nil { + return err + } + absDir, err := filepath.Abs(dir) + if err != nil { + return err + } + pkg := filepath.Base(absDir) + f, err := os.Create(filepath.Clean(filename)) + if err != nil { + return err + } + defer f.Close() + // log + log.Printf("Generating code in [%s] for package [%s] with [%d] repetitions ...", filename, pkg, count) + + // some header + fmt.Fprintln(f, "// Code generated by go generate; DO NOT EDIT.") + fmt.Fprintln(f, "// This file was generated by robots at") + fmt.Fprintf(f, "// %s\n", time.Now()) + + fmt.Fprintf(f, "package %s\n\n", pkg) + + fmt.Fprintf(f, ` +import ( + A "github.com/ibm/fp-go/internal/apply" + T "github.com/ibm/fp-go/tuple" +) +`) + + for i := 1; i <= count; i++ { + // sequenceT + generateIdentitySequenceT(f, i) + // sequenceTuple + generateIdentitySequenceTuple(f, i) + // traverseTuple + generateIdentityTraverseTuple(f, i) + } + + return nil +} + +func IdentityCommand() *C.Command { + return &C.Command{ + Name: "identity", + Usage: "generate code for Identity", + Flags: []C.Flag{ + flagCount, + flagFilename, + }, + Action: func(ctx *C.Context) error { + return generateIdentityHelpers( + ctx.String(keyFilename), + ctx.Int(keyCount), + ) + }, + } +} diff --git a/cli/monad.go b/cli/monad.go index bdcd7a2..524305e 100644 --- a/cli/monad.go +++ b/cli/monad.go @@ -274,3 +274,69 @@ func generateSequenceTuple1( fmt.Fprintf(f, "}\n") } } + +func generateSequenceT1( + hkt func(string) string, + infix string) func(f *os.File, i int) { + + return func(f *os.File, i int) { + + tuple := tupleType(i) + + fmt.Fprintf(f, "\n// SequenceT%d converts %d parameters of [%s] into a [%s].\n", i, i, hkt("T"), hkt(fmt.Sprintf("Tuple%d", i))) + fmt.Fprintf(f, "func SequenceT%d[", i) + if infix != "" { + fmt.Fprintf(f, "%s", infix) + } + for j := 0; j < i; j++ { + if infix != "" || j > 0 { + fmt.Fprintf(f, ", ") + } + fmt.Fprintf(f, "T%d", j+1) + } + fmt.Fprintf(f, " any](") + for j := 0; j < i; j++ { + if j > 0 { + fmt.Fprintf(f, ", ") + } + fmt.Fprintf(f, "t%d %s", j+1, hkt(fmt.Sprintf("T%d", j+1))) + } + fmt.Fprintf(f, ") %s {\n", hkt(tuple)) + fmt.Fprintf(f, " return A.SequenceT%d(\n", i) + // map + fmt.Fprintf(f, " Map[") + if infix != "" { + fmt.Fprintf(f, "%s, T1,", infix) + } else { + fmt.Fprintf(f, "T1,") + } + for j := 1; j < i; j++ { + fmt.Fprintf(f, " func(T%d)", j+1) + } + fmt.Fprintf(f, " %s],\n", tuple) + // applicatives + for j := 1; j < i; j++ { + fmt.Fprintf(f, " Ap[") + for k := j + 1; k < i; k++ { + if k > j+1 { + fmt.Fprintf(f, " ") + } + fmt.Fprintf(f, "func(T%d)", k+1) + } + if j < i-1 { + fmt.Fprintf(f, " ") + } + fmt.Fprintf(f, "%s", tuple) + if infix != "" { + fmt.Fprintf(f, ", %s", infix) + } + fmt.Fprintf(f, ", T%d],\n", j+1) + } + for j := 0; j < i; j++ { + fmt.Fprintf(f, " t%d,\n", j+1) + } + fmt.Fprintf(f, " )\n") + fmt.Fprintf(f, "}\n") + } + +} diff --git a/cli/option.go b/cli/option.go index b20a846..b1e5b5c 100644 --- a/cli/option.go +++ b/cli/option.go @@ -22,6 +22,10 @@ func generateOptionSequenceTuple(f *os.File, i int) { generateSequenceTuple1(optionHKT, "")(f, i) } +func generateOptionSequenceT(f *os.File, i int) { + generateSequenceT1(optionHKT, "")(f, i) +} + func generateOptionize(f *os.File, i int) { // Create the optionize version fmt.Fprintf(f, "\n// Optionize%d converts a function with %d parameters returning a tuple of a return value R and a boolean into a function with %d parameters returning an Option[R]\n", i, i, i) @@ -162,6 +166,8 @@ func optionize[R any](f func() (R, bool)) Option[R] { generateOptionize(f, i) // unoptionize generateUnoptionize(f, i) + // sequenceT + generateOptionSequenceT(f, i) // sequenceTuple generateOptionSequenceTuple(f, i) // traverseTuple diff --git a/context/readerioeither/http/request.go b/context/readerioeither/http/request.go index 8caac6e..d546e51 100644 --- a/context/readerioeither/http/request.go +++ b/context/readerioeither/http/request.go @@ -30,7 +30,12 @@ type ( ) var ( - NewRequest = RIOE.Eitherize3(http.NewRequestWithContext) + // MakeRequest is an eitherized version of [http.NewRequestWithContext] + MakeRequest = RIOE.Eitherize3(http.NewRequestWithContext) + makeRequest = F.Bind13of3(MakeRequest) + + // specialize + MakeGetRequest = makeRequest("GET", nil) ) func (client client) Do(req Requester) RIOE.ReaderIOEither[*http.Response] { @@ -66,6 +71,21 @@ func ReadFullResponse(client Client) func(Requester) RIOE.ReaderIOEither[H.FullR } } +// func test(resp *http.Response) IOE.IOEither[error, H.FullResponse] { +// x := F.Pipe3( +// resp, +// T.Replicate2[*http.Response], +// T.Map2( +// IOE.Of[error, *http.Response], +// F.Flow3( +// H.GetBody, +// IOE.Of[error, io.ReadCloser], +// IOEF.ReadAll[io.ReadCloser], +// ), +// ), +// ) +// } + // ReadAll sends a request and reads the response as bytes func ReadAll(client Client) func(Requester) RIOE.ReaderIOEither[[]byte] { return F.Flow2( diff --git a/context/readerioeither/http/request_test.go b/context/readerioeither/http/request_test.go index a7dd080..9d24dc7 100644 --- a/context/readerioeither/http/request_test.go +++ b/context/readerioeither/http/request_test.go @@ -19,7 +19,7 @@ func TestSendSingleRequest(t *testing.T) { client := MakeClient(H.DefaultClient) - req1 := NewRequest("GET", "https://jsonplaceholder.typicode.com/posts/1", nil) + req1 := MakeGetRequest("https://jsonplaceholder.typicode.com/posts/1") readItem := ReadJson[PostItem](client) diff --git a/either/gen.go b/either/gen.go index d578694..894d38b 100644 --- a/either/gen.go +++ b/either/gen.go @@ -1,6 +1,6 @@ // Code generated by go generate; DO NOT EDIT. // This file was generated by robots at -// 2023-07-17 13:22:56.8771166 +0200 CEST m=+0.010453601 +// 2023-07-17 17:35:30.8817939 +0200 CEST m=+0.036907301 package either @@ -45,7 +45,7 @@ func Uneitherize1[F ~func(T0) Either[error, R], T0, R any](f F) func(T0) (R, err } } -// SequenceT1 converts 1 parameters of [Either[E, T]] into an [Either] of a [Tuple1]. +// SequenceT1 converts 1 parameters of [Either[E, T]] into a [Either[E, Tuple1]]. func SequenceT1[E, T1 any](t1 Either[E, T1]) Either[E, T.Tuple1[T1]] { return A.SequenceT1( Map[E, T1, T.Tuple1[T1]], @@ -90,7 +90,7 @@ func Uneitherize2[F ~func(T0, T1) Either[error, R], T0, T1, R any](f F) func(T0, } } -// SequenceT2 converts 2 parameters of [Either[E, T]] into an [Either] of a [Tuple2]. +// SequenceT2 converts 2 parameters of [Either[E, T]] into a [Either[E, Tuple2]]. func SequenceT2[E, T1, T2 any](t1 Either[E, T1], t2 Either[E, T2]) Either[E, T.Tuple2[T1, T2]] { return A.SequenceT2( Map[E, T1, func(T2) T.Tuple2[T1, T2]], @@ -140,7 +140,7 @@ func Uneitherize3[F ~func(T0, T1, T2) Either[error, R], T0, T1, T2, R any](f F) } } -// SequenceT3 converts 3 parameters of [Either[E, T]] into an [Either] of a [Tuple3]. +// SequenceT3 converts 3 parameters of [Either[E, T]] into a [Either[E, Tuple3]]. func SequenceT3[E, T1, T2, T3 any](t1 Either[E, T1], t2 Either[E, T2], t3 Either[E, T3]) Either[E, T.Tuple3[T1, T2, T3]] { return A.SequenceT3( Map[E, T1, func(T2) func(T3) T.Tuple3[T1, T2, T3]], @@ -195,7 +195,7 @@ func Uneitherize4[F ~func(T0, T1, T2, T3) Either[error, R], T0, T1, T2, T3, R an } } -// SequenceT4 converts 4 parameters of [Either[E, T]] into an [Either] of a [Tuple4]. +// SequenceT4 converts 4 parameters of [Either[E, T]] into a [Either[E, Tuple4]]. func SequenceT4[E, T1, T2, T3, T4 any](t1 Either[E, T1], t2 Either[E, T2], t3 Either[E, T3], t4 Either[E, T4]) Either[E, T.Tuple4[T1, T2, T3, T4]] { return A.SequenceT4( Map[E, T1, func(T2) func(T3) func(T4) T.Tuple4[T1, T2, T3, T4]], @@ -255,7 +255,7 @@ func Uneitherize5[F ~func(T0, T1, T2, T3, T4) Either[error, R], T0, T1, T2, T3, } } -// SequenceT5 converts 5 parameters of [Either[E, T]] into an [Either] of a [Tuple5]. +// SequenceT5 converts 5 parameters of [Either[E, T]] into a [Either[E, Tuple5]]. func SequenceT5[E, T1, T2, T3, T4, T5 any](t1 Either[E, T1], t2 Either[E, T2], t3 Either[E, T3], t4 Either[E, T4], t5 Either[E, T5]) Either[E, T.Tuple5[T1, T2, T3, T4, T5]] { return A.SequenceT5( Map[E, T1, func(T2) func(T3) func(T4) func(T5) T.Tuple5[T1, T2, T3, T4, T5]], @@ -320,7 +320,7 @@ func Uneitherize6[F ~func(T0, T1, T2, T3, T4, T5) Either[error, R], T0, T1, T2, } } -// SequenceT6 converts 6 parameters of [Either[E, T]] into an [Either] of a [Tuple6]. +// SequenceT6 converts 6 parameters of [Either[E, T]] into a [Either[E, Tuple6]]. func SequenceT6[E, T1, T2, T3, T4, T5, T6 any](t1 Either[E, T1], t2 Either[E, T2], t3 Either[E, T3], t4 Either[E, T4], t5 Either[E, T5], t6 Either[E, T6]) Either[E, T.Tuple6[T1, T2, T3, T4, T5, T6]] { return A.SequenceT6( Map[E, T1, func(T2) func(T3) func(T4) func(T5) func(T6) T.Tuple6[T1, T2, T3, T4, T5, T6]], @@ -390,7 +390,7 @@ func Uneitherize7[F ~func(T0, T1, T2, T3, T4, T5, T6) Either[error, R], T0, T1, } } -// SequenceT7 converts 7 parameters of [Either[E, T]] into an [Either] of a [Tuple7]. +// SequenceT7 converts 7 parameters of [Either[E, T]] into a [Either[E, Tuple7]]. func SequenceT7[E, T1, T2, T3, T4, T5, T6, T7 any](t1 Either[E, T1], t2 Either[E, T2], t3 Either[E, T3], t4 Either[E, T4], t5 Either[E, T5], t6 Either[E, T6], t7 Either[E, T7]) Either[E, T.Tuple7[T1, T2, T3, T4, T5, T6, T7]] { return A.SequenceT7( Map[E, T1, func(T2) func(T3) func(T4) func(T5) func(T6) func(T7) T.Tuple7[T1, T2, T3, T4, T5, T6, T7]], @@ -465,7 +465,7 @@ func Uneitherize8[F ~func(T0, T1, T2, T3, T4, T5, T6, T7) Either[error, R], T0, } } -// SequenceT8 converts 8 parameters of [Either[E, T]] into an [Either] of a [Tuple8]. +// SequenceT8 converts 8 parameters of [Either[E, T]] into a [Either[E, Tuple8]]. func SequenceT8[E, T1, T2, T3, T4, T5, T6, T7, T8 any](t1 Either[E, T1], t2 Either[E, T2], t3 Either[E, T3], t4 Either[E, T4], t5 Either[E, T5], t6 Either[E, T6], t7 Either[E, T7], t8 Either[E, T8]) Either[E, T.Tuple8[T1, T2, T3, T4, T5, T6, T7, T8]] { return A.SequenceT8( Map[E, T1, func(T2) func(T3) func(T4) func(T5) func(T6) func(T7) func(T8) T.Tuple8[T1, T2, T3, T4, T5, T6, T7, T8]], @@ -545,7 +545,7 @@ func Uneitherize9[F ~func(T0, T1, T2, T3, T4, T5, T6, T7, T8) Either[error, R], } } -// SequenceT9 converts 9 parameters of [Either[E, T]] into an [Either] of a [Tuple9]. +// SequenceT9 converts 9 parameters of [Either[E, T]] into a [Either[E, Tuple9]]. func SequenceT9[E, T1, T2, T3, T4, T5, T6, T7, T8, T9 any](t1 Either[E, T1], t2 Either[E, T2], t3 Either[E, T3], t4 Either[E, T4], t5 Either[E, T5], t6 Either[E, T6], t7 Either[E, T7], t8 Either[E, T8], t9 Either[E, T9]) Either[E, T.Tuple9[T1, T2, T3, T4, T5, T6, T7, T8, T9]] { return A.SequenceT9( Map[E, T1, 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]], @@ -630,7 +630,7 @@ func Uneitherize10[F ~func(T0, T1, T2, T3, T4, T5, T6, T7, T8, T9) Either[error, } } -// SequenceT10 converts 10 parameters of [Either[E, T]] into an [Either] of a [Tuple10]. +// SequenceT10 converts 10 parameters of [Either[E, T]] into a [Either[E, Tuple10]]. func SequenceT10[E, T1, T2, T3, T4, T5, T6, T7, T8, T9, T10 any](t1 Either[E, T1], t2 Either[E, T2], t3 Either[E, T3], t4 Either[E, T4], t5 Either[E, T5], t6 Either[E, T6], t7 Either[E, T7], t8 Either[E, T8], t9 Either[E, T9], t10 Either[E, T10]) Either[E, T.Tuple10[T1, T2, T3, T4, T5, T6, T7, T8, T9, T10]] { return A.SequenceT10( Map[E, T1, 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]], diff --git a/function/binds.go b/function/binds.go index 101f0c9..a7f080f 100644 --- a/function/binds.go +++ b/function/binds.go @@ -1,6 +1,6 @@ // Code generated by go generate; DO NOT EDIT. // This file was generated by robots at -// 2023-07-17 13:23:07.340967 +0200 CEST m=+0.009883801 +// 2023-07-17 17:35:52.0895848 +0200 CEST m=+0.125356601 package function // Combinations for a total of 1 arguments diff --git a/function/gen.go b/function/gen.go index d0ac5cd..34dbbfd 100644 --- a/function/gen.go +++ b/function/gen.go @@ -1,6 +1,6 @@ // Code generated by go generate; DO NOT EDIT. // This file was generated by robots at -// 2023-07-17 13:22:59.4952853 +0200 CEST m=+0.226069901 +// 2023-07-17 17:35:38.6832268 +0200 CEST m=+0.043674901 package function // Pipe0 takes an initial value t0 and successively applies 0 functions where the input of a function is the return value of the previous function diff --git a/http/utils.go b/http/utils.go index 7c57c1c..0b542f8 100644 --- a/http/utils.go +++ b/http/utils.go @@ -35,6 +35,16 @@ var ( }), )), ) + // ValidateJsonResponse checks if an HTTP response is a valid JSON response + ValidateJsonResponse = F.Flow2( + E.Of[error, *H.Response], + E.ChainFirst(F.Flow5( + GetHeader, + R.Lookup[H.Header](HeaderContentType), + O.Chain(A.First[string]), + E.FromOption[error, string](errors.OnNone("unable to access the [%s] header", HeaderContentType)), + E.ChainFirst(validateJsonContentTypeString), + ))) ) const ( @@ -64,16 +74,3 @@ func isValidStatus(resp *H.Response) bool { func StatusCodeError(resp *H.Response) error { return fmt.Errorf("invalid status code [%d] when accessing URL [%s]", resp.StatusCode, resp.Request.URL) } - -// ValidateJsonResponse checks if an HTTP response is a valid JSON response -func ValidateJsonResponse(resp *H.Response) E.Either[error, *H.Response] { - return F.Pipe6( - resp, - GetHeader, - R.Lookup[H.Header](HeaderContentType), - O.Chain(A.First[string]), - E.FromOption[error, string](errors.OnNone("unable to access the [%s] header", HeaderContentType)), - E.ChainFirst(validateJsonContentTypeString), - E.MapTo[error, string](resp), - ) -} diff --git a/identity/doc.go b/identity/doc.go new file mode 100644 index 0000000..ef0b19f --- /dev/null +++ b/identity/doc.go @@ -0,0 +1,3 @@ +package identity + +//go:generate go run .. identity --count 10 --filename gen.go diff --git a/identity/gen.go b/identity/gen.go new file mode 100644 index 0000000..87fda37 --- /dev/null +++ b/identity/gen.go @@ -0,0 +1,505 @@ +// Code generated by go generate; DO NOT EDIT. +// This file was generated by robots at +// 2023-07-17 17:36:02.7073931 +0200 CEST m=+0.136048201 +package identity + + +import ( + A "github.com/ibm/fp-go/internal/apply" + T "github.com/ibm/fp-go/tuple" +) + +// SequenceT1 converts 1 parameters of [T] into a [Tuple1]. +func SequenceT1[T1 any](t1 T1) T.Tuple1[T1] { + return A.SequenceT1( + Map[T1, T.Tuple1[T1]], + t1, + ) +} + +// SequenceTuple1 converts a [Tuple1] of [T] into an [Tuple1]. +func SequenceTuple1[T1 any](t T.Tuple1[T1]) T.Tuple1[T1] { + return A.SequenceTuple1( + Map[T1, T.Tuple1[T1]], + t, + ) +} + +// TraverseTuple1 converts a [Tuple1] of [A] via transformation functions transforming [A] to [A] into a [Tuple1]. +func TraverseTuple1[F1 ~func(A1) T1, A1, T1 any](f1 F1) func (T.Tuple1[A1]) T.Tuple1[T1] { + return func(t T.Tuple1[A1]) T.Tuple1[T1] { + return A.TraverseTuple1( + Map[T1, T.Tuple1[T1]], + f1, + t, + ) + } +} + +// SequenceT2 converts 2 parameters of [T] into a [Tuple2]. +func SequenceT2[T1, T2 any](t1 T1, t2 T2) T.Tuple2[T1, T2] { + return A.SequenceT2( + Map[T1, func(T2) T.Tuple2[T1, T2]], + Ap[T.Tuple2[T1, T2], T2], + t1, + t2, + ) +} + +// SequenceTuple2 converts a [Tuple2] of [T] into an [Tuple2]. +func SequenceTuple2[T1, T2 any](t T.Tuple2[T1, T2]) T.Tuple2[T1, T2] { + return A.SequenceTuple2( + Map[T1, func(T2) T.Tuple2[T1, T2]], + Ap[T.Tuple2[T1, T2], T2], + t, + ) +} + +// TraverseTuple2 converts a [Tuple2] of [A] via transformation functions transforming [A] to [A] into a [Tuple2]. +func TraverseTuple2[F1 ~func(A1) T1, F2 ~func(A2) T2, A1, T1, A2, T2 any](f1 F1, f2 F2) func (T.Tuple2[A1, A2]) T.Tuple2[T1, T2] { + return func(t T.Tuple2[A1, A2]) T.Tuple2[T1, T2] { + return A.TraverseTuple2( + Map[T1, func(T2) T.Tuple2[T1, T2]], + Ap[T.Tuple2[T1, T2], T2], + f1, + f2, + t, + ) + } +} + +// SequenceT3 converts 3 parameters of [T] into a [Tuple3]. +func SequenceT3[T1, T2, T3 any](t1 T1, t2 T2, t3 T3) T.Tuple3[T1, T2, T3] { + return A.SequenceT3( + Map[T1, func(T2) func(T3) T.Tuple3[T1, T2, T3]], + Ap[func(T3) T.Tuple3[T1, T2, T3], T2], + Ap[T.Tuple3[T1, T2, T3], T3], + t1, + t2, + t3, + ) +} + +// SequenceTuple3 converts a [Tuple3] of [T] into an [Tuple3]. +func SequenceTuple3[T1, T2, T3 any](t T.Tuple3[T1, T2, T3]) T.Tuple3[T1, T2, T3] { + return A.SequenceTuple3( + Map[T1, func(T2) func(T3) T.Tuple3[T1, T2, T3]], + Ap[func(T3) T.Tuple3[T1, T2, T3], T2], + Ap[T.Tuple3[T1, T2, T3], T3], + t, + ) +} + +// TraverseTuple3 converts a [Tuple3] of [A] via transformation functions transforming [A] to [A] into a [Tuple3]. +func TraverseTuple3[F1 ~func(A1) T1, F2 ~func(A2) T2, F3 ~func(A3) T3, A1, T1, A2, T2, A3, T3 any](f1 F1, f2 F2, f3 F3) func (T.Tuple3[A1, A2, A3]) T.Tuple3[T1, T2, T3] { + return func(t T.Tuple3[A1, A2, A3]) T.Tuple3[T1, T2, T3] { + return A.TraverseTuple3( + Map[T1, func(T2) func(T3) T.Tuple3[T1, T2, T3]], + Ap[func(T3) T.Tuple3[T1, T2, T3], T2], + Ap[T.Tuple3[T1, T2, T3], T3], + f1, + f2, + f3, + t, + ) + } +} + +// SequenceT4 converts 4 parameters of [T] into a [Tuple4]. +func SequenceT4[T1, T2, T3, T4 any](t1 T1, t2 T2, t3 T3, t4 T4) T.Tuple4[T1, T2, T3, T4] { + return A.SequenceT4( + Map[T1, func(T2) func(T3) func(T4) T.Tuple4[T1, T2, T3, T4]], + Ap[func(T3) func(T4) T.Tuple4[T1, T2, T3, T4], T2], + Ap[func(T4) T.Tuple4[T1, T2, T3, T4], T3], + Ap[T.Tuple4[T1, T2, T3, T4], T4], + t1, + t2, + t3, + t4, + ) +} + +// SequenceTuple4 converts a [Tuple4] of [T] into an [Tuple4]. +func SequenceTuple4[T1, T2, T3, T4 any](t T.Tuple4[T1, T2, T3, T4]) T.Tuple4[T1, T2, T3, T4] { + return A.SequenceTuple4( + Map[T1, func(T2) func(T3) func(T4) T.Tuple4[T1, T2, T3, T4]], + Ap[func(T3) func(T4) T.Tuple4[T1, T2, T3, T4], T2], + Ap[func(T4) T.Tuple4[T1, T2, T3, T4], T3], + Ap[T.Tuple4[T1, T2, T3, T4], T4], + t, + ) +} + +// TraverseTuple4 converts a [Tuple4] of [A] via transformation functions transforming [A] to [A] into a [Tuple4]. +func TraverseTuple4[F1 ~func(A1) T1, F2 ~func(A2) T2, F3 ~func(A3) T3, F4 ~func(A4) T4, A1, T1, A2, T2, A3, T3, A4, T4 any](f1 F1, f2 F2, f3 F3, f4 F4) func (T.Tuple4[A1, A2, A3, A4]) T.Tuple4[T1, T2, T3, T4] { + return func(t T.Tuple4[A1, A2, A3, A4]) T.Tuple4[T1, T2, T3, T4] { + return A.TraverseTuple4( + Map[T1, func(T2) func(T3) func(T4) T.Tuple4[T1, T2, T3, T4]], + Ap[func(T3) func(T4) T.Tuple4[T1, T2, T3, T4], T2], + Ap[func(T4) T.Tuple4[T1, T2, T3, T4], T3], + Ap[T.Tuple4[T1, T2, T3, T4], T4], + f1, + f2, + f3, + f4, + t, + ) + } +} + +// SequenceT5 converts 5 parameters of [T] into a [Tuple5]. +func SequenceT5[T1, T2, T3, T4, T5 any](t1 T1, t2 T2, t3 T3, t4 T4, t5 T5) T.Tuple5[T1, T2, T3, T4, T5] { + return A.SequenceT5( + Map[T1, func(T2) func(T3) func(T4) func(T5) T.Tuple5[T1, T2, T3, T4, T5]], + Ap[func(T3) func(T4) func(T5) T.Tuple5[T1, T2, T3, T4, T5], T2], + Ap[func(T4) func(T5) T.Tuple5[T1, T2, T3, T4, T5], T3], + Ap[func(T5) T.Tuple5[T1, T2, T3, T4, T5], T4], + Ap[T.Tuple5[T1, T2, T3, T4, T5], T5], + t1, + t2, + t3, + t4, + t5, + ) +} + +// SequenceTuple5 converts a [Tuple5] of [T] into an [Tuple5]. +func SequenceTuple5[T1, T2, T3, T4, T5 any](t T.Tuple5[T1, T2, T3, T4, T5]) T.Tuple5[T1, T2, T3, T4, T5] { + return A.SequenceTuple5( + Map[T1, func(T2) func(T3) func(T4) func(T5) T.Tuple5[T1, T2, T3, T4, T5]], + Ap[func(T3) func(T4) func(T5) T.Tuple5[T1, T2, T3, T4, T5], T2], + Ap[func(T4) func(T5) T.Tuple5[T1, T2, T3, T4, T5], T3], + Ap[func(T5) T.Tuple5[T1, T2, T3, T4, T5], T4], + Ap[T.Tuple5[T1, T2, T3, T4, T5], T5], + t, + ) +} + +// TraverseTuple5 converts a [Tuple5] of [A] via transformation functions transforming [A] to [A] into a [Tuple5]. +func TraverseTuple5[F1 ~func(A1) T1, F2 ~func(A2) T2, F3 ~func(A3) T3, F4 ~func(A4) T4, F5 ~func(A5) T5, A1, T1, A2, T2, A3, T3, A4, T4, A5, T5 any](f1 F1, f2 F2, f3 F3, f4 F4, f5 F5) func (T.Tuple5[A1, A2, A3, A4, A5]) T.Tuple5[T1, T2, T3, T4, T5] { + return func(t T.Tuple5[A1, A2, A3, A4, A5]) T.Tuple5[T1, T2, T3, T4, T5] { + return A.TraverseTuple5( + Map[T1, func(T2) func(T3) func(T4) func(T5) T.Tuple5[T1, T2, T3, T4, T5]], + Ap[func(T3) func(T4) func(T5) T.Tuple5[T1, T2, T3, T4, T5], T2], + Ap[func(T4) func(T5) T.Tuple5[T1, T2, T3, T4, T5], T3], + Ap[func(T5) T.Tuple5[T1, T2, T3, T4, T5], T4], + Ap[T.Tuple5[T1, T2, T3, T4, T5], T5], + f1, + f2, + f3, + f4, + f5, + t, + ) + } +} + +// SequenceT6 converts 6 parameters of [T] into a [Tuple6]. +func SequenceT6[T1, T2, T3, T4, T5, T6 any](t1 T1, t2 T2, t3 T3, t4 T4, t5 T5, t6 T6) T.Tuple6[T1, T2, T3, T4, T5, T6] { + return A.SequenceT6( + Map[T1, func(T2) func(T3) func(T4) func(T5) func(T6) T.Tuple6[T1, T2, T3, T4, T5, T6]], + Ap[func(T3) func(T4) func(T5) func(T6) T.Tuple6[T1, T2, T3, T4, T5, T6], T2], + Ap[func(T4) func(T5) func(T6) T.Tuple6[T1, T2, T3, T4, T5, T6], T3], + Ap[func(T5) func(T6) T.Tuple6[T1, T2, T3, T4, T5, T6], T4], + Ap[func(T6) T.Tuple6[T1, T2, T3, T4, T5, T6], T5], + Ap[T.Tuple6[T1, T2, T3, T4, T5, T6], T6], + t1, + t2, + t3, + t4, + t5, + t6, + ) +} + +// SequenceTuple6 converts a [Tuple6] of [T] into an [Tuple6]. +func SequenceTuple6[T1, T2, T3, T4, T5, T6 any](t T.Tuple6[T1, T2, T3, T4, T5, T6]) T.Tuple6[T1, T2, T3, T4, T5, T6] { + return A.SequenceTuple6( + Map[T1, func(T2) func(T3) func(T4) func(T5) func(T6) T.Tuple6[T1, T2, T3, T4, T5, T6]], + Ap[func(T3) func(T4) func(T5) func(T6) T.Tuple6[T1, T2, T3, T4, T5, T6], T2], + Ap[func(T4) func(T5) func(T6) T.Tuple6[T1, T2, T3, T4, T5, T6], T3], + Ap[func(T5) func(T6) T.Tuple6[T1, T2, T3, T4, T5, T6], T4], + Ap[func(T6) T.Tuple6[T1, T2, T3, T4, T5, T6], T5], + Ap[T.Tuple6[T1, T2, T3, T4, T5, T6], T6], + t, + ) +} + +// TraverseTuple6 converts a [Tuple6] of [A] via transformation functions transforming [A] to [A] into a [Tuple6]. +func TraverseTuple6[F1 ~func(A1) T1, F2 ~func(A2) T2, F3 ~func(A3) T3, F4 ~func(A4) T4, F5 ~func(A5) T5, F6 ~func(A6) T6, A1, T1, A2, T2, A3, T3, A4, T4, A5, T5, A6, T6 any](f1 F1, f2 F2, f3 F3, f4 F4, f5 F5, f6 F6) func (T.Tuple6[A1, A2, A3, A4, A5, A6]) T.Tuple6[T1, T2, T3, T4, T5, T6] { + return func(t T.Tuple6[A1, A2, A3, A4, A5, A6]) T.Tuple6[T1, T2, T3, T4, T5, T6] { + return A.TraverseTuple6( + Map[T1, func(T2) func(T3) func(T4) func(T5) func(T6) T.Tuple6[T1, T2, T3, T4, T5, T6]], + Ap[func(T3) func(T4) func(T5) func(T6) T.Tuple6[T1, T2, T3, T4, T5, T6], T2], + Ap[func(T4) func(T5) func(T6) T.Tuple6[T1, T2, T3, T4, T5, T6], T3], + Ap[func(T5) func(T6) T.Tuple6[T1, T2, T3, T4, T5, T6], T4], + Ap[func(T6) T.Tuple6[T1, T2, T3, T4, T5, T6], T5], + Ap[T.Tuple6[T1, T2, T3, T4, T5, T6], T6], + f1, + f2, + f3, + f4, + f5, + f6, + t, + ) + } +} + +// SequenceT7 converts 7 parameters of [T] into a [Tuple7]. +func SequenceT7[T1, T2, T3, T4, T5, T6, T7 any](t1 T1, t2 T2, t3 T3, t4 T4, t5 T5, t6 T6, t7 T7) T.Tuple7[T1, T2, T3, T4, T5, T6, T7] { + return A.SequenceT7( + Map[T1, func(T2) func(T3) func(T4) func(T5) func(T6) func(T7) T.Tuple7[T1, T2, T3, T4, T5, T6, T7]], + Ap[func(T3) func(T4) func(T5) func(T6) func(T7) T.Tuple7[T1, T2, T3, T4, T5, T6, T7], T2], + Ap[func(T4) func(T5) func(T6) func(T7) T.Tuple7[T1, T2, T3, T4, T5, T6, T7], T3], + Ap[func(T5) func(T6) func(T7) T.Tuple7[T1, T2, T3, T4, T5, T6, T7], T4], + Ap[func(T6) func(T7) T.Tuple7[T1, T2, T3, T4, T5, T6, T7], T5], + Ap[func(T7) T.Tuple7[T1, T2, T3, T4, T5, T6, T7], T6], + Ap[T.Tuple7[T1, T2, T3, T4, T5, T6, T7], T7], + t1, + t2, + t3, + t4, + t5, + t6, + t7, + ) +} + +// SequenceTuple7 converts a [Tuple7] of [T] into an [Tuple7]. +func SequenceTuple7[T1, T2, T3, T4, T5, T6, T7 any](t T.Tuple7[T1, T2, T3, T4, T5, T6, T7]) T.Tuple7[T1, T2, T3, T4, T5, T6, T7] { + return A.SequenceTuple7( + Map[T1, func(T2) func(T3) func(T4) func(T5) func(T6) func(T7) T.Tuple7[T1, T2, T3, T4, T5, T6, T7]], + Ap[func(T3) func(T4) func(T5) func(T6) func(T7) T.Tuple7[T1, T2, T3, T4, T5, T6, T7], T2], + Ap[func(T4) func(T5) func(T6) func(T7) T.Tuple7[T1, T2, T3, T4, T5, T6, T7], T3], + Ap[func(T5) func(T6) func(T7) T.Tuple7[T1, T2, T3, T4, T5, T6, T7], T4], + Ap[func(T6) func(T7) T.Tuple7[T1, T2, T3, T4, T5, T6, T7], T5], + Ap[func(T7) T.Tuple7[T1, T2, T3, T4, T5, T6, T7], T6], + Ap[T.Tuple7[T1, T2, T3, T4, T5, T6, T7], T7], + t, + ) +} + +// TraverseTuple7 converts a [Tuple7] of [A] via transformation functions transforming [A] to [A] into a [Tuple7]. +func TraverseTuple7[F1 ~func(A1) T1, F2 ~func(A2) T2, F3 ~func(A3) T3, F4 ~func(A4) T4, F5 ~func(A5) T5, F6 ~func(A6) T6, F7 ~func(A7) T7, A1, T1, A2, T2, A3, T3, A4, T4, A5, T5, A6, T6, A7, T7 any](f1 F1, f2 F2, f3 F3, f4 F4, f5 F5, f6 F6, f7 F7) func (T.Tuple7[A1, A2, A3, A4, A5, A6, A7]) T.Tuple7[T1, T2, T3, T4, T5, T6, T7] { + return func(t T.Tuple7[A1, A2, A3, A4, A5, A6, A7]) T.Tuple7[T1, T2, T3, T4, T5, T6, T7] { + return A.TraverseTuple7( + Map[T1, func(T2) func(T3) func(T4) func(T5) func(T6) func(T7) T.Tuple7[T1, T2, T3, T4, T5, T6, T7]], + Ap[func(T3) func(T4) func(T5) func(T6) func(T7) T.Tuple7[T1, T2, T3, T4, T5, T6, T7], T2], + Ap[func(T4) func(T5) func(T6) func(T7) T.Tuple7[T1, T2, T3, T4, T5, T6, T7], T3], + Ap[func(T5) func(T6) func(T7) T.Tuple7[T1, T2, T3, T4, T5, T6, T7], T4], + Ap[func(T6) func(T7) T.Tuple7[T1, T2, T3, T4, T5, T6, T7], T5], + Ap[func(T7) T.Tuple7[T1, T2, T3, T4, T5, T6, T7], T6], + Ap[T.Tuple7[T1, T2, T3, T4, T5, T6, T7], T7], + f1, + f2, + f3, + f4, + f5, + f6, + f7, + t, + ) + } +} + +// SequenceT8 converts 8 parameters of [T] into a [Tuple8]. +func SequenceT8[T1, T2, T3, T4, T5, T6, T7, T8 any](t1 T1, t2 T2, t3 T3, t4 T4, t5 T5, t6 T6, t7 T7, t8 T8) T.Tuple8[T1, T2, T3, T4, T5, T6, T7, T8] { + return A.SequenceT8( + Map[T1, func(T2) func(T3) func(T4) func(T5) func(T6) func(T7) func(T8) T.Tuple8[T1, T2, T3, T4, T5, T6, T7, T8]], + Ap[func(T3) func(T4) func(T5) func(T6) func(T7) func(T8) T.Tuple8[T1, T2, T3, T4, T5, T6, T7, T8], T2], + Ap[func(T4) func(T5) func(T6) func(T7) func(T8) T.Tuple8[T1, T2, T3, T4, T5, T6, T7, T8], T3], + Ap[func(T5) func(T6) func(T7) func(T8) T.Tuple8[T1, T2, T3, T4, T5, T6, T7, T8], T4], + Ap[func(T6) func(T7) func(T8) T.Tuple8[T1, T2, T3, T4, T5, T6, T7, T8], T5], + Ap[func(T7) func(T8) T.Tuple8[T1, T2, T3, T4, T5, T6, T7, T8], T6], + Ap[func(T8) T.Tuple8[T1, T2, T3, T4, T5, T6, T7, T8], T7], + Ap[T.Tuple8[T1, T2, T3, T4, T5, T6, T7, T8], T8], + t1, + t2, + t3, + t4, + t5, + t6, + t7, + t8, + ) +} + +// SequenceTuple8 converts a [Tuple8] of [T] into an [Tuple8]. +func SequenceTuple8[T1, T2, T3, T4, T5, T6, T7, T8 any](t T.Tuple8[T1, T2, T3, T4, T5, T6, T7, T8]) T.Tuple8[T1, T2, T3, T4, T5, T6, T7, T8] { + return A.SequenceTuple8( + Map[T1, func(T2) func(T3) func(T4) func(T5) func(T6) func(T7) func(T8) T.Tuple8[T1, T2, T3, T4, T5, T6, T7, T8]], + Ap[func(T3) func(T4) func(T5) func(T6) func(T7) func(T8) T.Tuple8[T1, T2, T3, T4, T5, T6, T7, T8], T2], + Ap[func(T4) func(T5) func(T6) func(T7) func(T8) T.Tuple8[T1, T2, T3, T4, T5, T6, T7, T8], T3], + Ap[func(T5) func(T6) func(T7) func(T8) T.Tuple8[T1, T2, T3, T4, T5, T6, T7, T8], T4], + Ap[func(T6) func(T7) func(T8) T.Tuple8[T1, T2, T3, T4, T5, T6, T7, T8], T5], + Ap[func(T7) func(T8) T.Tuple8[T1, T2, T3, T4, T5, T6, T7, T8], T6], + Ap[func(T8) T.Tuple8[T1, T2, T3, T4, T5, T6, T7, T8], T7], + Ap[T.Tuple8[T1, T2, T3, T4, T5, T6, T7, T8], T8], + t, + ) +} + +// TraverseTuple8 converts a [Tuple8] of [A] via transformation functions transforming [A] to [A] into a [Tuple8]. +func TraverseTuple8[F1 ~func(A1) T1, F2 ~func(A2) T2, F3 ~func(A3) T3, F4 ~func(A4) T4, F5 ~func(A5) T5, F6 ~func(A6) T6, F7 ~func(A7) T7, F8 ~func(A8) T8, A1, T1, A2, T2, A3, T3, A4, T4, A5, T5, A6, T6, A7, T7, A8, T8 any](f1 F1, f2 F2, f3 F3, f4 F4, f5 F5, f6 F6, f7 F7, f8 F8) func (T.Tuple8[A1, A2, A3, A4, A5, A6, A7, A8]) T.Tuple8[T1, T2, T3, T4, T5, T6, T7, T8] { + return func(t T.Tuple8[A1, A2, A3, A4, A5, A6, A7, A8]) T.Tuple8[T1, T2, T3, T4, T5, T6, T7, T8] { + return A.TraverseTuple8( + Map[T1, func(T2) func(T3) func(T4) func(T5) func(T6) func(T7) func(T8) T.Tuple8[T1, T2, T3, T4, T5, T6, T7, T8]], + Ap[func(T3) func(T4) func(T5) func(T6) func(T7) func(T8) T.Tuple8[T1, T2, T3, T4, T5, T6, T7, T8], T2], + Ap[func(T4) func(T5) func(T6) func(T7) func(T8) T.Tuple8[T1, T2, T3, T4, T5, T6, T7, T8], T3], + Ap[func(T5) func(T6) func(T7) func(T8) T.Tuple8[T1, T2, T3, T4, T5, T6, T7, T8], T4], + Ap[func(T6) func(T7) func(T8) T.Tuple8[T1, T2, T3, T4, T5, T6, T7, T8], T5], + Ap[func(T7) func(T8) T.Tuple8[T1, T2, T3, T4, T5, T6, T7, T8], T6], + Ap[func(T8) T.Tuple8[T1, T2, T3, T4, T5, T6, T7, T8], T7], + Ap[T.Tuple8[T1, T2, T3, T4, T5, T6, T7, T8], T8], + f1, + f2, + f3, + f4, + f5, + f6, + f7, + f8, + t, + ) + } +} + +// SequenceT9 converts 9 parameters of [T] into a [Tuple9]. +func SequenceT9[T1, T2, T3, T4, T5, T6, T7, T8, T9 any](t1 T1, t2 T2, t3 T3, t4 T4, t5 T5, t6 T6, t7 T7, t8 T8, t9 T9) T.Tuple9[T1, T2, T3, T4, T5, T6, T7, T8, T9] { + return A.SequenceT9( + Map[T1, 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]], + Ap[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], T2], + Ap[func(T4) func(T5) func(T6) func(T7) func(T8) func(T9) T.Tuple9[T1, T2, T3, T4, T5, T6, T7, T8, T9], T3], + Ap[func(T5) func(T6) func(T7) func(T8) func(T9) T.Tuple9[T1, T2, T3, T4, T5, T6, T7, T8, T9], T4], + Ap[func(T6) func(T7) func(T8) func(T9) T.Tuple9[T1, T2, T3, T4, T5, T6, T7, T8, T9], T5], + Ap[func(T7) func(T8) func(T9) T.Tuple9[T1, T2, T3, T4, T5, T6, T7, T8, T9], T6], + Ap[func(T8) func(T9) T.Tuple9[T1, T2, T3, T4, T5, T6, T7, T8, T9], T7], + Ap[func(T9) T.Tuple9[T1, T2, T3, T4, T5, T6, T7, T8, T9], T8], + Ap[T.Tuple9[T1, T2, T3, T4, T5, T6, T7, T8, T9], T9], + t1, + t2, + t3, + t4, + t5, + t6, + t7, + t8, + t9, + ) +} + +// SequenceTuple9 converts a [Tuple9] of [T] into an [Tuple9]. +func SequenceTuple9[T1, T2, T3, T4, T5, T6, T7, T8, T9 any](t T.Tuple9[T1, T2, T3, T4, T5, T6, T7, T8, T9]) T.Tuple9[T1, T2, T3, T4, T5, T6, T7, T8, T9] { + return A.SequenceTuple9( + Map[T1, 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]], + Ap[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], T2], + Ap[func(T4) func(T5) func(T6) func(T7) func(T8) func(T9) T.Tuple9[T1, T2, T3, T4, T5, T6, T7, T8, T9], T3], + Ap[func(T5) func(T6) func(T7) func(T8) func(T9) T.Tuple9[T1, T2, T3, T4, T5, T6, T7, T8, T9], T4], + Ap[func(T6) func(T7) func(T8) func(T9) T.Tuple9[T1, T2, T3, T4, T5, T6, T7, T8, T9], T5], + Ap[func(T7) func(T8) func(T9) T.Tuple9[T1, T2, T3, T4, T5, T6, T7, T8, T9], T6], + Ap[func(T8) func(T9) T.Tuple9[T1, T2, T3, T4, T5, T6, T7, T8, T9], T7], + Ap[func(T9) T.Tuple9[T1, T2, T3, T4, T5, T6, T7, T8, T9], T8], + Ap[T.Tuple9[T1, T2, T3, T4, T5, T6, T7, T8, T9], T9], + t, + ) +} + +// TraverseTuple9 converts a [Tuple9] of [A] via transformation functions transforming [A] to [A] into a [Tuple9]. +func TraverseTuple9[F1 ~func(A1) T1, F2 ~func(A2) T2, F3 ~func(A3) T3, F4 ~func(A4) T4, F5 ~func(A5) T5, F6 ~func(A6) T6, F7 ~func(A7) T7, F8 ~func(A8) T8, F9 ~func(A9) T9, A1, T1, A2, T2, A3, T3, A4, T4, A5, T5, A6, T6, A7, T7, A8, T8, A9, T9 any](f1 F1, f2 F2, f3 F3, f4 F4, f5 F5, f6 F6, f7 F7, f8 F8, f9 F9) func (T.Tuple9[A1, A2, A3, A4, A5, A6, A7, A8, A9]) T.Tuple9[T1, T2, T3, T4, T5, T6, T7, T8, T9] { + return func(t T.Tuple9[A1, A2, A3, A4, A5, A6, A7, A8, A9]) T.Tuple9[T1, T2, T3, T4, T5, T6, T7, T8, T9] { + return A.TraverseTuple9( + Map[T1, 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]], + Ap[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], T2], + Ap[func(T4) func(T5) func(T6) func(T7) func(T8) func(T9) T.Tuple9[T1, T2, T3, T4, T5, T6, T7, T8, T9], T3], + Ap[func(T5) func(T6) func(T7) func(T8) func(T9) T.Tuple9[T1, T2, T3, T4, T5, T6, T7, T8, T9], T4], + Ap[func(T6) func(T7) func(T8) func(T9) T.Tuple9[T1, T2, T3, T4, T5, T6, T7, T8, T9], T5], + Ap[func(T7) func(T8) func(T9) T.Tuple9[T1, T2, T3, T4, T5, T6, T7, T8, T9], T6], + Ap[func(T8) func(T9) T.Tuple9[T1, T2, T3, T4, T5, T6, T7, T8, T9], T7], + Ap[func(T9) T.Tuple9[T1, T2, T3, T4, T5, T6, T7, T8, T9], T8], + Ap[T.Tuple9[T1, T2, T3, T4, T5, T6, T7, T8, T9], T9], + f1, + f2, + f3, + f4, + f5, + f6, + f7, + f8, + f9, + t, + ) + } +} + +// SequenceT10 converts 10 parameters of [T] into a [Tuple10]. +func SequenceT10[T1, T2, T3, T4, T5, T6, T7, T8, T9, T10 any](t1 T1, t2 T2, t3 T3, t4 T4, t5 T5, t6 T6, t7 T7, t8 T8, t9 T9, t10 T10) T.Tuple10[T1, T2, T3, T4, T5, T6, T7, T8, T9, T10] { + return A.SequenceT10( + Map[T1, 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]], + Ap[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], T2], + Ap[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], T3], + Ap[func(T5) func(T6) func(T7) func(T8) func(T9) func(T10) T.Tuple10[T1, T2, T3, T4, T5, T6, T7, T8, T9, T10], T4], + Ap[func(T6) func(T7) func(T8) func(T9) func(T10) T.Tuple10[T1, T2, T3, T4, T5, T6, T7, T8, T9, T10], T5], + Ap[func(T7) func(T8) func(T9) func(T10) T.Tuple10[T1, T2, T3, T4, T5, T6, T7, T8, T9, T10], T6], + Ap[func(T8) func(T9) func(T10) T.Tuple10[T1, T2, T3, T4, T5, T6, T7, T8, T9, T10], T7], + Ap[func(T9) func(T10) T.Tuple10[T1, T2, T3, T4, T5, T6, T7, T8, T9, T10], T8], + Ap[func(T10) T.Tuple10[T1, T2, T3, T4, T5, T6, T7, T8, T9, T10], T9], + Ap[T.Tuple10[T1, T2, T3, T4, T5, T6, T7, T8, T9, T10], T10], + t1, + t2, + t3, + t4, + t5, + t6, + t7, + t8, + t9, + t10, + ) +} + +// SequenceTuple10 converts a [Tuple10] of [T] into an [Tuple10]. +func SequenceTuple10[T1, T2, T3, T4, T5, T6, T7, T8, T9, T10 any](t T.Tuple10[T1, T2, T3, T4, T5, T6, T7, T8, T9, T10]) T.Tuple10[T1, T2, T3, T4, T5, T6, T7, T8, T9, T10] { + return A.SequenceTuple10( + Map[T1, 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]], + Ap[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], T2], + Ap[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], T3], + Ap[func(T5) func(T6) func(T7) func(T8) func(T9) func(T10) T.Tuple10[T1, T2, T3, T4, T5, T6, T7, T8, T9, T10], T4], + Ap[func(T6) func(T7) func(T8) func(T9) func(T10) T.Tuple10[T1, T2, T3, T4, T5, T6, T7, T8, T9, T10], T5], + Ap[func(T7) func(T8) func(T9) func(T10) T.Tuple10[T1, T2, T3, T4, T5, T6, T7, T8, T9, T10], T6], + Ap[func(T8) func(T9) func(T10) T.Tuple10[T1, T2, T3, T4, T5, T6, T7, T8, T9, T10], T7], + Ap[func(T9) func(T10) T.Tuple10[T1, T2, T3, T4, T5, T6, T7, T8, T9, T10], T8], + Ap[func(T10) T.Tuple10[T1, T2, T3, T4, T5, T6, T7, T8, T9, T10], T9], + Ap[T.Tuple10[T1, T2, T3, T4, T5, T6, T7, T8, T9, T10], T10], + t, + ) +} + +// TraverseTuple10 converts a [Tuple10] of [A] via transformation functions transforming [A] to [A] into a [Tuple10]. +func TraverseTuple10[F1 ~func(A1) T1, F2 ~func(A2) T2, F3 ~func(A3) T3, F4 ~func(A4) T4, F5 ~func(A5) T5, F6 ~func(A6) T6, F7 ~func(A7) T7, F8 ~func(A8) T8, F9 ~func(A9) T9, F10 ~func(A10) T10, A1, T1, A2, T2, A3, T3, A4, T4, A5, T5, A6, T6, A7, T7, A8, T8, A9, T9, A10, T10 any](f1 F1, f2 F2, f3 F3, f4 F4, f5 F5, f6 F6, f7 F7, f8 F8, f9 F9, f10 F10) func (T.Tuple10[A1, A2, A3, A4, A5, A6, A7, A8, A9, A10]) T.Tuple10[T1, T2, T3, T4, T5, T6, T7, T8, T9, T10] { + return func(t T.Tuple10[A1, A2, A3, A4, A5, A6, A7, A8, A9, A10]) T.Tuple10[T1, T2, T3, T4, T5, T6, T7, T8, T9, T10] { + return A.TraverseTuple10( + Map[T1, 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]], + Ap[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], T2], + Ap[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], T3], + Ap[func(T5) func(T6) func(T7) func(T8) func(T9) func(T10) T.Tuple10[T1, T2, T3, T4, T5, T6, T7, T8, T9, T10], T4], + Ap[func(T6) func(T7) func(T8) func(T9) func(T10) T.Tuple10[T1, T2, T3, T4, T5, T6, T7, T8, T9, T10], T5], + Ap[func(T7) func(T8) func(T9) func(T10) T.Tuple10[T1, T2, T3, T4, T5, T6, T7, T8, T9, T10], T6], + Ap[func(T8) func(T9) func(T10) T.Tuple10[T1, T2, T3, T4, T5, T6, T7, T8, T9, T10], T7], + Ap[func(T9) func(T10) T.Tuple10[T1, T2, T3, T4, T5, T6, T7, T8, T9, T10], T8], + Ap[func(T10) T.Tuple10[T1, T2, T3, T4, T5, T6, T7, T8, T9, T10], T9], + Ap[T.Tuple10[T1, T2, T3, T4, T5, T6, T7, T8, T9, T10], T10], + f1, + f2, + f3, + f4, + f5, + f6, + f7, + f8, + f9, + f10, + t, + ) + } +} diff --git a/internal/apply/gen.go b/internal/apply/gen.go index 2af30e3..3269253 100644 --- a/internal/apply/gen.go +++ b/internal/apply/gen.go @@ -1,6 +1,6 @@ // Code generated by go generate; DO NOT EDIT. // This file was generated by robots at -// 2023-07-17 13:23:10.9739695 +0200 CEST m=+0.014155801 +// 2023-07-17 17:36:29.7966147 +0200 CEST m=+0.102380501 package apply diff --git a/option/gen.go b/option/gen.go index 75d164b..eab1629 100644 --- a/option/gen.go +++ b/option/gen.go @@ -1,6 +1,6 @@ // Code generated by go generate; DO NOT EDIT. // This file was generated by robots at -// 2023-07-17 13:23:13.386184 +0200 CEST m=+0.015046301 +// 2023-07-17 17:36:37.8185556 +0200 CEST m=+0.131678801 package option @@ -48,6 +48,14 @@ func Unoptionize1[F ~func(T0) Option[R], T0, R any](f F) func(T0) (R, bool) { } } +// SequenceT1 converts 1 parameters of [Option[T]] into a [Option[Tuple1]]. +func SequenceT1[T1 any](t1 Option[T1]) Option[T.Tuple1[T1]] { + return A.SequenceT1( + Map[T1, T.Tuple1[T1]], + t1, + ) +} + // SequenceTuple1 converts a [Tuple1] of [Option[T]] into an [Option[Tuple1]]. func SequenceTuple1[T1 any](t T.Tuple1[Option[T1]]) Option[T.Tuple1[T1]] { return A.SequenceTuple1( @@ -83,6 +91,16 @@ func Unoptionize2[F ~func(T0, T1) Option[R], T0, T1, R any](f F) func(T0, T1) (R } } +// SequenceT2 converts 2 parameters of [Option[T]] into a [Option[Tuple2]]. +func SequenceT2[T1, T2 any](t1 Option[T1], t2 Option[T2]) Option[T.Tuple2[T1, T2]] { + return A.SequenceT2( + Map[T1, func(T2) T.Tuple2[T1, T2]], + Ap[T.Tuple2[T1, T2], T2], + t1, + t2, + ) +} + // SequenceTuple2 converts a [Tuple2] of [Option[T]] into an [Option[Tuple2]]. func SequenceTuple2[T1, T2 any](t T.Tuple2[Option[T1], Option[T2]]) Option[T.Tuple2[T1, T2]] { return A.SequenceTuple2( @@ -121,6 +139,18 @@ func Unoptionize3[F ~func(T0, T1, T2) Option[R], T0, T1, T2, R any](f F) func(T0 } } +// SequenceT3 converts 3 parameters of [Option[T]] into a [Option[Tuple3]]. +func SequenceT3[T1, T2, T3 any](t1 Option[T1], t2 Option[T2], t3 Option[T3]) Option[T.Tuple3[T1, T2, T3]] { + return A.SequenceT3( + Map[T1, func(T2) func(T3) T.Tuple3[T1, T2, T3]], + Ap[func(T3) T.Tuple3[T1, T2, T3], T2], + Ap[T.Tuple3[T1, T2, T3], T3], + t1, + t2, + t3, + ) +} + // SequenceTuple3 converts a [Tuple3] of [Option[T]] into an [Option[Tuple3]]. func SequenceTuple3[T1, T2, T3 any](t T.Tuple3[Option[T1], Option[T2], Option[T3]]) Option[T.Tuple3[T1, T2, T3]] { return A.SequenceTuple3( @@ -162,6 +192,20 @@ func Unoptionize4[F ~func(T0, T1, T2, T3) Option[R], T0, T1, T2, T3, R any](f F) } } +// SequenceT4 converts 4 parameters of [Option[T]] into a [Option[Tuple4]]. +func SequenceT4[T1, T2, T3, T4 any](t1 Option[T1], t2 Option[T2], t3 Option[T3], t4 Option[T4]) Option[T.Tuple4[T1, T2, T3, T4]] { + return A.SequenceT4( + Map[T1, func(T2) func(T3) func(T4) T.Tuple4[T1, T2, T3, T4]], + Ap[func(T3) func(T4) T.Tuple4[T1, T2, T3, T4], T2], + Ap[func(T4) T.Tuple4[T1, T2, T3, T4], T3], + Ap[T.Tuple4[T1, T2, T3, T4], T4], + t1, + t2, + t3, + t4, + ) +} + // SequenceTuple4 converts a [Tuple4] of [Option[T]] into an [Option[Tuple4]]. func SequenceTuple4[T1, T2, T3, T4 any](t T.Tuple4[Option[T1], Option[T2], Option[T3], Option[T4]]) Option[T.Tuple4[T1, T2, T3, T4]] { return A.SequenceTuple4( @@ -206,6 +250,22 @@ func Unoptionize5[F ~func(T0, T1, T2, T3, T4) Option[R], T0, T1, T2, T3, T4, R a } } +// SequenceT5 converts 5 parameters of [Option[T]] into a [Option[Tuple5]]. +func SequenceT5[T1, T2, T3, T4, T5 any](t1 Option[T1], t2 Option[T2], t3 Option[T3], t4 Option[T4], t5 Option[T5]) Option[T.Tuple5[T1, T2, T3, T4, T5]] { + return A.SequenceT5( + Map[T1, func(T2) func(T3) func(T4) func(T5) T.Tuple5[T1, T2, T3, T4, T5]], + Ap[func(T3) func(T4) func(T5) T.Tuple5[T1, T2, T3, T4, T5], T2], + Ap[func(T4) func(T5) T.Tuple5[T1, T2, T3, T4, T5], T3], + Ap[func(T5) T.Tuple5[T1, T2, T3, T4, T5], T4], + Ap[T.Tuple5[T1, T2, T3, T4, T5], T5], + t1, + t2, + t3, + t4, + t5, + ) +} + // SequenceTuple5 converts a [Tuple5] of [Option[T]] into an [Option[Tuple5]]. func SequenceTuple5[T1, T2, T3, T4, T5 any](t T.Tuple5[Option[T1], Option[T2], Option[T3], Option[T4], Option[T5]]) Option[T.Tuple5[T1, T2, T3, T4, T5]] { return A.SequenceTuple5( @@ -253,6 +313,24 @@ func Unoptionize6[F ~func(T0, T1, T2, T3, T4, T5) Option[R], T0, T1, T2, T3, T4, } } +// SequenceT6 converts 6 parameters of [Option[T]] into a [Option[Tuple6]]. +func SequenceT6[T1, T2, T3, T4, T5, T6 any](t1 Option[T1], t2 Option[T2], t3 Option[T3], t4 Option[T4], t5 Option[T5], t6 Option[T6]) Option[T.Tuple6[T1, T2, T3, T4, T5, T6]] { + return A.SequenceT6( + Map[T1, func(T2) func(T3) func(T4) func(T5) func(T6) T.Tuple6[T1, T2, T3, T4, T5, T6]], + Ap[func(T3) func(T4) func(T5) func(T6) T.Tuple6[T1, T2, T3, T4, T5, T6], T2], + Ap[func(T4) func(T5) func(T6) T.Tuple6[T1, T2, T3, T4, T5, T6], T3], + Ap[func(T5) func(T6) T.Tuple6[T1, T2, T3, T4, T5, T6], T4], + Ap[func(T6) T.Tuple6[T1, T2, T3, T4, T5, T6], T5], + Ap[T.Tuple6[T1, T2, T3, T4, T5, T6], T6], + t1, + t2, + t3, + t4, + t5, + t6, + ) +} + // SequenceTuple6 converts a [Tuple6] of [Option[T]] into an [Option[Tuple6]]. func SequenceTuple6[T1, T2, T3, T4, T5, T6 any](t T.Tuple6[Option[T1], Option[T2], Option[T3], Option[T4], Option[T5], Option[T6]]) Option[T.Tuple6[T1, T2, T3, T4, T5, T6]] { return A.SequenceTuple6( @@ -303,6 +381,26 @@ func Unoptionize7[F ~func(T0, T1, T2, T3, T4, T5, T6) Option[R], T0, T1, T2, T3, } } +// SequenceT7 converts 7 parameters of [Option[T]] into a [Option[Tuple7]]. +func SequenceT7[T1, T2, T3, T4, T5, T6, T7 any](t1 Option[T1], t2 Option[T2], t3 Option[T3], t4 Option[T4], t5 Option[T5], t6 Option[T6], t7 Option[T7]) Option[T.Tuple7[T1, T2, T3, T4, T5, T6, T7]] { + return A.SequenceT7( + Map[T1, func(T2) func(T3) func(T4) func(T5) func(T6) func(T7) T.Tuple7[T1, T2, T3, T4, T5, T6, T7]], + Ap[func(T3) func(T4) func(T5) func(T6) func(T7) T.Tuple7[T1, T2, T3, T4, T5, T6, T7], T2], + Ap[func(T4) func(T5) func(T6) func(T7) T.Tuple7[T1, T2, T3, T4, T5, T6, T7], T3], + Ap[func(T5) func(T6) func(T7) T.Tuple7[T1, T2, T3, T4, T5, T6, T7], T4], + Ap[func(T6) func(T7) T.Tuple7[T1, T2, T3, T4, T5, T6, T7], T5], + Ap[func(T7) T.Tuple7[T1, T2, T3, T4, T5, T6, T7], T6], + Ap[T.Tuple7[T1, T2, T3, T4, T5, T6, T7], T7], + t1, + t2, + t3, + t4, + t5, + t6, + t7, + ) +} + // SequenceTuple7 converts a [Tuple7] of [Option[T]] into an [Option[Tuple7]]. func SequenceTuple7[T1, T2, T3, T4, T5, T6, T7 any](t T.Tuple7[Option[T1], Option[T2], Option[T3], Option[T4], Option[T5], Option[T6], Option[T7]]) Option[T.Tuple7[T1, T2, T3, T4, T5, T6, T7]] { return A.SequenceTuple7( @@ -356,6 +454,28 @@ func Unoptionize8[F ~func(T0, T1, T2, T3, T4, T5, T6, T7) Option[R], T0, T1, T2, } } +// SequenceT8 converts 8 parameters of [Option[T]] into a [Option[Tuple8]]. +func SequenceT8[T1, T2, T3, T4, T5, T6, T7, T8 any](t1 Option[T1], t2 Option[T2], t3 Option[T3], t4 Option[T4], t5 Option[T5], t6 Option[T6], t7 Option[T7], t8 Option[T8]) Option[T.Tuple8[T1, T2, T3, T4, T5, T6, T7, T8]] { + return A.SequenceT8( + Map[T1, func(T2) func(T3) func(T4) func(T5) func(T6) func(T7) func(T8) T.Tuple8[T1, T2, T3, T4, T5, T6, T7, T8]], + Ap[func(T3) func(T4) func(T5) func(T6) func(T7) func(T8) T.Tuple8[T1, T2, T3, T4, T5, T6, T7, T8], T2], + Ap[func(T4) func(T5) func(T6) func(T7) func(T8) T.Tuple8[T1, T2, T3, T4, T5, T6, T7, T8], T3], + Ap[func(T5) func(T6) func(T7) func(T8) T.Tuple8[T1, T2, T3, T4, T5, T6, T7, T8], T4], + Ap[func(T6) func(T7) func(T8) T.Tuple8[T1, T2, T3, T4, T5, T6, T7, T8], T5], + Ap[func(T7) func(T8) T.Tuple8[T1, T2, T3, T4, T5, T6, T7, T8], T6], + Ap[func(T8) T.Tuple8[T1, T2, T3, T4, T5, T6, T7, T8], T7], + Ap[T.Tuple8[T1, T2, T3, T4, T5, T6, T7, T8], T8], + t1, + t2, + t3, + t4, + t5, + t6, + t7, + t8, + ) +} + // SequenceTuple8 converts a [Tuple8] of [Option[T]] into an [Option[Tuple8]]. func SequenceTuple8[T1, T2, T3, T4, T5, T6, T7, T8 any](t T.Tuple8[Option[T1], Option[T2], Option[T3], Option[T4], Option[T5], Option[T6], Option[T7], Option[T8]]) Option[T.Tuple8[T1, T2, T3, T4, T5, T6, T7, T8]] { return A.SequenceTuple8( @@ -412,6 +532,30 @@ func Unoptionize9[F ~func(T0, T1, T2, T3, T4, T5, T6, T7, T8) Option[R], T0, T1, } } +// SequenceT9 converts 9 parameters of [Option[T]] into a [Option[Tuple9]]. +func SequenceT9[T1, T2, T3, T4, T5, T6, T7, T8, T9 any](t1 Option[T1], t2 Option[T2], t3 Option[T3], t4 Option[T4], t5 Option[T5], t6 Option[T6], t7 Option[T7], t8 Option[T8], t9 Option[T9]) Option[T.Tuple9[T1, T2, T3, T4, T5, T6, T7, T8, T9]] { + return A.SequenceT9( + Map[T1, 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]], + Ap[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], T2], + Ap[func(T4) func(T5) func(T6) func(T7) func(T8) func(T9) T.Tuple9[T1, T2, T3, T4, T5, T6, T7, T8, T9], T3], + Ap[func(T5) func(T6) func(T7) func(T8) func(T9) T.Tuple9[T1, T2, T3, T4, T5, T6, T7, T8, T9], T4], + Ap[func(T6) func(T7) func(T8) func(T9) T.Tuple9[T1, T2, T3, T4, T5, T6, T7, T8, T9], T5], + Ap[func(T7) func(T8) func(T9) T.Tuple9[T1, T2, T3, T4, T5, T6, T7, T8, T9], T6], + Ap[func(T8) func(T9) T.Tuple9[T1, T2, T3, T4, T5, T6, T7, T8, T9], T7], + Ap[func(T9) T.Tuple9[T1, T2, T3, T4, T5, T6, T7, T8, T9], T8], + Ap[T.Tuple9[T1, T2, T3, T4, T5, T6, T7, T8, T9], T9], + t1, + t2, + t3, + t4, + t5, + t6, + t7, + t8, + t9, + ) +} + // SequenceTuple9 converts a [Tuple9] of [Option[T]] into an [Option[Tuple9]]. func SequenceTuple9[T1, T2, T3, T4, T5, T6, T7, T8, T9 any](t T.Tuple9[Option[T1], Option[T2], Option[T3], Option[T4], Option[T5], Option[T6], Option[T7], Option[T8], Option[T9]]) Option[T.Tuple9[T1, T2, T3, T4, T5, T6, T7, T8, T9]] { return A.SequenceTuple9( @@ -471,6 +615,32 @@ func Unoptionize10[F ~func(T0, T1, T2, T3, T4, T5, T6, T7, T8, T9) Option[R], T0 } } +// SequenceT10 converts 10 parameters of [Option[T]] into a [Option[Tuple10]]. +func SequenceT10[T1, T2, T3, T4, T5, T6, T7, T8, T9, T10 any](t1 Option[T1], t2 Option[T2], t3 Option[T3], t4 Option[T4], t5 Option[T5], t6 Option[T6], t7 Option[T7], t8 Option[T8], t9 Option[T9], t10 Option[T10]) Option[T.Tuple10[T1, T2, T3, T4, T5, T6, T7, T8, T9, T10]] { + return A.SequenceT10( + Map[T1, 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]], + Ap[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], T2], + Ap[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], T3], + Ap[func(T5) func(T6) func(T7) func(T8) func(T9) func(T10) T.Tuple10[T1, T2, T3, T4, T5, T6, T7, T8, T9, T10], T4], + Ap[func(T6) func(T7) func(T8) func(T9) func(T10) T.Tuple10[T1, T2, T3, T4, T5, T6, T7, T8, T9, T10], T5], + Ap[func(T7) func(T8) func(T9) func(T10) T.Tuple10[T1, T2, T3, T4, T5, T6, T7, T8, T9, T10], T6], + Ap[func(T8) func(T9) func(T10) T.Tuple10[T1, T2, T3, T4, T5, T6, T7, T8, T9, T10], T7], + Ap[func(T9) func(T10) T.Tuple10[T1, T2, T3, T4, T5, T6, T7, T8, T9, T10], T8], + Ap[func(T10) T.Tuple10[T1, T2, T3, T4, T5, T6, T7, T8, T9, T10], T9], + Ap[T.Tuple10[T1, T2, T3, T4, T5, T6, T7, T8, T9, T10], T10], + t1, + t2, + t3, + t4, + t5, + t6, + t7, + t8, + t9, + t10, + ) +} + // SequenceTuple10 converts a [Tuple10] of [Option[T]] into an [Option[Tuple10]]. func SequenceTuple10[T1, T2, T3, T4, T5, T6, T7, T8, T9, T10 any](t T.Tuple10[Option[T1], Option[T2], Option[T3], Option[T4], Option[T5], Option[T6], Option[T7], Option[T8], Option[T9], Option[T10]]) Option[T.Tuple10[T1, T2, T3, T4, T5, T6, T7, T8, T9, T10]] { return A.SequenceTuple10( diff --git a/option/sequence.go b/option/sequence.go index d1d217c..963c7be 100644 --- a/option/sequence.go +++ b/option/sequence.go @@ -2,8 +2,6 @@ package option import ( F "github.com/ibm/fp-go/function" - "github.com/ibm/fp-go/internal/apply" - T "github.com/ibm/fp-go/tuple" ) // HKTA = HKT @@ -16,43 +14,3 @@ func Sequence[A, HKTA, HKTOA any]( ) func(Option[HKTA]) HKTOA { return Fold(F.Nullary2(None[A], _of), F.Bind2nd(_map, Some[A])) } - -// SequenceT converts n inputs of higher kinded types into a higher kinded types of n strongly typed values, represented as a tuple - -func SequenceT1[A any](a Option[A]) Option[T.Tuple1[A]] { - return apply.SequenceT1( - Map[A, T.Tuple1[A]], - - a, - ) -} - -func SequenceT2[A, B any](a Option[A], b Option[B]) Option[T.Tuple2[A, B]] { - return apply.SequenceT2( - Map[A, func(B) T.Tuple2[A, B]], - Ap[T.Tuple2[A, B], B], - - a, b, - ) -} - -func SequenceT3[A, B, C any](a Option[A], b Option[B], c Option[C]) Option[T.Tuple3[A, B, C]] { - return apply.SequenceT3( - Map[A, func(B) func(C) T.Tuple3[A, B, C]], - Ap[func(C) T.Tuple3[A, B, C], B], - Ap[T.Tuple3[A, B, C], C], - - a, b, c, - ) -} - -func SequenceT4[A, B, C, D any](a Option[A], b Option[B], c Option[C], d Option[D]) Option[T.Tuple4[A, B, C, D]] { - return apply.SequenceT4( - Map[A, func(B) func(C) func(D) T.Tuple4[A, B, C, D]], - Ap[func(C) func(D) T.Tuple4[A, B, C, D], B], - Ap[func(D) T.Tuple4[A, B, C, D], C], - Ap[T.Tuple4[A, B, C, D], D], - - a, b, c, d, - ) -} diff --git a/tuple/gen.go b/tuple/gen.go index 7046649..27e58ab 100644 --- a/tuple/gen.go +++ b/tuple/gen.go @@ -1,6 +1,6 @@ // Code generated by go generate; DO NOT EDIT. // This file was generated by robots at -// 2023-07-17 13:23:15.4992602 +0200 CEST m=+0.068393801 +// 2023-07-17 17:36:57.1507964 +0200 CEST m=+0.013497601 package tuple