diff --git a/cli/pipe.go b/cli/pipe.go index 0e4d7f7..e65512f 100644 --- a/cli/pipe.go +++ b/cli/pipe.go @@ -25,6 +25,40 @@ import ( C "github.com/urfave/cli/v2" ) +func generateUnsliced(f *os.File, i int) { + // Create the optionize version + fmt.Fprintf(f, "\n// Unsliced%d converts a function taking a slice parameter into a function with %d parameters\n", i, i) + fmt.Fprintf(f, "func Unsliced%d[F ~func([]T) R, T, R any](f F) func(", i) + for j := 0; j < i; j++ { + if j > 0 { + fmt.Fprintf(f, ", ") + } + fmt.Fprintf(f, "T") + } + fmt.Fprintf(f, ") R {\n") + fmt.Fprintf(f, " return func(") + for j := 0; j < i; j++ { + if j > 0 { + fmt.Fprintf(f, ", ") + } + fmt.Fprintf(f, "t%d", j+1) + } + if i > 0 { + fmt.Fprintf(f, " T") + } + fmt.Fprintf(f, ") R {\n") + fmt.Fprintf(f, " return f([]T{") + for j := 0; j < i; j++ { + if j > 0 { + fmt.Fprintf(f, ", ") + } + fmt.Fprintf(f, "t%d", j+1) + } + fmt.Fprintln(f, "})") + fmt.Fprintln(f, " }") + fmt.Fprintln(f, "}") +} + func generateVariadic(f *os.File, i int) { // Create the nullary version fmt.Fprintf(f, "\n// Variadic%d converts a function taking %d parameters and a final slice into a function with %d parameters but a final variadic argument\n", i, i, i) @@ -83,7 +117,7 @@ func generateVariadic(f *os.File, i int) { fmt.Fprintf(f, "v)\n") fmt.Fprintf(f, " }\n") - fmt.Fprintf(f, "}") + fmt.Fprintf(f, "}\n") } func generateUnvariadic(f *os.File, i int) { @@ -144,7 +178,7 @@ func generateUnvariadic(f *os.File, i int) { fmt.Fprintf(f, "v...)\n") fmt.Fprintf(f, " }\n") - fmt.Fprintf(f, "}") + fmt.Fprintf(f, "}\n") } func generateNullary(f *os.File, i int) { @@ -347,6 +381,8 @@ func generatePipeHelpers(filename string, count int) error { generateVariadic(f, 0) // unvariadic generateUnvariadic(f, 0) + // unsliced + generateUnsliced(f, 0) for i := 1; i <= count; i++ { @@ -364,6 +400,8 @@ func generatePipeHelpers(filename string, count int) error { generateVariadic(f, i) // unvariadic generateUnvariadic(f, i) + // unsliced + generateUnsliced(f, i) } return nil diff --git a/context/readerioeither/gen.go b/context/readerioeither/gen.go index 8c5033f..bd5dbee 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-08-17 22:58:56.457404 +0200 CEST m=+0.024265101 +// 2023-09-12 10:50:46.7267189 +0200 CEST m=+0.010308601 import ( "context" diff --git a/context/readerioeither/generic/gen.go b/context/readerioeither/generic/gen.go index e1a764b..d4c8f68 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-08-17 22:58:56.457404 +0200 CEST m=+0.024265101 +// 2023-09-12 10:50:46.7267189 +0200 CEST m=+0.010308601 import ( "context" diff --git a/either/gen.go b/either/gen.go index a02ba5e..ff3f903 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-08-17 22:58:57.9925506 +0200 CEST m=+0.033401101 +// 2023-09-12 10:50:48.2380439 +0200 CEST m=+0.010499901 package either diff --git a/function/binds.go b/function/binds.go index 1b58511..61fd78d 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-08-17 22:59:01.9404821 +0200 CEST m=+0.161366801 +// 2023-09-12 10:50:59.4725759 +0200 CEST m=+0.009120701 package function diff --git a/function/gen.go b/function/gen.go index 597fa49..a9ea931 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-08-17 22:58:59.8663985 +0200 CEST m=+0.103744101 +// 2023-09-12 10:50:49.8906081 +0200 CEST m=+0.009865801 package function @@ -24,6 +24,13 @@ func Unvariadic0[V, R any](f func(...V) R) func([]V) R { } } +// Unsliced0 converts a function taking a slice parameter into a function with 0 parameters +func Unsliced0[F ~func([]T) R, T, R any](f F) func() R { + return func() R { + return f([]T{}) + } +} + // Pipe1 takes an initial value t0 and successively applies 1 functions where the input of a function is the return value of the previous function // The final return value is the result of the last function application func Pipe1[F1 ~func(T0) T1, T0, T1 any](t0 T0, f1 F1) T1 { @@ -76,6 +83,13 @@ func Unvariadic1[T1, V, R any](f func(T1, ...V) R) func(T1, []V) R { } } +// Unsliced1 converts a function taking a slice parameter into a function with 1 parameters +func Unsliced1[F ~func([]T) R, T, R any](f F) func(T) R { + return func(t1 T) R { + return f([]T{t1}) + } +} + // Pipe2 takes an initial value t0 and successively applies 2 functions where the input of a function is the return value of the previous function // The final return value is the result of the last function application func Pipe2[F1 ~func(T0) T1, F2 ~func(T1) T2, T0, T1, T2 any](t0 T0, f1 F1, f2 F2) T2 { @@ -131,6 +145,13 @@ func Unvariadic2[T1, T2, V, R any](f func(T1, T2, ...V) R) func(T1, T2, []V) R { } } +// Unsliced2 converts a function taking a slice parameter into a function with 2 parameters +func Unsliced2[F ~func([]T) R, T, R any](f F) func(T, T) R { + return func(t1, t2 T) R { + return f([]T{t1, t2}) + } +} + // Pipe3 takes an initial value t0 and successively applies 3 functions where the input of a function is the return value of the previous function // The final return value is the result of the last function application func Pipe3[F1 ~func(T0) T1, F2 ~func(T1) T2, F3 ~func(T2) T3, T0, T1, T2, T3 any](t0 T0, f1 F1, f2 F2, f3 F3) T3 { @@ -189,6 +210,13 @@ func Unvariadic3[T1, T2, T3, V, R any](f func(T1, T2, T3, ...V) R) func(T1, T2, } } +// Unsliced3 converts a function taking a slice parameter into a function with 3 parameters +func Unsliced3[F ~func([]T) R, T, R any](f F) func(T, T, T) R { + return func(t1, t2, t3 T) R { + return f([]T{t1, t2, t3}) + } +} + // Pipe4 takes an initial value t0 and successively applies 4 functions where the input of a function is the return value of the previous function // The final return value is the result of the last function application func Pipe4[F1 ~func(T0) T1, F2 ~func(T1) T2, F3 ~func(T2) T3, F4 ~func(T3) T4, T0, T1, T2, T3, T4 any](t0 T0, f1 F1, f2 F2, f3 F3, f4 F4) T4 { @@ -250,6 +278,13 @@ func Unvariadic4[T1, T2, T3, T4, V, R any](f func(T1, T2, T3, T4, ...V) R) func( } } +// Unsliced4 converts a function taking a slice parameter into a function with 4 parameters +func Unsliced4[F ~func([]T) R, T, R any](f F) func(T, T, T, T) R { + return func(t1, t2, t3, t4 T) R { + return f([]T{t1, t2, t3, t4}) + } +} + // Pipe5 takes an initial value t0 and successively applies 5 functions where the input of a function is the return value of the previous function // The final return value is the result of the last function application func Pipe5[F1 ~func(T0) T1, F2 ~func(T1) T2, F3 ~func(T2) T3, F4 ~func(T3) T4, F5 ~func(T4) T5, T0, T1, T2, T3, T4, T5 any](t0 T0, f1 F1, f2 F2, f3 F3, f4 F4, f5 F5) T5 { @@ -314,6 +349,13 @@ func Unvariadic5[T1, T2, T3, T4, T5, V, R any](f func(T1, T2, T3, T4, T5, ...V) } } +// Unsliced5 converts a function taking a slice parameter into a function with 5 parameters +func Unsliced5[F ~func([]T) R, T, R any](f F) func(T, T, T, T, T) R { + return func(t1, t2, t3, t4, t5 T) R { + return f([]T{t1, t2, t3, t4, t5}) + } +} + // Pipe6 takes an initial value t0 and successively applies 6 functions where the input of a function is the return value of the previous function // The final return value is the result of the last function application func Pipe6[F1 ~func(T0) T1, F2 ~func(T1) T2, F3 ~func(T2) T3, F4 ~func(T3) T4, F5 ~func(T4) T5, F6 ~func(T5) T6, T0, T1, T2, T3, T4, T5, T6 any](t0 T0, f1 F1, f2 F2, f3 F3, f4 F4, f5 F5, f6 F6) T6 { @@ -381,6 +423,13 @@ func Unvariadic6[T1, T2, T3, T4, T5, T6, V, R any](f func(T1, T2, T3, T4, T5, T6 } } +// Unsliced6 converts a function taking a slice parameter into a function with 6 parameters +func Unsliced6[F ~func([]T) R, T, R any](f F) func(T, T, T, T, T, T) R { + return func(t1, t2, t3, t4, t5, t6 T) R { + return f([]T{t1, t2, t3, t4, t5, t6}) + } +} + // Pipe7 takes an initial value t0 and successively applies 7 functions where the input of a function is the return value of the previous function // The final return value is the result of the last function application func Pipe7[F1 ~func(T0) T1, F2 ~func(T1) T2, F3 ~func(T2) T3, F4 ~func(T3) T4, F5 ~func(T4) T5, F6 ~func(T5) T6, F7 ~func(T6) T7, T0, T1, T2, T3, T4, T5, T6, T7 any](t0 T0, f1 F1, f2 F2, f3 F3, f4 F4, f5 F5, f6 F6, f7 F7) T7 { @@ -451,6 +500,13 @@ func Unvariadic7[T1, T2, T3, T4, T5, T6, T7, V, R any](f func(T1, T2, T3, T4, T5 } } +// Unsliced7 converts a function taking a slice parameter into a function with 7 parameters +func Unsliced7[F ~func([]T) R, T, R any](f F) func(T, T, T, T, T, T, T) R { + return func(t1, t2, t3, t4, t5, t6, t7 T) R { + return f([]T{t1, t2, t3, t4, t5, t6, t7}) + } +} + // Pipe8 takes an initial value t0 and successively applies 8 functions where the input of a function is the return value of the previous function // The final return value is the result of the last function application func Pipe8[F1 ~func(T0) T1, F2 ~func(T1) T2, F3 ~func(T2) T3, F4 ~func(T3) T4, F5 ~func(T4) T5, F6 ~func(T5) T6, F7 ~func(T6) T7, F8 ~func(T7) T8, T0, T1, T2, T3, T4, T5, T6, T7, T8 any](t0 T0, f1 F1, f2 F2, f3 F3, f4 F4, f5 F5, f6 F6, f7 F7, f8 F8) T8 { @@ -524,6 +580,13 @@ func Unvariadic8[T1, T2, T3, T4, T5, T6, T7, T8, V, R any](f func(T1, T2, T3, T4 } } +// Unsliced8 converts a function taking a slice parameter into a function with 8 parameters +func Unsliced8[F ~func([]T) R, T, R any](f F) func(T, T, T, T, T, T, T, T) R { + return func(t1, t2, t3, t4, t5, t6, t7, t8 T) R { + return f([]T{t1, t2, t3, t4, t5, t6, t7, t8}) + } +} + // Pipe9 takes an initial value t0 and successively applies 9 functions where the input of a function is the return value of the previous function // The final return value is the result of the last function application func Pipe9[F1 ~func(T0) T1, F2 ~func(T1) T2, F3 ~func(T2) T3, F4 ~func(T3) T4, F5 ~func(T4) T5, F6 ~func(T5) T6, F7 ~func(T6) T7, F8 ~func(T7) T8, F9 ~func(T8) T9, T0, T1, T2, T3, T4, T5, T6, T7, T8, T9 any](t0 T0, f1 F1, f2 F2, f3 F3, f4 F4, f5 F5, f6 F6, f7 F7, f8 F8, f9 F9) T9 { @@ -600,6 +663,13 @@ func Unvariadic9[T1, T2, T3, T4, T5, T6, T7, T8, T9, V, R any](f func(T1, T2, T3 } } +// Unsliced9 converts a function taking a slice parameter into a function with 9 parameters +func Unsliced9[F ~func([]T) R, T, R any](f F) func(T, T, T, T, T, T, T, T, T) R { + return func(t1, t2, t3, t4, t5, t6, t7, t8, t9 T) R { + return f([]T{t1, t2, t3, t4, t5, t6, t7, t8, t9}) + } +} + // Pipe10 takes an initial value t0 and successively applies 10 functions where the input of a function is the return value of the previous function // The final return value is the result of the last function application func Pipe10[F1 ~func(T0) T1, F2 ~func(T1) T2, F3 ~func(T2) T3, F4 ~func(T3) T4, F5 ~func(T4) T5, F6 ~func(T5) T6, F7 ~func(T6) T7, F8 ~func(T7) T8, F9 ~func(T8) T9, F10 ~func(T9) T10, T0, T1, T2, T3, T4, T5, T6, T7, T8, T9, T10 any](t0 T0, f1 F1, f2 F2, f3 F3, f4 F4, f5 F5, f6 F6, f7 F7, f8 F8, f9 F9, f10 F10) T10 { @@ -679,6 +749,13 @@ func Unvariadic10[T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, V, R any](f func(T1, } } +// Unsliced10 converts a function taking a slice parameter into a function with 10 parameters +func Unsliced10[F ~func([]T) R, T, R any](f F) func(T, T, T, T, T, T, T, T, T, T) R { + return func(t1, t2, t3, t4, t5, t6, t7, t8, t9, t10 T) R { + return f([]T{t1, t2, t3, t4, t5, t6, t7, t8, t9, t10}) + } +} + // Pipe11 takes an initial value t0 and successively applies 11 functions where the input of a function is the return value of the previous function // The final return value is the result of the last function application func Pipe11[F1 ~func(T0) T1, F2 ~func(T1) T2, F3 ~func(T2) T3, F4 ~func(T3) T4, F5 ~func(T4) T5, F6 ~func(T5) T6, F7 ~func(T6) T7, F8 ~func(T7) T8, F9 ~func(T8) T9, F10 ~func(T9) T10, F11 ~func(T10) T11, T0, T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11 any](t0 T0, f1 F1, f2 F2, f3 F3, f4 F4, f5 F5, f6 F6, f7 F7, f8 F8, f9 F9, f10 F10, f11 F11) T11 { @@ -761,6 +838,13 @@ func Unvariadic11[T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, V, R any](f func } } +// Unsliced11 converts a function taking a slice parameter into a function with 11 parameters +func Unsliced11[F ~func([]T) R, T, R any](f F) func(T, T, T, T, T, T, T, T, T, T, T) R { + return func(t1, t2, t3, t4, t5, t6, t7, t8, t9, t10, t11 T) R { + return f([]T{t1, t2, t3, t4, t5, t6, t7, t8, t9, t10, t11}) + } +} + // Pipe12 takes an initial value t0 and successively applies 12 functions where the input of a function is the return value of the previous function // The final return value is the result of the last function application func Pipe12[F1 ~func(T0) T1, F2 ~func(T1) T2, F3 ~func(T2) T3, F4 ~func(T3) T4, F5 ~func(T4) T5, F6 ~func(T5) T6, F7 ~func(T6) T7, F8 ~func(T7) T8, F9 ~func(T8) T9, F10 ~func(T9) T10, F11 ~func(T10) T11, F12 ~func(T11) T12, T0, T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12 any](t0 T0, f1 F1, f2 F2, f3 F3, f4 F4, f5 F5, f6 F6, f7 F7, f8 F8, f9 F9, f10 F10, f11 F11, f12 F12) T12 { @@ -846,6 +930,13 @@ func Unvariadic12[T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, V, R any](f } } +// Unsliced12 converts a function taking a slice parameter into a function with 12 parameters +func Unsliced12[F ~func([]T) R, T, R any](f F) func(T, T, T, T, T, T, T, T, T, T, T, T) R { + return func(t1, t2, t3, t4, t5, t6, t7, t8, t9, t10, t11, t12 T) R { + return f([]T{t1, t2, t3, t4, t5, t6, t7, t8, t9, t10, t11, t12}) + } +} + // Pipe13 takes an initial value t0 and successively applies 13 functions where the input of a function is the return value of the previous function // The final return value is the result of the last function application func Pipe13[F1 ~func(T0) T1, F2 ~func(T1) T2, F3 ~func(T2) T3, F4 ~func(T3) T4, F5 ~func(T4) T5, F6 ~func(T5) T6, F7 ~func(T6) T7, F8 ~func(T7) T8, F9 ~func(T8) T9, F10 ~func(T9) T10, F11 ~func(T10) T11, F12 ~func(T11) T12, F13 ~func(T12) T13, T0, T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13 any](t0 T0, f1 F1, f2 F2, f3 F3, f4 F4, f5 F5, f6 F6, f7 F7, f8 F8, f9 F9, f10 F10, f11 F11, f12 F12, f13 F13) T13 { @@ -934,6 +1025,13 @@ func Unvariadic13[T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, V, R a } } +// Unsliced13 converts a function taking a slice parameter into a function with 13 parameters +func Unsliced13[F ~func([]T) R, T, R any](f F) func(T, T, T, T, T, T, T, T, T, T, T, T, T) R { + return func(t1, t2, t3, t4, t5, t6, t7, t8, t9, t10, t11, t12, t13 T) R { + return f([]T{t1, t2, t3, t4, t5, t6, t7, t8, t9, t10, t11, t12, t13}) + } +} + // Pipe14 takes an initial value t0 and successively applies 14 functions where the input of a function is the return value of the previous function // The final return value is the result of the last function application func Pipe14[F1 ~func(T0) T1, F2 ~func(T1) T2, F3 ~func(T2) T3, F4 ~func(T3) T4, F5 ~func(T4) T5, F6 ~func(T5) T6, F7 ~func(T6) T7, F8 ~func(T7) T8, F9 ~func(T8) T9, F10 ~func(T9) T10, F11 ~func(T10) T11, F12 ~func(T11) T12, F13 ~func(T12) T13, F14 ~func(T13) T14, T0, T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, T14 any](t0 T0, f1 F1, f2 F2, f3 F3, f4 F4, f5 F5, f6 F6, f7 F7, f8 F8, f9 F9, f10 F10, f11 F11, f12 F12, f13 F13, f14 F14) T14 { @@ -1025,6 +1123,13 @@ func Unvariadic14[T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, T14, V } } +// Unsliced14 converts a function taking a slice parameter into a function with 14 parameters +func Unsliced14[F ~func([]T) R, T, R any](f F) func(T, T, T, T, T, T, T, T, T, T, T, T, T, T) R { + return func(t1, t2, t3, t4, t5, t6, t7, t8, t9, t10, t11, t12, t13, t14 T) R { + return f([]T{t1, t2, t3, t4, t5, t6, t7, t8, t9, t10, t11, t12, t13, t14}) + } +} + // Pipe15 takes an initial value t0 and successively applies 15 functions where the input of a function is the return value of the previous function // The final return value is the result of the last function application func Pipe15[F1 ~func(T0) T1, F2 ~func(T1) T2, F3 ~func(T2) T3, F4 ~func(T3) T4, F5 ~func(T4) T5, F6 ~func(T5) T6, F7 ~func(T6) T7, F8 ~func(T7) T8, F9 ~func(T8) T9, F10 ~func(T9) T10, F11 ~func(T10) T11, F12 ~func(T11) T12, F13 ~func(T12) T13, F14 ~func(T13) T14, F15 ~func(T14) T15, T0, T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, T14, T15 any](t0 T0, f1 F1, f2 F2, f3 F3, f4 F4, f5 F5, f6 F6, f7 F7, f8 F8, f9 F9, f10 F10, f11 F11, f12 F12, f13 F13, f14 F14, f15 F15) T15 { @@ -1119,6 +1224,13 @@ func Unvariadic15[T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, T14, T } } +// Unsliced15 converts a function taking a slice parameter into a function with 15 parameters +func Unsliced15[F ~func([]T) R, T, R any](f F) func(T, T, T, T, T, T, T, T, T, T, T, T, T, T, T) R { + return func(t1, t2, t3, t4, t5, t6, t7, t8, t9, t10, t11, t12, t13, t14, t15 T) R { + return f([]T{t1, t2, t3, t4, t5, t6, t7, t8, t9, t10, t11, t12, t13, t14, t15}) + } +} + // Pipe16 takes an initial value t0 and successively applies 16 functions where the input of a function is the return value of the previous function // The final return value is the result of the last function application func Pipe16[F1 ~func(T0) T1, F2 ~func(T1) T2, F3 ~func(T2) T3, F4 ~func(T3) T4, F5 ~func(T4) T5, F6 ~func(T5) T6, F7 ~func(T6) T7, F8 ~func(T7) T8, F9 ~func(T8) T9, F10 ~func(T9) T10, F11 ~func(T10) T11, F12 ~func(T11) T12, F13 ~func(T12) T13, F14 ~func(T13) T14, F15 ~func(T14) T15, F16 ~func(T15) T16, T0, T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, T14, T15, T16 any](t0 T0, f1 F1, f2 F2, f3 F3, f4 F4, f5 F5, f6 F6, f7 F7, f8 F8, f9 F9, f10 F10, f11 F11, f12 F12, f13 F13, f14 F14, f15 F15, f16 F16) T16 { @@ -1216,6 +1328,13 @@ func Unvariadic16[T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, T14, T } } +// Unsliced16 converts a function taking a slice parameter into a function with 16 parameters +func Unsliced16[F ~func([]T) R, T, R any](f F) func(T, T, T, T, T, T, T, T, T, T, T, T, T, T, T, T) R { + return func(t1, t2, t3, t4, t5, t6, t7, t8, t9, t10, t11, t12, t13, t14, t15, t16 T) R { + return f([]T{t1, t2, t3, t4, t5, t6, t7, t8, t9, t10, t11, t12, t13, t14, t15, t16}) + } +} + // Pipe17 takes an initial value t0 and successively applies 17 functions where the input of a function is the return value of the previous function // The final return value is the result of the last function application func Pipe17[F1 ~func(T0) T1, F2 ~func(T1) T2, F3 ~func(T2) T3, F4 ~func(T3) T4, F5 ~func(T4) T5, F6 ~func(T5) T6, F7 ~func(T6) T7, F8 ~func(T7) T8, F9 ~func(T8) T9, F10 ~func(T9) T10, F11 ~func(T10) T11, F12 ~func(T11) T12, F13 ~func(T12) T13, F14 ~func(T13) T14, F15 ~func(T14) T15, F16 ~func(T15) T16, F17 ~func(T16) T17, T0, T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, T14, T15, T16, T17 any](t0 T0, f1 F1, f2 F2, f3 F3, f4 F4, f5 F5, f6 F6, f7 F7, f8 F8, f9 F9, f10 F10, f11 F11, f12 F12, f13 F13, f14 F14, f15 F15, f16 F16, f17 F17) T17 { @@ -1316,6 +1435,13 @@ func Unvariadic17[T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, T14, T } } +// Unsliced17 converts a function taking a slice parameter into a function with 17 parameters +func Unsliced17[F ~func([]T) R, T, R any](f F) func(T, T, T, T, T, T, T, T, T, T, T, T, T, T, T, T, T) R { + return func(t1, t2, t3, t4, t5, t6, t7, t8, t9, t10, t11, t12, t13, t14, t15, t16, t17 T) R { + return f([]T{t1, t2, t3, t4, t5, t6, t7, t8, t9, t10, t11, t12, t13, t14, t15, t16, t17}) + } +} + // Pipe18 takes an initial value t0 and successively applies 18 functions where the input of a function is the return value of the previous function // The final return value is the result of the last function application func Pipe18[F1 ~func(T0) T1, F2 ~func(T1) T2, F3 ~func(T2) T3, F4 ~func(T3) T4, F5 ~func(T4) T5, F6 ~func(T5) T6, F7 ~func(T6) T7, F8 ~func(T7) T8, F9 ~func(T8) T9, F10 ~func(T9) T10, F11 ~func(T10) T11, F12 ~func(T11) T12, F13 ~func(T12) T13, F14 ~func(T13) T14, F15 ~func(T14) T15, F16 ~func(T15) T16, F17 ~func(T16) T17, F18 ~func(T17) T18, T0, T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, T14, T15, T16, T17, T18 any](t0 T0, f1 F1, f2 F2, f3 F3, f4 F4, f5 F5, f6 F6, f7 F7, f8 F8, f9 F9, f10 F10, f11 F11, f12 F12, f13 F13, f14 F14, f15 F15, f16 F16, f17 F17, f18 F18) T18 { @@ -1419,6 +1545,13 @@ func Unvariadic18[T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, T14, T } } +// Unsliced18 converts a function taking a slice parameter into a function with 18 parameters +func Unsliced18[F ~func([]T) R, T, R any](f F) func(T, T, T, T, T, T, T, T, T, T, T, T, T, T, T, T, T, T) R { + return func(t1, t2, t3, t4, t5, t6, t7, t8, t9, t10, t11, t12, t13, t14, t15, t16, t17, t18 T) R { + return f([]T{t1, t2, t3, t4, t5, t6, t7, t8, t9, t10, t11, t12, t13, t14, t15, t16, t17, t18}) + } +} + // Pipe19 takes an initial value t0 and successively applies 19 functions where the input of a function is the return value of the previous function // The final return value is the result of the last function application func Pipe19[F1 ~func(T0) T1, F2 ~func(T1) T2, F3 ~func(T2) T3, F4 ~func(T3) T4, F5 ~func(T4) T5, F6 ~func(T5) T6, F7 ~func(T6) T7, F8 ~func(T7) T8, F9 ~func(T8) T9, F10 ~func(T9) T10, F11 ~func(T10) T11, F12 ~func(T11) T12, F13 ~func(T12) T13, F14 ~func(T13) T14, F15 ~func(T14) T15, F16 ~func(T15) T16, F17 ~func(T16) T17, F18 ~func(T17) T18, F19 ~func(T18) T19, T0, T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, T14, T15, T16, T17, T18, T19 any](t0 T0, f1 F1, f2 F2, f3 F3, f4 F4, f5 F5, f6 F6, f7 F7, f8 F8, f9 F9, f10 F10, f11 F11, f12 F12, f13 F13, f14 F14, f15 F15, f16 F16, f17 F17, f18 F18, f19 F19) T19 { @@ -1525,6 +1658,13 @@ func Unvariadic19[T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, T14, T } } +// Unsliced19 converts a function taking a slice parameter into a function with 19 parameters +func Unsliced19[F ~func([]T) R, T, R any](f F) func(T, T, T, T, T, T, T, T, T, T, T, T, T, T, T, T, T, T, T) R { + return func(t1, t2, t3, t4, t5, t6, t7, t8, t9, t10, t11, t12, t13, t14, t15, t16, t17, t18, t19 T) R { + return f([]T{t1, t2, t3, t4, t5, t6, t7, t8, t9, t10, t11, t12, t13, t14, t15, t16, t17, t18, t19}) + } +} + // Pipe20 takes an initial value t0 and successively applies 20 functions where the input of a function is the return value of the previous function // The final return value is the result of the last function application func Pipe20[F1 ~func(T0) T1, F2 ~func(T1) T2, F3 ~func(T2) T3, F4 ~func(T3) T4, F5 ~func(T4) T5, F6 ~func(T5) T6, F7 ~func(T6) T7, F8 ~func(T7) T8, F9 ~func(T8) T9, F10 ~func(T9) T10, F11 ~func(T10) T11, F12 ~func(T11) T12, F13 ~func(T12) T13, F14 ~func(T13) T14, F15 ~func(T14) T15, F16 ~func(T15) T16, F17 ~func(T16) T17, F18 ~func(T17) T18, F19 ~func(T18) T19, F20 ~func(T19) T20, T0, T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, T14, T15, T16, T17, T18, T19, T20 any](t0 T0, f1 F1, f2 F2, f3 F3, f4 F4, f5 F5, f6 F6, f7 F7, f8 F8, f9 F9, f10 F10, f11 F11, f12 F12, f13 F13, f14 F14, f15 F15, f16 F16, f17 F17, f18 F18, f19 F19, f20 F20) T20 { @@ -1633,3 +1773,10 @@ func Unvariadic20[T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, T14, T return f(t1, t2, t3, t4, t5, t6, t7, t8, t9, t10, t11, t12, t13, t14, t15, t16, t17, t18, t19, t20, v...) } } + +// Unsliced20 converts a function taking a slice parameter into a function with 20 parameters +func Unsliced20[F ~func([]T) R, T, R any](f F) func(T, T, T, T, T, T, T, T, T, T, T, T, T, T, T, T, T, T, T, T) R { + return func(t1, t2, t3, t4, t5, t6, t7, t8, t9, t10, t11, t12, t13, t14, t15, t16, t17, t18, t19, t20 T) R { + return f([]T{t1, t2, t3, t4, t5, t6, t7, t8, t9, t10, t11, t12, t13, t14, t15, t16, t17, t18, t19, t20}) + } +} diff --git a/function/unvariadic_test.go b/function/unvariadic_test.go new file mode 100644 index 0000000..e9f0bc7 --- /dev/null +++ b/function/unvariadic_test.go @@ -0,0 +1,45 @@ +// Copyright (c) 2023 IBM Corp. +// All rights reserved. +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +package function + +import ( + "strings" + "testing" + + "github.com/stretchr/testify/assert" +) + +func fromLibrary(data ...string) string { + return strings.Join(data, "-") +} + +func TestUnvariadic(t *testing.T) { + + res := Pipe1( + []string{"A", "B"}, + Unvariadic0(fromLibrary), + ) + + assert.Equal(t, "A-B", res) +} + +func TestVariadicArity(t *testing.T) { + + f := Unsliced2(Unvariadic0(fromLibrary)) + + res := f("A", "B") + assert.Equal(t, "A-B", res) +} diff --git a/identity/gen.go b/identity/gen.go index 9c48199..3e06fea 100644 --- a/identity/gen.go +++ b/identity/gen.go @@ -1,6 +1,6 @@ // Code generated by go generate; DO NOT EDIT. // This file was generated by robots at -// 2023-08-17 22:59:06.2987136 +0200 CEST m=+0.049156901 +// 2023-09-12 10:51:01.8778336 +0200 CEST m=+0.010908501 package identity diff --git a/internal/apply/gen.go b/internal/apply/gen.go index 485115a..8a388f8 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-08-17 22:59:08.1313362 +0200 CEST m=+0.111171801 +// 2023-09-12 10:51:03.5607007 +0200 CEST m=+0.073307601 package apply diff --git a/io/gen.go b/io/gen.go index 6a226d4..c215f67 100644 --- a/io/gen.go +++ b/io/gen.go @@ -1,6 +1,6 @@ // Code generated by go generate; DO NOT EDIT. // This file was generated by robots at -// 2023-08-17 22:59:10.1040409 +0200 CEST m=+0.089470201 +// 2023-09-12 10:51:10.9622737 +0200 CEST m=+0.011063701 package io diff --git a/io/generic/gen.go b/io/generic/gen.go index 78dc38e..2f0f05e 100644 --- a/io/generic/gen.go +++ b/io/generic/gen.go @@ -1,6 +1,6 @@ // Code generated by go generate; DO NOT EDIT. // This file was generated by robots at -// 2023-08-17 22:59:10.1132645 +0200 CEST m=+0.098693801 +// 2023-09-12 10:51:10.9622737 +0200 CEST m=+0.011063701 package generic import ( diff --git a/ioeither/gen.go b/ioeither/gen.go index 9a28cc4..e897d07 100644 --- a/ioeither/gen.go +++ b/ioeither/gen.go @@ -1,6 +1,6 @@ // Code generated by go generate; DO NOT EDIT. // This file was generated by robots at -// 2023-08-17 22:59:12.0033119 +0200 CEST m=+0.096740401 +// 2023-09-12 10:51:12.8370688 +0200 CEST m=+0.114863501 package ioeither diff --git a/ioeither/generic/gen.go b/ioeither/generic/gen.go index d781eab..a982ca1 100644 --- a/ioeither/generic/gen.go +++ b/ioeither/generic/gen.go @@ -1,6 +1,6 @@ // Code generated by go generate; DO NOT EDIT. // This file was generated by robots at -// 2023-08-17 22:59:12.0246635 +0200 CEST m=+0.118092001 +// 2023-09-12 10:51:12.8808505 +0200 CEST m=+0.158645201 package generic import ( diff --git a/iooption/gen.go b/iooption/gen.go index 288d38d..f687c43 100644 --- a/iooption/gen.go +++ b/iooption/gen.go @@ -1,6 +1,6 @@ // Code generated by go generate; DO NOT EDIT. // This file was generated by robots at -// 2023-08-17 22:59:14.0582736 +0200 CEST m=+0.248503201 +// 2023-09-12 10:51:14.42829 +0200 CEST m=+0.011366401 package iooption diff --git a/iooption/generic/gen.go b/iooption/generic/gen.go index 3b653b8..ab92ca9 100644 --- a/iooption/generic/gen.go +++ b/iooption/generic/gen.go @@ -1,6 +1,6 @@ // Code generated by go generate; DO NOT EDIT. // This file was generated by robots at -// 2023-08-17 22:59:14.0642289 +0200 CEST m=+0.254458501 +// 2023-09-12 10:51:14.42829 +0200 CEST m=+0.011366401 package generic import ( diff --git a/option/gen.go b/option/gen.go index 8f2e8f3..c02d49d 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-08-17 22:59:16.3450991 +0200 CEST m=+0.104894201 +// 2023-09-12 10:51:16.2374776 +0200 CEST m=+0.010253001 package option diff --git a/reader/gen.go b/reader/gen.go index ca0e544..9ddf8b2 100644 --- a/reader/gen.go +++ b/reader/gen.go @@ -1,6 +1,6 @@ // Code generated by go generate; DO NOT EDIT. // This file was generated by robots at -// 2023-08-17 22:59:18.4448291 +0200 CEST m=+0.161369001 +// 2023-09-12 10:51:22.8683246 +0200 CEST m=+0.010727801 package reader diff --git a/reader/generic/gen.go b/reader/generic/gen.go index 496c1f5..4584811 100644 --- a/reader/generic/gen.go +++ b/reader/generic/gen.go @@ -1,6 +1,6 @@ // Code generated by go generate; DO NOT EDIT. // This file was generated by robots at -// 2023-08-17 22:59:18.5047315 +0200 CEST m=+0.221271401 +// 2023-09-12 10:51:22.8688322 +0200 CEST m=+0.011235401 package generic // From0 converts a function with 1 parameters returning a [R] into a function with 0 parameters returning a [GRA] diff --git a/readerioeither/gen.go b/readerioeither/gen.go index d9be07a..08e3359 100644 --- a/readerioeither/gen.go +++ b/readerioeither/gen.go @@ -1,6 +1,6 @@ // Code generated by go generate; DO NOT EDIT. // This file was generated by robots at -// 2023-08-17 22:59:21.3704716 +0200 CEST m=+0.110126101 +// 2023-09-12 10:51:24.5548127 +0200 CEST m=+0.081126601 package readerioeither diff --git a/readerioeither/generic/gen.go b/readerioeither/generic/gen.go index 00185e3..38f90bd 100644 --- a/readerioeither/generic/gen.go +++ b/readerioeither/generic/gen.go @@ -1,6 +1,6 @@ // Code generated by go generate; DO NOT EDIT. // This file was generated by robots at -// 2023-08-17 22:59:21.3811525 +0200 CEST m=+0.120807001 +// 2023-09-12 10:51:24.5762624 +0200 CEST m=+0.102576301 package generic import ( diff --git a/string/generic/string.go b/string/generic/string.go new file mode 100644 index 0000000..d113aeb --- /dev/null +++ b/string/generic/string.go @@ -0,0 +1,41 @@ +// Copyright (c) 2023 IBM Corp. +// All rights reserved. +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +package generic + +// ToBytes converts the string to bytes +func ToBytes[T ~string](s T) []byte { + return []byte(s) +} + +// ToRunes converts the string to runes +func ToRunes[T ~string](s T) []rune { + return []rune(s) +} + +// IsEmpty tests if the string is empty +func IsEmpty[T ~string](s T) bool { + return len(s) == 0 +} + +// IsNonEmpty tests if the string is not empty +func IsNonEmpty[T ~string](s T) bool { + return len(s) > 0 +} + +// Size returns the size of the string +func Size[T ~string](s T) int { + return len(s) +} diff --git a/tuple/gen.go b/tuple/gen.go index 1a31a11..bb81a81 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-08-17 22:59:23.6923568 +0200 CEST m=+0.056359401 +// 2023-09-12 10:51:26.5096462 +0200 CEST m=+0.030035401 package tuple