mirror of
https://github.com/IBM/fp-go.git
synced 2025-08-24 19:29:11 +02:00
Compare commits
5 Commits
Author | SHA1 | Date | |
---|---|---|---|
|
88bf35c4af | ||
|
da3c9683eb | ||
|
08d9fed9af | ||
|
83a0c6cdef | ||
|
9da484b79e |
@@ -115,16 +115,14 @@ func generateEitherize(f *os.File, i int) {
|
||||
fmt.Fprintf(f, "t%d T%d", j, j)
|
||||
}
|
||||
fmt.Fprintf(f, ") Either[error, R] {\n")
|
||||
fmt.Fprintf(f, " return TryCatchError(func() (R, error) {\n")
|
||||
fmt.Fprintf(f, " return f(")
|
||||
fmt.Fprintf(f, " return TryCatchError(f(")
|
||||
for j := 0; j < i; j++ {
|
||||
if j > 0 {
|
||||
fmt.Fprintf(f, ", ")
|
||||
}
|
||||
fmt.Fprintf(f, "t%d", j)
|
||||
}
|
||||
fmt.Fprintln(f, ")")
|
||||
fmt.Fprintln(f, " })")
|
||||
fmt.Fprintln(f, "))")
|
||||
fmt.Fprintln(f, " }")
|
||||
fmt.Fprintln(f, "}")
|
||||
}
|
||||
|
@@ -19,15 +19,14 @@ import (
|
||||
"context"
|
||||
|
||||
E "github.com/IBM/fp-go/either"
|
||||
ET "github.com/IBM/fp-go/either"
|
||||
IOE "github.com/IBM/fp-go/ioeither/generic"
|
||||
)
|
||||
|
||||
// withContext wraps an existing IOEither and performs a context check for cancellation before delegating
|
||||
// WithContext wraps an existing IOEither and performs a context check for cancellation before delegating
|
||||
func WithContext[GIO ~func() E.Either[error, A], A any](ctx context.Context, ma GIO) GIO {
|
||||
return IOE.MakeIO[GIO](func() E.Either[error, A] {
|
||||
if err := context.Cause(ctx); err != nil {
|
||||
return ET.Left[A](err)
|
||||
return E.Left[A](err)
|
||||
}
|
||||
return ma()
|
||||
})
|
||||
|
@@ -1,35 +0,0 @@
|
||||
// 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 reader
|
||||
|
||||
import (
|
||||
R "github.com/IBM/fp-go/reader/generic"
|
||||
)
|
||||
|
||||
// TraverseArray transforms an array
|
||||
func TraverseArray[A, B any](f func(A) Reader[B]) func([]A) Reader[[]B] {
|
||||
return R.TraverseArray[Reader[B], Reader[[]B], []A](f)
|
||||
}
|
||||
|
||||
// TraverseArrayWithIndex transforms an array
|
||||
func TraverseArrayWithIndex[A, B any](f func(int, A) Reader[B]) func([]A) Reader[[]B] {
|
||||
return R.TraverseArrayWithIndex[Reader[B], Reader[[]B], []A](f)
|
||||
}
|
||||
|
||||
// SequenceArray converts a homogeneous sequence of either into an either of sequence
|
||||
func SequenceArray[A any](ma []Reader[A]) Reader[[]A] {
|
||||
return R.SequenceArray[Reader[A], Reader[[]A]](ma)
|
||||
}
|
@@ -1,53 +0,0 @@
|
||||
// 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 reader
|
||||
|
||||
import (
|
||||
"context"
|
||||
|
||||
R "github.com/IBM/fp-go/reader/generic"
|
||||
)
|
||||
|
||||
// these functions curry a golang function with the context as the firsr parameter into a either reader with the context as the last parameter
|
||||
// this goes back to the advice in https://pkg.go.dev/context to put the context as a first parameter as a convention
|
||||
|
||||
func Curry0[A any](f func(context.Context) A) Reader[A] {
|
||||
return R.Curry0[Reader[A]](f)
|
||||
}
|
||||
|
||||
func Curry1[T1, A any](f func(context.Context, T1) A) func(T1) Reader[A] {
|
||||
return R.Curry1[Reader[A]](f)
|
||||
}
|
||||
|
||||
func Curry2[T1, T2, A any](f func(context.Context, T1, T2) A) func(T1) func(T2) Reader[A] {
|
||||
return R.Curry2[Reader[A]](f)
|
||||
}
|
||||
|
||||
func Curry3[T1, T2, T3, A any](f func(context.Context, T1, T2, T3) A) func(T1) func(T2) func(T3) Reader[A] {
|
||||
return R.Curry3[Reader[A]](f)
|
||||
}
|
||||
|
||||
func Uncurry1[T1, A any](f func(T1) Reader[A]) func(context.Context, T1) A {
|
||||
return R.Uncurry1(f)
|
||||
}
|
||||
|
||||
func Uncurry2[T1, T2, A any](f func(T1) func(T2) Reader[A]) func(context.Context, T1, T2) A {
|
||||
return R.Uncurry2(f)
|
||||
}
|
||||
|
||||
func Uncurry3[T1, T2, T3, A any](f func(T1) func(T2) func(T3) Reader[A]) func(context.Context, T1, T2, T3) A {
|
||||
return R.Uncurry3(f)
|
||||
}
|
@@ -1,41 +0,0 @@
|
||||
// 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 reader
|
||||
|
||||
import (
|
||||
"context"
|
||||
|
||||
R "github.com/IBM/fp-go/reader/generic"
|
||||
)
|
||||
|
||||
// these functions curry a golang function with the context as the firsr parameter into a either reader with the context as the last parameter
|
||||
// this goes back to the advice in https://pkg.go.dev/context to put the context as a first parameter as a convention
|
||||
|
||||
func From0[A any](f func(context.Context) A) func() Reader[A] {
|
||||
return R.From0[Reader[A]](f)
|
||||
}
|
||||
|
||||
func From1[T1, A any](f func(context.Context, T1) A) func(T1) Reader[A] {
|
||||
return R.From1[Reader[A]](f)
|
||||
}
|
||||
|
||||
func From2[T1, T2, A any](f func(context.Context, T1, T2) A) func(T1, T2) Reader[A] {
|
||||
return R.From2[Reader[A]](f)
|
||||
}
|
||||
|
||||
func From3[T1, T2, T3, A any](f func(context.Context, T1, T2, T3) A) func(T1, T2, T3) Reader[A] {
|
||||
return R.From3[Reader[A]](f)
|
||||
}
|
@@ -1,66 +0,0 @@
|
||||
// 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 reader
|
||||
|
||||
import (
|
||||
"context"
|
||||
|
||||
R "github.com/IBM/fp-go/reader/generic"
|
||||
)
|
||||
|
||||
func MonadMap[A, B any](fa Reader[A], f func(A) B) Reader[B] {
|
||||
return R.MonadMap[Reader[A], Reader[B]](fa, f)
|
||||
}
|
||||
|
||||
func Map[A, B any](f func(A) B) func(Reader[A]) Reader[B] {
|
||||
return R.Map[Reader[A], Reader[B]](f)
|
||||
}
|
||||
|
||||
func MonadChain[A, B any](ma Reader[A], f func(A) Reader[B]) Reader[B] {
|
||||
return R.MonadChain(ma, f)
|
||||
}
|
||||
|
||||
func Chain[A, B any](f func(A) Reader[B]) func(Reader[A]) Reader[B] {
|
||||
return R.Chain[Reader[A]](f)
|
||||
}
|
||||
|
||||
func Of[A any](a A) Reader[A] {
|
||||
return R.Of[Reader[A]](a)
|
||||
}
|
||||
|
||||
func MonadAp[A, B any](fab Reader[func(A) B], fa Reader[A]) Reader[B] {
|
||||
return R.MonadAp[Reader[A], Reader[B]](fab, fa)
|
||||
}
|
||||
|
||||
func Ap[A, B any](fa Reader[A]) func(Reader[func(A) B]) Reader[B] {
|
||||
return R.Ap[Reader[A], Reader[B], Reader[func(A) B]](fa)
|
||||
}
|
||||
|
||||
func Ask() Reader[context.Context] {
|
||||
return R.Ask[Reader[context.Context]]()
|
||||
}
|
||||
|
||||
func Asks[A any](r Reader[A]) Reader[A] {
|
||||
return R.Asks(r)
|
||||
}
|
||||
|
||||
func MonadFlap[B, A any](fab Reader[func(A) B], a A) Reader[B] {
|
||||
return R.MonadFlap[Reader[func(A) B], Reader[B]](fab, a)
|
||||
}
|
||||
|
||||
func Flap[B, A any](a A) func(Reader[func(A) B]) Reader[B] {
|
||||
return R.Flap[Reader[func(A) B], Reader[B]](a)
|
||||
}
|
@@ -1,75 +0,0 @@
|
||||
// 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 reader
|
||||
|
||||
import (
|
||||
"context"
|
||||
"fmt"
|
||||
"strings"
|
||||
"testing"
|
||||
|
||||
F "github.com/IBM/fp-go/function"
|
||||
T "github.com/IBM/fp-go/tuple"
|
||||
"github.com/stretchr/testify/assert"
|
||||
)
|
||||
|
||||
func GoFunction(ctx context.Context, data string) string {
|
||||
return strings.ToUpper(data)
|
||||
}
|
||||
|
||||
func GoIntFunction(ctx context.Context, data string, number int) string {
|
||||
return fmt.Sprintf("%s: %d", data, number)
|
||||
}
|
||||
|
||||
func TestReaderFrom(t *testing.T) {
|
||||
ctx := context.Background()
|
||||
f := From1(GoFunction)
|
||||
|
||||
result := f("input")(ctx)
|
||||
|
||||
assert.Equal(t, result, "INPUT")
|
||||
|
||||
}
|
||||
|
||||
func MyFinalResult(left, right string) string {
|
||||
return fmt.Sprintf("%s-%s", left, right)
|
||||
}
|
||||
|
||||
func TestReadersFrom(t *testing.T) {
|
||||
ctx := context.Background()
|
||||
|
||||
f1 := From1(GoFunction)
|
||||
f2 := From2(GoIntFunction)
|
||||
|
||||
result1 := f1("input")(ctx)
|
||||
result2 := f2("input", 10)(ctx)
|
||||
|
||||
result3 := MyFinalResult(result1, result2)
|
||||
|
||||
h := F.Pipe1(
|
||||
SequenceT2(f1("input"), f2("input", 10)),
|
||||
Map(T.Tupled2(MyFinalResult)),
|
||||
)
|
||||
|
||||
composedResult := h(ctx)
|
||||
|
||||
assert.Equal(t, result1, "INPUT")
|
||||
assert.Equal(t, result2, "input: 10")
|
||||
assert.Equal(t, result3, "INPUT-input: 10")
|
||||
|
||||
assert.Equal(t, composedResult, "INPUT-input: 10")
|
||||
|
||||
}
|
@@ -1,57 +0,0 @@
|
||||
// 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 reader
|
||||
|
||||
import (
|
||||
R "github.com/IBM/fp-go/reader/generic"
|
||||
T "github.com/IBM/fp-go/tuple"
|
||||
)
|
||||
|
||||
// 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 Reader[A]) Reader[T.Tuple1[A]] {
|
||||
return R.SequenceT1[
|
||||
Reader[A],
|
||||
Reader[T.Tuple1[A]],
|
||||
](a)
|
||||
}
|
||||
|
||||
func SequenceT2[A, B any](a Reader[A], b Reader[B]) Reader[T.Tuple2[A, B]] {
|
||||
return R.SequenceT2[
|
||||
Reader[A],
|
||||
Reader[B],
|
||||
Reader[T.Tuple2[A, B]],
|
||||
](a, b)
|
||||
}
|
||||
|
||||
func SequenceT3[A, B, C any](a Reader[A], b Reader[B], c Reader[C]) Reader[T.Tuple3[A, B, C]] {
|
||||
return R.SequenceT3[
|
||||
Reader[A],
|
||||
Reader[B],
|
||||
Reader[C],
|
||||
Reader[T.Tuple3[A, B, C]],
|
||||
](a, b, c)
|
||||
}
|
||||
|
||||
func SequenceT4[A, B, C, D any](a Reader[A], b Reader[B], c Reader[C], d Reader[D]) Reader[T.Tuple4[A, B, C, D]] {
|
||||
return R.SequenceT4[
|
||||
Reader[A],
|
||||
Reader[B],
|
||||
Reader[C],
|
||||
Reader[D],
|
||||
Reader[T.Tuple4[A, B, C, D]],
|
||||
](a, b, c, d)
|
||||
}
|
@@ -34,8 +34,6 @@ var (
|
||||
|
||||
func command(name string, args []string, in []byte) RE.ReaderEither[exec.CommandOutput] {
|
||||
return func(ctx context.Context) E.Either[error, exec.CommandOutput] {
|
||||
return E.TryCatchError(func() (exec.CommandOutput, error) {
|
||||
return GE.Exec(ctx, name, args, in)
|
||||
})
|
||||
return E.TryCatchError(GE.Exec(ctx, name, args, in))
|
||||
}
|
||||
}
|
||||
|
@@ -18,7 +18,6 @@ package readereither
|
||||
import (
|
||||
"context"
|
||||
|
||||
R "github.com/IBM/fp-go/context/reader"
|
||||
ET "github.com/IBM/fp-go/either"
|
||||
O "github.com/IBM/fp-go/option"
|
||||
RE "github.com/IBM/fp-go/readereither/generic"
|
||||
@@ -32,14 +31,6 @@ func FromEither[A any](e ET.Either[error, A]) ReaderEither[A] {
|
||||
return RE.FromEither[ReaderEither[A]](e)
|
||||
}
|
||||
|
||||
func RightReader[A any](r R.Reader[A]) ReaderEither[A] {
|
||||
return RE.RightReader[R.Reader[A], ReaderEither[A]](r)
|
||||
}
|
||||
|
||||
func LeftReader[A any](l R.Reader[error]) ReaderEither[A] {
|
||||
return RE.LeftReader[R.Reader[error], ReaderEither[A]](l)
|
||||
}
|
||||
|
||||
func Left[A any](l error) ReaderEither[A] {
|
||||
return RE.Left[ReaderEither[A]](l)
|
||||
}
|
||||
@@ -48,10 +39,6 @@ func Right[A any](r A) ReaderEither[A] {
|
||||
return RE.Right[ReaderEither[A]](r)
|
||||
}
|
||||
|
||||
func FromReader[A any](r R.Reader[A]) ReaderEither[A] {
|
||||
return RE.FromReader[R.Reader[A], ReaderEither[A]](r)
|
||||
}
|
||||
|
||||
func MonadMap[A, B any](fa ReaderEither[A], f func(A) B) ReaderEither[B] {
|
||||
return RE.MonadMap[ReaderEither[A], ReaderEither[B]](fa, f)
|
||||
}
|
||||
@@ -84,30 +71,14 @@ func FromPredicate[A any](pred func(A) bool, onFalse func(A) error) func(A) Read
|
||||
return RE.FromPredicate[ReaderEither[A]](pred, onFalse)
|
||||
}
|
||||
|
||||
func Fold[A, B any](onLeft func(error) R.Reader[B], onRight func(A) R.Reader[B]) func(ReaderEither[A]) R.Reader[B] {
|
||||
return RE.Fold[ReaderEither[A]](onLeft, onRight)
|
||||
}
|
||||
|
||||
func GetOrElse[A any](onLeft func(error) R.Reader[A]) func(ReaderEither[A]) R.Reader[A] {
|
||||
return RE.GetOrElse[ReaderEither[A]](onLeft)
|
||||
}
|
||||
|
||||
func OrElse[A any](onLeft func(error) ReaderEither[A]) func(ReaderEither[A]) ReaderEither[A] {
|
||||
return RE.OrElse[ReaderEither[A]](onLeft)
|
||||
}
|
||||
|
||||
func OrLeft[A any](onLeft func(error) R.Reader[error]) func(ReaderEither[A]) ReaderEither[A] {
|
||||
return RE.OrLeft[ReaderEither[A], ReaderEither[A]](onLeft)
|
||||
}
|
||||
|
||||
func Ask() ReaderEither[context.Context] {
|
||||
return RE.Ask[ReaderEither[context.Context]]()
|
||||
}
|
||||
|
||||
func Asks[A any](r R.Reader[A]) ReaderEither[A] {
|
||||
return RE.Asks[R.Reader[A], ReaderEither[A]](r)
|
||||
}
|
||||
|
||||
func MonadChainEitherK[A, B any](ma ReaderEither[A], f func(A) ET.Either[error, B]) ReaderEither[B] {
|
||||
return RE.MonadChainEitherK[ReaderEither[A], ReaderEither[B]](ma, f)
|
||||
}
|
||||
|
@@ -1,36 +0,0 @@
|
||||
// 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 readerio
|
||||
|
||||
import (
|
||||
IO "github.com/IBM/fp-go/io"
|
||||
R "github.com/IBM/fp-go/readerio/generic"
|
||||
)
|
||||
|
||||
// TraverseArray transforms an array
|
||||
func TraverseArray[A, B any](f func(A) ReaderIO[B]) func([]A) ReaderIO[[]B] {
|
||||
return R.TraverseArray[ReaderIO[B], ReaderIO[[]B], IO.IO[B], IO.IO[[]B], []A](f)
|
||||
}
|
||||
|
||||
// TraverseArrayWithIndex transforms an array
|
||||
func TraverseArrayWithIndex[A, B any](f func(int, A) ReaderIO[B]) func([]A) ReaderIO[[]B] {
|
||||
return R.TraverseArrayWithIndex[ReaderIO[B], ReaderIO[[]B], IO.IO[B], IO.IO[[]B], []A](f)
|
||||
}
|
||||
|
||||
// SequenceArray converts a homogeneous sequence of either into an either of sequence
|
||||
func SequenceArray[A any](ma []ReaderIO[A]) ReaderIO[[]A] {
|
||||
return R.SequenceArray[ReaderIO[A], ReaderIO[[]A]](ma)
|
||||
}
|
@@ -1,42 +0,0 @@
|
||||
// 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 readerio
|
||||
|
||||
import (
|
||||
"context"
|
||||
|
||||
IO "github.com/IBM/fp-go/io"
|
||||
R "github.com/IBM/fp-go/readerio/generic"
|
||||
)
|
||||
|
||||
// these functions curry a golang function with the context as the firsr parameter into a either reader with the context as the last parameter
|
||||
// this goes back to the advice in https://pkg.go.dev/context to put the context as a first parameter as a convention
|
||||
|
||||
func From0[A any](f func(context.Context) IO.IO[A]) func() ReaderIO[A] {
|
||||
return R.From0[ReaderIO[A]](f)
|
||||
}
|
||||
|
||||
func From1[T1, A any](f func(context.Context, T1) IO.IO[A]) func(T1) ReaderIO[A] {
|
||||
return R.From1[ReaderIO[A]](f)
|
||||
}
|
||||
|
||||
func From2[T1, T2, A any](f func(context.Context, T1, T2) IO.IO[A]) func(T1, T2) ReaderIO[A] {
|
||||
return R.From2[ReaderIO[A]](f)
|
||||
}
|
||||
|
||||
func From3[T1, T2, T3, A any](f func(context.Context, T1, T2, T3) IO.IO[A]) func(T1, T2, T3) ReaderIO[A] {
|
||||
return R.From3[ReaderIO[A]](f)
|
||||
}
|
@@ -1,102 +0,0 @@
|
||||
// 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 readerio
|
||||
|
||||
import (
|
||||
"context"
|
||||
|
||||
IO "github.com/IBM/fp-go/io"
|
||||
L "github.com/IBM/fp-go/lazy"
|
||||
R "github.com/IBM/fp-go/readerio/generic"
|
||||
)
|
||||
|
||||
// FromIO converts an [IO.IO] to a [ReaderIO]
|
||||
func FromIO[A any](a IO.IO[A]) ReaderIO[A] {
|
||||
return R.FromIO[ReaderIO[A]](a)
|
||||
}
|
||||
|
||||
func MonadMap[A, B any](fa ReaderIO[A], f func(A) B) ReaderIO[B] {
|
||||
return R.MonadMap[ReaderIO[A], ReaderIO[B]](fa, f)
|
||||
}
|
||||
|
||||
func Map[A, B any](f func(A) B) func(ReaderIO[A]) ReaderIO[B] {
|
||||
return R.Map[ReaderIO[A], ReaderIO[B]](f)
|
||||
}
|
||||
|
||||
func MonadChain[A, B any](ma ReaderIO[A], f func(A) ReaderIO[B]) ReaderIO[B] {
|
||||
return R.MonadChain(ma, f)
|
||||
}
|
||||
|
||||
func Chain[A, B any](f func(A) ReaderIO[B]) func(ReaderIO[A]) ReaderIO[B] {
|
||||
return R.Chain[ReaderIO[A]](f)
|
||||
}
|
||||
|
||||
func MonadChainIOK[A, B any](fa ReaderIO[A], f func(A) IO.IO[B]) ReaderIO[B] {
|
||||
return R.MonadChainIOK[ReaderIO[A], ReaderIO[B]](fa, f)
|
||||
}
|
||||
|
||||
func ChainIOK[A, B any](f func(A) IO.IO[B]) func(ReaderIO[A]) ReaderIO[B] {
|
||||
return R.ChainIOK[ReaderIO[A], ReaderIO[B]](f)
|
||||
}
|
||||
|
||||
func MonadChainFirstIOK[A, B any](fa ReaderIO[A], f func(A) IO.IO[B]) ReaderIO[A] {
|
||||
return R.MonadChainFirstIOK[ReaderIO[A], ReaderIO[B]](fa, f)
|
||||
}
|
||||
|
||||
func ChainFirstIOK[A, B any](f func(A) IO.IO[B]) func(ReaderIO[A]) ReaderIO[A] {
|
||||
return R.ChainFirstIOK[ReaderIO[A], ReaderIO[B]](f)
|
||||
}
|
||||
|
||||
func Of[A any](a A) ReaderIO[A] {
|
||||
return R.Of[ReaderIO[A]](a)
|
||||
}
|
||||
|
||||
func MonadAp[A, B any](fab ReaderIO[func(A) B], fa ReaderIO[A]) ReaderIO[B] {
|
||||
return R.MonadAp[ReaderIO[A], ReaderIO[B]](fab, fa)
|
||||
}
|
||||
|
||||
func Ap[A, B any](fa ReaderIO[A]) func(ReaderIO[func(A) B]) ReaderIO[B] {
|
||||
return R.Ap[ReaderIO[A], ReaderIO[B], ReaderIO[func(A) B]](fa)
|
||||
}
|
||||
|
||||
func Ask() ReaderIO[context.Context] {
|
||||
return R.Ask[ReaderIO[context.Context]]()
|
||||
}
|
||||
|
||||
// Defer creates an IO by creating a brand new IO via a generator function, each time
|
||||
func Defer[A any](gen L.Lazy[ReaderIO[A]]) ReaderIO[A] {
|
||||
return R.Defer[ReaderIO[A]](gen)
|
||||
}
|
||||
|
||||
// Memoize computes the value of the provided [ReaderIO] monad lazily but exactly once
|
||||
// The context used to compute the value is the context of the first call, so do not use this
|
||||
// method if the value has a functional dependency on the content of the context
|
||||
func Memoize[A any](rdr ReaderIO[A]) ReaderIO[A] {
|
||||
return R.Memoize[ReaderIO[A]](rdr)
|
||||
}
|
||||
|
||||
// Flatten converts a nested [ReaderIO] into a [ReaderIO]
|
||||
func Flatten[A any](mma ReaderIO[ReaderIO[A]]) ReaderIO[A] {
|
||||
return R.Flatten[ReaderIO[A]](mma)
|
||||
}
|
||||
|
||||
func MonadFlap[B, A any](fab ReaderIO[func(A) B], a A) ReaderIO[B] {
|
||||
return R.MonadFlap[ReaderIO[func(A) B], ReaderIO[B]](fab, a)
|
||||
}
|
||||
|
||||
func Flap[B, A any](a A) func(ReaderIO[func(A) B]) ReaderIO[B] {
|
||||
return R.Flap[ReaderIO[func(A) B], ReaderIO[B]](a)
|
||||
}
|
@@ -1,80 +0,0 @@
|
||||
// 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 readerio
|
||||
|
||||
import (
|
||||
"context"
|
||||
"fmt"
|
||||
"strings"
|
||||
"testing"
|
||||
|
||||
F "github.com/IBM/fp-go/function"
|
||||
IO "github.com/IBM/fp-go/io"
|
||||
T "github.com/IBM/fp-go/tuple"
|
||||
"github.com/stretchr/testify/assert"
|
||||
)
|
||||
|
||||
func GoFunction(ctx context.Context, data string) IO.IO[string] {
|
||||
return func() string {
|
||||
return strings.ToUpper(data)
|
||||
}
|
||||
}
|
||||
|
||||
func GoIntFunction(ctx context.Context, data string, number int) IO.IO[string] {
|
||||
return func() string {
|
||||
return fmt.Sprintf("%s: %d", data, number)
|
||||
}
|
||||
}
|
||||
|
||||
func TestReaderFrom(t *testing.T) {
|
||||
ctx := context.Background()
|
||||
f := From1(GoFunction)
|
||||
|
||||
result := f("input")(ctx)
|
||||
|
||||
assert.Equal(t, result(), "INPUT")
|
||||
|
||||
}
|
||||
|
||||
func MyFinalResult(left, right string) string {
|
||||
return fmt.Sprintf("%s-%s", left, right)
|
||||
}
|
||||
|
||||
func TestReadersFrom(t *testing.T) {
|
||||
ctx := context.Background()
|
||||
|
||||
f1 := From1(GoFunction)
|
||||
f2 := From2(GoIntFunction)
|
||||
|
||||
result1 := f1("input")(ctx)
|
||||
result2 := f2("input", 10)(ctx)
|
||||
|
||||
result3 := MyFinalResult(result1(), result2())
|
||||
|
||||
h := F.Pipe1(
|
||||
SequenceT2(f1("input"), f2("input", 10)),
|
||||
Map(T.Tupled2(MyFinalResult)),
|
||||
)
|
||||
|
||||
composedResult := h(ctx)
|
||||
|
||||
assert.Equal(t, result1(), "INPUT")
|
||||
assert.Equal(t, result2(), "input: 10")
|
||||
assert.Equal(t, result3, "INPUT-input: 10")
|
||||
|
||||
assert.Equal(t, composedResult(), "INPUT-input: 10")
|
||||
|
||||
}
|
@@ -1,57 +0,0 @@
|
||||
// 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 readerio
|
||||
|
||||
import (
|
||||
R "github.com/IBM/fp-go/readerio/generic"
|
||||
T "github.com/IBM/fp-go/tuple"
|
||||
)
|
||||
|
||||
// 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 ReaderIO[A]) ReaderIO[T.Tuple1[A]] {
|
||||
return R.SequenceT1[
|
||||
ReaderIO[A],
|
||||
ReaderIO[T.Tuple1[A]],
|
||||
](a)
|
||||
}
|
||||
|
||||
func SequenceT2[A, B any](a ReaderIO[A], b ReaderIO[B]) ReaderIO[T.Tuple2[A, B]] {
|
||||
return R.SequenceT2[
|
||||
ReaderIO[A],
|
||||
ReaderIO[B],
|
||||
ReaderIO[T.Tuple2[A, B]],
|
||||
](a, b)
|
||||
}
|
||||
|
||||
func SequenceT3[A, B, C any](a ReaderIO[A], b ReaderIO[B], c ReaderIO[C]) ReaderIO[T.Tuple3[A, B, C]] {
|
||||
return R.SequenceT3[
|
||||
ReaderIO[A],
|
||||
ReaderIO[B],
|
||||
ReaderIO[C],
|
||||
ReaderIO[T.Tuple3[A, B, C]],
|
||||
](a, b, c)
|
||||
}
|
||||
|
||||
func SequenceT4[A, B, C, D any](a ReaderIO[A], b ReaderIO[B], c ReaderIO[C], d ReaderIO[D]) ReaderIO[T.Tuple4[A, B, C, D]] {
|
||||
return R.SequenceT4[
|
||||
ReaderIO[A],
|
||||
ReaderIO[B],
|
||||
ReaderIO[C],
|
||||
ReaderIO[D],
|
||||
ReaderIO[T.Tuple4[A, B, C, D]],
|
||||
](a, b, c, d)
|
||||
}
|
37
context/readerioeither/bracket.go
Normal file
37
context/readerioeither/bracket.go
Normal file
@@ -0,0 +1,37 @@
|
||||
// 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 readerioeither
|
||||
|
||||
import (
|
||||
G "github.com/IBM/fp-go/context/readerioeither/generic"
|
||||
E "github.com/IBM/fp-go/either"
|
||||
)
|
||||
|
||||
// Bracket makes sure that a resource is cleaned up in the event of an error. The release action is called regardless of
|
||||
// whether the body action returns and error or not.
|
||||
func Bracket[
|
||||
A, B, ANY any](
|
||||
|
||||
acquire ReaderIOEither[A],
|
||||
use func(A) ReaderIOEither[B],
|
||||
release func(A, E.Either[error, B]) ReaderIOEither[ANY],
|
||||
) ReaderIOEither[B] {
|
||||
return G.Bracket[ReaderIOEither[A], ReaderIOEither[B], ReaderIOEither[ANY]](
|
||||
acquire,
|
||||
use,
|
||||
release,
|
||||
)
|
||||
}
|
@@ -19,9 +19,7 @@ import (
|
||||
"context"
|
||||
"fmt"
|
||||
|
||||
RIO "github.com/IBM/fp-go/context/readerio"
|
||||
R "github.com/IBM/fp-go/context/readerioeither"
|
||||
"github.com/IBM/fp-go/errors"
|
||||
F "github.com/IBM/fp-go/function"
|
||||
IO "github.com/IBM/fp-go/io"
|
||||
J "github.com/IBM/fp-go/json"
|
||||
@@ -37,20 +35,17 @@ func getData(r RecordType) string {
|
||||
|
||||
func ExampleReadFile() {
|
||||
|
||||
data := F.Pipe4(
|
||||
data := F.Pipe3(
|
||||
ReadFile("./data/file.json"),
|
||||
R.ChainEitherK(J.Unmarshal[RecordType]),
|
||||
R.ChainFirstIOK(IO.Logf[RecordType]("Log: %v")),
|
||||
R.Map(getData),
|
||||
R.GetOrElse(F.Flow2(
|
||||
errors.ToString,
|
||||
RIO.Of[string],
|
||||
)),
|
||||
)
|
||||
|
||||
result := data(context.Background())
|
||||
|
||||
fmt.Println(result())
|
||||
|
||||
// Output: Carsten
|
||||
// Output:
|
||||
// Right[<nil>, string](Carsten)
|
||||
}
|
||||
|
@@ -2,7 +2,8 @@ package readerioeither
|
||||
|
||||
// Code generated by go generate; DO NOT EDIT.
|
||||
// This file was generated by robots at
|
||||
// 2023-09-12 13:44:14.1022311 +0200 CEST m=+0.017763401
|
||||
// 2023-10-23 08:30:39.012572 +0200 CEST m=+0.008846101
|
||||
|
||||
|
||||
import (
|
||||
"context"
|
||||
@@ -14,515 +15,515 @@ import (
|
||||
// Eitherize0 converts a function with 0 parameters returning a tuple into a function with 0 parameters returning a [ReaderIOEither[R]]
|
||||
// The inverse function is [Uneitherize0]
|
||||
func Eitherize0[F ~func(context.Context) (R, error), R any](f F) func() ReaderIOEither[R] {
|
||||
return G.Eitherize0[ReaderIOEither[R]](f)
|
||||
return G.Eitherize0[ReaderIOEither[R]](f)
|
||||
}
|
||||
|
||||
// Eitherize1 converts a function with 1 parameters returning a tuple into a function with 1 parameters returning a [ReaderIOEither[R]]
|
||||
// The inverse function is [Uneitherize1]
|
||||
func Eitherize1[F ~func(context.Context, T0) (R, error), T0, R any](f F) func(T0) ReaderIOEither[R] {
|
||||
return G.Eitherize1[ReaderIOEither[R]](f)
|
||||
return G.Eitherize1[ReaderIOEither[R]](f)
|
||||
}
|
||||
|
||||
// SequenceT1 converts 1 [ReaderIOEither] into a [ReaderIOEither] of a [T.Tuple1].
|
||||
func SequenceT1[T1 any](t1 ReaderIOEither[T1]) ReaderIOEither[T.Tuple1[T1]] {
|
||||
return G.SequenceT1[ReaderIOEither[T.Tuple1[T1]]](t1)
|
||||
return G.SequenceT1[ReaderIOEither[T.Tuple1[T1]]](t1)
|
||||
}
|
||||
|
||||
// SequenceSeqT1 converts 1 [ReaderIOEither] into a [ReaderIOEither] of a [T.Tuple1].
|
||||
func SequenceSeqT1[T1 any](t1 ReaderIOEither[T1]) ReaderIOEither[T.Tuple1[T1]] {
|
||||
return G.SequenceSeqT1[ReaderIOEither[T.Tuple1[T1]]](t1)
|
||||
return G.SequenceSeqT1[ReaderIOEither[T.Tuple1[T1]]](t1)
|
||||
}
|
||||
|
||||
// SequenceParT1 converts 1 [ReaderIOEither] into a [ReaderIOEither] of a [T.Tuple1].
|
||||
func SequenceParT1[T1 any](t1 ReaderIOEither[T1]) ReaderIOEither[T.Tuple1[T1]] {
|
||||
return G.SequenceParT1[ReaderIOEither[T.Tuple1[T1]]](t1)
|
||||
return G.SequenceParT1[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)
|
||||
return G.SequenceTuple1[ReaderIOEither[T.Tuple1[T1]]](t)
|
||||
}
|
||||
|
||||
// SequenceSeqTuple1 converts a [T.Tuple1] of [ReaderIOEither] into a [ReaderIOEither] of a [T.Tuple1].
|
||||
func SequenceSeqTuple1[T1 any](t T.Tuple1[ReaderIOEither[T1]]) ReaderIOEither[T.Tuple1[T1]] {
|
||||
return G.SequenceSeqTuple1[ReaderIOEither[T.Tuple1[T1]]](t)
|
||||
return G.SequenceSeqTuple1[ReaderIOEither[T.Tuple1[T1]]](t)
|
||||
}
|
||||
|
||||
// SequenceParTuple1 converts a [T.Tuple1] of [ReaderIOEither] into a [ReaderIOEither] of a [T.Tuple1].
|
||||
func SequenceParTuple1[T1 any](t T.Tuple1[ReaderIOEither[T1]]) ReaderIOEither[T.Tuple1[T1]] {
|
||||
return G.SequenceParTuple1[ReaderIOEither[T.Tuple1[T1]]](t)
|
||||
return G.SequenceParTuple1[ReaderIOEither[T.Tuple1[T1]]](t)
|
||||
}
|
||||
|
||||
// TraverseTuple1 converts a [T.Tuple1] of [A] via transformer functions transforming [A] to a [ReaderIOEither] into a [ReaderIOEither] of a [T.Tuple1].
|
||||
func TraverseTuple1[F1 ~func(A1) ReaderIOEither[T1], A1, T1 any](f1 F1) func(T.Tuple1[A1]) ReaderIOEither[T.Tuple1[T1]] {
|
||||
return G.TraverseTuple1[ReaderIOEither[T.Tuple1[T1]]](f1)
|
||||
return G.TraverseTuple1[ReaderIOEither[T.Tuple1[T1]]](f1)
|
||||
}
|
||||
|
||||
// TraverseSeqTuple1 converts a [T.Tuple1] of [A] via transformer functions transforming [A] to a [ReaderIOEither] into a [ReaderIOEither] of a [T.Tuple1].
|
||||
func TraverseSeqTuple1[F1 ~func(A1) ReaderIOEither[T1], A1, T1 any](f1 F1) func(T.Tuple1[A1]) ReaderIOEither[T.Tuple1[T1]] {
|
||||
return G.TraverseSeqTuple1[ReaderIOEither[T.Tuple1[T1]]](f1)
|
||||
return G.TraverseSeqTuple1[ReaderIOEither[T.Tuple1[T1]]](f1)
|
||||
}
|
||||
|
||||
// TraverseParTuple1 converts a [T.Tuple1] of [A] via transformer functions transforming [A] to a [ReaderIOEither] into a [ReaderIOEither] of a [T.Tuple1].
|
||||
func TraverseParTuple1[F1 ~func(A1) ReaderIOEither[T1], A1, T1 any](f1 F1) func(T.Tuple1[A1]) ReaderIOEither[T.Tuple1[T1]] {
|
||||
return G.TraverseParTuple1[ReaderIOEither[T.Tuple1[T1]]](f1)
|
||||
return G.TraverseParTuple1[ReaderIOEither[T.Tuple1[T1]]](f1)
|
||||
}
|
||||
|
||||
// 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] {
|
||||
return G.Eitherize2[ReaderIOEither[R]](f)
|
||||
return G.Eitherize2[ReaderIOEither[R]](f)
|
||||
}
|
||||
|
||||
// SequenceT2 converts 2 [ReaderIOEither] into a [ReaderIOEither] of a [T.Tuple2].
|
||||
func SequenceT2[T1, T2 any](t1 ReaderIOEither[T1], t2 ReaderIOEither[T2]) ReaderIOEither[T.Tuple2[T1, T2]] {
|
||||
return G.SequenceT2[ReaderIOEither[T.Tuple2[T1, T2]]](t1, t2)
|
||||
return G.SequenceT2[ReaderIOEither[T.Tuple2[T1, T2]]](t1, t2)
|
||||
}
|
||||
|
||||
// SequenceSeqT2 converts 2 [ReaderIOEither] into a [ReaderIOEither] of a [T.Tuple2].
|
||||
func SequenceSeqT2[T1, T2 any](t1 ReaderIOEither[T1], t2 ReaderIOEither[T2]) ReaderIOEither[T.Tuple2[T1, T2]] {
|
||||
return G.SequenceSeqT2[ReaderIOEither[T.Tuple2[T1, T2]]](t1, t2)
|
||||
return G.SequenceSeqT2[ReaderIOEither[T.Tuple2[T1, T2]]](t1, t2)
|
||||
}
|
||||
|
||||
// SequenceParT2 converts 2 [ReaderIOEither] into a [ReaderIOEither] of a [T.Tuple2].
|
||||
func SequenceParT2[T1, T2 any](t1 ReaderIOEither[T1], t2 ReaderIOEither[T2]) ReaderIOEither[T.Tuple2[T1, T2]] {
|
||||
return G.SequenceParT2[ReaderIOEither[T.Tuple2[T1, T2]]](t1, t2)
|
||||
return G.SequenceParT2[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)
|
||||
return G.SequenceTuple2[ReaderIOEither[T.Tuple2[T1, T2]]](t)
|
||||
}
|
||||
|
||||
// SequenceSeqTuple2 converts a [T.Tuple2] of [ReaderIOEither] into a [ReaderIOEither] of a [T.Tuple2].
|
||||
func SequenceSeqTuple2[T1, T2 any](t T.Tuple2[ReaderIOEither[T1], ReaderIOEither[T2]]) ReaderIOEither[T.Tuple2[T1, T2]] {
|
||||
return G.SequenceSeqTuple2[ReaderIOEither[T.Tuple2[T1, T2]]](t)
|
||||
return G.SequenceSeqTuple2[ReaderIOEither[T.Tuple2[T1, T2]]](t)
|
||||
}
|
||||
|
||||
// SequenceParTuple2 converts a [T.Tuple2] of [ReaderIOEither] into a [ReaderIOEither] of a [T.Tuple2].
|
||||
func SequenceParTuple2[T1, T2 any](t T.Tuple2[ReaderIOEither[T1], ReaderIOEither[T2]]) ReaderIOEither[T.Tuple2[T1, T2]] {
|
||||
return G.SequenceParTuple2[ReaderIOEither[T.Tuple2[T1, T2]]](t)
|
||||
return G.SequenceParTuple2[ReaderIOEither[T.Tuple2[T1, T2]]](t)
|
||||
}
|
||||
|
||||
// TraverseTuple2 converts a [T.Tuple2] of [A] via transformer functions transforming [A] to a [ReaderIOEither] into a [ReaderIOEither] of a [T.Tuple2].
|
||||
func TraverseTuple2[F1 ~func(A1) ReaderIOEither[T1], F2 ~func(A2) ReaderIOEither[T2], A1, T1, A2, T2 any](f1 F1, f2 F2) func(T.Tuple2[A1, A2]) ReaderIOEither[T.Tuple2[T1, T2]] {
|
||||
return G.TraverseTuple2[ReaderIOEither[T.Tuple2[T1, T2]]](f1, f2)
|
||||
return G.TraverseTuple2[ReaderIOEither[T.Tuple2[T1, T2]]](f1, f2)
|
||||
}
|
||||
|
||||
// TraverseSeqTuple2 converts a [T.Tuple2] of [A] via transformer functions transforming [A] to a [ReaderIOEither] into a [ReaderIOEither] of a [T.Tuple2].
|
||||
func TraverseSeqTuple2[F1 ~func(A1) ReaderIOEither[T1], F2 ~func(A2) ReaderIOEither[T2], A1, T1, A2, T2 any](f1 F1, f2 F2) func(T.Tuple2[A1, A2]) ReaderIOEither[T.Tuple2[T1, T2]] {
|
||||
return G.TraverseSeqTuple2[ReaderIOEither[T.Tuple2[T1, T2]]](f1, f2)
|
||||
return G.TraverseSeqTuple2[ReaderIOEither[T.Tuple2[T1, T2]]](f1, f2)
|
||||
}
|
||||
|
||||
// TraverseParTuple2 converts a [T.Tuple2] of [A] via transformer functions transforming [A] to a [ReaderIOEither] into a [ReaderIOEither] of a [T.Tuple2].
|
||||
func TraverseParTuple2[F1 ~func(A1) ReaderIOEither[T1], F2 ~func(A2) ReaderIOEither[T2], A1, T1, A2, T2 any](f1 F1, f2 F2) func(T.Tuple2[A1, A2]) ReaderIOEither[T.Tuple2[T1, T2]] {
|
||||
return G.TraverseParTuple2[ReaderIOEither[T.Tuple2[T1, T2]]](f1, f2)
|
||||
return G.TraverseParTuple2[ReaderIOEither[T.Tuple2[T1, T2]]](f1, f2)
|
||||
}
|
||||
|
||||
// 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] {
|
||||
return G.Eitherize3[ReaderIOEither[R]](f)
|
||||
return G.Eitherize3[ReaderIOEither[R]](f)
|
||||
}
|
||||
|
||||
// SequenceT3 converts 3 [ReaderIOEither] into a [ReaderIOEither] of a [T.Tuple3].
|
||||
func SequenceT3[T1, T2, T3 any](t1 ReaderIOEither[T1], t2 ReaderIOEither[T2], t3 ReaderIOEither[T3]) ReaderIOEither[T.Tuple3[T1, T2, T3]] {
|
||||
return G.SequenceT3[ReaderIOEither[T.Tuple3[T1, T2, T3]]](t1, t2, t3)
|
||||
return G.SequenceT3[ReaderIOEither[T.Tuple3[T1, T2, T3]]](t1, t2, t3)
|
||||
}
|
||||
|
||||
// SequenceSeqT3 converts 3 [ReaderIOEither] into a [ReaderIOEither] of a [T.Tuple3].
|
||||
func SequenceSeqT3[T1, T2, T3 any](t1 ReaderIOEither[T1], t2 ReaderIOEither[T2], t3 ReaderIOEither[T3]) ReaderIOEither[T.Tuple3[T1, T2, T3]] {
|
||||
return G.SequenceSeqT3[ReaderIOEither[T.Tuple3[T1, T2, T3]]](t1, t2, t3)
|
||||
return G.SequenceSeqT3[ReaderIOEither[T.Tuple3[T1, T2, T3]]](t1, t2, t3)
|
||||
}
|
||||
|
||||
// SequenceParT3 converts 3 [ReaderIOEither] into a [ReaderIOEither] of a [T.Tuple3].
|
||||
func SequenceParT3[T1, T2, T3 any](t1 ReaderIOEither[T1], t2 ReaderIOEither[T2], t3 ReaderIOEither[T3]) ReaderIOEither[T.Tuple3[T1, T2, T3]] {
|
||||
return G.SequenceParT3[ReaderIOEither[T.Tuple3[T1, T2, T3]]](t1, t2, t3)
|
||||
return G.SequenceParT3[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)
|
||||
return G.SequenceTuple3[ReaderIOEither[T.Tuple3[T1, T2, T3]]](t)
|
||||
}
|
||||
|
||||
// SequenceSeqTuple3 converts a [T.Tuple3] of [ReaderIOEither] into a [ReaderIOEither] of a [T.Tuple3].
|
||||
func SequenceSeqTuple3[T1, T2, T3 any](t T.Tuple3[ReaderIOEither[T1], ReaderIOEither[T2], ReaderIOEither[T3]]) ReaderIOEither[T.Tuple3[T1, T2, T3]] {
|
||||
return G.SequenceSeqTuple3[ReaderIOEither[T.Tuple3[T1, T2, T3]]](t)
|
||||
return G.SequenceSeqTuple3[ReaderIOEither[T.Tuple3[T1, T2, T3]]](t)
|
||||
}
|
||||
|
||||
// SequenceParTuple3 converts a [T.Tuple3] of [ReaderIOEither] into a [ReaderIOEither] of a [T.Tuple3].
|
||||
func SequenceParTuple3[T1, T2, T3 any](t T.Tuple3[ReaderIOEither[T1], ReaderIOEither[T2], ReaderIOEither[T3]]) ReaderIOEither[T.Tuple3[T1, T2, T3]] {
|
||||
return G.SequenceParTuple3[ReaderIOEither[T.Tuple3[T1, T2, T3]]](t)
|
||||
return G.SequenceParTuple3[ReaderIOEither[T.Tuple3[T1, T2, T3]]](t)
|
||||
}
|
||||
|
||||
// TraverseTuple3 converts a [T.Tuple3] of [A] via transformer functions transforming [A] to a [ReaderIOEither] into a [ReaderIOEither] of a [T.Tuple3].
|
||||
func TraverseTuple3[F1 ~func(A1) ReaderIOEither[T1], F2 ~func(A2) ReaderIOEither[T2], F3 ~func(A3) ReaderIOEither[T3], A1, T1, A2, T2, A3, T3 any](f1 F1, f2 F2, f3 F3) func(T.Tuple3[A1, A2, A3]) ReaderIOEither[T.Tuple3[T1, T2, T3]] {
|
||||
return G.TraverseTuple3[ReaderIOEither[T.Tuple3[T1, T2, T3]]](f1, f2, f3)
|
||||
return G.TraverseTuple3[ReaderIOEither[T.Tuple3[T1, T2, T3]]](f1, f2, f3)
|
||||
}
|
||||
|
||||
// TraverseSeqTuple3 converts a [T.Tuple3] of [A] via transformer functions transforming [A] to a [ReaderIOEither] into a [ReaderIOEither] of a [T.Tuple3].
|
||||
func TraverseSeqTuple3[F1 ~func(A1) ReaderIOEither[T1], F2 ~func(A2) ReaderIOEither[T2], F3 ~func(A3) ReaderIOEither[T3], A1, T1, A2, T2, A3, T3 any](f1 F1, f2 F2, f3 F3) func(T.Tuple3[A1, A2, A3]) ReaderIOEither[T.Tuple3[T1, T2, T3]] {
|
||||
return G.TraverseSeqTuple3[ReaderIOEither[T.Tuple3[T1, T2, T3]]](f1, f2, f3)
|
||||
return G.TraverseSeqTuple3[ReaderIOEither[T.Tuple3[T1, T2, T3]]](f1, f2, f3)
|
||||
}
|
||||
|
||||
// TraverseParTuple3 converts a [T.Tuple3] of [A] via transformer functions transforming [A] to a [ReaderIOEither] into a [ReaderIOEither] of a [T.Tuple3].
|
||||
func TraverseParTuple3[F1 ~func(A1) ReaderIOEither[T1], F2 ~func(A2) ReaderIOEither[T2], F3 ~func(A3) ReaderIOEither[T3], A1, T1, A2, T2, A3, T3 any](f1 F1, f2 F2, f3 F3) func(T.Tuple3[A1, A2, A3]) ReaderIOEither[T.Tuple3[T1, T2, T3]] {
|
||||
return G.TraverseParTuple3[ReaderIOEither[T.Tuple3[T1, T2, T3]]](f1, f2, f3)
|
||||
return G.TraverseParTuple3[ReaderIOEither[T.Tuple3[T1, T2, T3]]](f1, f2, f3)
|
||||
}
|
||||
|
||||
// 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] {
|
||||
return G.Eitherize4[ReaderIOEither[R]](f)
|
||||
return G.Eitherize4[ReaderIOEither[R]](f)
|
||||
}
|
||||
|
||||
// SequenceT4 converts 4 [ReaderIOEither] into a [ReaderIOEither] of a [T.Tuple4].
|
||||
func SequenceT4[T1, T2, T3, T4 any](t1 ReaderIOEither[T1], t2 ReaderIOEither[T2], t3 ReaderIOEither[T3], t4 ReaderIOEither[T4]) ReaderIOEither[T.Tuple4[T1, T2, T3, T4]] {
|
||||
return G.SequenceT4[ReaderIOEither[T.Tuple4[T1, T2, T3, T4]]](t1, t2, t3, t4)
|
||||
return G.SequenceT4[ReaderIOEither[T.Tuple4[T1, T2, T3, T4]]](t1, t2, t3, t4)
|
||||
}
|
||||
|
||||
// SequenceSeqT4 converts 4 [ReaderIOEither] into a [ReaderIOEither] of a [T.Tuple4].
|
||||
func SequenceSeqT4[T1, T2, T3, T4 any](t1 ReaderIOEither[T1], t2 ReaderIOEither[T2], t3 ReaderIOEither[T3], t4 ReaderIOEither[T4]) ReaderIOEither[T.Tuple4[T1, T2, T3, T4]] {
|
||||
return G.SequenceSeqT4[ReaderIOEither[T.Tuple4[T1, T2, T3, T4]]](t1, t2, t3, t4)
|
||||
return G.SequenceSeqT4[ReaderIOEither[T.Tuple4[T1, T2, T3, T4]]](t1, t2, t3, t4)
|
||||
}
|
||||
|
||||
// SequenceParT4 converts 4 [ReaderIOEither] into a [ReaderIOEither] of a [T.Tuple4].
|
||||
func SequenceParT4[T1, T2, T3, T4 any](t1 ReaderIOEither[T1], t2 ReaderIOEither[T2], t3 ReaderIOEither[T3], t4 ReaderIOEither[T4]) ReaderIOEither[T.Tuple4[T1, T2, T3, T4]] {
|
||||
return G.SequenceParT4[ReaderIOEither[T.Tuple4[T1, T2, T3, T4]]](t1, t2, t3, t4)
|
||||
return G.SequenceParT4[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)
|
||||
return G.SequenceTuple4[ReaderIOEither[T.Tuple4[T1, T2, T3, T4]]](t)
|
||||
}
|
||||
|
||||
// SequenceSeqTuple4 converts a [T.Tuple4] of [ReaderIOEither] into a [ReaderIOEither] of a [T.Tuple4].
|
||||
func SequenceSeqTuple4[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.SequenceSeqTuple4[ReaderIOEither[T.Tuple4[T1, T2, T3, T4]]](t)
|
||||
return G.SequenceSeqTuple4[ReaderIOEither[T.Tuple4[T1, T2, T3, T4]]](t)
|
||||
}
|
||||
|
||||
// SequenceParTuple4 converts a [T.Tuple4] of [ReaderIOEither] into a [ReaderIOEither] of a [T.Tuple4].
|
||||
func SequenceParTuple4[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.SequenceParTuple4[ReaderIOEither[T.Tuple4[T1, T2, T3, T4]]](t)
|
||||
return G.SequenceParTuple4[ReaderIOEither[T.Tuple4[T1, T2, T3, T4]]](t)
|
||||
}
|
||||
|
||||
// TraverseTuple4 converts a [T.Tuple4] of [A] via transformer functions transforming [A] to a [ReaderIOEither] into a [ReaderIOEither] of a [T.Tuple4].
|
||||
func TraverseTuple4[F1 ~func(A1) ReaderIOEither[T1], F2 ~func(A2) ReaderIOEither[T2], F3 ~func(A3) ReaderIOEither[T3], F4 ~func(A4) ReaderIOEither[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]) ReaderIOEither[T.Tuple4[T1, T2, T3, T4]] {
|
||||
return G.TraverseTuple4[ReaderIOEither[T.Tuple4[T1, T2, T3, T4]]](f1, f2, f3, f4)
|
||||
return G.TraverseTuple4[ReaderIOEither[T.Tuple4[T1, T2, T3, T4]]](f1, f2, f3, f4)
|
||||
}
|
||||
|
||||
// TraverseSeqTuple4 converts a [T.Tuple4] of [A] via transformer functions transforming [A] to a [ReaderIOEither] into a [ReaderIOEither] of a [T.Tuple4].
|
||||
func TraverseSeqTuple4[F1 ~func(A1) ReaderIOEither[T1], F2 ~func(A2) ReaderIOEither[T2], F3 ~func(A3) ReaderIOEither[T3], F4 ~func(A4) ReaderIOEither[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]) ReaderIOEither[T.Tuple4[T1, T2, T3, T4]] {
|
||||
return G.TraverseSeqTuple4[ReaderIOEither[T.Tuple4[T1, T2, T3, T4]]](f1, f2, f3, f4)
|
||||
return G.TraverseSeqTuple4[ReaderIOEither[T.Tuple4[T1, T2, T3, T4]]](f1, f2, f3, f4)
|
||||
}
|
||||
|
||||
// TraverseParTuple4 converts a [T.Tuple4] of [A] via transformer functions transforming [A] to a [ReaderIOEither] into a [ReaderIOEither] of a [T.Tuple4].
|
||||
func TraverseParTuple4[F1 ~func(A1) ReaderIOEither[T1], F2 ~func(A2) ReaderIOEither[T2], F3 ~func(A3) ReaderIOEither[T3], F4 ~func(A4) ReaderIOEither[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]) ReaderIOEither[T.Tuple4[T1, T2, T3, T4]] {
|
||||
return G.TraverseParTuple4[ReaderIOEither[T.Tuple4[T1, T2, T3, T4]]](f1, f2, f3, f4)
|
||||
return G.TraverseParTuple4[ReaderIOEither[T.Tuple4[T1, T2, T3, T4]]](f1, f2, f3, f4)
|
||||
}
|
||||
|
||||
// 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] {
|
||||
return G.Eitherize5[ReaderIOEither[R]](f)
|
||||
return G.Eitherize5[ReaderIOEither[R]](f)
|
||||
}
|
||||
|
||||
// SequenceT5 converts 5 [ReaderIOEither] into a [ReaderIOEither] of a [T.Tuple5].
|
||||
func SequenceT5[T1, T2, T3, T4, T5 any](t1 ReaderIOEither[T1], t2 ReaderIOEither[T2], t3 ReaderIOEither[T3], t4 ReaderIOEither[T4], t5 ReaderIOEither[T5]) ReaderIOEither[T.Tuple5[T1, T2, T3, T4, T5]] {
|
||||
return G.SequenceT5[ReaderIOEither[T.Tuple5[T1, T2, T3, T4, T5]]](t1, t2, t3, t4, t5)
|
||||
return G.SequenceT5[ReaderIOEither[T.Tuple5[T1, T2, T3, T4, T5]]](t1, t2, t3, t4, t5)
|
||||
}
|
||||
|
||||
// SequenceSeqT5 converts 5 [ReaderIOEither] into a [ReaderIOEither] of a [T.Tuple5].
|
||||
func SequenceSeqT5[T1, T2, T3, T4, T5 any](t1 ReaderIOEither[T1], t2 ReaderIOEither[T2], t3 ReaderIOEither[T3], t4 ReaderIOEither[T4], t5 ReaderIOEither[T5]) ReaderIOEither[T.Tuple5[T1, T2, T3, T4, T5]] {
|
||||
return G.SequenceSeqT5[ReaderIOEither[T.Tuple5[T1, T2, T3, T4, T5]]](t1, t2, t3, t4, t5)
|
||||
return G.SequenceSeqT5[ReaderIOEither[T.Tuple5[T1, T2, T3, T4, T5]]](t1, t2, t3, t4, t5)
|
||||
}
|
||||
|
||||
// SequenceParT5 converts 5 [ReaderIOEither] into a [ReaderIOEither] of a [T.Tuple5].
|
||||
func SequenceParT5[T1, T2, T3, T4, T5 any](t1 ReaderIOEither[T1], t2 ReaderIOEither[T2], t3 ReaderIOEither[T3], t4 ReaderIOEither[T4], t5 ReaderIOEither[T5]) ReaderIOEither[T.Tuple5[T1, T2, T3, T4, T5]] {
|
||||
return G.SequenceParT5[ReaderIOEither[T.Tuple5[T1, T2, T3, T4, T5]]](t1, t2, t3, t4, t5)
|
||||
return G.SequenceParT5[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)
|
||||
return G.SequenceTuple5[ReaderIOEither[T.Tuple5[T1, T2, T3, T4, T5]]](t)
|
||||
}
|
||||
|
||||
// SequenceSeqTuple5 converts a [T.Tuple5] of [ReaderIOEither] into a [ReaderIOEither] of a [T.Tuple5].
|
||||
func SequenceSeqTuple5[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.SequenceSeqTuple5[ReaderIOEither[T.Tuple5[T1, T2, T3, T4, T5]]](t)
|
||||
return G.SequenceSeqTuple5[ReaderIOEither[T.Tuple5[T1, T2, T3, T4, T5]]](t)
|
||||
}
|
||||
|
||||
// SequenceParTuple5 converts a [T.Tuple5] of [ReaderIOEither] into a [ReaderIOEither] of a [T.Tuple5].
|
||||
func SequenceParTuple5[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.SequenceParTuple5[ReaderIOEither[T.Tuple5[T1, T2, T3, T4, T5]]](t)
|
||||
return G.SequenceParTuple5[ReaderIOEither[T.Tuple5[T1, T2, T3, T4, T5]]](t)
|
||||
}
|
||||
|
||||
// TraverseTuple5 converts a [T.Tuple5] of [A] via transformer functions transforming [A] to a [ReaderIOEither] into a [ReaderIOEither] of a [T.Tuple5].
|
||||
func TraverseTuple5[F1 ~func(A1) ReaderIOEither[T1], F2 ~func(A2) ReaderIOEither[T2], F3 ~func(A3) ReaderIOEither[T3], F4 ~func(A4) ReaderIOEither[T4], F5 ~func(A5) ReaderIOEither[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]) ReaderIOEither[T.Tuple5[T1, T2, T3, T4, T5]] {
|
||||
return G.TraverseTuple5[ReaderIOEither[T.Tuple5[T1, T2, T3, T4, T5]]](f1, f2, f3, f4, f5)
|
||||
return G.TraverseTuple5[ReaderIOEither[T.Tuple5[T1, T2, T3, T4, T5]]](f1, f2, f3, f4, f5)
|
||||
}
|
||||
|
||||
// TraverseSeqTuple5 converts a [T.Tuple5] of [A] via transformer functions transforming [A] to a [ReaderIOEither] into a [ReaderIOEither] of a [T.Tuple5].
|
||||
func TraverseSeqTuple5[F1 ~func(A1) ReaderIOEither[T1], F2 ~func(A2) ReaderIOEither[T2], F3 ~func(A3) ReaderIOEither[T3], F4 ~func(A4) ReaderIOEither[T4], F5 ~func(A5) ReaderIOEither[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]) ReaderIOEither[T.Tuple5[T1, T2, T3, T4, T5]] {
|
||||
return G.TraverseSeqTuple5[ReaderIOEither[T.Tuple5[T1, T2, T3, T4, T5]]](f1, f2, f3, f4, f5)
|
||||
return G.TraverseSeqTuple5[ReaderIOEither[T.Tuple5[T1, T2, T3, T4, T5]]](f1, f2, f3, f4, f5)
|
||||
}
|
||||
|
||||
// TraverseParTuple5 converts a [T.Tuple5] of [A] via transformer functions transforming [A] to a [ReaderIOEither] into a [ReaderIOEither] of a [T.Tuple5].
|
||||
func TraverseParTuple5[F1 ~func(A1) ReaderIOEither[T1], F2 ~func(A2) ReaderIOEither[T2], F3 ~func(A3) ReaderIOEither[T3], F4 ~func(A4) ReaderIOEither[T4], F5 ~func(A5) ReaderIOEither[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]) ReaderIOEither[T.Tuple5[T1, T2, T3, T4, T5]] {
|
||||
return G.TraverseParTuple5[ReaderIOEither[T.Tuple5[T1, T2, T3, T4, T5]]](f1, f2, f3, f4, f5)
|
||||
return G.TraverseParTuple5[ReaderIOEither[T.Tuple5[T1, T2, T3, T4, T5]]](f1, f2, f3, f4, f5)
|
||||
}
|
||||
|
||||
// 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] {
|
||||
return G.Eitherize6[ReaderIOEither[R]](f)
|
||||
return G.Eitherize6[ReaderIOEither[R]](f)
|
||||
}
|
||||
|
||||
// SequenceT6 converts 6 [ReaderIOEither] into a [ReaderIOEither] of a [T.Tuple6].
|
||||
func SequenceT6[T1, T2, T3, T4, T5, T6 any](t1 ReaderIOEither[T1], t2 ReaderIOEither[T2], t3 ReaderIOEither[T3], t4 ReaderIOEither[T4], t5 ReaderIOEither[T5], t6 ReaderIOEither[T6]) ReaderIOEither[T.Tuple6[T1, T2, T3, T4, T5, T6]] {
|
||||
return G.SequenceT6[ReaderIOEither[T.Tuple6[T1, T2, T3, T4, T5, T6]]](t1, t2, t3, t4, t5, t6)
|
||||
return G.SequenceT6[ReaderIOEither[T.Tuple6[T1, T2, T3, T4, T5, T6]]](t1, t2, t3, t4, t5, t6)
|
||||
}
|
||||
|
||||
// SequenceSeqT6 converts 6 [ReaderIOEither] into a [ReaderIOEither] of a [T.Tuple6].
|
||||
func SequenceSeqT6[T1, T2, T3, T4, T5, T6 any](t1 ReaderIOEither[T1], t2 ReaderIOEither[T2], t3 ReaderIOEither[T3], t4 ReaderIOEither[T4], t5 ReaderIOEither[T5], t6 ReaderIOEither[T6]) ReaderIOEither[T.Tuple6[T1, T2, T3, T4, T5, T6]] {
|
||||
return G.SequenceSeqT6[ReaderIOEither[T.Tuple6[T1, T2, T3, T4, T5, T6]]](t1, t2, t3, t4, t5, t6)
|
||||
return G.SequenceSeqT6[ReaderIOEither[T.Tuple6[T1, T2, T3, T4, T5, T6]]](t1, t2, t3, t4, t5, t6)
|
||||
}
|
||||
|
||||
// SequenceParT6 converts 6 [ReaderIOEither] into a [ReaderIOEither] of a [T.Tuple6].
|
||||
func SequenceParT6[T1, T2, T3, T4, T5, T6 any](t1 ReaderIOEither[T1], t2 ReaderIOEither[T2], t3 ReaderIOEither[T3], t4 ReaderIOEither[T4], t5 ReaderIOEither[T5], t6 ReaderIOEither[T6]) ReaderIOEither[T.Tuple6[T1, T2, T3, T4, T5, T6]] {
|
||||
return G.SequenceParT6[ReaderIOEither[T.Tuple6[T1, T2, T3, T4, T5, T6]]](t1, t2, t3, t4, t5, t6)
|
||||
return G.SequenceParT6[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)
|
||||
return G.SequenceTuple6[ReaderIOEither[T.Tuple6[T1, T2, T3, T4, T5, T6]]](t)
|
||||
}
|
||||
|
||||
// SequenceSeqTuple6 converts a [T.Tuple6] of [ReaderIOEither] into a [ReaderIOEither] of a [T.Tuple6].
|
||||
func SequenceSeqTuple6[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.SequenceSeqTuple6[ReaderIOEither[T.Tuple6[T1, T2, T3, T4, T5, T6]]](t)
|
||||
return G.SequenceSeqTuple6[ReaderIOEither[T.Tuple6[T1, T2, T3, T4, T5, T6]]](t)
|
||||
}
|
||||
|
||||
// SequenceParTuple6 converts a [T.Tuple6] of [ReaderIOEither] into a [ReaderIOEither] of a [T.Tuple6].
|
||||
func SequenceParTuple6[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.SequenceParTuple6[ReaderIOEither[T.Tuple6[T1, T2, T3, T4, T5, T6]]](t)
|
||||
return G.SequenceParTuple6[ReaderIOEither[T.Tuple6[T1, T2, T3, T4, T5, T6]]](t)
|
||||
}
|
||||
|
||||
// TraverseTuple6 converts a [T.Tuple6] of [A] via transformer functions transforming [A] to a [ReaderIOEither] into a [ReaderIOEither] of a [T.Tuple6].
|
||||
func TraverseTuple6[F1 ~func(A1) ReaderIOEither[T1], F2 ~func(A2) ReaderIOEither[T2], F3 ~func(A3) ReaderIOEither[T3], F4 ~func(A4) ReaderIOEither[T4], F5 ~func(A5) ReaderIOEither[T5], F6 ~func(A6) ReaderIOEither[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]) ReaderIOEither[T.Tuple6[T1, T2, T3, T4, T5, T6]] {
|
||||
return G.TraverseTuple6[ReaderIOEither[T.Tuple6[T1, T2, T3, T4, T5, T6]]](f1, f2, f3, f4, f5, f6)
|
||||
return G.TraverseTuple6[ReaderIOEither[T.Tuple6[T1, T2, T3, T4, T5, T6]]](f1, f2, f3, f4, f5, f6)
|
||||
}
|
||||
|
||||
// TraverseSeqTuple6 converts a [T.Tuple6] of [A] via transformer functions transforming [A] to a [ReaderIOEither] into a [ReaderIOEither] of a [T.Tuple6].
|
||||
func TraverseSeqTuple6[F1 ~func(A1) ReaderIOEither[T1], F2 ~func(A2) ReaderIOEither[T2], F3 ~func(A3) ReaderIOEither[T3], F4 ~func(A4) ReaderIOEither[T4], F5 ~func(A5) ReaderIOEither[T5], F6 ~func(A6) ReaderIOEither[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]) ReaderIOEither[T.Tuple6[T1, T2, T3, T4, T5, T6]] {
|
||||
return G.TraverseSeqTuple6[ReaderIOEither[T.Tuple6[T1, T2, T3, T4, T5, T6]]](f1, f2, f3, f4, f5, f6)
|
||||
return G.TraverseSeqTuple6[ReaderIOEither[T.Tuple6[T1, T2, T3, T4, T5, T6]]](f1, f2, f3, f4, f5, f6)
|
||||
}
|
||||
|
||||
// TraverseParTuple6 converts a [T.Tuple6] of [A] via transformer functions transforming [A] to a [ReaderIOEither] into a [ReaderIOEither] of a [T.Tuple6].
|
||||
func TraverseParTuple6[F1 ~func(A1) ReaderIOEither[T1], F2 ~func(A2) ReaderIOEither[T2], F3 ~func(A3) ReaderIOEither[T3], F4 ~func(A4) ReaderIOEither[T4], F5 ~func(A5) ReaderIOEither[T5], F6 ~func(A6) ReaderIOEither[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]) ReaderIOEither[T.Tuple6[T1, T2, T3, T4, T5, T6]] {
|
||||
return G.TraverseParTuple6[ReaderIOEither[T.Tuple6[T1, T2, T3, T4, T5, T6]]](f1, f2, f3, f4, f5, f6)
|
||||
return G.TraverseParTuple6[ReaderIOEither[T.Tuple6[T1, T2, T3, T4, T5, T6]]](f1, f2, f3, f4, f5, f6)
|
||||
}
|
||||
|
||||
// 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] {
|
||||
return G.Eitherize7[ReaderIOEither[R]](f)
|
||||
return G.Eitherize7[ReaderIOEither[R]](f)
|
||||
}
|
||||
|
||||
// SequenceT7 converts 7 [ReaderIOEither] into a [ReaderIOEither] of a [T.Tuple7].
|
||||
func SequenceT7[T1, T2, T3, T4, T5, T6, T7 any](t1 ReaderIOEither[T1], t2 ReaderIOEither[T2], t3 ReaderIOEither[T3], t4 ReaderIOEither[T4], t5 ReaderIOEither[T5], t6 ReaderIOEither[T6], t7 ReaderIOEither[T7]) ReaderIOEither[T.Tuple7[T1, T2, T3, T4, T5, T6, T7]] {
|
||||
return G.SequenceT7[ReaderIOEither[T.Tuple7[T1, T2, T3, T4, T5, T6, T7]]](t1, t2, t3, t4, t5, t6, t7)
|
||||
return G.SequenceT7[ReaderIOEither[T.Tuple7[T1, T2, T3, T4, T5, T6, T7]]](t1, t2, t3, t4, t5, t6, t7)
|
||||
}
|
||||
|
||||
// SequenceSeqT7 converts 7 [ReaderIOEither] into a [ReaderIOEither] of a [T.Tuple7].
|
||||
func SequenceSeqT7[T1, T2, T3, T4, T5, T6, T7 any](t1 ReaderIOEither[T1], t2 ReaderIOEither[T2], t3 ReaderIOEither[T3], t4 ReaderIOEither[T4], t5 ReaderIOEither[T5], t6 ReaderIOEither[T6], t7 ReaderIOEither[T7]) ReaderIOEither[T.Tuple7[T1, T2, T3, T4, T5, T6, T7]] {
|
||||
return G.SequenceSeqT7[ReaderIOEither[T.Tuple7[T1, T2, T3, T4, T5, T6, T7]]](t1, t2, t3, t4, t5, t6, t7)
|
||||
return G.SequenceSeqT7[ReaderIOEither[T.Tuple7[T1, T2, T3, T4, T5, T6, T7]]](t1, t2, t3, t4, t5, t6, t7)
|
||||
}
|
||||
|
||||
// SequenceParT7 converts 7 [ReaderIOEither] into a [ReaderIOEither] of a [T.Tuple7].
|
||||
func SequenceParT7[T1, T2, T3, T4, T5, T6, T7 any](t1 ReaderIOEither[T1], t2 ReaderIOEither[T2], t3 ReaderIOEither[T3], t4 ReaderIOEither[T4], t5 ReaderIOEither[T5], t6 ReaderIOEither[T6], t7 ReaderIOEither[T7]) ReaderIOEither[T.Tuple7[T1, T2, T3, T4, T5, T6, T7]] {
|
||||
return G.SequenceParT7[ReaderIOEither[T.Tuple7[T1, T2, T3, T4, T5, T6, T7]]](t1, t2, t3, t4, t5, t6, t7)
|
||||
return G.SequenceParT7[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)
|
||||
return G.SequenceTuple7[ReaderIOEither[T.Tuple7[T1, T2, T3, T4, T5, T6, T7]]](t)
|
||||
}
|
||||
|
||||
// SequenceSeqTuple7 converts a [T.Tuple7] of [ReaderIOEither] into a [ReaderIOEither] of a [T.Tuple7].
|
||||
func SequenceSeqTuple7[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.SequenceSeqTuple7[ReaderIOEither[T.Tuple7[T1, T2, T3, T4, T5, T6, T7]]](t)
|
||||
return G.SequenceSeqTuple7[ReaderIOEither[T.Tuple7[T1, T2, T3, T4, T5, T6, T7]]](t)
|
||||
}
|
||||
|
||||
// SequenceParTuple7 converts a [T.Tuple7] of [ReaderIOEither] into a [ReaderIOEither] of a [T.Tuple7].
|
||||
func SequenceParTuple7[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.SequenceParTuple7[ReaderIOEither[T.Tuple7[T1, T2, T3, T4, T5, T6, T7]]](t)
|
||||
return G.SequenceParTuple7[ReaderIOEither[T.Tuple7[T1, T2, T3, T4, T5, T6, T7]]](t)
|
||||
}
|
||||
|
||||
// TraverseTuple7 converts a [T.Tuple7] of [A] via transformer functions transforming [A] to a [ReaderIOEither] into a [ReaderIOEither] of a [T.Tuple7].
|
||||
func TraverseTuple7[F1 ~func(A1) ReaderIOEither[T1], F2 ~func(A2) ReaderIOEither[T2], F3 ~func(A3) ReaderIOEither[T3], F4 ~func(A4) ReaderIOEither[T4], F5 ~func(A5) ReaderIOEither[T5], F6 ~func(A6) ReaderIOEither[T6], F7 ~func(A7) ReaderIOEither[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]) ReaderIOEither[T.Tuple7[T1, T2, T3, T4, T5, T6, T7]] {
|
||||
return G.TraverseTuple7[ReaderIOEither[T.Tuple7[T1, T2, T3, T4, T5, T6, T7]]](f1, f2, f3, f4, f5, f6, f7)
|
||||
return G.TraverseTuple7[ReaderIOEither[T.Tuple7[T1, T2, T3, T4, T5, T6, T7]]](f1, f2, f3, f4, f5, f6, f7)
|
||||
}
|
||||
|
||||
// TraverseSeqTuple7 converts a [T.Tuple7] of [A] via transformer functions transforming [A] to a [ReaderIOEither] into a [ReaderIOEither] of a [T.Tuple7].
|
||||
func TraverseSeqTuple7[F1 ~func(A1) ReaderIOEither[T1], F2 ~func(A2) ReaderIOEither[T2], F3 ~func(A3) ReaderIOEither[T3], F4 ~func(A4) ReaderIOEither[T4], F5 ~func(A5) ReaderIOEither[T5], F6 ~func(A6) ReaderIOEither[T6], F7 ~func(A7) ReaderIOEither[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]) ReaderIOEither[T.Tuple7[T1, T2, T3, T4, T5, T6, T7]] {
|
||||
return G.TraverseSeqTuple7[ReaderIOEither[T.Tuple7[T1, T2, T3, T4, T5, T6, T7]]](f1, f2, f3, f4, f5, f6, f7)
|
||||
return G.TraverseSeqTuple7[ReaderIOEither[T.Tuple7[T1, T2, T3, T4, T5, T6, T7]]](f1, f2, f3, f4, f5, f6, f7)
|
||||
}
|
||||
|
||||
// TraverseParTuple7 converts a [T.Tuple7] of [A] via transformer functions transforming [A] to a [ReaderIOEither] into a [ReaderIOEither] of a [T.Tuple7].
|
||||
func TraverseParTuple7[F1 ~func(A1) ReaderIOEither[T1], F2 ~func(A2) ReaderIOEither[T2], F3 ~func(A3) ReaderIOEither[T3], F4 ~func(A4) ReaderIOEither[T4], F5 ~func(A5) ReaderIOEither[T5], F6 ~func(A6) ReaderIOEither[T6], F7 ~func(A7) ReaderIOEither[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]) ReaderIOEither[T.Tuple7[T1, T2, T3, T4, T5, T6, T7]] {
|
||||
return G.TraverseParTuple7[ReaderIOEither[T.Tuple7[T1, T2, T3, T4, T5, T6, T7]]](f1, f2, f3, f4, f5, f6, f7)
|
||||
return G.TraverseParTuple7[ReaderIOEither[T.Tuple7[T1, T2, T3, T4, T5, T6, T7]]](f1, f2, f3, f4, f5, f6, f7)
|
||||
}
|
||||
|
||||
// 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] {
|
||||
return G.Eitherize8[ReaderIOEither[R]](f)
|
||||
return G.Eitherize8[ReaderIOEither[R]](f)
|
||||
}
|
||||
|
||||
// SequenceT8 converts 8 [ReaderIOEither] into a [ReaderIOEither] of a [T.Tuple8].
|
||||
func SequenceT8[T1, T2, T3, T4, T5, T6, T7, T8 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]) ReaderIOEither[T.Tuple8[T1, T2, T3, T4, T5, T6, T7, T8]] {
|
||||
return G.SequenceT8[ReaderIOEither[T.Tuple8[T1, T2, T3, T4, T5, T6, T7, T8]]](t1, t2, t3, t4, t5, t6, t7, t8)
|
||||
return G.SequenceT8[ReaderIOEither[T.Tuple8[T1, T2, T3, T4, T5, T6, T7, T8]]](t1, t2, t3, t4, t5, t6, t7, t8)
|
||||
}
|
||||
|
||||
// SequenceSeqT8 converts 8 [ReaderIOEither] into a [ReaderIOEither] of a [T.Tuple8].
|
||||
func SequenceSeqT8[T1, T2, T3, T4, T5, T6, T7, T8 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]) ReaderIOEither[T.Tuple8[T1, T2, T3, T4, T5, T6, T7, T8]] {
|
||||
return G.SequenceSeqT8[ReaderIOEither[T.Tuple8[T1, T2, T3, T4, T5, T6, T7, T8]]](t1, t2, t3, t4, t5, t6, t7, t8)
|
||||
return G.SequenceSeqT8[ReaderIOEither[T.Tuple8[T1, T2, T3, T4, T5, T6, T7, T8]]](t1, t2, t3, t4, t5, t6, t7, t8)
|
||||
}
|
||||
|
||||
// SequenceParT8 converts 8 [ReaderIOEither] into a [ReaderIOEither] of a [T.Tuple8].
|
||||
func SequenceParT8[T1, T2, T3, T4, T5, T6, T7, T8 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]) ReaderIOEither[T.Tuple8[T1, T2, T3, T4, T5, T6, T7, T8]] {
|
||||
return G.SequenceParT8[ReaderIOEither[T.Tuple8[T1, T2, T3, T4, T5, T6, T7, T8]]](t1, t2, t3, t4, t5, t6, t7, t8)
|
||||
return G.SequenceParT8[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)
|
||||
return G.SequenceTuple8[ReaderIOEither[T.Tuple8[T1, T2, T3, T4, T5, T6, T7, T8]]](t)
|
||||
}
|
||||
|
||||
// SequenceSeqTuple8 converts a [T.Tuple8] of [ReaderIOEither] into a [ReaderIOEither] of a [T.Tuple8].
|
||||
func SequenceSeqTuple8[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.SequenceSeqTuple8[ReaderIOEither[T.Tuple8[T1, T2, T3, T4, T5, T6, T7, T8]]](t)
|
||||
return G.SequenceSeqTuple8[ReaderIOEither[T.Tuple8[T1, T2, T3, T4, T5, T6, T7, T8]]](t)
|
||||
}
|
||||
|
||||
// SequenceParTuple8 converts a [T.Tuple8] of [ReaderIOEither] into a [ReaderIOEither] of a [T.Tuple8].
|
||||
func SequenceParTuple8[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.SequenceParTuple8[ReaderIOEither[T.Tuple8[T1, T2, T3, T4, T5, T6, T7, T8]]](t)
|
||||
return G.SequenceParTuple8[ReaderIOEither[T.Tuple8[T1, T2, T3, T4, T5, T6, T7, T8]]](t)
|
||||
}
|
||||
|
||||
// TraverseTuple8 converts a [T.Tuple8] of [A] via transformer functions transforming [A] to a [ReaderIOEither] into a [ReaderIOEither] of a [T.Tuple8].
|
||||
func TraverseTuple8[F1 ~func(A1) ReaderIOEither[T1], F2 ~func(A2) ReaderIOEither[T2], F3 ~func(A3) ReaderIOEither[T3], F4 ~func(A4) ReaderIOEither[T4], F5 ~func(A5) ReaderIOEither[T5], F6 ~func(A6) ReaderIOEither[T6], F7 ~func(A7) ReaderIOEither[T7], F8 ~func(A8) ReaderIOEither[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]) ReaderIOEither[T.Tuple8[T1, T2, T3, T4, T5, T6, T7, T8]] {
|
||||
return G.TraverseTuple8[ReaderIOEither[T.Tuple8[T1, T2, T3, T4, T5, T6, T7, T8]]](f1, f2, f3, f4, f5, f6, f7, f8)
|
||||
return G.TraverseTuple8[ReaderIOEither[T.Tuple8[T1, T2, T3, T4, T5, T6, T7, T8]]](f1, f2, f3, f4, f5, f6, f7, f8)
|
||||
}
|
||||
|
||||
// TraverseSeqTuple8 converts a [T.Tuple8] of [A] via transformer functions transforming [A] to a [ReaderIOEither] into a [ReaderIOEither] of a [T.Tuple8].
|
||||
func TraverseSeqTuple8[F1 ~func(A1) ReaderIOEither[T1], F2 ~func(A2) ReaderIOEither[T2], F3 ~func(A3) ReaderIOEither[T3], F4 ~func(A4) ReaderIOEither[T4], F5 ~func(A5) ReaderIOEither[T5], F6 ~func(A6) ReaderIOEither[T6], F7 ~func(A7) ReaderIOEither[T7], F8 ~func(A8) ReaderIOEither[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]) ReaderIOEither[T.Tuple8[T1, T2, T3, T4, T5, T6, T7, T8]] {
|
||||
return G.TraverseSeqTuple8[ReaderIOEither[T.Tuple8[T1, T2, T3, T4, T5, T6, T7, T8]]](f1, f2, f3, f4, f5, f6, f7, f8)
|
||||
return G.TraverseSeqTuple8[ReaderIOEither[T.Tuple8[T1, T2, T3, T4, T5, T6, T7, T8]]](f1, f2, f3, f4, f5, f6, f7, f8)
|
||||
}
|
||||
|
||||
// TraverseParTuple8 converts a [T.Tuple8] of [A] via transformer functions transforming [A] to a [ReaderIOEither] into a [ReaderIOEither] of a [T.Tuple8].
|
||||
func TraverseParTuple8[F1 ~func(A1) ReaderIOEither[T1], F2 ~func(A2) ReaderIOEither[T2], F3 ~func(A3) ReaderIOEither[T3], F4 ~func(A4) ReaderIOEither[T4], F5 ~func(A5) ReaderIOEither[T5], F6 ~func(A6) ReaderIOEither[T6], F7 ~func(A7) ReaderIOEither[T7], F8 ~func(A8) ReaderIOEither[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]) ReaderIOEither[T.Tuple8[T1, T2, T3, T4, T5, T6, T7, T8]] {
|
||||
return G.TraverseParTuple8[ReaderIOEither[T.Tuple8[T1, T2, T3, T4, T5, T6, T7, T8]]](f1, f2, f3, f4, f5, f6, f7, f8)
|
||||
return G.TraverseParTuple8[ReaderIOEither[T.Tuple8[T1, T2, T3, T4, T5, T6, T7, T8]]](f1, f2, f3, f4, f5, f6, f7, f8)
|
||||
}
|
||||
|
||||
// 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] {
|
||||
return G.Eitherize9[ReaderIOEither[R]](f)
|
||||
return G.Eitherize9[ReaderIOEither[R]](f)
|
||||
}
|
||||
|
||||
// SequenceT9 converts 9 [ReaderIOEither] into a [ReaderIOEither] of a [T.Tuple9].
|
||||
func SequenceT9[T1, T2, T3, T4, T5, T6, T7, T8, T9 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]) ReaderIOEither[T.Tuple9[T1, T2, T3, T4, T5, T6, T7, T8, T9]] {
|
||||
return G.SequenceT9[ReaderIOEither[T.Tuple9[T1, T2, T3, T4, T5, T6, T7, T8, T9]]](t1, t2, t3, t4, t5, t6, t7, t8, t9)
|
||||
return G.SequenceT9[ReaderIOEither[T.Tuple9[T1, T2, T3, T4, T5, T6, T7, T8, T9]]](t1, t2, t3, t4, t5, t6, t7, t8, t9)
|
||||
}
|
||||
|
||||
// SequenceSeqT9 converts 9 [ReaderIOEither] into a [ReaderIOEither] of a [T.Tuple9].
|
||||
func SequenceSeqT9[T1, T2, T3, T4, T5, T6, T7, T8, T9 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]) ReaderIOEither[T.Tuple9[T1, T2, T3, T4, T5, T6, T7, T8, T9]] {
|
||||
return G.SequenceSeqT9[ReaderIOEither[T.Tuple9[T1, T2, T3, T4, T5, T6, T7, T8, T9]]](t1, t2, t3, t4, t5, t6, t7, t8, t9)
|
||||
return G.SequenceSeqT9[ReaderIOEither[T.Tuple9[T1, T2, T3, T4, T5, T6, T7, T8, T9]]](t1, t2, t3, t4, t5, t6, t7, t8, t9)
|
||||
}
|
||||
|
||||
// SequenceParT9 converts 9 [ReaderIOEither] into a [ReaderIOEither] of a [T.Tuple9].
|
||||
func SequenceParT9[T1, T2, T3, T4, T5, T6, T7, T8, T9 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]) ReaderIOEither[T.Tuple9[T1, T2, T3, T4, T5, T6, T7, T8, T9]] {
|
||||
return G.SequenceParT9[ReaderIOEither[T.Tuple9[T1, T2, T3, T4, T5, T6, T7, T8, T9]]](t1, t2, t3, t4, t5, t6, t7, t8, t9)
|
||||
return G.SequenceParT9[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)
|
||||
return G.SequenceTuple9[ReaderIOEither[T.Tuple9[T1, T2, T3, T4, T5, T6, T7, T8, T9]]](t)
|
||||
}
|
||||
|
||||
// SequenceSeqTuple9 converts a [T.Tuple9] of [ReaderIOEither] into a [ReaderIOEither] of a [T.Tuple9].
|
||||
func SequenceSeqTuple9[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.SequenceSeqTuple9[ReaderIOEither[T.Tuple9[T1, T2, T3, T4, T5, T6, T7, T8, T9]]](t)
|
||||
return G.SequenceSeqTuple9[ReaderIOEither[T.Tuple9[T1, T2, T3, T4, T5, T6, T7, T8, T9]]](t)
|
||||
}
|
||||
|
||||
// SequenceParTuple9 converts a [T.Tuple9] of [ReaderIOEither] into a [ReaderIOEither] of a [T.Tuple9].
|
||||
func SequenceParTuple9[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.SequenceParTuple9[ReaderIOEither[T.Tuple9[T1, T2, T3, T4, T5, T6, T7, T8, T9]]](t)
|
||||
return G.SequenceParTuple9[ReaderIOEither[T.Tuple9[T1, T2, T3, T4, T5, T6, T7, T8, T9]]](t)
|
||||
}
|
||||
|
||||
// TraverseTuple9 converts a [T.Tuple9] of [A] via transformer functions transforming [A] to a [ReaderIOEither] into a [ReaderIOEither] of a [T.Tuple9].
|
||||
func TraverseTuple9[F1 ~func(A1) ReaderIOEither[T1], F2 ~func(A2) ReaderIOEither[T2], F3 ~func(A3) ReaderIOEither[T3], F4 ~func(A4) ReaderIOEither[T4], F5 ~func(A5) ReaderIOEither[T5], F6 ~func(A6) ReaderIOEither[T6], F7 ~func(A7) ReaderIOEither[T7], F8 ~func(A8) ReaderIOEither[T8], F9 ~func(A9) ReaderIOEither[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]) ReaderIOEither[T.Tuple9[T1, T2, T3, T4, T5, T6, T7, T8, T9]] {
|
||||
return G.TraverseTuple9[ReaderIOEither[T.Tuple9[T1, T2, T3, T4, T5, T6, T7, T8, T9]]](f1, f2, f3, f4, f5, f6, f7, f8, f9)
|
||||
return G.TraverseTuple9[ReaderIOEither[T.Tuple9[T1, T2, T3, T4, T5, T6, T7, T8, T9]]](f1, f2, f3, f4, f5, f6, f7, f8, f9)
|
||||
}
|
||||
|
||||
// TraverseSeqTuple9 converts a [T.Tuple9] of [A] via transformer functions transforming [A] to a [ReaderIOEither] into a [ReaderIOEither] of a [T.Tuple9].
|
||||
func TraverseSeqTuple9[F1 ~func(A1) ReaderIOEither[T1], F2 ~func(A2) ReaderIOEither[T2], F3 ~func(A3) ReaderIOEither[T3], F4 ~func(A4) ReaderIOEither[T4], F5 ~func(A5) ReaderIOEither[T5], F6 ~func(A6) ReaderIOEither[T6], F7 ~func(A7) ReaderIOEither[T7], F8 ~func(A8) ReaderIOEither[T8], F9 ~func(A9) ReaderIOEither[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]) ReaderIOEither[T.Tuple9[T1, T2, T3, T4, T5, T6, T7, T8, T9]] {
|
||||
return G.TraverseSeqTuple9[ReaderIOEither[T.Tuple9[T1, T2, T3, T4, T5, T6, T7, T8, T9]]](f1, f2, f3, f4, f5, f6, f7, f8, f9)
|
||||
return G.TraverseSeqTuple9[ReaderIOEither[T.Tuple9[T1, T2, T3, T4, T5, T6, T7, T8, T9]]](f1, f2, f3, f4, f5, f6, f7, f8, f9)
|
||||
}
|
||||
|
||||
// TraverseParTuple9 converts a [T.Tuple9] of [A] via transformer functions transforming [A] to a [ReaderIOEither] into a [ReaderIOEither] of a [T.Tuple9].
|
||||
func TraverseParTuple9[F1 ~func(A1) ReaderIOEither[T1], F2 ~func(A2) ReaderIOEither[T2], F3 ~func(A3) ReaderIOEither[T3], F4 ~func(A4) ReaderIOEither[T4], F5 ~func(A5) ReaderIOEither[T5], F6 ~func(A6) ReaderIOEither[T6], F7 ~func(A7) ReaderIOEither[T7], F8 ~func(A8) ReaderIOEither[T8], F9 ~func(A9) ReaderIOEither[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]) ReaderIOEither[T.Tuple9[T1, T2, T3, T4, T5, T6, T7, T8, T9]] {
|
||||
return G.TraverseParTuple9[ReaderIOEither[T.Tuple9[T1, T2, T3, T4, T5, T6, T7, T8, T9]]](f1, f2, f3, f4, f5, f6, f7, f8, f9)
|
||||
return G.TraverseParTuple9[ReaderIOEither[T.Tuple9[T1, T2, T3, T4, T5, T6, T7, T8, T9]]](f1, f2, f3, f4, f5, f6, f7, f8, f9)
|
||||
}
|
||||
|
||||
// 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] {
|
||||
return G.Eitherize10[ReaderIOEither[R]](f)
|
||||
return G.Eitherize10[ReaderIOEither[R]](f)
|
||||
}
|
||||
|
||||
// SequenceT10 converts 10 [ReaderIOEither] into a [ReaderIOEither] of a [T.Tuple10].
|
||||
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)
|
||||
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)
|
||||
}
|
||||
|
||||
// SequenceSeqT10 converts 10 [ReaderIOEither] into a [ReaderIOEither] of a [T.Tuple10].
|
||||
func SequenceSeqT10[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.SequenceSeqT10[ReaderIOEither[T.Tuple10[T1, T2, T3, T4, T5, T6, T7, T8, T9, T10]]](t1, t2, t3, t4, t5, t6, t7, t8, t9, t10)
|
||||
return G.SequenceSeqT10[ReaderIOEither[T.Tuple10[T1, T2, T3, T4, T5, T6, T7, T8, T9, T10]]](t1, t2, t3, t4, t5, t6, t7, t8, t9, t10)
|
||||
}
|
||||
|
||||
// SequenceParT10 converts 10 [ReaderIOEither] into a [ReaderIOEither] of a [T.Tuple10].
|
||||
func SequenceParT10[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.SequenceParT10[ReaderIOEither[T.Tuple10[T1, T2, T3, T4, T5, T6, T7, T8, T9, T10]]](t1, t2, t3, t4, t5, t6, t7, t8, t9, t10)
|
||||
return G.SequenceParT10[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)
|
||||
return G.SequenceTuple10[ReaderIOEither[T.Tuple10[T1, T2, T3, T4, T5, T6, T7, T8, T9, T10]]](t)
|
||||
}
|
||||
|
||||
// SequenceSeqTuple10 converts a [T.Tuple10] of [ReaderIOEither] into a [ReaderIOEither] of a [T.Tuple10].
|
||||
func SequenceSeqTuple10[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.SequenceSeqTuple10[ReaderIOEither[T.Tuple10[T1, T2, T3, T4, T5, T6, T7, T8, T9, T10]]](t)
|
||||
return G.SequenceSeqTuple10[ReaderIOEither[T.Tuple10[T1, T2, T3, T4, T5, T6, T7, T8, T9, T10]]](t)
|
||||
}
|
||||
|
||||
// SequenceParTuple10 converts a [T.Tuple10] of [ReaderIOEither] into a [ReaderIOEither] of a [T.Tuple10].
|
||||
func SequenceParTuple10[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.SequenceParTuple10[ReaderIOEither[T.Tuple10[T1, T2, T3, T4, T5, T6, T7, T8, T9, T10]]](t)
|
||||
return G.SequenceParTuple10[ReaderIOEither[T.Tuple10[T1, T2, T3, T4, T5, T6, T7, T8, T9, T10]]](t)
|
||||
}
|
||||
|
||||
// TraverseTuple10 converts a [T.Tuple10] of [A] via transformer functions transforming [A] to a [ReaderIOEither] into a [ReaderIOEither] of a [T.Tuple10].
|
||||
func TraverseTuple10[F1 ~func(A1) ReaderIOEither[T1], F2 ~func(A2) ReaderIOEither[T2], F3 ~func(A3) ReaderIOEither[T3], F4 ~func(A4) ReaderIOEither[T4], F5 ~func(A5) ReaderIOEither[T5], F6 ~func(A6) ReaderIOEither[T6], F7 ~func(A7) ReaderIOEither[T7], F8 ~func(A8) ReaderIOEither[T8], F9 ~func(A9) ReaderIOEither[T9], F10 ~func(A10) ReaderIOEither[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]) ReaderIOEither[T.Tuple10[T1, T2, T3, T4, T5, T6, T7, T8, T9, T10]] {
|
||||
return G.TraverseTuple10[ReaderIOEither[T.Tuple10[T1, T2, T3, T4, T5, T6, T7, T8, T9, T10]]](f1, f2, f3, f4, f5, f6, f7, f8, f9, f10)
|
||||
return G.TraverseTuple10[ReaderIOEither[T.Tuple10[T1, T2, T3, T4, T5, T6, T7, T8, T9, T10]]](f1, f2, f3, f4, f5, f6, f7, f8, f9, f10)
|
||||
}
|
||||
|
||||
// TraverseSeqTuple10 converts a [T.Tuple10] of [A] via transformer functions transforming [A] to a [ReaderIOEither] into a [ReaderIOEither] of a [T.Tuple10].
|
||||
func TraverseSeqTuple10[F1 ~func(A1) ReaderIOEither[T1], F2 ~func(A2) ReaderIOEither[T2], F3 ~func(A3) ReaderIOEither[T3], F4 ~func(A4) ReaderIOEither[T4], F5 ~func(A5) ReaderIOEither[T5], F6 ~func(A6) ReaderIOEither[T6], F7 ~func(A7) ReaderIOEither[T7], F8 ~func(A8) ReaderIOEither[T8], F9 ~func(A9) ReaderIOEither[T9], F10 ~func(A10) ReaderIOEither[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]) ReaderIOEither[T.Tuple10[T1, T2, T3, T4, T5, T6, T7, T8, T9, T10]] {
|
||||
return G.TraverseSeqTuple10[ReaderIOEither[T.Tuple10[T1, T2, T3, T4, T5, T6, T7, T8, T9, T10]]](f1, f2, f3, f4, f5, f6, f7, f8, f9, f10)
|
||||
return G.TraverseSeqTuple10[ReaderIOEither[T.Tuple10[T1, T2, T3, T4, T5, T6, T7, T8, T9, T10]]](f1, f2, f3, f4, f5, f6, f7, f8, f9, f10)
|
||||
}
|
||||
|
||||
// TraverseParTuple10 converts a [T.Tuple10] of [A] via transformer functions transforming [A] to a [ReaderIOEither] into a [ReaderIOEither] of a [T.Tuple10].
|
||||
func TraverseParTuple10[F1 ~func(A1) ReaderIOEither[T1], F2 ~func(A2) ReaderIOEither[T2], F3 ~func(A3) ReaderIOEither[T3], F4 ~func(A4) ReaderIOEither[T4], F5 ~func(A5) ReaderIOEither[T5], F6 ~func(A6) ReaderIOEither[T6], F7 ~func(A7) ReaderIOEither[T7], F8 ~func(A8) ReaderIOEither[T8], F9 ~func(A9) ReaderIOEither[T9], F10 ~func(A10) ReaderIOEither[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]) ReaderIOEither[T.Tuple10[T1, T2, T3, T4, T5, T6, T7, T8, T9, T10]] {
|
||||
return G.TraverseParTuple10[ReaderIOEither[T.Tuple10[T1, T2, T3, T4, T5, T6, T7, T8, T9, T10]]](f1, f2, f3, f4, f5, f6, f7, f8, f9, f10)
|
||||
return G.TraverseParTuple10[ReaderIOEither[T.Tuple10[T1, T2, T3, T4, T5, T6, T7, T8, T9, T10]]](f1, f2, f3, f4, f5, f6, f7, f8, f9, f10)
|
||||
}
|
||||
|
53
context/readerioeither/generic/bracket.go
Normal file
53
context/readerioeither/generic/bracket.go
Normal file
@@ -0,0 +1,53 @@
|
||||
// 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
|
||||
|
||||
import (
|
||||
"context"
|
||||
|
||||
E "github.com/IBM/fp-go/either"
|
||||
G "github.com/IBM/fp-go/internal/bracket"
|
||||
I "github.com/IBM/fp-go/readerio/generic"
|
||||
)
|
||||
|
||||
// Bracket makes sure that a resource is cleaned up in the event of an error. The release action is called regardless of
|
||||
// whether the body action returns and error or not.
|
||||
func Bracket[
|
||||
GA ~func(context.Context) TA,
|
||||
GB ~func(context.Context) TB,
|
||||
GANY ~func(context.Context) TANY,
|
||||
|
||||
TA ~func() E.Either[error, A],
|
||||
TB ~func() E.Either[error, B],
|
||||
TANY ~func() E.Either[error, ANY],
|
||||
|
||||
A, B, ANY any](
|
||||
|
||||
acquire GA,
|
||||
use func(A) GB,
|
||||
release func(A, E.Either[error, B]) GANY,
|
||||
) GB {
|
||||
return G.Bracket[GA, GB, GANY, E.Either[error, B], A, B](
|
||||
I.Of[GB, TB, context.Context, E.Either[error, B]],
|
||||
MonadChain[GA, GB, TA, TB, A, B],
|
||||
I.MonadChain[GB, GB, TB, TB, context.Context, E.Either[error, B], E.Either[error, B]],
|
||||
MonadChain[GANY, GB, TANY, TB, ANY, B],
|
||||
|
||||
acquire,
|
||||
use,
|
||||
release,
|
||||
)
|
||||
}
|
File diff suppressed because it is too large
Load Diff
@@ -432,10 +432,10 @@ func FromIOEither[
|
||||
|
||||
func FromIO[
|
||||
GRA ~func(context.Context) GIOA,
|
||||
GIOA ~func() E.Either[error, A],
|
||||
|
||||
GIOB ~func() A,
|
||||
|
||||
GIOA ~func() E.Either[error, A],
|
||||
|
||||
A any](t GIOB) GRA {
|
||||
return RIE.FromIO[GRA](t)
|
||||
}
|
||||
@@ -571,7 +571,7 @@ func Timer[
|
||||
](delay time.Duration) GRA {
|
||||
return F.Pipe2(
|
||||
IO.Now[func() time.Time](),
|
||||
FromIO[GRA, GIOA, func() time.Time],
|
||||
FromIO[GRA, func() time.Time],
|
||||
Delay[GRA](delay),
|
||||
)
|
||||
}
|
||||
|
44
context/readerioeither/generic/sync.go
Normal file
44
context/readerioeither/generic/sync.go
Normal file
@@ -0,0 +1,44 @@
|
||||
// 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
|
||||
|
||||
import (
|
||||
"context"
|
||||
|
||||
E "github.com/IBM/fp-go/either"
|
||||
F "github.com/IBM/fp-go/function"
|
||||
IO "github.com/IBM/fp-go/io/generic"
|
||||
)
|
||||
|
||||
// WithLock executes the provided IO operation in the scope of a lock
|
||||
func WithLock[
|
||||
GRA ~func(context.Context) GIOA,
|
||||
GIOA ~func() E.Either[error, A],
|
||||
GRCANCEL ~func(context.Context) GIOCANCEL,
|
||||
GIOCANCEL ~func() E.Either[error, context.CancelFunc],
|
||||
A any](lock GRCANCEL) func(fa GRA) GRA {
|
||||
|
||||
type GRANY func(ctx context.Context) func() E.Either[error, any]
|
||||
type IOANY func() any
|
||||
|
||||
return F.Flow2(
|
||||
F.Constant1[context.CancelFunc, GRA],
|
||||
WithResource[GRA, GRCANCEL, GRANY](lock, F.Flow2(
|
||||
IO.FromImpure[IOANY, context.CancelFunc],
|
||||
FromIO[GRANY, IOANY],
|
||||
)),
|
||||
)
|
||||
}
|
@@ -19,8 +19,6 @@ import (
|
||||
"context"
|
||||
"time"
|
||||
|
||||
R "github.com/IBM/fp-go/context/reader"
|
||||
RIO "github.com/IBM/fp-go/context/readerio"
|
||||
G "github.com/IBM/fp-go/context/readerioeither/generic"
|
||||
ET "github.com/IBM/fp-go/either"
|
||||
IO "github.com/IBM/fp-go/io"
|
||||
@@ -33,14 +31,6 @@ func FromEither[A any](e ET.Either[error, A]) ReaderIOEither[A] {
|
||||
return G.FromEither[ReaderIOEither[A]](e)
|
||||
}
|
||||
|
||||
func RightReader[A any](r R.Reader[A]) ReaderIOEither[A] {
|
||||
return G.RightReader[ReaderIOEither[A]](r)
|
||||
}
|
||||
|
||||
func LeftReader[A any](l R.Reader[error]) ReaderIOEither[A] {
|
||||
return G.LeftReader[ReaderIOEither[A]](l)
|
||||
}
|
||||
|
||||
func Left[A any](l error) ReaderIOEither[A] {
|
||||
return G.Left[ReaderIOEither[A]](l)
|
||||
}
|
||||
@@ -49,10 +39,6 @@ func Right[A any](r A) ReaderIOEither[A] {
|
||||
return G.Right[ReaderIOEither[A]](r)
|
||||
}
|
||||
|
||||
func FromReader[A any](r R.Reader[A]) ReaderIOEither[A] {
|
||||
return G.FromReader[ReaderIOEither[A]](r)
|
||||
}
|
||||
|
||||
func MonadMap[A, B any](fa ReaderIOEither[A], f func(A) B) ReaderIOEither[B] {
|
||||
return G.MonadMap[ReaderIOEither[A], ReaderIOEither[B]](fa, f)
|
||||
}
|
||||
@@ -103,30 +89,14 @@ func FromPredicate[A any](pred func(A) bool, onFalse func(A) error) func(A) Read
|
||||
return G.FromPredicate[ReaderIOEither[A]](pred, onFalse)
|
||||
}
|
||||
|
||||
func Fold[A, B any](onLeft func(error) RIO.ReaderIO[B], onRight func(A) RIO.ReaderIO[B]) func(ReaderIOEither[A]) RIO.ReaderIO[B] {
|
||||
return G.Fold[RIO.ReaderIO[B], ReaderIOEither[A]](onLeft, onRight)
|
||||
}
|
||||
|
||||
func GetOrElse[A any](onLeft func(error) RIO.ReaderIO[A]) func(ReaderIOEither[A]) RIO.ReaderIO[A] {
|
||||
return G.GetOrElse[RIO.ReaderIO[A], ReaderIOEither[A]](onLeft)
|
||||
}
|
||||
|
||||
func OrElse[A any](onLeft func(error) ReaderIOEither[A]) func(ReaderIOEither[A]) ReaderIOEither[A] {
|
||||
return G.OrElse[ReaderIOEither[A]](onLeft)
|
||||
}
|
||||
|
||||
func OrLeft[A any](onLeft func(error) RIO.ReaderIO[error]) func(ReaderIOEither[A]) ReaderIOEither[A] {
|
||||
return G.OrLeft[ReaderIOEither[A], RIO.ReaderIO[error]](onLeft)
|
||||
}
|
||||
|
||||
func Ask() ReaderIOEither[context.Context] {
|
||||
return G.Ask[ReaderIOEither[context.Context]]()
|
||||
}
|
||||
|
||||
func Asks[A any](r R.Reader[A]) ReaderIOEither[A] {
|
||||
return G.Asks[ReaderIOEither[A]](r)
|
||||
}
|
||||
|
||||
func MonadChainEitherK[A, B any](ma ReaderIOEither[A], f func(A) ET.Either[error, B]) ReaderIOEither[B] {
|
||||
return G.MonadChainEitherK[ReaderIOEither[A], ReaderIOEither[B]](ma, f)
|
||||
}
|
||||
@@ -164,14 +134,6 @@ func Never[A any]() ReaderIOEither[A] {
|
||||
return G.Never[ReaderIOEither[A]]()
|
||||
}
|
||||
|
||||
func MonadChainReaderIOK[A, B any](ma ReaderIOEither[A], f func(A) RIO.ReaderIO[B]) ReaderIOEither[B] {
|
||||
return G.MonadChainReaderIOK[ReaderIOEither[B], ReaderIOEither[A]](ma, f)
|
||||
}
|
||||
|
||||
func ChainReaderIOK[A, B any](f func(A) RIO.ReaderIO[B]) func(ma ReaderIOEither[A]) ReaderIOEither[B] {
|
||||
return G.ChainReaderIOK[ReaderIOEither[B], ReaderIOEither[A]](f)
|
||||
}
|
||||
|
||||
func MonadChainIOK[A, B any](ma ReaderIOEither[A], f func(A) IO.IO[B]) ReaderIOEither[B] {
|
||||
return G.MonadChainIOK[ReaderIOEither[B], ReaderIOEither[A]](ma, f)
|
||||
}
|
||||
@@ -235,22 +197,6 @@ func Flatten[
|
||||
return G.Flatten[ReaderIOEither[ReaderIOEither[A]]](rdr)
|
||||
}
|
||||
|
||||
func MonadFromReaderIO[A any](a A, f func(A) RIO.ReaderIO[A]) ReaderIOEither[A] {
|
||||
return G.MonadFromReaderIO[ReaderIOEither[A]](a, f)
|
||||
}
|
||||
|
||||
func FromReaderIO[A any](f func(A) RIO.ReaderIO[A]) func(A) ReaderIOEither[A] {
|
||||
return G.FromReaderIO[ReaderIOEither[A]](f)
|
||||
}
|
||||
|
||||
func RightReaderIO[A any](ma RIO.ReaderIO[A]) ReaderIOEither[A] {
|
||||
return G.RightReaderIO[ReaderIOEither[A]](ma)
|
||||
}
|
||||
|
||||
func LeftReaderIO[A any](ma RIO.ReaderIO[error]) ReaderIOEither[A] {
|
||||
return G.LeftReaderIO[ReaderIOEither[A]](ma)
|
||||
}
|
||||
|
||||
func MonadFlap[B, A any](fab ReaderIOEither[func(A) B], a A) ReaderIOEither[B] {
|
||||
return G.MonadFlap[ReaderIOEither[func(A) B], ReaderIOEither[B]](fab, a)
|
||||
}
|
||||
|
@@ -13,14 +13,15 @@
|
||||
// See the License for the specific language governing permissions and
|
||||
// limitations under the License.
|
||||
|
||||
// Package reader implements a specialization of the Reader monad assuming a golang context as the context of the monad
|
||||
package reader
|
||||
package readerioeither
|
||||
|
||||
import (
|
||||
"context"
|
||||
|
||||
R "github.com/IBM/fp-go/reader"
|
||||
G "github.com/IBM/fp-go/context/readerioeither/generic"
|
||||
)
|
||||
|
||||
// Reader is a specialization of the Reader monad assuming a golang context as the context of the monad
|
||||
type Reader[A any] R.Reader[context.Context, A]
|
||||
// WithLock executes the provided IO operation in the scope of a lock
|
||||
func WithLock[A any](lock ReaderIOEither[context.CancelFunc]) func(fa ReaderIOEither[A]) ReaderIOEither[A] {
|
||||
return G.WithLock[ReaderIOEither[A]](lock)
|
||||
}
|
@@ -120,16 +120,15 @@ func Flatten[E, A any](mma Either[E, Either[E, A]]) Either[E, A] {
|
||||
return MonadChain(mma, F.Identity[Either[E, A]])
|
||||
}
|
||||
|
||||
func TryCatch[FA ~func() (A, error), FE func(error) E, E, A any](f FA, onThrow FE) Either[E, A] {
|
||||
val, err := f()
|
||||
func TryCatch[FE func(error) E, E, A any](val A, err error, onThrow FE) Either[E, A] {
|
||||
if err != nil {
|
||||
return F.Pipe2(err, onThrow, Left[A, E])
|
||||
}
|
||||
return F.Pipe1(val, Right[E, A])
|
||||
}
|
||||
|
||||
func TryCatchError[F ~func() (A, error), A any](f F) Either[error, A] {
|
||||
return TryCatch(f, E.IdentityError)
|
||||
func TryCatchError[A any](val A, err error) Either[error, A] {
|
||||
return TryCatch(val, err, E.IdentityError)
|
||||
}
|
||||
|
||||
func Sequence2[E, T1, T2, R any](f func(T1, T2) Either[E, R]) func(Either[E, T1], Either[E, T2]) Either[E, R] {
|
||||
@@ -154,9 +153,7 @@ func ToOption[E, A any](ma Either[E, A]) O.Option[A] {
|
||||
|
||||
func FromError[A any](f func(a A) error) func(A) Either[error, A] {
|
||||
return func(a A) Either[error, A] {
|
||||
return TryCatchError(func() (A, error) {
|
||||
return a, f(a)
|
||||
})
|
||||
return TryCatchError(a, f(a))
|
||||
}
|
||||
}
|
||||
|
||||
|
@@ -32,7 +32,5 @@ var (
|
||||
)
|
||||
|
||||
func command(name string, args []string, in []byte) E.Either[error, exec.CommandOutput] {
|
||||
return E.TryCatchError(func() (exec.CommandOutput, error) {
|
||||
return GE.Exec(context.Background(), name, args, in)
|
||||
})
|
||||
return E.TryCatchError(GE.Exec(context.Background(), name, args, in))
|
||||
}
|
||||
|
927
either/gen.go
927
either/gen.go
File diff suppressed because it is too large
Load Diff
@@ -35,17 +35,13 @@ var (
|
||||
func bodyRequest(method string) func(string) func([]byte) E.Either[error, *http.Request] {
|
||||
return func(url string) func([]byte) E.Either[error, *http.Request] {
|
||||
return func(body []byte) E.Either[error, *http.Request] {
|
||||
return E.TryCatchError(func() (*http.Request, error) {
|
||||
return http.NewRequest(method, url, bytes.NewReader(body))
|
||||
})
|
||||
return E.TryCatchError(http.NewRequest(method, url, bytes.NewReader(body)))
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
func noBodyRequest(method string) func(string) E.Either[error, *http.Request] {
|
||||
return func(url string) E.Either[error, *http.Request] {
|
||||
return E.TryCatchError(func() (*http.Request, error) {
|
||||
return http.NewRequest(method, url, nil)
|
||||
})
|
||||
return E.TryCatchError(http.NewRequest(method, url, nil))
|
||||
}
|
||||
}
|
||||
|
@@ -25,20 +25,14 @@ import (
|
||||
|
||||
func TestWithResource(t *testing.T) {
|
||||
onCreate := func() Either[error, *os.File] {
|
||||
return TryCatchError(func() (*os.File, error) {
|
||||
return os.CreateTemp("", "*")
|
||||
})
|
||||
return TryCatchError(os.CreateTemp("", "*"))
|
||||
}
|
||||
onDelete := F.Flow2(
|
||||
func(f *os.File) Either[error, string] {
|
||||
return TryCatchError(func() (string, error) {
|
||||
return f.Name(), f.Close()
|
||||
})
|
||||
return TryCatchError(f.Name(), f.Close())
|
||||
},
|
||||
Chain(func(name string) Either[error, any] {
|
||||
return TryCatchError(func() (any, error) {
|
||||
return name, os.Remove(name)
|
||||
})
|
||||
return TryCatchError(any(name), os.Remove(name))
|
||||
}),
|
||||
)
|
||||
|
||||
|
@@ -17,80 +17,60 @@ package either
|
||||
|
||||
func Variadic0[V, R any](f func([]V) (R, error)) func(...V) Either[error, R] {
|
||||
return func(v ...V) Either[error, R] {
|
||||
return TryCatchError(func() (R, error) {
|
||||
return f(v)
|
||||
})
|
||||
return TryCatchError(f(v))
|
||||
}
|
||||
}
|
||||
|
||||
func Variadic1[T1, V, R any](f func(T1, []V) (R, error)) func(T1, ...V) Either[error, R] {
|
||||
return func(t1 T1, v ...V) Either[error, R] {
|
||||
return TryCatchError(func() (R, error) {
|
||||
return f(t1, v)
|
||||
})
|
||||
return TryCatchError(f(t1, v))
|
||||
}
|
||||
}
|
||||
|
||||
func Variadic2[T1, T2, V, R any](f func(T1, T2, []V) (R, error)) func(T1, T2, ...V) Either[error, R] {
|
||||
return func(t1 T1, t2 T2, v ...V) Either[error, R] {
|
||||
return TryCatchError(func() (R, error) {
|
||||
return f(t1, t2, v)
|
||||
})
|
||||
return TryCatchError(f(t1, t2, v))
|
||||
}
|
||||
}
|
||||
|
||||
func Variadic3[T1, T2, T3, V, R any](f func(T1, T2, T3, []V) (R, error)) func(T1, T2, T3, ...V) Either[error, R] {
|
||||
return func(t1 T1, t2 T2, t3 T3, v ...V) Either[error, R] {
|
||||
return TryCatchError(func() (R, error) {
|
||||
return f(t1, t2, t3, v)
|
||||
})
|
||||
return TryCatchError(f(t1, t2, t3, v))
|
||||
}
|
||||
}
|
||||
|
||||
func Variadic4[T1, T2, T3, T4, V, R any](f func(T1, T2, T3, T4, []V) (R, error)) func(T1, T2, T3, T4, ...V) Either[error, R] {
|
||||
return func(t1 T1, t2 T2, t3 T3, t4 T4, v ...V) Either[error, R] {
|
||||
return TryCatchError(func() (R, error) {
|
||||
return f(t1, t2, t3, t4, v)
|
||||
})
|
||||
return TryCatchError(f(t1, t2, t3, t4, v))
|
||||
}
|
||||
}
|
||||
|
||||
func Unvariadic0[V, R any](f func(...V) (R, error)) func([]V) Either[error, R] {
|
||||
return func(v []V) Either[error, R] {
|
||||
return TryCatchError(func() (R, error) {
|
||||
return f(v...)
|
||||
})
|
||||
return TryCatchError(f(v...))
|
||||
}
|
||||
}
|
||||
|
||||
func Unvariadic1[T1, V, R any](f func(T1, ...V) (R, error)) func(T1, []V) Either[error, R] {
|
||||
return func(t1 T1, v []V) Either[error, R] {
|
||||
return TryCatchError(func() (R, error) {
|
||||
return f(t1, v...)
|
||||
})
|
||||
return TryCatchError(f(t1, v...))
|
||||
}
|
||||
}
|
||||
|
||||
func Unvariadic2[T1, T2, V, R any](f func(T1, T2, ...V) (R, error)) func(T1, T2, []V) Either[error, R] {
|
||||
return func(t1 T1, t2 T2, v []V) Either[error, R] {
|
||||
return TryCatchError(func() (R, error) {
|
||||
return f(t1, t2, v...)
|
||||
})
|
||||
return TryCatchError(f(t1, t2, v...))
|
||||
}
|
||||
}
|
||||
|
||||
func Unvariadic3[T1, T2, T3, V, R any](f func(T1, T2, T3, ...V) (R, error)) func(T1, T2, T3, []V) Either[error, R] {
|
||||
return func(t1 T1, t2 T2, t3 T3, v []V) Either[error, R] {
|
||||
return TryCatchError(func() (R, error) {
|
||||
return f(t1, t2, t3, v...)
|
||||
})
|
||||
return TryCatchError(f(t1, t2, t3, v...))
|
||||
}
|
||||
}
|
||||
|
||||
func Unvariadic4[T1, T2, T3, T4, V, R any](f func(T1, T2, T3, T4, ...V) (R, error)) func(T1, T2, T3, T4, []V) Either[error, R] {
|
||||
return func(t1 T1, t2 T2, t3 T3, t4 T4, v []V) Either[error, R] {
|
||||
return TryCatchError(func() (R, error) {
|
||||
return f(t1, t2, t3, t4, v...)
|
||||
})
|
||||
return TryCatchError(f(t1, t2, t3, t4, v...))
|
||||
}
|
||||
}
|
||||
|
@@ -1,455 +1,451 @@
|
||||
// Code generated by go generate; DO NOT EDIT.
|
||||
// This file was generated by robots at
|
||||
// 2023-09-12 13:44:23.4226437 +0200 CEST m=+0.011841001
|
||||
// 2023-10-23 08:30:44.6474482 +0200 CEST m=+0.150851901
|
||||
|
||||
package function
|
||||
|
||||
// Combinations for a total of 1 arguments
|
||||
|
||||
// Bind1of1 takes a function with 1 parameters and returns a new function with 1 parameters that will bind these parameters to the positions [1] of the original function.
|
||||
// The return value of is a function with the remaining 0 parameters at positions [] of the original function.
|
||||
func Bind1of1[F ~func(T1) R, T1, R any](f F) func(T1) func() R {
|
||||
return func(t1 T1) func() R {
|
||||
return func() R {
|
||||
return f(t1)
|
||||
}
|
||||
}
|
||||
return func(t1 T1) func() R {
|
||||
return func() R {
|
||||
return f(t1)
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
// Ignore1of1 takes a function with 0 parameters and returns a new function with 1 parameters that will ignore the values at positions [1] and pass the remaining 0 parameters to the original function
|
||||
func Ignore1of1[T1 any, F ~func() R, R any](f F) func(T1) R {
|
||||
return func(t1 T1) R {
|
||||
return f()
|
||||
}
|
||||
return func(t1 T1) R {
|
||||
return f()
|
||||
}
|
||||
}
|
||||
|
||||
// Combinations for a total of 2 arguments
|
||||
|
||||
// Bind1of2 takes a function with 2 parameters and returns a new function with 1 parameters that will bind these parameters to the positions [1] of the original function.
|
||||
// The return value of is a function with the remaining 1 parameters at positions [2] of the original function.
|
||||
func Bind1of2[F ~func(T1, T2) R, T1, T2, R any](f F) func(T1) func(T2) R {
|
||||
return func(t1 T1) func(T2) R {
|
||||
return func(t2 T2) R {
|
||||
return f(t1, t2)
|
||||
}
|
||||
}
|
||||
return func(t1 T1) func(T2) R {
|
||||
return func(t2 T2) R {
|
||||
return f(t1, t2)
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
// Ignore1of2 takes a function with 1 parameters and returns a new function with 2 parameters that will ignore the values at positions [1] and pass the remaining 1 parameters to the original function
|
||||
func Ignore1of2[T1 any, F ~func(T2) R, T2, R any](f F) func(T1, T2) R {
|
||||
return func(t1 T1, t2 T2) R {
|
||||
return f(t2)
|
||||
}
|
||||
return func(t1 T1, t2 T2) R {
|
||||
return f(t2)
|
||||
}
|
||||
}
|
||||
|
||||
// Bind2of2 takes a function with 2 parameters and returns a new function with 1 parameters that will bind these parameters to the positions [2] of the original function.
|
||||
// The return value of is a function with the remaining 1 parameters at positions [1] of the original function.
|
||||
func Bind2of2[F ~func(T1, T2) R, T1, T2, R any](f F) func(T2) func(T1) R {
|
||||
return func(t2 T2) func(T1) R {
|
||||
return func(t1 T1) R {
|
||||
return f(t1, t2)
|
||||
}
|
||||
}
|
||||
return func(t2 T2) func(T1) R {
|
||||
return func(t1 T1) R {
|
||||
return f(t1, t2)
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
// Ignore2of2 takes a function with 1 parameters and returns a new function with 2 parameters that will ignore the values at positions [2] and pass the remaining 1 parameters to the original function
|
||||
func Ignore2of2[T2 any, F ~func(T1) R, T1, R any](f F) func(T1, T2) R {
|
||||
return func(t1 T1, t2 T2) R {
|
||||
return f(t1)
|
||||
}
|
||||
return func(t1 T1, t2 T2) R {
|
||||
return f(t1)
|
||||
}
|
||||
}
|
||||
|
||||
// Bind12of2 takes a function with 2 parameters and returns a new function with 2 parameters that will bind these parameters to the positions [1, 2] of the original function.
|
||||
// The return value of is a function with the remaining 0 parameters at positions [] of the original function.
|
||||
func Bind12of2[F ~func(T1, T2) R, T1, T2, R any](f F) func(T1, T2) func() R {
|
||||
return func(t1 T1, t2 T2) func() R {
|
||||
return func() R {
|
||||
return f(t1, t2)
|
||||
}
|
||||
}
|
||||
return func(t1 T1, t2 T2) func() R {
|
||||
return func() R {
|
||||
return f(t1, t2)
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
// Ignore12of2 takes a function with 0 parameters and returns a new function with 2 parameters that will ignore the values at positions [1, 2] and pass the remaining 0 parameters to the original function
|
||||
func Ignore12of2[T1, T2 any, F ~func() R, R any](f F) func(T1, T2) R {
|
||||
return func(t1 T1, t2 T2) R {
|
||||
return f()
|
||||
}
|
||||
return func(t1 T1, t2 T2) R {
|
||||
return f()
|
||||
}
|
||||
}
|
||||
|
||||
// Combinations for a total of 3 arguments
|
||||
|
||||
// Bind1of3 takes a function with 3 parameters and returns a new function with 1 parameters that will bind these parameters to the positions [1] of the original function.
|
||||
// The return value of is a function with the remaining 2 parameters at positions [2, 3] of the original function.
|
||||
func Bind1of3[F ~func(T1, T2, T3) R, T1, T2, T3, R any](f F) func(T1) func(T2, T3) R {
|
||||
return func(t1 T1) func(T2, T3) R {
|
||||
return func(t2 T2, t3 T3) R {
|
||||
return f(t1, t2, t3)
|
||||
}
|
||||
}
|
||||
return func(t1 T1) func(T2, T3) R {
|
||||
return func(t2 T2, t3 T3) R {
|
||||
return f(t1, t2, t3)
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
// Ignore1of3 takes a function with 2 parameters and returns a new function with 3 parameters that will ignore the values at positions [1] and pass the remaining 2 parameters to the original function
|
||||
func Ignore1of3[T1 any, F ~func(T2, T3) R, T2, T3, R any](f F) func(T1, T2, T3) R {
|
||||
return func(t1 T1, t2 T2, t3 T3) R {
|
||||
return f(t2, t3)
|
||||
}
|
||||
return func(t1 T1, t2 T2, t3 T3) R {
|
||||
return f(t2, t3)
|
||||
}
|
||||
}
|
||||
|
||||
// Bind2of3 takes a function with 3 parameters and returns a new function with 1 parameters that will bind these parameters to the positions [2] of the original function.
|
||||
// The return value of is a function with the remaining 2 parameters at positions [1, 3] of the original function.
|
||||
func Bind2of3[F ~func(T1, T2, T3) R, T1, T2, T3, R any](f F) func(T2) func(T1, T3) R {
|
||||
return func(t2 T2) func(T1, T3) R {
|
||||
return func(t1 T1, t3 T3) R {
|
||||
return f(t1, t2, t3)
|
||||
}
|
||||
}
|
||||
return func(t2 T2) func(T1, T3) R {
|
||||
return func(t1 T1, t3 T3) R {
|
||||
return f(t1, t2, t3)
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
// Ignore2of3 takes a function with 2 parameters and returns a new function with 3 parameters that will ignore the values at positions [2] and pass the remaining 2 parameters to the original function
|
||||
func Ignore2of3[T2 any, F ~func(T1, T3) R, T1, T3, R any](f F) func(T1, T2, T3) R {
|
||||
return func(t1 T1, t2 T2, t3 T3) R {
|
||||
return f(t1, t3)
|
||||
}
|
||||
return func(t1 T1, t2 T2, t3 T3) R {
|
||||
return f(t1, t3)
|
||||
}
|
||||
}
|
||||
|
||||
// Bind3of3 takes a function with 3 parameters and returns a new function with 1 parameters that will bind these parameters to the positions [3] of the original function.
|
||||
// The return value of is a function with the remaining 2 parameters at positions [1, 2] of the original function.
|
||||
func Bind3of3[F ~func(T1, T2, T3) R, T1, T2, T3, R any](f F) func(T3) func(T1, T2) R {
|
||||
return func(t3 T3) func(T1, T2) R {
|
||||
return func(t1 T1, t2 T2) R {
|
||||
return f(t1, t2, t3)
|
||||
}
|
||||
}
|
||||
return func(t3 T3) func(T1, T2) R {
|
||||
return func(t1 T1, t2 T2) R {
|
||||
return f(t1, t2, t3)
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
// Ignore3of3 takes a function with 2 parameters and returns a new function with 3 parameters that will ignore the values at positions [3] and pass the remaining 2 parameters to the original function
|
||||
func Ignore3of3[T3 any, F ~func(T1, T2) R, T1, T2, R any](f F) func(T1, T2, T3) R {
|
||||
return func(t1 T1, t2 T2, t3 T3) R {
|
||||
return f(t1, t2)
|
||||
}
|
||||
return func(t1 T1, t2 T2, t3 T3) R {
|
||||
return f(t1, t2)
|
||||
}
|
||||
}
|
||||
|
||||
// Bind12of3 takes a function with 3 parameters and returns a new function with 2 parameters that will bind these parameters to the positions [1, 2] of the original function.
|
||||
// The return value of is a function with the remaining 1 parameters at positions [3] of the original function.
|
||||
func Bind12of3[F ~func(T1, T2, T3) R, T1, T2, T3, R any](f F) func(T1, T2) func(T3) R {
|
||||
return func(t1 T1, t2 T2) func(T3) R {
|
||||
return func(t3 T3) R {
|
||||
return f(t1, t2, t3)
|
||||
}
|
||||
}
|
||||
return func(t1 T1, t2 T2) func(T3) R {
|
||||
return func(t3 T3) R {
|
||||
return f(t1, t2, t3)
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
// Ignore12of3 takes a function with 1 parameters and returns a new function with 3 parameters that will ignore the values at positions [1, 2] and pass the remaining 1 parameters to the original function
|
||||
func Ignore12of3[T1, T2 any, F ~func(T3) R, T3, R any](f F) func(T1, T2, T3) R {
|
||||
return func(t1 T1, t2 T2, t3 T3) R {
|
||||
return f(t3)
|
||||
}
|
||||
return func(t1 T1, t2 T2, t3 T3) R {
|
||||
return f(t3)
|
||||
}
|
||||
}
|
||||
|
||||
// Bind13of3 takes a function with 3 parameters and returns a new function with 2 parameters that will bind these parameters to the positions [1, 3] of the original function.
|
||||
// The return value of is a function with the remaining 1 parameters at positions [2] of the original function.
|
||||
func Bind13of3[F ~func(T1, T2, T3) R, T1, T2, T3, R any](f F) func(T1, T3) func(T2) R {
|
||||
return func(t1 T1, t3 T3) func(T2) R {
|
||||
return func(t2 T2) R {
|
||||
return f(t1, t2, t3)
|
||||
}
|
||||
}
|
||||
return func(t1 T1, t3 T3) func(T2) R {
|
||||
return func(t2 T2) R {
|
||||
return f(t1, t2, t3)
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
// Ignore13of3 takes a function with 1 parameters and returns a new function with 3 parameters that will ignore the values at positions [1, 3] and pass the remaining 1 parameters to the original function
|
||||
func Ignore13of3[T1, T3 any, F ~func(T2) R, T2, R any](f F) func(T1, T2, T3) R {
|
||||
return func(t1 T1, t2 T2, t3 T3) R {
|
||||
return f(t2)
|
||||
}
|
||||
return func(t1 T1, t2 T2, t3 T3) R {
|
||||
return f(t2)
|
||||
}
|
||||
}
|
||||
|
||||
// Bind23of3 takes a function with 3 parameters and returns a new function with 2 parameters that will bind these parameters to the positions [2, 3] of the original function.
|
||||
// The return value of is a function with the remaining 1 parameters at positions [1] of the original function.
|
||||
func Bind23of3[F ~func(T1, T2, T3) R, T1, T2, T3, R any](f F) func(T2, T3) func(T1) R {
|
||||
return func(t2 T2, t3 T3) func(T1) R {
|
||||
return func(t1 T1) R {
|
||||
return f(t1, t2, t3)
|
||||
}
|
||||
}
|
||||
return func(t2 T2, t3 T3) func(T1) R {
|
||||
return func(t1 T1) R {
|
||||
return f(t1, t2, t3)
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
// Ignore23of3 takes a function with 1 parameters and returns a new function with 3 parameters that will ignore the values at positions [2, 3] and pass the remaining 1 parameters to the original function
|
||||
func Ignore23of3[T2, T3 any, F ~func(T1) R, T1, R any](f F) func(T1, T2, T3) R {
|
||||
return func(t1 T1, t2 T2, t3 T3) R {
|
||||
return f(t1)
|
||||
}
|
||||
return func(t1 T1, t2 T2, t3 T3) R {
|
||||
return f(t1)
|
||||
}
|
||||
}
|
||||
|
||||
// Bind123of3 takes a function with 3 parameters and returns a new function with 3 parameters that will bind these parameters to the positions [1, 2, 3] of the original function.
|
||||
// The return value of is a function with the remaining 0 parameters at positions [] of the original function.
|
||||
func Bind123of3[F ~func(T1, T2, T3) R, T1, T2, T3, R any](f F) func(T1, T2, T3) func() R {
|
||||
return func(t1 T1, t2 T2, t3 T3) func() R {
|
||||
return func() R {
|
||||
return f(t1, t2, t3)
|
||||
}
|
||||
}
|
||||
return func(t1 T1, t2 T2, t3 T3) func() R {
|
||||
return func() R {
|
||||
return f(t1, t2, t3)
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
// Ignore123of3 takes a function with 0 parameters and returns a new function with 3 parameters that will ignore the values at positions [1, 2, 3] and pass the remaining 0 parameters to the original function
|
||||
func Ignore123of3[T1, T2, T3 any, F ~func() R, R any](f F) func(T1, T2, T3) R {
|
||||
return func(t1 T1, t2 T2, t3 T3) R {
|
||||
return f()
|
||||
}
|
||||
return func(t1 T1, t2 T2, t3 T3) R {
|
||||
return f()
|
||||
}
|
||||
}
|
||||
|
||||
// Combinations for a total of 4 arguments
|
||||
|
||||
// Bind1of4 takes a function with 4 parameters and returns a new function with 1 parameters that will bind these parameters to the positions [1] of the original function.
|
||||
// The return value of is a function with the remaining 3 parameters at positions [2, 3, 4] of the original function.
|
||||
func Bind1of4[F ~func(T1, T2, T3, T4) R, T1, T2, T3, T4, R any](f F) func(T1) func(T2, T3, T4) R {
|
||||
return func(t1 T1) func(T2, T3, T4) R {
|
||||
return func(t2 T2, t3 T3, t4 T4) R {
|
||||
return f(t1, t2, t3, t4)
|
||||
}
|
||||
}
|
||||
return func(t1 T1) func(T2, T3, T4) R {
|
||||
return func(t2 T2, t3 T3, t4 T4) R {
|
||||
return f(t1, t2, t3, t4)
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
// Ignore1of4 takes a function with 3 parameters and returns a new function with 4 parameters that will ignore the values at positions [1] and pass the remaining 3 parameters to the original function
|
||||
func Ignore1of4[T1 any, F ~func(T2, T3, T4) R, T2, T3, T4, R any](f F) func(T1, T2, T3, T4) R {
|
||||
return func(t1 T1, t2 T2, t3 T3, t4 T4) R {
|
||||
return f(t2, t3, t4)
|
||||
}
|
||||
return func(t1 T1, t2 T2, t3 T3, t4 T4) R {
|
||||
return f(t2, t3, t4)
|
||||
}
|
||||
}
|
||||
|
||||
// Bind2of4 takes a function with 4 parameters and returns a new function with 1 parameters that will bind these parameters to the positions [2] of the original function.
|
||||
// The return value of is a function with the remaining 3 parameters at positions [1, 3, 4] of the original function.
|
||||
func Bind2of4[F ~func(T1, T2, T3, T4) R, T1, T2, T3, T4, R any](f F) func(T2) func(T1, T3, T4) R {
|
||||
return func(t2 T2) func(T1, T3, T4) R {
|
||||
return func(t1 T1, t3 T3, t4 T4) R {
|
||||
return f(t1, t2, t3, t4)
|
||||
}
|
||||
}
|
||||
return func(t2 T2) func(T1, T3, T4) R {
|
||||
return func(t1 T1, t3 T3, t4 T4) R {
|
||||
return f(t1, t2, t3, t4)
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
// Ignore2of4 takes a function with 3 parameters and returns a new function with 4 parameters that will ignore the values at positions [2] and pass the remaining 3 parameters to the original function
|
||||
func Ignore2of4[T2 any, F ~func(T1, T3, T4) R, T1, T3, T4, R any](f F) func(T1, T2, T3, T4) R {
|
||||
return func(t1 T1, t2 T2, t3 T3, t4 T4) R {
|
||||
return f(t1, t3, t4)
|
||||
}
|
||||
return func(t1 T1, t2 T2, t3 T3, t4 T4) R {
|
||||
return f(t1, t3, t4)
|
||||
}
|
||||
}
|
||||
|
||||
// Bind3of4 takes a function with 4 parameters and returns a new function with 1 parameters that will bind these parameters to the positions [3] of the original function.
|
||||
// The return value of is a function with the remaining 3 parameters at positions [1, 2, 4] of the original function.
|
||||
func Bind3of4[F ~func(T1, T2, T3, T4) R, T1, T2, T3, T4, R any](f F) func(T3) func(T1, T2, T4) R {
|
||||
return func(t3 T3) func(T1, T2, T4) R {
|
||||
return func(t1 T1, t2 T2, t4 T4) R {
|
||||
return f(t1, t2, t3, t4)
|
||||
}
|
||||
}
|
||||
return func(t3 T3) func(T1, T2, T4) R {
|
||||
return func(t1 T1, t2 T2, t4 T4) R {
|
||||
return f(t1, t2, t3, t4)
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
// Ignore3of4 takes a function with 3 parameters and returns a new function with 4 parameters that will ignore the values at positions [3] and pass the remaining 3 parameters to the original function
|
||||
func Ignore3of4[T3 any, F ~func(T1, T2, T4) R, T1, T2, T4, R any](f F) func(T1, T2, T3, T4) R {
|
||||
return func(t1 T1, t2 T2, t3 T3, t4 T4) R {
|
||||
return f(t1, t2, t4)
|
||||
}
|
||||
return func(t1 T1, t2 T2, t3 T3, t4 T4) R {
|
||||
return f(t1, t2, t4)
|
||||
}
|
||||
}
|
||||
|
||||
// Bind4of4 takes a function with 4 parameters and returns a new function with 1 parameters that will bind these parameters to the positions [4] of the original function.
|
||||
// The return value of is a function with the remaining 3 parameters at positions [1, 2, 3] of the original function.
|
||||
func Bind4of4[F ~func(T1, T2, T3, T4) R, T1, T2, T3, T4, R any](f F) func(T4) func(T1, T2, T3) R {
|
||||
return func(t4 T4) func(T1, T2, T3) R {
|
||||
return func(t1 T1, t2 T2, t3 T3) R {
|
||||
return f(t1, t2, t3, t4)
|
||||
}
|
||||
}
|
||||
return func(t4 T4) func(T1, T2, T3) R {
|
||||
return func(t1 T1, t2 T2, t3 T3) R {
|
||||
return f(t1, t2, t3, t4)
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
// Ignore4of4 takes a function with 3 parameters and returns a new function with 4 parameters that will ignore the values at positions [4] and pass the remaining 3 parameters to the original function
|
||||
func Ignore4of4[T4 any, F ~func(T1, T2, T3) R, T1, T2, T3, R any](f F) func(T1, T2, T3, T4) R {
|
||||
return func(t1 T1, t2 T2, t3 T3, t4 T4) R {
|
||||
return f(t1, t2, t3)
|
||||
}
|
||||
return func(t1 T1, t2 T2, t3 T3, t4 T4) R {
|
||||
return f(t1, t2, t3)
|
||||
}
|
||||
}
|
||||
|
||||
// Bind12of4 takes a function with 4 parameters and returns a new function with 2 parameters that will bind these parameters to the positions [1, 2] of the original function.
|
||||
// The return value of is a function with the remaining 2 parameters at positions [3, 4] of the original function.
|
||||
func Bind12of4[F ~func(T1, T2, T3, T4) R, T1, T2, T3, T4, R any](f F) func(T1, T2) func(T3, T4) R {
|
||||
return func(t1 T1, t2 T2) func(T3, T4) R {
|
||||
return func(t3 T3, t4 T4) R {
|
||||
return f(t1, t2, t3, t4)
|
||||
}
|
||||
}
|
||||
return func(t1 T1, t2 T2) func(T3, T4) R {
|
||||
return func(t3 T3, t4 T4) R {
|
||||
return f(t1, t2, t3, t4)
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
// Ignore12of4 takes a function with 2 parameters and returns a new function with 4 parameters that will ignore the values at positions [1, 2] and pass the remaining 2 parameters to the original function
|
||||
func Ignore12of4[T1, T2 any, F ~func(T3, T4) R, T3, T4, R any](f F) func(T1, T2, T3, T4) R {
|
||||
return func(t1 T1, t2 T2, t3 T3, t4 T4) R {
|
||||
return f(t3, t4)
|
||||
}
|
||||
return func(t1 T1, t2 T2, t3 T3, t4 T4) R {
|
||||
return f(t3, t4)
|
||||
}
|
||||
}
|
||||
|
||||
// Bind13of4 takes a function with 4 parameters and returns a new function with 2 parameters that will bind these parameters to the positions [1, 3] of the original function.
|
||||
// The return value of is a function with the remaining 2 parameters at positions [2, 4] of the original function.
|
||||
func Bind13of4[F ~func(T1, T2, T3, T4) R, T1, T2, T3, T4, R any](f F) func(T1, T3) func(T2, T4) R {
|
||||
return func(t1 T1, t3 T3) func(T2, T4) R {
|
||||
return func(t2 T2, t4 T4) R {
|
||||
return f(t1, t2, t3, t4)
|
||||
}
|
||||
}
|
||||
return func(t1 T1, t3 T3) func(T2, T4) R {
|
||||
return func(t2 T2, t4 T4) R {
|
||||
return f(t1, t2, t3, t4)
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
// Ignore13of4 takes a function with 2 parameters and returns a new function with 4 parameters that will ignore the values at positions [1, 3] and pass the remaining 2 parameters to the original function
|
||||
func Ignore13of4[T1, T3 any, F ~func(T2, T4) R, T2, T4, R any](f F) func(T1, T2, T3, T4) R {
|
||||
return func(t1 T1, t2 T2, t3 T3, t4 T4) R {
|
||||
return f(t2, t4)
|
||||
}
|
||||
return func(t1 T1, t2 T2, t3 T3, t4 T4) R {
|
||||
return f(t2, t4)
|
||||
}
|
||||
}
|
||||
|
||||
// Bind14of4 takes a function with 4 parameters and returns a new function with 2 parameters that will bind these parameters to the positions [1, 4] of the original function.
|
||||
// The return value of is a function with the remaining 2 parameters at positions [2, 3] of the original function.
|
||||
func Bind14of4[F ~func(T1, T2, T3, T4) R, T1, T2, T3, T4, R any](f F) func(T1, T4) func(T2, T3) R {
|
||||
return func(t1 T1, t4 T4) func(T2, T3) R {
|
||||
return func(t2 T2, t3 T3) R {
|
||||
return f(t1, t2, t3, t4)
|
||||
}
|
||||
}
|
||||
return func(t1 T1, t4 T4) func(T2, T3) R {
|
||||
return func(t2 T2, t3 T3) R {
|
||||
return f(t1, t2, t3, t4)
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
// Ignore14of4 takes a function with 2 parameters and returns a new function with 4 parameters that will ignore the values at positions [1, 4] and pass the remaining 2 parameters to the original function
|
||||
func Ignore14of4[T1, T4 any, F ~func(T2, T3) R, T2, T3, R any](f F) func(T1, T2, T3, T4) R {
|
||||
return func(t1 T1, t2 T2, t3 T3, t4 T4) R {
|
||||
return f(t2, t3)
|
||||
}
|
||||
return func(t1 T1, t2 T2, t3 T3, t4 T4) R {
|
||||
return f(t2, t3)
|
||||
}
|
||||
}
|
||||
|
||||
// Bind23of4 takes a function with 4 parameters and returns a new function with 2 parameters that will bind these parameters to the positions [2, 3] of the original function.
|
||||
// The return value of is a function with the remaining 2 parameters at positions [1, 4] of the original function.
|
||||
func Bind23of4[F ~func(T1, T2, T3, T4) R, T1, T2, T3, T4, R any](f F) func(T2, T3) func(T1, T4) R {
|
||||
return func(t2 T2, t3 T3) func(T1, T4) R {
|
||||
return func(t1 T1, t4 T4) R {
|
||||
return f(t1, t2, t3, t4)
|
||||
}
|
||||
}
|
||||
return func(t2 T2, t3 T3) func(T1, T4) R {
|
||||
return func(t1 T1, t4 T4) R {
|
||||
return f(t1, t2, t3, t4)
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
// Ignore23of4 takes a function with 2 parameters and returns a new function with 4 parameters that will ignore the values at positions [2, 3] and pass the remaining 2 parameters to the original function
|
||||
func Ignore23of4[T2, T3 any, F ~func(T1, T4) R, T1, T4, R any](f F) func(T1, T2, T3, T4) R {
|
||||
return func(t1 T1, t2 T2, t3 T3, t4 T4) R {
|
||||
return f(t1, t4)
|
||||
}
|
||||
return func(t1 T1, t2 T2, t3 T3, t4 T4) R {
|
||||
return f(t1, t4)
|
||||
}
|
||||
}
|
||||
|
||||
// Bind24of4 takes a function with 4 parameters and returns a new function with 2 parameters that will bind these parameters to the positions [2, 4] of the original function.
|
||||
// The return value of is a function with the remaining 2 parameters at positions [1, 3] of the original function.
|
||||
func Bind24of4[F ~func(T1, T2, T3, T4) R, T1, T2, T3, T4, R any](f F) func(T2, T4) func(T1, T3) R {
|
||||
return func(t2 T2, t4 T4) func(T1, T3) R {
|
||||
return func(t1 T1, t3 T3) R {
|
||||
return f(t1, t2, t3, t4)
|
||||
}
|
||||
}
|
||||
return func(t2 T2, t4 T4) func(T1, T3) R {
|
||||
return func(t1 T1, t3 T3) R {
|
||||
return f(t1, t2, t3, t4)
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
// Ignore24of4 takes a function with 2 parameters and returns a new function with 4 parameters that will ignore the values at positions [2, 4] and pass the remaining 2 parameters to the original function
|
||||
func Ignore24of4[T2, T4 any, F ~func(T1, T3) R, T1, T3, R any](f F) func(T1, T2, T3, T4) R {
|
||||
return func(t1 T1, t2 T2, t3 T3, t4 T4) R {
|
||||
return f(t1, t3)
|
||||
}
|
||||
return func(t1 T1, t2 T2, t3 T3, t4 T4) R {
|
||||
return f(t1, t3)
|
||||
}
|
||||
}
|
||||
|
||||
// Bind34of4 takes a function with 4 parameters and returns a new function with 2 parameters that will bind these parameters to the positions [3, 4] of the original function.
|
||||
// The return value of is a function with the remaining 2 parameters at positions [1, 2] of the original function.
|
||||
func Bind34of4[F ~func(T1, T2, T3, T4) R, T1, T2, T3, T4, R any](f F) func(T3, T4) func(T1, T2) R {
|
||||
return func(t3 T3, t4 T4) func(T1, T2) R {
|
||||
return func(t1 T1, t2 T2) R {
|
||||
return f(t1, t2, t3, t4)
|
||||
}
|
||||
}
|
||||
return func(t3 T3, t4 T4) func(T1, T2) R {
|
||||
return func(t1 T1, t2 T2) R {
|
||||
return f(t1, t2, t3, t4)
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
// Ignore34of4 takes a function with 2 parameters and returns a new function with 4 parameters that will ignore the values at positions [3, 4] and pass the remaining 2 parameters to the original function
|
||||
func Ignore34of4[T3, T4 any, F ~func(T1, T2) R, T1, T2, R any](f F) func(T1, T2, T3, T4) R {
|
||||
return func(t1 T1, t2 T2, t3 T3, t4 T4) R {
|
||||
return f(t1, t2)
|
||||
}
|
||||
return func(t1 T1, t2 T2, t3 T3, t4 T4) R {
|
||||
return f(t1, t2)
|
||||
}
|
||||
}
|
||||
|
||||
// Bind123of4 takes a function with 4 parameters and returns a new function with 3 parameters that will bind these parameters to the positions [1, 2, 3] of the original function.
|
||||
// The return value of is a function with the remaining 1 parameters at positions [4] of the original function.
|
||||
func Bind123of4[F ~func(T1, T2, T3, T4) R, T1, T2, T3, T4, R any](f F) func(T1, T2, T3) func(T4) R {
|
||||
return func(t1 T1, t2 T2, t3 T3) func(T4) R {
|
||||
return func(t4 T4) R {
|
||||
return f(t1, t2, t3, t4)
|
||||
}
|
||||
}
|
||||
return func(t1 T1, t2 T2, t3 T3) func(T4) R {
|
||||
return func(t4 T4) R {
|
||||
return f(t1, t2, t3, t4)
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
// Ignore123of4 takes a function with 1 parameters and returns a new function with 4 parameters that will ignore the values at positions [1, 2, 3] and pass the remaining 1 parameters to the original function
|
||||
func Ignore123of4[T1, T2, T3 any, F ~func(T4) R, T4, R any](f F) func(T1, T2, T3, T4) R {
|
||||
return func(t1 T1, t2 T2, t3 T3, t4 T4) R {
|
||||
return f(t4)
|
||||
}
|
||||
return func(t1 T1, t2 T2, t3 T3, t4 T4) R {
|
||||
return f(t4)
|
||||
}
|
||||
}
|
||||
|
||||
// Bind124of4 takes a function with 4 parameters and returns a new function with 3 parameters that will bind these parameters to the positions [1, 2, 4] of the original function.
|
||||
// The return value of is a function with the remaining 1 parameters at positions [3] of the original function.
|
||||
func Bind124of4[F ~func(T1, T2, T3, T4) R, T1, T2, T3, T4, R any](f F) func(T1, T2, T4) func(T3) R {
|
||||
return func(t1 T1, t2 T2, t4 T4) func(T3) R {
|
||||
return func(t3 T3) R {
|
||||
return f(t1, t2, t3, t4)
|
||||
}
|
||||
}
|
||||
return func(t1 T1, t2 T2, t4 T4) func(T3) R {
|
||||
return func(t3 T3) R {
|
||||
return f(t1, t2, t3, t4)
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
// Ignore124of4 takes a function with 1 parameters and returns a new function with 4 parameters that will ignore the values at positions [1, 2, 4] and pass the remaining 1 parameters to the original function
|
||||
func Ignore124of4[T1, T2, T4 any, F ~func(T3) R, T3, R any](f F) func(T1, T2, T3, T4) R {
|
||||
return func(t1 T1, t2 T2, t3 T3, t4 T4) R {
|
||||
return f(t3)
|
||||
}
|
||||
return func(t1 T1, t2 T2, t3 T3, t4 T4) R {
|
||||
return f(t3)
|
||||
}
|
||||
}
|
||||
|
||||
// Bind134of4 takes a function with 4 parameters and returns a new function with 3 parameters that will bind these parameters to the positions [1, 3, 4] of the original function.
|
||||
// The return value of is a function with the remaining 1 parameters at positions [2] of the original function.
|
||||
func Bind134of4[F ~func(T1, T2, T3, T4) R, T1, T2, T3, T4, R any](f F) func(T1, T3, T4) func(T2) R {
|
||||
return func(t1 T1, t3 T3, t4 T4) func(T2) R {
|
||||
return func(t2 T2) R {
|
||||
return f(t1, t2, t3, t4)
|
||||
}
|
||||
}
|
||||
return func(t1 T1, t3 T3, t4 T4) func(T2) R {
|
||||
return func(t2 T2) R {
|
||||
return f(t1, t2, t3, t4)
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
// Ignore134of4 takes a function with 1 parameters and returns a new function with 4 parameters that will ignore the values at positions [1, 3, 4] and pass the remaining 1 parameters to the original function
|
||||
func Ignore134of4[T1, T3, T4 any, F ~func(T2) R, T2, R any](f F) func(T1, T2, T3, T4) R {
|
||||
return func(t1 T1, t2 T2, t3 T3, t4 T4) R {
|
||||
return f(t2)
|
||||
}
|
||||
return func(t1 T1, t2 T2, t3 T3, t4 T4) R {
|
||||
return f(t2)
|
||||
}
|
||||
}
|
||||
|
||||
// Bind234of4 takes a function with 4 parameters and returns a new function with 3 parameters that will bind these parameters to the positions [2, 3, 4] of the original function.
|
||||
// The return value of is a function with the remaining 1 parameters at positions [1] of the original function.
|
||||
func Bind234of4[F ~func(T1, T2, T3, T4) R, T1, T2, T3, T4, R any](f F) func(T2, T3, T4) func(T1) R {
|
||||
return func(t2 T2, t3 T3, t4 T4) func(T1) R {
|
||||
return func(t1 T1) R {
|
||||
return f(t1, t2, t3, t4)
|
||||
}
|
||||
}
|
||||
return func(t2 T2, t3 T3, t4 T4) func(T1) R {
|
||||
return func(t1 T1) R {
|
||||
return f(t1, t2, t3, t4)
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
// Ignore234of4 takes a function with 1 parameters and returns a new function with 4 parameters that will ignore the values at positions [2, 3, 4] and pass the remaining 1 parameters to the original function
|
||||
func Ignore234of4[T2, T3, T4 any, F ~func(T1) R, T1, R any](f F) func(T1, T2, T3, T4) R {
|
||||
return func(t1 T1, t2 T2, t3 T3, t4 T4) R {
|
||||
return f(t1)
|
||||
}
|
||||
return func(t1 T1, t2 T2, t3 T3, t4 T4) R {
|
||||
return f(t1)
|
||||
}
|
||||
}
|
||||
|
||||
// Bind1234of4 takes a function with 4 parameters and returns a new function with 4 parameters that will bind these parameters to the positions [1, 2, 3, 4] of the original function.
|
||||
// The return value of is a function with the remaining 0 parameters at positions [] of the original function.
|
||||
func Bind1234of4[F ~func(T1, T2, T3, T4) R, T1, T2, T3, T4, R any](f F) func(T1, T2, T3, T4) func() R {
|
||||
return func(t1 T1, t2 T2, t3 T3, t4 T4) func() R {
|
||||
return func() R {
|
||||
return f(t1, t2, t3, t4)
|
||||
}
|
||||
}
|
||||
return func(t1 T1, t2 T2, t3 T3, t4 T4) func() R {
|
||||
return func() R {
|
||||
return f(t1, t2, t3, t4)
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
// Ignore1234of4 takes a function with 0 parameters and returns a new function with 4 parameters that will ignore the values at positions [1, 2, 3, 4] and pass the remaining 0 parameters to the original function
|
||||
func Ignore1234of4[T1, T2, T3, T4 any, F ~func() R, R any](f F) func(T1, T2, T3, T4) R {
|
||||
return func(t1 T1, t2 T2, t3 T3, t4 T4) R {
|
||||
return f()
|
||||
}
|
||||
return func(t1 T1, t2 T2, t3 T3, t4 T4) R {
|
||||
return f()
|
||||
}
|
||||
}
|
||||
|
2082
function/gen.go
2082
function/gen.go
File diff suppressed because it is too large
Load Diff
@@ -68,10 +68,8 @@ const (
|
||||
|
||||
// ParseMediaType parses a media type into a tuple
|
||||
func ParseMediaType(mediaType string) E.Either[error, ParsedMediaType] {
|
||||
return E.TryCatchError(func() (ParsedMediaType, error) {
|
||||
m, p, err := mime.ParseMediaType(mediaType)
|
||||
return T.MakeTuple2(m, p), err
|
||||
})
|
||||
m, p, err := mime.ParseMediaType(mediaType)
|
||||
return E.TryCatchError(T.MakeTuple2(m, p), err)
|
||||
}
|
||||
|
||||
func GetHeader(resp *H.Response) H.Header {
|
||||
|
773
identity/gen.go
773
identity/gen.go
@@ -1,9 +1,10 @@
|
||||
// Code generated by go generate; DO NOT EDIT.
|
||||
// This file was generated by robots at
|
||||
// 2023-09-12 13:44:24.9409324 +0200 CEST m=+0.008573601
|
||||
// 2023-10-23 08:30:50.5492271 +0200 CEST m=+0.023274501
|
||||
|
||||
package identity
|
||||
|
||||
|
||||
import (
|
||||
A "github.com/IBM/fp-go/internal/apply"
|
||||
T "github.com/IBM/fp-go/tuple"
|
||||
@@ -11,495 +12,495 @@ import (
|
||||
|
||||
// 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,
|
||||
)
|
||||
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,
|
||||
)
|
||||
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,
|
||||
)
|
||||
}
|
||||
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,
|
||||
)
|
||||
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,
|
||||
)
|
||||
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,
|
||||
)
|
||||
}
|
||||
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,
|
||||
)
|
||||
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,
|
||||
)
|
||||
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,
|
||||
)
|
||||
}
|
||||
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,
|
||||
)
|
||||
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,
|
||||
)
|
||||
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,
|
||||
)
|
||||
}
|
||||
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,
|
||||
)
|
||||
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,
|
||||
)
|
||||
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,
|
||||
)
|
||||
}
|
||||
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,
|
||||
)
|
||||
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,
|
||||
)
|
||||
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,
|
||||
)
|
||||
}
|
||||
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,
|
||||
)
|
||||
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,
|
||||
)
|
||||
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,
|
||||
)
|
||||
}
|
||||
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,
|
||||
)
|
||||
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,
|
||||
)
|
||||
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,
|
||||
)
|
||||
}
|
||||
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,
|
||||
)
|
||||
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,
|
||||
)
|
||||
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,
|
||||
)
|
||||
}
|
||||
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,
|
||||
)
|
||||
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,
|
||||
)
|
||||
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,
|
||||
)
|
||||
}
|
||||
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,
|
||||
)
|
||||
}
|
||||
}
|
||||
|
File diff suppressed because it is too large
Load Diff
@@ -46,9 +46,7 @@ func MakeReader(ctx context.Context, rdr io.Reader) io.Reader {
|
||||
|
||||
// ReadAll reads the content of a reader and allows it to be canceled
|
||||
func ReadAll(ctx context.Context, rdr io.Reader) E.Either[error, []byte] {
|
||||
return E.TryCatchError(func() ([]byte, error) {
|
||||
var buffer bytes.Buffer
|
||||
_, err := io.Copy(&buffer, MakeReader(ctx, rdr))
|
||||
return buffer.Bytes(), err
|
||||
})
|
||||
var buffer bytes.Buffer
|
||||
_, err := io.Copy(&buffer, MakeReader(ctx, rdr))
|
||||
return E.TryCatchError(buffer.Bytes(), err)
|
||||
}
|
||||
|
30
io/bracket.go
Normal file
30
io/bracket.go
Normal file
@@ -0,0 +1,30 @@
|
||||
// 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 io
|
||||
|
||||
import (
|
||||
G "github.com/IBM/fp-go/io/generic"
|
||||
)
|
||||
|
||||
// Bracket makes sure that a resource is cleaned up in the event of an error. The release action is called regardless of
|
||||
// whether the body action returns and error or not.
|
||||
func Bracket[A, B, ANY any](
|
||||
acquire IO[A],
|
||||
use func(A) IO[B],
|
||||
release func(A, B) IO[ANY],
|
||||
) IO[B] {
|
||||
return G.Bracket(acquire, use, release)
|
||||
}
|
475
io/gen.go
475
io/gen.go
@@ -1,375 +1,376 @@
|
||||
// Code generated by go generate; DO NOT EDIT.
|
||||
// This file was generated by robots at
|
||||
// 2023-09-12 13:44:27.9813739 +0200 CEST m=+0.011088001
|
||||
// 2023-10-23 08:30:56.7105551 +0200 CEST m=+0.011255201
|
||||
|
||||
package io
|
||||
|
||||
|
||||
import (
|
||||
G "github.com/IBM/fp-go/io/generic"
|
||||
G "github.com/IBM/fp-go/io/generic"
|
||||
T "github.com/IBM/fp-go/tuple"
|
||||
)
|
||||
|
||||
// SequenceT1 converts 1 [IO[T]] into a [IO[T.Tuple1[T1]]]
|
||||
func SequenceT1[T1 any](
|
||||
t1 IO[T1],
|
||||
t1 IO[T1],
|
||||
) IO[T.Tuple1[T1]] {
|
||||
return G.SequenceT1[
|
||||
IO[T.Tuple1[T1]],
|
||||
IO[T1],
|
||||
](t1)
|
||||
return G.SequenceT1[
|
||||
IO[T.Tuple1[T1]],
|
||||
IO[T1],
|
||||
](t1)
|
||||
}
|
||||
|
||||
// SequenceTuple1 converts a [T.Tuple1[IO[T]]] into a [IO[T.Tuple1[T1]]]
|
||||
func SequenceTuple1[T1 any](t T.Tuple1[IO[T1]]) IO[T.Tuple1[T1]] {
|
||||
return G.SequenceTuple1[
|
||||
IO[T.Tuple1[T1]],
|
||||
IO[T1],
|
||||
](t)
|
||||
return G.SequenceTuple1[
|
||||
IO[T.Tuple1[T1]],
|
||||
IO[T1],
|
||||
](t)
|
||||
}
|
||||
|
||||
// TraverseTuple1 converts a [T.Tuple1[IO[T]]] into a [IO[T.Tuple1[T1]]]
|
||||
func TraverseTuple1[F1 ~func(A1) IO[T1], A1, T1 any](f1 F1) func(T.Tuple1[A1]) IO[T.Tuple1[T1]] {
|
||||
return G.TraverseTuple1[IO[T.Tuple1[T1]]](f1)
|
||||
return G.TraverseTuple1[IO[T.Tuple1[T1]]](f1)
|
||||
}
|
||||
|
||||
// SequenceT2 converts 2 [IO[T]] into a [IO[T.Tuple2[T1, T2]]]
|
||||
func SequenceT2[T1, T2 any](
|
||||
t1 IO[T1],
|
||||
t2 IO[T2],
|
||||
t1 IO[T1],
|
||||
t2 IO[T2],
|
||||
) IO[T.Tuple2[T1, T2]] {
|
||||
return G.SequenceT2[
|
||||
IO[T.Tuple2[T1, T2]],
|
||||
IO[T1],
|
||||
IO[T2],
|
||||
](t1, t2)
|
||||
return G.SequenceT2[
|
||||
IO[T.Tuple2[T1, T2]],
|
||||
IO[T1],
|
||||
IO[T2],
|
||||
](t1, t2)
|
||||
}
|
||||
|
||||
// SequenceTuple2 converts a [T.Tuple2[IO[T]]] into a [IO[T.Tuple2[T1, T2]]]
|
||||
func SequenceTuple2[T1, T2 any](t T.Tuple2[IO[T1], IO[T2]]) IO[T.Tuple2[T1, T2]] {
|
||||
return G.SequenceTuple2[
|
||||
IO[T.Tuple2[T1, T2]],
|
||||
IO[T1],
|
||||
IO[T2],
|
||||
](t)
|
||||
return G.SequenceTuple2[
|
||||
IO[T.Tuple2[T1, T2]],
|
||||
IO[T1],
|
||||
IO[T2],
|
||||
](t)
|
||||
}
|
||||
|
||||
// TraverseTuple2 converts a [T.Tuple2[IO[T]]] into a [IO[T.Tuple2[T1, T2]]]
|
||||
func TraverseTuple2[F1 ~func(A1) IO[T1], F2 ~func(A2) IO[T2], A1, A2, T1, T2 any](f1 F1, f2 F2) func(T.Tuple2[A1, A2]) IO[T.Tuple2[T1, T2]] {
|
||||
return G.TraverseTuple2[IO[T.Tuple2[T1, T2]]](f1, f2)
|
||||
return G.TraverseTuple2[IO[T.Tuple2[T1, T2]]](f1, f2)
|
||||
}
|
||||
|
||||
// SequenceT3 converts 3 [IO[T]] into a [IO[T.Tuple3[T1, T2, T3]]]
|
||||
func SequenceT3[T1, T2, T3 any](
|
||||
t1 IO[T1],
|
||||
t2 IO[T2],
|
||||
t3 IO[T3],
|
||||
t1 IO[T1],
|
||||
t2 IO[T2],
|
||||
t3 IO[T3],
|
||||
) IO[T.Tuple3[T1, T2, T3]] {
|
||||
return G.SequenceT3[
|
||||
IO[T.Tuple3[T1, T2, T3]],
|
||||
IO[T1],
|
||||
IO[T2],
|
||||
IO[T3],
|
||||
](t1, t2, t3)
|
||||
return G.SequenceT3[
|
||||
IO[T.Tuple3[T1, T2, T3]],
|
||||
IO[T1],
|
||||
IO[T2],
|
||||
IO[T3],
|
||||
](t1, t2, t3)
|
||||
}
|
||||
|
||||
// SequenceTuple3 converts a [T.Tuple3[IO[T]]] into a [IO[T.Tuple3[T1, T2, T3]]]
|
||||
func SequenceTuple3[T1, T2, T3 any](t T.Tuple3[IO[T1], IO[T2], IO[T3]]) IO[T.Tuple3[T1, T2, T3]] {
|
||||
return G.SequenceTuple3[
|
||||
IO[T.Tuple3[T1, T2, T3]],
|
||||
IO[T1],
|
||||
IO[T2],
|
||||
IO[T3],
|
||||
](t)
|
||||
return G.SequenceTuple3[
|
||||
IO[T.Tuple3[T1, T2, T3]],
|
||||
IO[T1],
|
||||
IO[T2],
|
||||
IO[T3],
|
||||
](t)
|
||||
}
|
||||
|
||||
// TraverseTuple3 converts a [T.Tuple3[IO[T]]] into a [IO[T.Tuple3[T1, T2, T3]]]
|
||||
func TraverseTuple3[F1 ~func(A1) IO[T1], F2 ~func(A2) IO[T2], F3 ~func(A3) IO[T3], A1, A2, A3, T1, T2, T3 any](f1 F1, f2 F2, f3 F3) func(T.Tuple3[A1, A2, A3]) IO[T.Tuple3[T1, T2, T3]] {
|
||||
return G.TraverseTuple3[IO[T.Tuple3[T1, T2, T3]]](f1, f2, f3)
|
||||
return G.TraverseTuple3[IO[T.Tuple3[T1, T2, T3]]](f1, f2, f3)
|
||||
}
|
||||
|
||||
// SequenceT4 converts 4 [IO[T]] into a [IO[T.Tuple4[T1, T2, T3, T4]]]
|
||||
func SequenceT4[T1, T2, T3, T4 any](
|
||||
t1 IO[T1],
|
||||
t2 IO[T2],
|
||||
t3 IO[T3],
|
||||
t4 IO[T4],
|
||||
t1 IO[T1],
|
||||
t2 IO[T2],
|
||||
t3 IO[T3],
|
||||
t4 IO[T4],
|
||||
) IO[T.Tuple4[T1, T2, T3, T4]] {
|
||||
return G.SequenceT4[
|
||||
IO[T.Tuple4[T1, T2, T3, T4]],
|
||||
IO[T1],
|
||||
IO[T2],
|
||||
IO[T3],
|
||||
IO[T4],
|
||||
](t1, t2, t3, t4)
|
||||
return G.SequenceT4[
|
||||
IO[T.Tuple4[T1, T2, T3, T4]],
|
||||
IO[T1],
|
||||
IO[T2],
|
||||
IO[T3],
|
||||
IO[T4],
|
||||
](t1, t2, t3, t4)
|
||||
}
|
||||
|
||||
// SequenceTuple4 converts a [T.Tuple4[IO[T]]] into a [IO[T.Tuple4[T1, T2, T3, T4]]]
|
||||
func SequenceTuple4[T1, T2, T3, T4 any](t T.Tuple4[IO[T1], IO[T2], IO[T3], IO[T4]]) IO[T.Tuple4[T1, T2, T3, T4]] {
|
||||
return G.SequenceTuple4[
|
||||
IO[T.Tuple4[T1, T2, T3, T4]],
|
||||
IO[T1],
|
||||
IO[T2],
|
||||
IO[T3],
|
||||
IO[T4],
|
||||
](t)
|
||||
return G.SequenceTuple4[
|
||||
IO[T.Tuple4[T1, T2, T3, T4]],
|
||||
IO[T1],
|
||||
IO[T2],
|
||||
IO[T3],
|
||||
IO[T4],
|
||||
](t)
|
||||
}
|
||||
|
||||
// TraverseTuple4 converts a [T.Tuple4[IO[T]]] into a [IO[T.Tuple4[T1, T2, T3, T4]]]
|
||||
func TraverseTuple4[F1 ~func(A1) IO[T1], F2 ~func(A2) IO[T2], F3 ~func(A3) IO[T3], F4 ~func(A4) IO[T4], A1, A2, A3, A4, T1, T2, T3, T4 any](f1 F1, f2 F2, f3 F3, f4 F4) func(T.Tuple4[A1, A2, A3, A4]) IO[T.Tuple4[T1, T2, T3, T4]] {
|
||||
return G.TraverseTuple4[IO[T.Tuple4[T1, T2, T3, T4]]](f1, f2, f3, f4)
|
||||
return G.TraverseTuple4[IO[T.Tuple4[T1, T2, T3, T4]]](f1, f2, f3, f4)
|
||||
}
|
||||
|
||||
// SequenceT5 converts 5 [IO[T]] into a [IO[T.Tuple5[T1, T2, T3, T4, T5]]]
|
||||
func SequenceT5[T1, T2, T3, T4, T5 any](
|
||||
t1 IO[T1],
|
||||
t2 IO[T2],
|
||||
t3 IO[T3],
|
||||
t4 IO[T4],
|
||||
t5 IO[T5],
|
||||
t1 IO[T1],
|
||||
t2 IO[T2],
|
||||
t3 IO[T3],
|
||||
t4 IO[T4],
|
||||
t5 IO[T5],
|
||||
) IO[T.Tuple5[T1, T2, T3, T4, T5]] {
|
||||
return G.SequenceT5[
|
||||
IO[T.Tuple5[T1, T2, T3, T4, T5]],
|
||||
IO[T1],
|
||||
IO[T2],
|
||||
IO[T3],
|
||||
IO[T4],
|
||||
IO[T5],
|
||||
](t1, t2, t3, t4, t5)
|
||||
return G.SequenceT5[
|
||||
IO[T.Tuple5[T1, T2, T3, T4, T5]],
|
||||
IO[T1],
|
||||
IO[T2],
|
||||
IO[T3],
|
||||
IO[T4],
|
||||
IO[T5],
|
||||
](t1, t2, t3, t4, t5)
|
||||
}
|
||||
|
||||
// SequenceTuple5 converts a [T.Tuple5[IO[T]]] into a [IO[T.Tuple5[T1, T2, T3, T4, T5]]]
|
||||
func SequenceTuple5[T1, T2, T3, T4, T5 any](t T.Tuple5[IO[T1], IO[T2], IO[T3], IO[T4], IO[T5]]) IO[T.Tuple5[T1, T2, T3, T4, T5]] {
|
||||
return G.SequenceTuple5[
|
||||
IO[T.Tuple5[T1, T2, T3, T4, T5]],
|
||||
IO[T1],
|
||||
IO[T2],
|
||||
IO[T3],
|
||||
IO[T4],
|
||||
IO[T5],
|
||||
](t)
|
||||
return G.SequenceTuple5[
|
||||
IO[T.Tuple5[T1, T2, T3, T4, T5]],
|
||||
IO[T1],
|
||||
IO[T2],
|
||||
IO[T3],
|
||||
IO[T4],
|
||||
IO[T5],
|
||||
](t)
|
||||
}
|
||||
|
||||
// TraverseTuple5 converts a [T.Tuple5[IO[T]]] into a [IO[T.Tuple5[T1, T2, T3, T4, T5]]]
|
||||
func TraverseTuple5[F1 ~func(A1) IO[T1], F2 ~func(A2) IO[T2], F3 ~func(A3) IO[T3], F4 ~func(A4) IO[T4], F5 ~func(A5) IO[T5], A1, A2, A3, A4, A5, T1, T2, T3, T4, T5 any](f1 F1, f2 F2, f3 F3, f4 F4, f5 F5) func(T.Tuple5[A1, A2, A3, A4, A5]) IO[T.Tuple5[T1, T2, T3, T4, T5]] {
|
||||
return G.TraverseTuple5[IO[T.Tuple5[T1, T2, T3, T4, T5]]](f1, f2, f3, f4, f5)
|
||||
return G.TraverseTuple5[IO[T.Tuple5[T1, T2, T3, T4, T5]]](f1, f2, f3, f4, f5)
|
||||
}
|
||||
|
||||
// SequenceT6 converts 6 [IO[T]] into a [IO[T.Tuple6[T1, T2, T3, T4, T5, T6]]]
|
||||
func SequenceT6[T1, T2, T3, T4, T5, T6 any](
|
||||
t1 IO[T1],
|
||||
t2 IO[T2],
|
||||
t3 IO[T3],
|
||||
t4 IO[T4],
|
||||
t5 IO[T5],
|
||||
t6 IO[T6],
|
||||
t1 IO[T1],
|
||||
t2 IO[T2],
|
||||
t3 IO[T3],
|
||||
t4 IO[T4],
|
||||
t5 IO[T5],
|
||||
t6 IO[T6],
|
||||
) IO[T.Tuple6[T1, T2, T3, T4, T5, T6]] {
|
||||
return G.SequenceT6[
|
||||
IO[T.Tuple6[T1, T2, T3, T4, T5, T6]],
|
||||
IO[T1],
|
||||
IO[T2],
|
||||
IO[T3],
|
||||
IO[T4],
|
||||
IO[T5],
|
||||
IO[T6],
|
||||
](t1, t2, t3, t4, t5, t6)
|
||||
return G.SequenceT6[
|
||||
IO[T.Tuple6[T1, T2, T3, T4, T5, T6]],
|
||||
IO[T1],
|
||||
IO[T2],
|
||||
IO[T3],
|
||||
IO[T4],
|
||||
IO[T5],
|
||||
IO[T6],
|
||||
](t1, t2, t3, t4, t5, t6)
|
||||
}
|
||||
|
||||
// SequenceTuple6 converts a [T.Tuple6[IO[T]]] into a [IO[T.Tuple6[T1, T2, T3, T4, T5, T6]]]
|
||||
func SequenceTuple6[T1, T2, T3, T4, T5, T6 any](t T.Tuple6[IO[T1], IO[T2], IO[T3], IO[T4], IO[T5], IO[T6]]) IO[T.Tuple6[T1, T2, T3, T4, T5, T6]] {
|
||||
return G.SequenceTuple6[
|
||||
IO[T.Tuple6[T1, T2, T3, T4, T5, T6]],
|
||||
IO[T1],
|
||||
IO[T2],
|
||||
IO[T3],
|
||||
IO[T4],
|
||||
IO[T5],
|
||||
IO[T6],
|
||||
](t)
|
||||
return G.SequenceTuple6[
|
||||
IO[T.Tuple6[T1, T2, T3, T4, T5, T6]],
|
||||
IO[T1],
|
||||
IO[T2],
|
||||
IO[T3],
|
||||
IO[T4],
|
||||
IO[T5],
|
||||
IO[T6],
|
||||
](t)
|
||||
}
|
||||
|
||||
// TraverseTuple6 converts a [T.Tuple6[IO[T]]] into a [IO[T.Tuple6[T1, T2, T3, T4, T5, T6]]]
|
||||
func TraverseTuple6[F1 ~func(A1) IO[T1], F2 ~func(A2) IO[T2], F3 ~func(A3) IO[T3], F4 ~func(A4) IO[T4], F5 ~func(A5) IO[T5], F6 ~func(A6) IO[T6], A1, A2, A3, A4, A5, A6, T1, T2, T3, T4, T5, T6 any](f1 F1, f2 F2, f3 F3, f4 F4, f5 F5, f6 F6) func(T.Tuple6[A1, A2, A3, A4, A5, A6]) IO[T.Tuple6[T1, T2, T3, T4, T5, T6]] {
|
||||
return G.TraverseTuple6[IO[T.Tuple6[T1, T2, T3, T4, T5, T6]]](f1, f2, f3, f4, f5, f6)
|
||||
return G.TraverseTuple6[IO[T.Tuple6[T1, T2, T3, T4, T5, T6]]](f1, f2, f3, f4, f5, f6)
|
||||
}
|
||||
|
||||
// SequenceT7 converts 7 [IO[T]] into a [IO[T.Tuple7[T1, T2, T3, T4, T5, T6, T7]]]
|
||||
func SequenceT7[T1, T2, T3, T4, T5, T6, T7 any](
|
||||
t1 IO[T1],
|
||||
t2 IO[T2],
|
||||
t3 IO[T3],
|
||||
t4 IO[T4],
|
||||
t5 IO[T5],
|
||||
t6 IO[T6],
|
||||
t7 IO[T7],
|
||||
t1 IO[T1],
|
||||
t2 IO[T2],
|
||||
t3 IO[T3],
|
||||
t4 IO[T4],
|
||||
t5 IO[T5],
|
||||
t6 IO[T6],
|
||||
t7 IO[T7],
|
||||
) IO[T.Tuple7[T1, T2, T3, T4, T5, T6, T7]] {
|
||||
return G.SequenceT7[
|
||||
IO[T.Tuple7[T1, T2, T3, T4, T5, T6, T7]],
|
||||
IO[T1],
|
||||
IO[T2],
|
||||
IO[T3],
|
||||
IO[T4],
|
||||
IO[T5],
|
||||
IO[T6],
|
||||
IO[T7],
|
||||
](t1, t2, t3, t4, t5, t6, t7)
|
||||
return G.SequenceT7[
|
||||
IO[T.Tuple7[T1, T2, T3, T4, T5, T6, T7]],
|
||||
IO[T1],
|
||||
IO[T2],
|
||||
IO[T3],
|
||||
IO[T4],
|
||||
IO[T5],
|
||||
IO[T6],
|
||||
IO[T7],
|
||||
](t1, t2, t3, t4, t5, t6, t7)
|
||||
}
|
||||
|
||||
// SequenceTuple7 converts a [T.Tuple7[IO[T]]] into a [IO[T.Tuple7[T1, T2, T3, T4, T5, T6, T7]]]
|
||||
func SequenceTuple7[T1, T2, T3, T4, T5, T6, T7 any](t T.Tuple7[IO[T1], IO[T2], IO[T3], IO[T4], IO[T5], IO[T6], IO[T7]]) IO[T.Tuple7[T1, T2, T3, T4, T5, T6, T7]] {
|
||||
return G.SequenceTuple7[
|
||||
IO[T.Tuple7[T1, T2, T3, T4, T5, T6, T7]],
|
||||
IO[T1],
|
||||
IO[T2],
|
||||
IO[T3],
|
||||
IO[T4],
|
||||
IO[T5],
|
||||
IO[T6],
|
||||
IO[T7],
|
||||
](t)
|
||||
return G.SequenceTuple7[
|
||||
IO[T.Tuple7[T1, T2, T3, T4, T5, T6, T7]],
|
||||
IO[T1],
|
||||
IO[T2],
|
||||
IO[T3],
|
||||
IO[T4],
|
||||
IO[T5],
|
||||
IO[T6],
|
||||
IO[T7],
|
||||
](t)
|
||||
}
|
||||
|
||||
// TraverseTuple7 converts a [T.Tuple7[IO[T]]] into a [IO[T.Tuple7[T1, T2, T3, T4, T5, T6, T7]]]
|
||||
func TraverseTuple7[F1 ~func(A1) IO[T1], F2 ~func(A2) IO[T2], F3 ~func(A3) IO[T3], F4 ~func(A4) IO[T4], F5 ~func(A5) IO[T5], F6 ~func(A6) IO[T6], F7 ~func(A7) IO[T7], A1, A2, A3, A4, A5, A6, A7, T1, T2, T3, T4, T5, T6, 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]) IO[T.Tuple7[T1, T2, T3, T4, T5, T6, T7]] {
|
||||
return G.TraverseTuple7[IO[T.Tuple7[T1, T2, T3, T4, T5, T6, T7]]](f1, f2, f3, f4, f5, f6, f7)
|
||||
return G.TraverseTuple7[IO[T.Tuple7[T1, T2, T3, T4, T5, T6, T7]]](f1, f2, f3, f4, f5, f6, f7)
|
||||
}
|
||||
|
||||
// SequenceT8 converts 8 [IO[T]] into a [IO[T.Tuple8[T1, T2, T3, T4, T5, T6, T7, T8]]]
|
||||
func SequenceT8[T1, T2, T3, T4, T5, T6, T7, T8 any](
|
||||
t1 IO[T1],
|
||||
t2 IO[T2],
|
||||
t3 IO[T3],
|
||||
t4 IO[T4],
|
||||
t5 IO[T5],
|
||||
t6 IO[T6],
|
||||
t7 IO[T7],
|
||||
t8 IO[T8],
|
||||
t1 IO[T1],
|
||||
t2 IO[T2],
|
||||
t3 IO[T3],
|
||||
t4 IO[T4],
|
||||
t5 IO[T5],
|
||||
t6 IO[T6],
|
||||
t7 IO[T7],
|
||||
t8 IO[T8],
|
||||
) IO[T.Tuple8[T1, T2, T3, T4, T5, T6, T7, T8]] {
|
||||
return G.SequenceT8[
|
||||
IO[T.Tuple8[T1, T2, T3, T4, T5, T6, T7, T8]],
|
||||
IO[T1],
|
||||
IO[T2],
|
||||
IO[T3],
|
||||
IO[T4],
|
||||
IO[T5],
|
||||
IO[T6],
|
||||
IO[T7],
|
||||
IO[T8],
|
||||
](t1, t2, t3, t4, t5, t6, t7, t8)
|
||||
return G.SequenceT8[
|
||||
IO[T.Tuple8[T1, T2, T3, T4, T5, T6, T7, T8]],
|
||||
IO[T1],
|
||||
IO[T2],
|
||||
IO[T3],
|
||||
IO[T4],
|
||||
IO[T5],
|
||||
IO[T6],
|
||||
IO[T7],
|
||||
IO[T8],
|
||||
](t1, t2, t3, t4, t5, t6, t7, t8)
|
||||
}
|
||||
|
||||
// SequenceTuple8 converts a [T.Tuple8[IO[T]]] into a [IO[T.Tuple8[T1, T2, T3, T4, T5, T6, T7, T8]]]
|
||||
func SequenceTuple8[T1, T2, T3, T4, T5, T6, T7, T8 any](t T.Tuple8[IO[T1], IO[T2], IO[T3], IO[T4], IO[T5], IO[T6], IO[T7], IO[T8]]) IO[T.Tuple8[T1, T2, T3, T4, T5, T6, T7, T8]] {
|
||||
return G.SequenceTuple8[
|
||||
IO[T.Tuple8[T1, T2, T3, T4, T5, T6, T7, T8]],
|
||||
IO[T1],
|
||||
IO[T2],
|
||||
IO[T3],
|
||||
IO[T4],
|
||||
IO[T5],
|
||||
IO[T6],
|
||||
IO[T7],
|
||||
IO[T8],
|
||||
](t)
|
||||
return G.SequenceTuple8[
|
||||
IO[T.Tuple8[T1, T2, T3, T4, T5, T6, T7, T8]],
|
||||
IO[T1],
|
||||
IO[T2],
|
||||
IO[T3],
|
||||
IO[T4],
|
||||
IO[T5],
|
||||
IO[T6],
|
||||
IO[T7],
|
||||
IO[T8],
|
||||
](t)
|
||||
}
|
||||
|
||||
// TraverseTuple8 converts a [T.Tuple8[IO[T]]] into a [IO[T.Tuple8[T1, T2, T3, T4, T5, T6, T7, T8]]]
|
||||
func TraverseTuple8[F1 ~func(A1) IO[T1], F2 ~func(A2) IO[T2], F3 ~func(A3) IO[T3], F4 ~func(A4) IO[T4], F5 ~func(A5) IO[T5], F6 ~func(A6) IO[T6], F7 ~func(A7) IO[T7], F8 ~func(A8) IO[T8], A1, A2, A3, A4, A5, A6, A7, A8, T1, T2, T3, T4, T5, T6, T7, 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]) IO[T.Tuple8[T1, T2, T3, T4, T5, T6, T7, T8]] {
|
||||
return G.TraverseTuple8[IO[T.Tuple8[T1, T2, T3, T4, T5, T6, T7, T8]]](f1, f2, f3, f4, f5, f6, f7, f8)
|
||||
return G.TraverseTuple8[IO[T.Tuple8[T1, T2, T3, T4, T5, T6, T7, T8]]](f1, f2, f3, f4, f5, f6, f7, f8)
|
||||
}
|
||||
|
||||
// SequenceT9 converts 9 [IO[T]] into a [IO[T.Tuple9[T1, T2, T3, T4, T5, T6, T7, T8, T9]]]
|
||||
func SequenceT9[T1, T2, T3, T4, T5, T6, T7, T8, T9 any](
|
||||
t1 IO[T1],
|
||||
t2 IO[T2],
|
||||
t3 IO[T3],
|
||||
t4 IO[T4],
|
||||
t5 IO[T5],
|
||||
t6 IO[T6],
|
||||
t7 IO[T7],
|
||||
t8 IO[T8],
|
||||
t9 IO[T9],
|
||||
t1 IO[T1],
|
||||
t2 IO[T2],
|
||||
t3 IO[T3],
|
||||
t4 IO[T4],
|
||||
t5 IO[T5],
|
||||
t6 IO[T6],
|
||||
t7 IO[T7],
|
||||
t8 IO[T8],
|
||||
t9 IO[T9],
|
||||
) IO[T.Tuple9[T1, T2, T3, T4, T5, T6, T7, T8, T9]] {
|
||||
return G.SequenceT9[
|
||||
IO[T.Tuple9[T1, T2, T3, T4, T5, T6, T7, T8, T9]],
|
||||
IO[T1],
|
||||
IO[T2],
|
||||
IO[T3],
|
||||
IO[T4],
|
||||
IO[T5],
|
||||
IO[T6],
|
||||
IO[T7],
|
||||
IO[T8],
|
||||
IO[T9],
|
||||
](t1, t2, t3, t4, t5, t6, t7, t8, t9)
|
||||
return G.SequenceT9[
|
||||
IO[T.Tuple9[T1, T2, T3, T4, T5, T6, T7, T8, T9]],
|
||||
IO[T1],
|
||||
IO[T2],
|
||||
IO[T3],
|
||||
IO[T4],
|
||||
IO[T5],
|
||||
IO[T6],
|
||||
IO[T7],
|
||||
IO[T8],
|
||||
IO[T9],
|
||||
](t1, t2, t3, t4, t5, t6, t7, t8, t9)
|
||||
}
|
||||
|
||||
// SequenceTuple9 converts a [T.Tuple9[IO[T]]] into a [IO[T.Tuple9[T1, T2, T3, T4, T5, T6, T7, T8, T9]]]
|
||||
func SequenceTuple9[T1, T2, T3, T4, T5, T6, T7, T8, T9 any](t T.Tuple9[IO[T1], IO[T2], IO[T3], IO[T4], IO[T5], IO[T6], IO[T7], IO[T8], IO[T9]]) IO[T.Tuple9[T1, T2, T3, T4, T5, T6, T7, T8, T9]] {
|
||||
return G.SequenceTuple9[
|
||||
IO[T.Tuple9[T1, T2, T3, T4, T5, T6, T7, T8, T9]],
|
||||
IO[T1],
|
||||
IO[T2],
|
||||
IO[T3],
|
||||
IO[T4],
|
||||
IO[T5],
|
||||
IO[T6],
|
||||
IO[T7],
|
||||
IO[T8],
|
||||
IO[T9],
|
||||
](t)
|
||||
return G.SequenceTuple9[
|
||||
IO[T.Tuple9[T1, T2, T3, T4, T5, T6, T7, T8, T9]],
|
||||
IO[T1],
|
||||
IO[T2],
|
||||
IO[T3],
|
||||
IO[T4],
|
||||
IO[T5],
|
||||
IO[T6],
|
||||
IO[T7],
|
||||
IO[T8],
|
||||
IO[T9],
|
||||
](t)
|
||||
}
|
||||
|
||||
// TraverseTuple9 converts a [T.Tuple9[IO[T]]] into a [IO[T.Tuple9[T1, T2, T3, T4, T5, T6, T7, T8, T9]]]
|
||||
func TraverseTuple9[F1 ~func(A1) IO[T1], F2 ~func(A2) IO[T2], F3 ~func(A3) IO[T3], F4 ~func(A4) IO[T4], F5 ~func(A5) IO[T5], F6 ~func(A6) IO[T6], F7 ~func(A7) IO[T7], F8 ~func(A8) IO[T8], F9 ~func(A9) IO[T9], A1, A2, A3, A4, A5, A6, A7, A8, A9, T1, T2, T3, T4, T5, T6, T7, T8, 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]) IO[T.Tuple9[T1, T2, T3, T4, T5, T6, T7, T8, T9]] {
|
||||
return G.TraverseTuple9[IO[T.Tuple9[T1, T2, T3, T4, T5, T6, T7, T8, T9]]](f1, f2, f3, f4, f5, f6, f7, f8, f9)
|
||||
return G.TraverseTuple9[IO[T.Tuple9[T1, T2, T3, T4, T5, T6, T7, T8, T9]]](f1, f2, f3, f4, f5, f6, f7, f8, f9)
|
||||
}
|
||||
|
||||
// SequenceT10 converts 10 [IO[T]] into a [IO[T.Tuple10[T1, T2, T3, T4, T5, T6, T7, T8, T9, T10]]]
|
||||
func SequenceT10[T1, T2, T3, T4, T5, T6, T7, T8, T9, T10 any](
|
||||
t1 IO[T1],
|
||||
t2 IO[T2],
|
||||
t3 IO[T3],
|
||||
t4 IO[T4],
|
||||
t5 IO[T5],
|
||||
t6 IO[T6],
|
||||
t7 IO[T7],
|
||||
t8 IO[T8],
|
||||
t9 IO[T9],
|
||||
t10 IO[T10],
|
||||
t1 IO[T1],
|
||||
t2 IO[T2],
|
||||
t3 IO[T3],
|
||||
t4 IO[T4],
|
||||
t5 IO[T5],
|
||||
t6 IO[T6],
|
||||
t7 IO[T7],
|
||||
t8 IO[T8],
|
||||
t9 IO[T9],
|
||||
t10 IO[T10],
|
||||
) IO[T.Tuple10[T1, T2, T3, T4, T5, T6, T7, T8, T9, T10]] {
|
||||
return G.SequenceT10[
|
||||
IO[T.Tuple10[T1, T2, T3, T4, T5, T6, T7, T8, T9, T10]],
|
||||
IO[T1],
|
||||
IO[T2],
|
||||
IO[T3],
|
||||
IO[T4],
|
||||
IO[T5],
|
||||
IO[T6],
|
||||
IO[T7],
|
||||
IO[T8],
|
||||
IO[T9],
|
||||
IO[T10],
|
||||
](t1, t2, t3, t4, t5, t6, t7, t8, t9, t10)
|
||||
return G.SequenceT10[
|
||||
IO[T.Tuple10[T1, T2, T3, T4, T5, T6, T7, T8, T9, T10]],
|
||||
IO[T1],
|
||||
IO[T2],
|
||||
IO[T3],
|
||||
IO[T4],
|
||||
IO[T5],
|
||||
IO[T6],
|
||||
IO[T7],
|
||||
IO[T8],
|
||||
IO[T9],
|
||||
IO[T10],
|
||||
](t1, t2, t3, t4, t5, t6, t7, t8, t9, t10)
|
||||
}
|
||||
|
||||
// SequenceTuple10 converts a [T.Tuple10[IO[T]]] into a [IO[T.Tuple10[T1, T2, T3, T4, T5, T6, T7, T8, T9, T10]]]
|
||||
func SequenceTuple10[T1, T2, T3, T4, T5, T6, T7, T8, T9, T10 any](t T.Tuple10[IO[T1], IO[T2], IO[T3], IO[T4], IO[T5], IO[T6], IO[T7], IO[T8], IO[T9], IO[T10]]) IO[T.Tuple10[T1, T2, T3, T4, T5, T6, T7, T8, T9, T10]] {
|
||||
return G.SequenceTuple10[
|
||||
IO[T.Tuple10[T1, T2, T3, T4, T5, T6, T7, T8, T9, T10]],
|
||||
IO[T1],
|
||||
IO[T2],
|
||||
IO[T3],
|
||||
IO[T4],
|
||||
IO[T5],
|
||||
IO[T6],
|
||||
IO[T7],
|
||||
IO[T8],
|
||||
IO[T9],
|
||||
IO[T10],
|
||||
](t)
|
||||
return G.SequenceTuple10[
|
||||
IO[T.Tuple10[T1, T2, T3, T4, T5, T6, T7, T8, T9, T10]],
|
||||
IO[T1],
|
||||
IO[T2],
|
||||
IO[T3],
|
||||
IO[T4],
|
||||
IO[T5],
|
||||
IO[T6],
|
||||
IO[T7],
|
||||
IO[T8],
|
||||
IO[T9],
|
||||
IO[T10],
|
||||
](t)
|
||||
}
|
||||
|
||||
// TraverseTuple10 converts a [T.Tuple10[IO[T]]] into a [IO[T.Tuple10[T1, T2, T3, T4, T5, T6, T7, T8, T9, T10]]]
|
||||
func TraverseTuple10[F1 ~func(A1) IO[T1], F2 ~func(A2) IO[T2], F3 ~func(A3) IO[T3], F4 ~func(A4) IO[T4], F5 ~func(A5) IO[T5], F6 ~func(A6) IO[T6], F7 ~func(A7) IO[T7], F8 ~func(A8) IO[T8], F9 ~func(A9) IO[T9], F10 ~func(A10) IO[T10], A1, A2, A3, A4, A5, A6, A7, A8, A9, A10, T1, T2, T3, T4, T5, T6, T7, T8, T9, 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]) IO[T.Tuple10[T1, T2, T3, T4, T5, T6, T7, T8, T9, T10]] {
|
||||
return G.TraverseTuple10[IO[T.Tuple10[T1, T2, T3, T4, T5, T6, T7, T8, T9, T10]]](f1, f2, f3, f4, f5, f6, f7, f8, f9, f10)
|
||||
return G.TraverseTuple10[IO[T.Tuple10[T1, T2, T3, T4, T5, T6, T7, T8, T9, T10]]](f1, f2, f3, f4, f5, f6, f7, f8, f9, f10)
|
||||
}
|
||||
|
44
io/generic/bracket.go
Normal file
44
io/generic/bracket.go
Normal file
@@ -0,0 +1,44 @@
|
||||
// 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
|
||||
|
||||
import (
|
||||
G "github.com/IBM/fp-go/internal/bracket"
|
||||
)
|
||||
|
||||
// Bracket makes sure that a resource is cleaned up in the event of an error. The release action is called regardless of
|
||||
// whether the body action returns and error or not.
|
||||
func Bracket[
|
||||
GA ~func() A,
|
||||
GB ~func() B,
|
||||
GANY ~func() ANY,
|
||||
A, B, ANY any](
|
||||
|
||||
acquire GA,
|
||||
use func(A) GB,
|
||||
release func(A, B) GANY,
|
||||
) GB {
|
||||
return G.Bracket[GA, GB, GANY, B, A, B](
|
||||
Of[GB, B],
|
||||
MonadChain[GA, GB, A, B],
|
||||
MonadChain[GB, GB, B, B],
|
||||
MonadChain[GANY, GB, ANY, B],
|
||||
|
||||
acquire,
|
||||
use,
|
||||
release,
|
||||
)
|
||||
}
|
1405
io/generic/gen.go
1405
io/generic/gen.go
File diff suppressed because it is too large
Load Diff
30
io/generic/sync.go
Normal file
30
io/generic/sync.go
Normal file
@@ -0,0 +1,30 @@
|
||||
// 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
|
||||
|
||||
import (
|
||||
"context"
|
||||
)
|
||||
|
||||
// WithLock executes the provided IO operation in the scope of a lock
|
||||
func WithLock[GA ~func() A, A any](lock func() context.CancelFunc) func(fa GA) GA {
|
||||
return func(fa GA) GA {
|
||||
return func() A {
|
||||
defer lock()()
|
||||
return fa()
|
||||
}
|
||||
}
|
||||
}
|
27
io/sync.go
Normal file
27
io/sync.go
Normal file
@@ -0,0 +1,27 @@
|
||||
// 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 io
|
||||
|
||||
import (
|
||||
"context"
|
||||
|
||||
G "github.com/IBM/fp-go/io/generic"
|
||||
)
|
||||
|
||||
// WithLock executes the provided [IO] operation in the scope of a lock
|
||||
func WithLock[A any](lock IO[context.CancelFunc]) func(fa IO[A]) IO[A] {
|
||||
return G.WithLock[IO[A]](lock)
|
||||
}
|
519
ioeither/gen.go
519
ioeither/gen.go
@@ -1,485 +1,486 @@
|
||||
// Code generated by go generate; DO NOT EDIT.
|
||||
// This file was generated by robots at
|
||||
// 2023-09-12 13:44:29.4935658 +0200 CEST m=+0.015377401
|
||||
// 2023-10-23 08:30:58.6457744 +0200 CEST m=+0.080336501
|
||||
|
||||
package ioeither
|
||||
|
||||
|
||||
import (
|
||||
G "github.com/IBM/fp-go/ioeither/generic"
|
||||
G "github.com/IBM/fp-go/ioeither/generic"
|
||||
T "github.com/IBM/fp-go/tuple"
|
||||
)
|
||||
|
||||
// Eitherize0 converts a function with 1 parameters returning a tuple into a function with 0 parameters returning a [IOEither[error, R]]
|
||||
func Eitherize0[F ~func() (R, error), R any](f F) func() IOEither[error, R] {
|
||||
return G.Eitherize0[IOEither[error, R]](f)
|
||||
return G.Eitherize0[IOEither[error, R]](f)
|
||||
}
|
||||
|
||||
// Uneitherize0 converts a function with 1 parameters returning a tuple into a function with 0 parameters returning a [IOEither[error, R]]
|
||||
func Uneitherize0[F ~func() IOEither[error, R], R any](f F) func() (R, error) {
|
||||
return G.Uneitherize0[IOEither[error, R]](f)
|
||||
return G.Uneitherize0[IOEither[error, R]](f)
|
||||
}
|
||||
|
||||
// Eitherize1 converts a function with 2 parameters returning a tuple into a function with 1 parameters returning a [IOEither[error, R]]
|
||||
func Eitherize1[F ~func(T1) (R, error), T1, R any](f F) func(T1) IOEither[error, R] {
|
||||
return G.Eitherize1[IOEither[error, R]](f)
|
||||
return G.Eitherize1[IOEither[error, R]](f)
|
||||
}
|
||||
|
||||
// Uneitherize1 converts a function with 2 parameters returning a tuple into a function with 1 parameters returning a [IOEither[error, R]]
|
||||
func Uneitherize1[F ~func(T1) IOEither[error, R], T1, R any](f F) func(T1) (R, error) {
|
||||
return G.Uneitherize1[IOEither[error, R]](f)
|
||||
return G.Uneitherize1[IOEither[error, R]](f)
|
||||
}
|
||||
|
||||
// SequenceT1 converts 1 [IOEither[E, T]] into a [IOEither[E, T.Tuple1[T1]]]
|
||||
func SequenceT1[E, T1 any](
|
||||
t1 IOEither[E, T1],
|
||||
t1 IOEither[E, T1],
|
||||
) IOEither[E, T.Tuple1[T1]] {
|
||||
return G.SequenceT1[
|
||||
IOEither[E, T.Tuple1[T1]],
|
||||
IOEither[E, T1],
|
||||
](t1)
|
||||
return G.SequenceT1[
|
||||
IOEither[E, T.Tuple1[T1]],
|
||||
IOEither[E, T1],
|
||||
](t1)
|
||||
}
|
||||
|
||||
// SequenceTuple1 converts a [T.Tuple1[IOEither[E, T]]] into a [IOEither[E, T.Tuple1[T1]]]
|
||||
func SequenceTuple1[E, T1 any](t T.Tuple1[IOEither[E, T1]]) IOEither[E, T.Tuple1[T1]] {
|
||||
return G.SequenceTuple1[
|
||||
IOEither[E, T.Tuple1[T1]],
|
||||
IOEither[E, T1],
|
||||
](t)
|
||||
return G.SequenceTuple1[
|
||||
IOEither[E, T.Tuple1[T1]],
|
||||
IOEither[E, T1],
|
||||
](t)
|
||||
}
|
||||
|
||||
// TraverseTuple1 converts a [T.Tuple1[IOEither[E, T]]] into a [IOEither[E, T.Tuple1[T1]]]
|
||||
func TraverseTuple1[F1 ~func(A1) IOEither[E, T1], E, A1, T1 any](f1 F1) func(T.Tuple1[A1]) IOEither[E, T.Tuple1[T1]] {
|
||||
return G.TraverseTuple1[IOEither[E, T.Tuple1[T1]]](f1)
|
||||
return G.TraverseTuple1[IOEither[E, T.Tuple1[T1]]](f1)
|
||||
}
|
||||
|
||||
// Eitherize2 converts a function with 3 parameters returning a tuple into a function with 2 parameters returning a [IOEither[error, R]]
|
||||
func Eitherize2[F ~func(T1, T2) (R, error), T1, T2, R any](f F) func(T1, T2) IOEither[error, R] {
|
||||
return G.Eitherize2[IOEither[error, R]](f)
|
||||
return G.Eitherize2[IOEither[error, R]](f)
|
||||
}
|
||||
|
||||
// Uneitherize2 converts a function with 3 parameters returning a tuple into a function with 2 parameters returning a [IOEither[error, R]]
|
||||
func Uneitherize2[F ~func(T1, T2) IOEither[error, R], T1, T2, R any](f F) func(T1, T2) (R, error) {
|
||||
return G.Uneitherize2[IOEither[error, R]](f)
|
||||
return G.Uneitherize2[IOEither[error, R]](f)
|
||||
}
|
||||
|
||||
// SequenceT2 converts 2 [IOEither[E, T]] into a [IOEither[E, T.Tuple2[T1, T2]]]
|
||||
func SequenceT2[E, T1, T2 any](
|
||||
t1 IOEither[E, T1],
|
||||
t2 IOEither[E, T2],
|
||||
t1 IOEither[E, T1],
|
||||
t2 IOEither[E, T2],
|
||||
) IOEither[E, T.Tuple2[T1, T2]] {
|
||||
return G.SequenceT2[
|
||||
IOEither[E, T.Tuple2[T1, T2]],
|
||||
IOEither[E, T1],
|
||||
IOEither[E, T2],
|
||||
](t1, t2)
|
||||
return G.SequenceT2[
|
||||
IOEither[E, T.Tuple2[T1, T2]],
|
||||
IOEither[E, T1],
|
||||
IOEither[E, T2],
|
||||
](t1, t2)
|
||||
}
|
||||
|
||||
// SequenceTuple2 converts a [T.Tuple2[IOEither[E, T]]] into a [IOEither[E, T.Tuple2[T1, T2]]]
|
||||
func SequenceTuple2[E, T1, T2 any](t T.Tuple2[IOEither[E, T1], IOEither[E, T2]]) IOEither[E, T.Tuple2[T1, T2]] {
|
||||
return G.SequenceTuple2[
|
||||
IOEither[E, T.Tuple2[T1, T2]],
|
||||
IOEither[E, T1],
|
||||
IOEither[E, T2],
|
||||
](t)
|
||||
return G.SequenceTuple2[
|
||||
IOEither[E, T.Tuple2[T1, T2]],
|
||||
IOEither[E, T1],
|
||||
IOEither[E, T2],
|
||||
](t)
|
||||
}
|
||||
|
||||
// TraverseTuple2 converts a [T.Tuple2[IOEither[E, T]]] into a [IOEither[E, T.Tuple2[T1, T2]]]
|
||||
func TraverseTuple2[F1 ~func(A1) IOEither[E, T1], F2 ~func(A2) IOEither[E, T2], E, A1, A2, T1, T2 any](f1 F1, f2 F2) func(T.Tuple2[A1, A2]) IOEither[E, T.Tuple2[T1, T2]] {
|
||||
return G.TraverseTuple2[IOEither[E, T.Tuple2[T1, T2]]](f1, f2)
|
||||
return G.TraverseTuple2[IOEither[E, T.Tuple2[T1, T2]]](f1, f2)
|
||||
}
|
||||
|
||||
// Eitherize3 converts a function with 4 parameters returning a tuple into a function with 3 parameters returning a [IOEither[error, R]]
|
||||
func Eitherize3[F ~func(T1, T2, T3) (R, error), T1, T2, T3, R any](f F) func(T1, T2, T3) IOEither[error, R] {
|
||||
return G.Eitherize3[IOEither[error, R]](f)
|
||||
return G.Eitherize3[IOEither[error, R]](f)
|
||||
}
|
||||
|
||||
// Uneitherize3 converts a function with 4 parameters returning a tuple into a function with 3 parameters returning a [IOEither[error, R]]
|
||||
func Uneitherize3[F ~func(T1, T2, T3) IOEither[error, R], T1, T2, T3, R any](f F) func(T1, T2, T3) (R, error) {
|
||||
return G.Uneitherize3[IOEither[error, R]](f)
|
||||
return G.Uneitherize3[IOEither[error, R]](f)
|
||||
}
|
||||
|
||||
// SequenceT3 converts 3 [IOEither[E, T]] into a [IOEither[E, T.Tuple3[T1, T2, T3]]]
|
||||
func SequenceT3[E, T1, T2, T3 any](
|
||||
t1 IOEither[E, T1],
|
||||
t2 IOEither[E, T2],
|
||||
t3 IOEither[E, T3],
|
||||
t1 IOEither[E, T1],
|
||||
t2 IOEither[E, T2],
|
||||
t3 IOEither[E, T3],
|
||||
) IOEither[E, T.Tuple3[T1, T2, T3]] {
|
||||
return G.SequenceT3[
|
||||
IOEither[E, T.Tuple3[T1, T2, T3]],
|
||||
IOEither[E, T1],
|
||||
IOEither[E, T2],
|
||||
IOEither[E, T3],
|
||||
](t1, t2, t3)
|
||||
return G.SequenceT3[
|
||||
IOEither[E, T.Tuple3[T1, T2, T3]],
|
||||
IOEither[E, T1],
|
||||
IOEither[E, T2],
|
||||
IOEither[E, T3],
|
||||
](t1, t2, t3)
|
||||
}
|
||||
|
||||
// SequenceTuple3 converts a [T.Tuple3[IOEither[E, T]]] into a [IOEither[E, T.Tuple3[T1, T2, T3]]]
|
||||
func SequenceTuple3[E, T1, T2, T3 any](t T.Tuple3[IOEither[E, T1], IOEither[E, T2], IOEither[E, T3]]) IOEither[E, T.Tuple3[T1, T2, T3]] {
|
||||
return G.SequenceTuple3[
|
||||
IOEither[E, T.Tuple3[T1, T2, T3]],
|
||||
IOEither[E, T1],
|
||||
IOEither[E, T2],
|
||||
IOEither[E, T3],
|
||||
](t)
|
||||
return G.SequenceTuple3[
|
||||
IOEither[E, T.Tuple3[T1, T2, T3]],
|
||||
IOEither[E, T1],
|
||||
IOEither[E, T2],
|
||||
IOEither[E, T3],
|
||||
](t)
|
||||
}
|
||||
|
||||
// TraverseTuple3 converts a [T.Tuple3[IOEither[E, T]]] into a [IOEither[E, T.Tuple3[T1, T2, T3]]]
|
||||
func TraverseTuple3[F1 ~func(A1) IOEither[E, T1], F2 ~func(A2) IOEither[E, T2], F3 ~func(A3) IOEither[E, T3], E, A1, A2, A3, T1, T2, T3 any](f1 F1, f2 F2, f3 F3) func(T.Tuple3[A1, A2, A3]) IOEither[E, T.Tuple3[T1, T2, T3]] {
|
||||
return G.TraverseTuple3[IOEither[E, T.Tuple3[T1, T2, T3]]](f1, f2, f3)
|
||||
return G.TraverseTuple3[IOEither[E, T.Tuple3[T1, T2, T3]]](f1, f2, f3)
|
||||
}
|
||||
|
||||
// Eitherize4 converts a function with 5 parameters returning a tuple into a function with 4 parameters returning a [IOEither[error, R]]
|
||||
func Eitherize4[F ~func(T1, T2, T3, T4) (R, error), T1, T2, T3, T4, R any](f F) func(T1, T2, T3, T4) IOEither[error, R] {
|
||||
return G.Eitherize4[IOEither[error, R]](f)
|
||||
return G.Eitherize4[IOEither[error, R]](f)
|
||||
}
|
||||
|
||||
// Uneitherize4 converts a function with 5 parameters returning a tuple into a function with 4 parameters returning a [IOEither[error, R]]
|
||||
func Uneitherize4[F ~func(T1, T2, T3, T4) IOEither[error, R], T1, T2, T3, T4, R any](f F) func(T1, T2, T3, T4) (R, error) {
|
||||
return G.Uneitherize4[IOEither[error, R]](f)
|
||||
return G.Uneitherize4[IOEither[error, R]](f)
|
||||
}
|
||||
|
||||
// SequenceT4 converts 4 [IOEither[E, T]] into a [IOEither[E, T.Tuple4[T1, T2, T3, T4]]]
|
||||
func SequenceT4[E, T1, T2, T3, T4 any](
|
||||
t1 IOEither[E, T1],
|
||||
t2 IOEither[E, T2],
|
||||
t3 IOEither[E, T3],
|
||||
t4 IOEither[E, T4],
|
||||
t1 IOEither[E, T1],
|
||||
t2 IOEither[E, T2],
|
||||
t3 IOEither[E, T3],
|
||||
t4 IOEither[E, T4],
|
||||
) IOEither[E, T.Tuple4[T1, T2, T3, T4]] {
|
||||
return G.SequenceT4[
|
||||
IOEither[E, T.Tuple4[T1, T2, T3, T4]],
|
||||
IOEither[E, T1],
|
||||
IOEither[E, T2],
|
||||
IOEither[E, T3],
|
||||
IOEither[E, T4],
|
||||
](t1, t2, t3, t4)
|
||||
return G.SequenceT4[
|
||||
IOEither[E, T.Tuple4[T1, T2, T3, T4]],
|
||||
IOEither[E, T1],
|
||||
IOEither[E, T2],
|
||||
IOEither[E, T3],
|
||||
IOEither[E, T4],
|
||||
](t1, t2, t3, t4)
|
||||
}
|
||||
|
||||
// SequenceTuple4 converts a [T.Tuple4[IOEither[E, T]]] into a [IOEither[E, T.Tuple4[T1, T2, T3, T4]]]
|
||||
func SequenceTuple4[E, T1, T2, T3, T4 any](t T.Tuple4[IOEither[E, T1], IOEither[E, T2], IOEither[E, T3], IOEither[E, T4]]) IOEither[E, T.Tuple4[T1, T2, T3, T4]] {
|
||||
return G.SequenceTuple4[
|
||||
IOEither[E, T.Tuple4[T1, T2, T3, T4]],
|
||||
IOEither[E, T1],
|
||||
IOEither[E, T2],
|
||||
IOEither[E, T3],
|
||||
IOEither[E, T4],
|
||||
](t)
|
||||
return G.SequenceTuple4[
|
||||
IOEither[E, T.Tuple4[T1, T2, T3, T4]],
|
||||
IOEither[E, T1],
|
||||
IOEither[E, T2],
|
||||
IOEither[E, T3],
|
||||
IOEither[E, T4],
|
||||
](t)
|
||||
}
|
||||
|
||||
// TraverseTuple4 converts a [T.Tuple4[IOEither[E, T]]] into a [IOEither[E, T.Tuple4[T1, T2, T3, T4]]]
|
||||
func TraverseTuple4[F1 ~func(A1) IOEither[E, T1], F2 ~func(A2) IOEither[E, T2], F3 ~func(A3) IOEither[E, T3], F4 ~func(A4) IOEither[E, T4], E, A1, A2, A3, A4, T1, T2, T3, T4 any](f1 F1, f2 F2, f3 F3, f4 F4) func(T.Tuple4[A1, A2, A3, A4]) IOEither[E, T.Tuple4[T1, T2, T3, T4]] {
|
||||
return G.TraverseTuple4[IOEither[E, T.Tuple4[T1, T2, T3, T4]]](f1, f2, f3, f4)
|
||||
return G.TraverseTuple4[IOEither[E, T.Tuple4[T1, T2, T3, T4]]](f1, f2, f3, f4)
|
||||
}
|
||||
|
||||
// Eitherize5 converts a function with 6 parameters returning a tuple into a function with 5 parameters returning a [IOEither[error, R]]
|
||||
func Eitherize5[F ~func(T1, T2, T3, T4, T5) (R, error), T1, T2, T3, T4, T5, R any](f F) func(T1, T2, T3, T4, T5) IOEither[error, R] {
|
||||
return G.Eitherize5[IOEither[error, R]](f)
|
||||
return G.Eitherize5[IOEither[error, R]](f)
|
||||
}
|
||||
|
||||
// Uneitherize5 converts a function with 6 parameters returning a tuple into a function with 5 parameters returning a [IOEither[error, R]]
|
||||
func Uneitherize5[F ~func(T1, T2, T3, T4, T5) IOEither[error, R], T1, T2, T3, T4, T5, R any](f F) func(T1, T2, T3, T4, T5) (R, error) {
|
||||
return G.Uneitherize5[IOEither[error, R]](f)
|
||||
return G.Uneitherize5[IOEither[error, R]](f)
|
||||
}
|
||||
|
||||
// SequenceT5 converts 5 [IOEither[E, T]] into a [IOEither[E, T.Tuple5[T1, T2, T3, T4, T5]]]
|
||||
func SequenceT5[E, T1, T2, T3, T4, T5 any](
|
||||
t1 IOEither[E, T1],
|
||||
t2 IOEither[E, T2],
|
||||
t3 IOEither[E, T3],
|
||||
t4 IOEither[E, T4],
|
||||
t5 IOEither[E, T5],
|
||||
t1 IOEither[E, T1],
|
||||
t2 IOEither[E, T2],
|
||||
t3 IOEither[E, T3],
|
||||
t4 IOEither[E, T4],
|
||||
t5 IOEither[E, T5],
|
||||
) IOEither[E, T.Tuple5[T1, T2, T3, T4, T5]] {
|
||||
return G.SequenceT5[
|
||||
IOEither[E, T.Tuple5[T1, T2, T3, T4, T5]],
|
||||
IOEither[E, T1],
|
||||
IOEither[E, T2],
|
||||
IOEither[E, T3],
|
||||
IOEither[E, T4],
|
||||
IOEither[E, T5],
|
||||
](t1, t2, t3, t4, t5)
|
||||
return G.SequenceT5[
|
||||
IOEither[E, T.Tuple5[T1, T2, T3, T4, T5]],
|
||||
IOEither[E, T1],
|
||||
IOEither[E, T2],
|
||||
IOEither[E, T3],
|
||||
IOEither[E, T4],
|
||||
IOEither[E, T5],
|
||||
](t1, t2, t3, t4, t5)
|
||||
}
|
||||
|
||||
// SequenceTuple5 converts a [T.Tuple5[IOEither[E, T]]] into a [IOEither[E, T.Tuple5[T1, T2, T3, T4, T5]]]
|
||||
func SequenceTuple5[E, T1, T2, T3, T4, T5 any](t T.Tuple5[IOEither[E, T1], IOEither[E, T2], IOEither[E, T3], IOEither[E, T4], IOEither[E, T5]]) IOEither[E, T.Tuple5[T1, T2, T3, T4, T5]] {
|
||||
return G.SequenceTuple5[
|
||||
IOEither[E, T.Tuple5[T1, T2, T3, T4, T5]],
|
||||
IOEither[E, T1],
|
||||
IOEither[E, T2],
|
||||
IOEither[E, T3],
|
||||
IOEither[E, T4],
|
||||
IOEither[E, T5],
|
||||
](t)
|
||||
return G.SequenceTuple5[
|
||||
IOEither[E, T.Tuple5[T1, T2, T3, T4, T5]],
|
||||
IOEither[E, T1],
|
||||
IOEither[E, T2],
|
||||
IOEither[E, T3],
|
||||
IOEither[E, T4],
|
||||
IOEither[E, T5],
|
||||
](t)
|
||||
}
|
||||
|
||||
// TraverseTuple5 converts a [T.Tuple5[IOEither[E, T]]] into a [IOEither[E, T.Tuple5[T1, T2, T3, T4, T5]]]
|
||||
func TraverseTuple5[F1 ~func(A1) IOEither[E, T1], F2 ~func(A2) IOEither[E, T2], F3 ~func(A3) IOEither[E, T3], F4 ~func(A4) IOEither[E, T4], F5 ~func(A5) IOEither[E, T5], E, A1, A2, A3, A4, A5, T1, T2, T3, T4, T5 any](f1 F1, f2 F2, f3 F3, f4 F4, f5 F5) func(T.Tuple5[A1, A2, A3, A4, A5]) IOEither[E, T.Tuple5[T1, T2, T3, T4, T5]] {
|
||||
return G.TraverseTuple5[IOEither[E, T.Tuple5[T1, T2, T3, T4, T5]]](f1, f2, f3, f4, f5)
|
||||
return G.TraverseTuple5[IOEither[E, T.Tuple5[T1, T2, T3, T4, T5]]](f1, f2, f3, f4, f5)
|
||||
}
|
||||
|
||||
// Eitherize6 converts a function with 7 parameters returning a tuple into a function with 6 parameters returning a [IOEither[error, R]]
|
||||
func Eitherize6[F ~func(T1, T2, T3, T4, T5, T6) (R, error), T1, T2, T3, T4, T5, T6, R any](f F) func(T1, T2, T3, T4, T5, T6) IOEither[error, R] {
|
||||
return G.Eitherize6[IOEither[error, R]](f)
|
||||
return G.Eitherize6[IOEither[error, R]](f)
|
||||
}
|
||||
|
||||
// Uneitherize6 converts a function with 7 parameters returning a tuple into a function with 6 parameters returning a [IOEither[error, R]]
|
||||
func Uneitherize6[F ~func(T1, T2, T3, T4, T5, T6) IOEither[error, R], T1, T2, T3, T4, T5, T6, R any](f F) func(T1, T2, T3, T4, T5, T6) (R, error) {
|
||||
return G.Uneitherize6[IOEither[error, R]](f)
|
||||
return G.Uneitherize6[IOEither[error, R]](f)
|
||||
}
|
||||
|
||||
// SequenceT6 converts 6 [IOEither[E, T]] into a [IOEither[E, T.Tuple6[T1, T2, T3, T4, T5, T6]]]
|
||||
func SequenceT6[E, T1, T2, T3, T4, T5, T6 any](
|
||||
t1 IOEither[E, T1],
|
||||
t2 IOEither[E, T2],
|
||||
t3 IOEither[E, T3],
|
||||
t4 IOEither[E, T4],
|
||||
t5 IOEither[E, T5],
|
||||
t6 IOEither[E, T6],
|
||||
t1 IOEither[E, T1],
|
||||
t2 IOEither[E, T2],
|
||||
t3 IOEither[E, T3],
|
||||
t4 IOEither[E, T4],
|
||||
t5 IOEither[E, T5],
|
||||
t6 IOEither[E, T6],
|
||||
) IOEither[E, T.Tuple6[T1, T2, T3, T4, T5, T6]] {
|
||||
return G.SequenceT6[
|
||||
IOEither[E, T.Tuple6[T1, T2, T3, T4, T5, T6]],
|
||||
IOEither[E, T1],
|
||||
IOEither[E, T2],
|
||||
IOEither[E, T3],
|
||||
IOEither[E, T4],
|
||||
IOEither[E, T5],
|
||||
IOEither[E, T6],
|
||||
](t1, t2, t3, t4, t5, t6)
|
||||
return G.SequenceT6[
|
||||
IOEither[E, T.Tuple6[T1, T2, T3, T4, T5, T6]],
|
||||
IOEither[E, T1],
|
||||
IOEither[E, T2],
|
||||
IOEither[E, T3],
|
||||
IOEither[E, T4],
|
||||
IOEither[E, T5],
|
||||
IOEither[E, T6],
|
||||
](t1, t2, t3, t4, t5, t6)
|
||||
}
|
||||
|
||||
// SequenceTuple6 converts a [T.Tuple6[IOEither[E, T]]] into a [IOEither[E, T.Tuple6[T1, T2, T3, T4, T5, T6]]]
|
||||
func SequenceTuple6[E, T1, T2, T3, T4, T5, T6 any](t T.Tuple6[IOEither[E, T1], IOEither[E, T2], IOEither[E, T3], IOEither[E, T4], IOEither[E, T5], IOEither[E, T6]]) IOEither[E, T.Tuple6[T1, T2, T3, T4, T5, T6]] {
|
||||
return G.SequenceTuple6[
|
||||
IOEither[E, T.Tuple6[T1, T2, T3, T4, T5, T6]],
|
||||
IOEither[E, T1],
|
||||
IOEither[E, T2],
|
||||
IOEither[E, T3],
|
||||
IOEither[E, T4],
|
||||
IOEither[E, T5],
|
||||
IOEither[E, T6],
|
||||
](t)
|
||||
return G.SequenceTuple6[
|
||||
IOEither[E, T.Tuple6[T1, T2, T3, T4, T5, T6]],
|
||||
IOEither[E, T1],
|
||||
IOEither[E, T2],
|
||||
IOEither[E, T3],
|
||||
IOEither[E, T4],
|
||||
IOEither[E, T5],
|
||||
IOEither[E, T6],
|
||||
](t)
|
||||
}
|
||||
|
||||
// TraverseTuple6 converts a [T.Tuple6[IOEither[E, T]]] into a [IOEither[E, T.Tuple6[T1, T2, T3, T4, T5, T6]]]
|
||||
func TraverseTuple6[F1 ~func(A1) IOEither[E, T1], F2 ~func(A2) IOEither[E, T2], F3 ~func(A3) IOEither[E, T3], F4 ~func(A4) IOEither[E, T4], F5 ~func(A5) IOEither[E, T5], F6 ~func(A6) IOEither[E, T6], E, A1, A2, A3, A4, A5, A6, T1, T2, T3, T4, T5, T6 any](f1 F1, f2 F2, f3 F3, f4 F4, f5 F5, f6 F6) func(T.Tuple6[A1, A2, A3, A4, A5, A6]) IOEither[E, T.Tuple6[T1, T2, T3, T4, T5, T6]] {
|
||||
return G.TraverseTuple6[IOEither[E, T.Tuple6[T1, T2, T3, T4, T5, T6]]](f1, f2, f3, f4, f5, f6)
|
||||
return G.TraverseTuple6[IOEither[E, T.Tuple6[T1, T2, T3, T4, T5, T6]]](f1, f2, f3, f4, f5, f6)
|
||||
}
|
||||
|
||||
// Eitherize7 converts a function with 8 parameters returning a tuple into a function with 7 parameters returning a [IOEither[error, R]]
|
||||
func Eitherize7[F ~func(T1, T2, T3, T4, T5, T6, T7) (R, error), T1, T2, T3, T4, T5, T6, T7, R any](f F) func(T1, T2, T3, T4, T5, T6, T7) IOEither[error, R] {
|
||||
return G.Eitherize7[IOEither[error, R]](f)
|
||||
return G.Eitherize7[IOEither[error, R]](f)
|
||||
}
|
||||
|
||||
// Uneitherize7 converts a function with 8 parameters returning a tuple into a function with 7 parameters returning a [IOEither[error, R]]
|
||||
func Uneitherize7[F ~func(T1, T2, T3, T4, T5, T6, T7) IOEither[error, R], T1, T2, T3, T4, T5, T6, T7, R any](f F) func(T1, T2, T3, T4, T5, T6, T7) (R, error) {
|
||||
return G.Uneitherize7[IOEither[error, R]](f)
|
||||
return G.Uneitherize7[IOEither[error, R]](f)
|
||||
}
|
||||
|
||||
// SequenceT7 converts 7 [IOEither[E, T]] into a [IOEither[E, T.Tuple7[T1, T2, T3, T4, T5, T6, T7]]]
|
||||
func SequenceT7[E, T1, T2, T3, T4, T5, T6, T7 any](
|
||||
t1 IOEither[E, T1],
|
||||
t2 IOEither[E, T2],
|
||||
t3 IOEither[E, T3],
|
||||
t4 IOEither[E, T4],
|
||||
t5 IOEither[E, T5],
|
||||
t6 IOEither[E, T6],
|
||||
t7 IOEither[E, T7],
|
||||
t1 IOEither[E, T1],
|
||||
t2 IOEither[E, T2],
|
||||
t3 IOEither[E, T3],
|
||||
t4 IOEither[E, T4],
|
||||
t5 IOEither[E, T5],
|
||||
t6 IOEither[E, T6],
|
||||
t7 IOEither[E, T7],
|
||||
) IOEither[E, T.Tuple7[T1, T2, T3, T4, T5, T6, T7]] {
|
||||
return G.SequenceT7[
|
||||
IOEither[E, T.Tuple7[T1, T2, T3, T4, T5, T6, T7]],
|
||||
IOEither[E, T1],
|
||||
IOEither[E, T2],
|
||||
IOEither[E, T3],
|
||||
IOEither[E, T4],
|
||||
IOEither[E, T5],
|
||||
IOEither[E, T6],
|
||||
IOEither[E, T7],
|
||||
](t1, t2, t3, t4, t5, t6, t7)
|
||||
return G.SequenceT7[
|
||||
IOEither[E, T.Tuple7[T1, T2, T3, T4, T5, T6, T7]],
|
||||
IOEither[E, T1],
|
||||
IOEither[E, T2],
|
||||
IOEither[E, T3],
|
||||
IOEither[E, T4],
|
||||
IOEither[E, T5],
|
||||
IOEither[E, T6],
|
||||
IOEither[E, T7],
|
||||
](t1, t2, t3, t4, t5, t6, t7)
|
||||
}
|
||||
|
||||
// SequenceTuple7 converts a [T.Tuple7[IOEither[E, T]]] into a [IOEither[E, T.Tuple7[T1, T2, T3, T4, T5, T6, T7]]]
|
||||
func SequenceTuple7[E, T1, T2, T3, T4, T5, T6, T7 any](t T.Tuple7[IOEither[E, T1], IOEither[E, T2], IOEither[E, T3], IOEither[E, T4], IOEither[E, T5], IOEither[E, T6], IOEither[E, T7]]) IOEither[E, T.Tuple7[T1, T2, T3, T4, T5, T6, T7]] {
|
||||
return G.SequenceTuple7[
|
||||
IOEither[E, T.Tuple7[T1, T2, T3, T4, T5, T6, T7]],
|
||||
IOEither[E, T1],
|
||||
IOEither[E, T2],
|
||||
IOEither[E, T3],
|
||||
IOEither[E, T4],
|
||||
IOEither[E, T5],
|
||||
IOEither[E, T6],
|
||||
IOEither[E, T7],
|
||||
](t)
|
||||
return G.SequenceTuple7[
|
||||
IOEither[E, T.Tuple7[T1, T2, T3, T4, T5, T6, T7]],
|
||||
IOEither[E, T1],
|
||||
IOEither[E, T2],
|
||||
IOEither[E, T3],
|
||||
IOEither[E, T4],
|
||||
IOEither[E, T5],
|
||||
IOEither[E, T6],
|
||||
IOEither[E, T7],
|
||||
](t)
|
||||
}
|
||||
|
||||
// TraverseTuple7 converts a [T.Tuple7[IOEither[E, T]]] into a [IOEither[E, T.Tuple7[T1, T2, T3, T4, T5, T6, T7]]]
|
||||
func TraverseTuple7[F1 ~func(A1) IOEither[E, T1], F2 ~func(A2) IOEither[E, T2], F3 ~func(A3) IOEither[E, T3], F4 ~func(A4) IOEither[E, T4], F5 ~func(A5) IOEither[E, T5], F6 ~func(A6) IOEither[E, T6], F7 ~func(A7) IOEither[E, T7], E, A1, A2, A3, A4, A5, A6, A7, T1, T2, T3, T4, T5, T6, 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]) IOEither[E, T.Tuple7[T1, T2, T3, T4, T5, T6, T7]] {
|
||||
return G.TraverseTuple7[IOEither[E, T.Tuple7[T1, T2, T3, T4, T5, T6, T7]]](f1, f2, f3, f4, f5, f6, f7)
|
||||
return G.TraverseTuple7[IOEither[E, T.Tuple7[T1, T2, T3, T4, T5, T6, T7]]](f1, f2, f3, f4, f5, f6, f7)
|
||||
}
|
||||
|
||||
// Eitherize8 converts a function with 9 parameters returning a tuple into a function with 8 parameters returning a [IOEither[error, R]]
|
||||
func Eitherize8[F ~func(T1, T2, T3, T4, T5, T6, T7, T8) (R, error), T1, T2, T3, T4, T5, T6, T7, T8, R any](f F) func(T1, T2, T3, T4, T5, T6, T7, T8) IOEither[error, R] {
|
||||
return G.Eitherize8[IOEither[error, R]](f)
|
||||
return G.Eitherize8[IOEither[error, R]](f)
|
||||
}
|
||||
|
||||
// Uneitherize8 converts a function with 9 parameters returning a tuple into a function with 8 parameters returning a [IOEither[error, R]]
|
||||
func Uneitherize8[F ~func(T1, T2, T3, T4, T5, T6, T7, T8) IOEither[error, R], T1, T2, T3, T4, T5, T6, T7, T8, R any](f F) func(T1, T2, T3, T4, T5, T6, T7, T8) (R, error) {
|
||||
return G.Uneitherize8[IOEither[error, R]](f)
|
||||
return G.Uneitherize8[IOEither[error, R]](f)
|
||||
}
|
||||
|
||||
// SequenceT8 converts 8 [IOEither[E, T]] into a [IOEither[E, T.Tuple8[T1, T2, T3, T4, T5, T6, T7, T8]]]
|
||||
func SequenceT8[E, T1, T2, T3, T4, T5, T6, T7, T8 any](
|
||||
t1 IOEither[E, T1],
|
||||
t2 IOEither[E, T2],
|
||||
t3 IOEither[E, T3],
|
||||
t4 IOEither[E, T4],
|
||||
t5 IOEither[E, T5],
|
||||
t6 IOEither[E, T6],
|
||||
t7 IOEither[E, T7],
|
||||
t8 IOEither[E, T8],
|
||||
t1 IOEither[E, T1],
|
||||
t2 IOEither[E, T2],
|
||||
t3 IOEither[E, T3],
|
||||
t4 IOEither[E, T4],
|
||||
t5 IOEither[E, T5],
|
||||
t6 IOEither[E, T6],
|
||||
t7 IOEither[E, T7],
|
||||
t8 IOEither[E, T8],
|
||||
) IOEither[E, T.Tuple8[T1, T2, T3, T4, T5, T6, T7, T8]] {
|
||||
return G.SequenceT8[
|
||||
IOEither[E, T.Tuple8[T1, T2, T3, T4, T5, T6, T7, T8]],
|
||||
IOEither[E, T1],
|
||||
IOEither[E, T2],
|
||||
IOEither[E, T3],
|
||||
IOEither[E, T4],
|
||||
IOEither[E, T5],
|
||||
IOEither[E, T6],
|
||||
IOEither[E, T7],
|
||||
IOEither[E, T8],
|
||||
](t1, t2, t3, t4, t5, t6, t7, t8)
|
||||
return G.SequenceT8[
|
||||
IOEither[E, T.Tuple8[T1, T2, T3, T4, T5, T6, T7, T8]],
|
||||
IOEither[E, T1],
|
||||
IOEither[E, T2],
|
||||
IOEither[E, T3],
|
||||
IOEither[E, T4],
|
||||
IOEither[E, T5],
|
||||
IOEither[E, T6],
|
||||
IOEither[E, T7],
|
||||
IOEither[E, T8],
|
||||
](t1, t2, t3, t4, t5, t6, t7, t8)
|
||||
}
|
||||
|
||||
// SequenceTuple8 converts a [T.Tuple8[IOEither[E, T]]] into a [IOEither[E, T.Tuple8[T1, T2, T3, T4, T5, T6, T7, T8]]]
|
||||
func SequenceTuple8[E, T1, T2, T3, T4, T5, T6, T7, T8 any](t T.Tuple8[IOEither[E, T1], IOEither[E, T2], IOEither[E, T3], IOEither[E, T4], IOEither[E, T5], IOEither[E, T6], IOEither[E, T7], IOEither[E, T8]]) IOEither[E, T.Tuple8[T1, T2, T3, T4, T5, T6, T7, T8]] {
|
||||
return G.SequenceTuple8[
|
||||
IOEither[E, T.Tuple8[T1, T2, T3, T4, T5, T6, T7, T8]],
|
||||
IOEither[E, T1],
|
||||
IOEither[E, T2],
|
||||
IOEither[E, T3],
|
||||
IOEither[E, T4],
|
||||
IOEither[E, T5],
|
||||
IOEither[E, T6],
|
||||
IOEither[E, T7],
|
||||
IOEither[E, T8],
|
||||
](t)
|
||||
return G.SequenceTuple8[
|
||||
IOEither[E, T.Tuple8[T1, T2, T3, T4, T5, T6, T7, T8]],
|
||||
IOEither[E, T1],
|
||||
IOEither[E, T2],
|
||||
IOEither[E, T3],
|
||||
IOEither[E, T4],
|
||||
IOEither[E, T5],
|
||||
IOEither[E, T6],
|
||||
IOEither[E, T7],
|
||||
IOEither[E, T8],
|
||||
](t)
|
||||
}
|
||||
|
||||
// TraverseTuple8 converts a [T.Tuple8[IOEither[E, T]]] into a [IOEither[E, T.Tuple8[T1, T2, T3, T4, T5, T6, T7, T8]]]
|
||||
func TraverseTuple8[F1 ~func(A1) IOEither[E, T1], F2 ~func(A2) IOEither[E, T2], F3 ~func(A3) IOEither[E, T3], F4 ~func(A4) IOEither[E, T4], F5 ~func(A5) IOEither[E, T5], F6 ~func(A6) IOEither[E, T6], F7 ~func(A7) IOEither[E, T7], F8 ~func(A8) IOEither[E, T8], E, A1, A2, A3, A4, A5, A6, A7, A8, T1, T2, T3, T4, T5, T6, T7, 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]) IOEither[E, T.Tuple8[T1, T2, T3, T4, T5, T6, T7, T8]] {
|
||||
return G.TraverseTuple8[IOEither[E, T.Tuple8[T1, T2, T3, T4, T5, T6, T7, T8]]](f1, f2, f3, f4, f5, f6, f7, f8)
|
||||
return G.TraverseTuple8[IOEither[E, T.Tuple8[T1, T2, T3, T4, T5, T6, T7, T8]]](f1, f2, f3, f4, f5, f6, f7, f8)
|
||||
}
|
||||
|
||||
// Eitherize9 converts a function with 10 parameters returning a tuple into a function with 9 parameters returning a [IOEither[error, R]]
|
||||
func Eitherize9[F ~func(T1, T2, T3, T4, T5, T6, T7, T8, T9) (R, error), T1, T2, T3, T4, T5, T6, T7, T8, T9, R any](f F) func(T1, T2, T3, T4, T5, T6, T7, T8, T9) IOEither[error, R] {
|
||||
return G.Eitherize9[IOEither[error, R]](f)
|
||||
return G.Eitherize9[IOEither[error, R]](f)
|
||||
}
|
||||
|
||||
// Uneitherize9 converts a function with 10 parameters returning a tuple into a function with 9 parameters returning a [IOEither[error, R]]
|
||||
func Uneitherize9[F ~func(T1, T2, T3, T4, T5, T6, T7, T8, T9) IOEither[error, R], T1, T2, T3, T4, T5, T6, T7, T8, T9, R any](f F) func(T1, T2, T3, T4, T5, T6, T7, T8, T9) (R, error) {
|
||||
return G.Uneitherize9[IOEither[error, R]](f)
|
||||
return G.Uneitherize9[IOEither[error, R]](f)
|
||||
}
|
||||
|
||||
// SequenceT9 converts 9 [IOEither[E, T]] into a [IOEither[E, T.Tuple9[T1, T2, T3, T4, T5, T6, T7, T8, T9]]]
|
||||
func SequenceT9[E, T1, T2, T3, T4, T5, T6, T7, T8, T9 any](
|
||||
t1 IOEither[E, T1],
|
||||
t2 IOEither[E, T2],
|
||||
t3 IOEither[E, T3],
|
||||
t4 IOEither[E, T4],
|
||||
t5 IOEither[E, T5],
|
||||
t6 IOEither[E, T6],
|
||||
t7 IOEither[E, T7],
|
||||
t8 IOEither[E, T8],
|
||||
t9 IOEither[E, T9],
|
||||
t1 IOEither[E, T1],
|
||||
t2 IOEither[E, T2],
|
||||
t3 IOEither[E, T3],
|
||||
t4 IOEither[E, T4],
|
||||
t5 IOEither[E, T5],
|
||||
t6 IOEither[E, T6],
|
||||
t7 IOEither[E, T7],
|
||||
t8 IOEither[E, T8],
|
||||
t9 IOEither[E, T9],
|
||||
) IOEither[E, T.Tuple9[T1, T2, T3, T4, T5, T6, T7, T8, T9]] {
|
||||
return G.SequenceT9[
|
||||
IOEither[E, T.Tuple9[T1, T2, T3, T4, T5, T6, T7, T8, T9]],
|
||||
IOEither[E, T1],
|
||||
IOEither[E, T2],
|
||||
IOEither[E, T3],
|
||||
IOEither[E, T4],
|
||||
IOEither[E, T5],
|
||||
IOEither[E, T6],
|
||||
IOEither[E, T7],
|
||||
IOEither[E, T8],
|
||||
IOEither[E, T9],
|
||||
](t1, t2, t3, t4, t5, t6, t7, t8, t9)
|
||||
return G.SequenceT9[
|
||||
IOEither[E, T.Tuple9[T1, T2, T3, T4, T5, T6, T7, T8, T9]],
|
||||
IOEither[E, T1],
|
||||
IOEither[E, T2],
|
||||
IOEither[E, T3],
|
||||
IOEither[E, T4],
|
||||
IOEither[E, T5],
|
||||
IOEither[E, T6],
|
||||
IOEither[E, T7],
|
||||
IOEither[E, T8],
|
||||
IOEither[E, T9],
|
||||
](t1, t2, t3, t4, t5, t6, t7, t8, t9)
|
||||
}
|
||||
|
||||
// SequenceTuple9 converts a [T.Tuple9[IOEither[E, T]]] into a [IOEither[E, T.Tuple9[T1, T2, T3, T4, T5, T6, T7, T8, T9]]]
|
||||
func SequenceTuple9[E, T1, T2, T3, T4, T5, T6, T7, T8, T9 any](t T.Tuple9[IOEither[E, T1], IOEither[E, T2], IOEither[E, T3], IOEither[E, T4], IOEither[E, T5], IOEither[E, T6], IOEither[E, T7], IOEither[E, T8], IOEither[E, T9]]) IOEither[E, T.Tuple9[T1, T2, T3, T4, T5, T6, T7, T8, T9]] {
|
||||
return G.SequenceTuple9[
|
||||
IOEither[E, T.Tuple9[T1, T2, T3, T4, T5, T6, T7, T8, T9]],
|
||||
IOEither[E, T1],
|
||||
IOEither[E, T2],
|
||||
IOEither[E, T3],
|
||||
IOEither[E, T4],
|
||||
IOEither[E, T5],
|
||||
IOEither[E, T6],
|
||||
IOEither[E, T7],
|
||||
IOEither[E, T8],
|
||||
IOEither[E, T9],
|
||||
](t)
|
||||
return G.SequenceTuple9[
|
||||
IOEither[E, T.Tuple9[T1, T2, T3, T4, T5, T6, T7, T8, T9]],
|
||||
IOEither[E, T1],
|
||||
IOEither[E, T2],
|
||||
IOEither[E, T3],
|
||||
IOEither[E, T4],
|
||||
IOEither[E, T5],
|
||||
IOEither[E, T6],
|
||||
IOEither[E, T7],
|
||||
IOEither[E, T8],
|
||||
IOEither[E, T9],
|
||||
](t)
|
||||
}
|
||||
|
||||
// TraverseTuple9 converts a [T.Tuple9[IOEither[E, T]]] into a [IOEither[E, T.Tuple9[T1, T2, T3, T4, T5, T6, T7, T8, T9]]]
|
||||
func TraverseTuple9[F1 ~func(A1) IOEither[E, T1], F2 ~func(A2) IOEither[E, T2], F3 ~func(A3) IOEither[E, T3], F4 ~func(A4) IOEither[E, T4], F5 ~func(A5) IOEither[E, T5], F6 ~func(A6) IOEither[E, T6], F7 ~func(A7) IOEither[E, T7], F8 ~func(A8) IOEither[E, T8], F9 ~func(A9) IOEither[E, T9], E, A1, A2, A3, A4, A5, A6, A7, A8, A9, T1, T2, T3, T4, T5, T6, T7, T8, 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]) IOEither[E, T.Tuple9[T1, T2, T3, T4, T5, T6, T7, T8, T9]] {
|
||||
return G.TraverseTuple9[IOEither[E, T.Tuple9[T1, T2, T3, T4, T5, T6, T7, T8, T9]]](f1, f2, f3, f4, f5, f6, f7, f8, f9)
|
||||
return G.TraverseTuple9[IOEither[E, T.Tuple9[T1, T2, T3, T4, T5, T6, T7, T8, T9]]](f1, f2, f3, f4, f5, f6, f7, f8, f9)
|
||||
}
|
||||
|
||||
// Eitherize10 converts a function with 11 parameters returning a tuple into a function with 10 parameters returning a [IOEither[error, R]]
|
||||
func Eitherize10[F ~func(T1, T2, T3, T4, T5, T6, T7, T8, T9, T10) (R, error), T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, R any](f F) func(T1, T2, T3, T4, T5, T6, T7, T8, T9, T10) IOEither[error, R] {
|
||||
return G.Eitherize10[IOEither[error, R]](f)
|
||||
return G.Eitherize10[IOEither[error, R]](f)
|
||||
}
|
||||
|
||||
// Uneitherize10 converts a function with 11 parameters returning a tuple into a function with 10 parameters returning a [IOEither[error, R]]
|
||||
func Uneitherize10[F ~func(T1, T2, T3, T4, T5, T6, T7, T8, T9, T10) IOEither[error, R], T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, R any](f F) func(T1, T2, T3, T4, T5, T6, T7, T8, T9, T10) (R, error) {
|
||||
return G.Uneitherize10[IOEither[error, R]](f)
|
||||
return G.Uneitherize10[IOEither[error, R]](f)
|
||||
}
|
||||
|
||||
// SequenceT10 converts 10 [IOEither[E, T]] into a [IOEither[E, T.Tuple10[T1, T2, T3, T4, T5, T6, T7, T8, T9, T10]]]
|
||||
func SequenceT10[E, T1, T2, T3, T4, T5, T6, T7, T8, T9, T10 any](
|
||||
t1 IOEither[E, T1],
|
||||
t2 IOEither[E, T2],
|
||||
t3 IOEither[E, T3],
|
||||
t4 IOEither[E, T4],
|
||||
t5 IOEither[E, T5],
|
||||
t6 IOEither[E, T6],
|
||||
t7 IOEither[E, T7],
|
||||
t8 IOEither[E, T8],
|
||||
t9 IOEither[E, T9],
|
||||
t10 IOEither[E, T10],
|
||||
t1 IOEither[E, T1],
|
||||
t2 IOEither[E, T2],
|
||||
t3 IOEither[E, T3],
|
||||
t4 IOEither[E, T4],
|
||||
t5 IOEither[E, T5],
|
||||
t6 IOEither[E, T6],
|
||||
t7 IOEither[E, T7],
|
||||
t8 IOEither[E, T8],
|
||||
t9 IOEither[E, T9],
|
||||
t10 IOEither[E, T10],
|
||||
) IOEither[E, T.Tuple10[T1, T2, T3, T4, T5, T6, T7, T8, T9, T10]] {
|
||||
return G.SequenceT10[
|
||||
IOEither[E, T.Tuple10[T1, T2, T3, T4, T5, T6, T7, T8, T9, T10]],
|
||||
IOEither[E, T1],
|
||||
IOEither[E, T2],
|
||||
IOEither[E, T3],
|
||||
IOEither[E, T4],
|
||||
IOEither[E, T5],
|
||||
IOEither[E, T6],
|
||||
IOEither[E, T7],
|
||||
IOEither[E, T8],
|
||||
IOEither[E, T9],
|
||||
IOEither[E, T10],
|
||||
](t1, t2, t3, t4, t5, t6, t7, t8, t9, t10)
|
||||
return G.SequenceT10[
|
||||
IOEither[E, T.Tuple10[T1, T2, T3, T4, T5, T6, T7, T8, T9, T10]],
|
||||
IOEither[E, T1],
|
||||
IOEither[E, T2],
|
||||
IOEither[E, T3],
|
||||
IOEither[E, T4],
|
||||
IOEither[E, T5],
|
||||
IOEither[E, T6],
|
||||
IOEither[E, T7],
|
||||
IOEither[E, T8],
|
||||
IOEither[E, T9],
|
||||
IOEither[E, T10],
|
||||
](t1, t2, t3, t4, t5, t6, t7, t8, t9, t10)
|
||||
}
|
||||
|
||||
// SequenceTuple10 converts a [T.Tuple10[IOEither[E, T]]] into a [IOEither[E, T.Tuple10[T1, T2, T3, T4, T5, T6, T7, T8, T9, T10]]]
|
||||
func SequenceTuple10[E, T1, T2, T3, T4, T5, T6, T7, T8, T9, T10 any](t T.Tuple10[IOEither[E, T1], IOEither[E, T2], IOEither[E, T3], IOEither[E, T4], IOEither[E, T5], IOEither[E, T6], IOEither[E, T7], IOEither[E, T8], IOEither[E, T9], IOEither[E, T10]]) IOEither[E, T.Tuple10[T1, T2, T3, T4, T5, T6, T7, T8, T9, T10]] {
|
||||
return G.SequenceTuple10[
|
||||
IOEither[E, T.Tuple10[T1, T2, T3, T4, T5, T6, T7, T8, T9, T10]],
|
||||
IOEither[E, T1],
|
||||
IOEither[E, T2],
|
||||
IOEither[E, T3],
|
||||
IOEither[E, T4],
|
||||
IOEither[E, T5],
|
||||
IOEither[E, T6],
|
||||
IOEither[E, T7],
|
||||
IOEither[E, T8],
|
||||
IOEither[E, T9],
|
||||
IOEither[E, T10],
|
||||
](t)
|
||||
return G.SequenceTuple10[
|
||||
IOEither[E, T.Tuple10[T1, T2, T3, T4, T5, T6, T7, T8, T9, T10]],
|
||||
IOEither[E, T1],
|
||||
IOEither[E, T2],
|
||||
IOEither[E, T3],
|
||||
IOEither[E, T4],
|
||||
IOEither[E, T5],
|
||||
IOEither[E, T6],
|
||||
IOEither[E, T7],
|
||||
IOEither[E, T8],
|
||||
IOEither[E, T9],
|
||||
IOEither[E, T10],
|
||||
](t)
|
||||
}
|
||||
|
||||
// TraverseTuple10 converts a [T.Tuple10[IOEither[E, T]]] into a [IOEither[E, T.Tuple10[T1, T2, T3, T4, T5, T6, T7, T8, T9, T10]]]
|
||||
func TraverseTuple10[F1 ~func(A1) IOEither[E, T1], F2 ~func(A2) IOEither[E, T2], F3 ~func(A3) IOEither[E, T3], F4 ~func(A4) IOEither[E, T4], F5 ~func(A5) IOEither[E, T5], F6 ~func(A6) IOEither[E, T6], F7 ~func(A7) IOEither[E, T7], F8 ~func(A8) IOEither[E, T8], F9 ~func(A9) IOEither[E, T9], F10 ~func(A10) IOEither[E, T10], E, A1, A2, A3, A4, A5, A6, A7, A8, A9, A10, T1, T2, T3, T4, T5, T6, T7, T8, T9, 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]) IOEither[E, T.Tuple10[T1, T2, T3, T4, T5, T6, T7, T8, T9, T10]] {
|
||||
return G.TraverseTuple10[IOEither[E, T.Tuple10[T1, T2, T3, T4, T5, T6, T7, T8, T9, T10]]](f1, f2, f3, f4, f5, f6, f7, f8, f9, f10)
|
||||
return G.TraverseTuple10[IOEither[E, T.Tuple10[T1, T2, T3, T4, T5, T6, T7, T8, T9, T10]]](f1, f2, f3, f4, f5, f6, f7, f8, f9, f10)
|
||||
}
|
||||
|
@@ -17,7 +17,7 @@ package generic
|
||||
|
||||
import (
|
||||
ET "github.com/IBM/fp-go/either"
|
||||
G "github.com/IBM/fp-go/internal/file"
|
||||
G "github.com/IBM/fp-go/internal/bracket"
|
||||
I "github.com/IBM/fp-go/io/generic"
|
||||
)
|
||||
|
||||
|
File diff suppressed because it is too large
Load Diff
@@ -19,7 +19,6 @@ import (
|
||||
"time"
|
||||
|
||||
ET "github.com/IBM/fp-go/either"
|
||||
"github.com/IBM/fp-go/errors"
|
||||
F "github.com/IBM/fp-go/function"
|
||||
C "github.com/IBM/fp-go/internal/chain"
|
||||
"github.com/IBM/fp-go/internal/eithert"
|
||||
@@ -184,12 +183,15 @@ func Flatten[GA ~func() ET.Either[E, A], GAA ~func() ET.Either[E, GA], E, A any]
|
||||
|
||||
func TryCatch[GA ~func() ET.Either[E, A], E, A any](f func() (A, error), onThrow func(error) E) GA {
|
||||
return MakeIO(func() ET.Either[E, A] {
|
||||
return ET.TryCatch(f, onThrow)
|
||||
a, err := f()
|
||||
return ET.TryCatch(a, err, onThrow)
|
||||
})
|
||||
}
|
||||
|
||||
func TryCatchError[GA ~func() ET.Either[error, A], A any](f func() (A, error)) GA {
|
||||
return TryCatch[GA](f, errors.IdentityError)
|
||||
return MakeIO(func() ET.Either[error, A] {
|
||||
return ET.TryCatchError(f())
|
||||
})
|
||||
}
|
||||
|
||||
// Memoize computes the value of the provided IO monad lazily but exactly once
|
||||
|
28
ioeither/generic/sync.go
Normal file
28
ioeither/generic/sync.go
Normal file
@@ -0,0 +1,28 @@
|
||||
// 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
|
||||
|
||||
import (
|
||||
"context"
|
||||
|
||||
ET "github.com/IBM/fp-go/either"
|
||||
G "github.com/IBM/fp-go/io/generic"
|
||||
)
|
||||
|
||||
// WithLock executes the provided IO operation in the scope of a lock
|
||||
func WithLock[GA ~func() ET.Either[E, A], E, A any](lock func() context.CancelFunc) func(fa GA) GA {
|
||||
return G.WithLock[GA](lock)
|
||||
}
|
28
ioeither/sync.go
Normal file
28
ioeither/sync.go
Normal file
@@ -0,0 +1,28 @@
|
||||
// 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 ioeither
|
||||
|
||||
import (
|
||||
"context"
|
||||
|
||||
IO "github.com/IBM/fp-go/io"
|
||||
G "github.com/IBM/fp-go/ioeither/generic"
|
||||
)
|
||||
|
||||
// WithLock executes the provided IO operation in the scope of a lock
|
||||
func WithLock[E, A any](lock IO.IO[context.CancelFunc]) func(fa IOEither[E, A]) IOEither[E, A] {
|
||||
return G.WithLock[IOEither[E, A]](lock)
|
||||
}
|
31
iooption/bracket.go
Normal file
31
iooption/bracket.go
Normal file
@@ -0,0 +1,31 @@
|
||||
// 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 iooption
|
||||
|
||||
import (
|
||||
G "github.com/IBM/fp-go/iooption/generic"
|
||||
O "github.com/IBM/fp-go/option"
|
||||
)
|
||||
|
||||
// Bracket makes sure that a resource is cleaned up in the event of an error. The release action is called regardless of
|
||||
// whether the body action returns and error or not.
|
||||
func Bracket[E, A, B, ANY any](
|
||||
acquire IOOption[A],
|
||||
use func(A) IOOption[B],
|
||||
release func(A, O.Option[B]) IOOption[ANY],
|
||||
) IOOption[B] {
|
||||
return G.Bracket(acquire, use, release)
|
||||
}
|
475
iooption/gen.go
475
iooption/gen.go
@@ -1,375 +1,376 @@
|
||||
// Code generated by go generate; DO NOT EDIT.
|
||||
// This file was generated by robots at
|
||||
// 2023-09-12 13:44:32.1514823 +0200 CEST m=+0.098931001
|
||||
// 2023-10-23 08:31:01.9227118 +0200 CEST m=+0.009977901
|
||||
|
||||
package iooption
|
||||
|
||||
|
||||
import (
|
||||
G "github.com/IBM/fp-go/iooption/generic"
|
||||
G "github.com/IBM/fp-go/iooption/generic"
|
||||
T "github.com/IBM/fp-go/tuple"
|
||||
)
|
||||
|
||||
// SequenceT1 converts 1 [IOOption[T]] into a [IOOption[T.Tuple1[T1]]]
|
||||
func SequenceT1[T1 any](
|
||||
t1 IOOption[T1],
|
||||
t1 IOOption[T1],
|
||||
) IOOption[T.Tuple1[T1]] {
|
||||
return G.SequenceT1[
|
||||
IOOption[T.Tuple1[T1]],
|
||||
IOOption[T1],
|
||||
](t1)
|
||||
return G.SequenceT1[
|
||||
IOOption[T.Tuple1[T1]],
|
||||
IOOption[T1],
|
||||
](t1)
|
||||
}
|
||||
|
||||
// SequenceTuple1 converts a [T.Tuple1[IOOption[T]]] into a [IOOption[T.Tuple1[T1]]]
|
||||
func SequenceTuple1[T1 any](t T.Tuple1[IOOption[T1]]) IOOption[T.Tuple1[T1]] {
|
||||
return G.SequenceTuple1[
|
||||
IOOption[T.Tuple1[T1]],
|
||||
IOOption[T1],
|
||||
](t)
|
||||
return G.SequenceTuple1[
|
||||
IOOption[T.Tuple1[T1]],
|
||||
IOOption[T1],
|
||||
](t)
|
||||
}
|
||||
|
||||
// TraverseTuple1 converts a [T.Tuple1[IOOption[T]]] into a [IOOption[T.Tuple1[T1]]]
|
||||
func TraverseTuple1[F1 ~func(A1) IOOption[T1], A1, T1 any](f1 F1) func(T.Tuple1[A1]) IOOption[T.Tuple1[T1]] {
|
||||
return G.TraverseTuple1[IOOption[T.Tuple1[T1]]](f1)
|
||||
return G.TraverseTuple1[IOOption[T.Tuple1[T1]]](f1)
|
||||
}
|
||||
|
||||
// SequenceT2 converts 2 [IOOption[T]] into a [IOOption[T.Tuple2[T1, T2]]]
|
||||
func SequenceT2[T1, T2 any](
|
||||
t1 IOOption[T1],
|
||||
t2 IOOption[T2],
|
||||
t1 IOOption[T1],
|
||||
t2 IOOption[T2],
|
||||
) IOOption[T.Tuple2[T1, T2]] {
|
||||
return G.SequenceT2[
|
||||
IOOption[T.Tuple2[T1, T2]],
|
||||
IOOption[T1],
|
||||
IOOption[T2],
|
||||
](t1, t2)
|
||||
return G.SequenceT2[
|
||||
IOOption[T.Tuple2[T1, T2]],
|
||||
IOOption[T1],
|
||||
IOOption[T2],
|
||||
](t1, t2)
|
||||
}
|
||||
|
||||
// SequenceTuple2 converts a [T.Tuple2[IOOption[T]]] into a [IOOption[T.Tuple2[T1, T2]]]
|
||||
func SequenceTuple2[T1, T2 any](t T.Tuple2[IOOption[T1], IOOption[T2]]) IOOption[T.Tuple2[T1, T2]] {
|
||||
return G.SequenceTuple2[
|
||||
IOOption[T.Tuple2[T1, T2]],
|
||||
IOOption[T1],
|
||||
IOOption[T2],
|
||||
](t)
|
||||
return G.SequenceTuple2[
|
||||
IOOption[T.Tuple2[T1, T2]],
|
||||
IOOption[T1],
|
||||
IOOption[T2],
|
||||
](t)
|
||||
}
|
||||
|
||||
// TraverseTuple2 converts a [T.Tuple2[IOOption[T]]] into a [IOOption[T.Tuple2[T1, T2]]]
|
||||
func TraverseTuple2[F1 ~func(A1) IOOption[T1], F2 ~func(A2) IOOption[T2], A1, A2, T1, T2 any](f1 F1, f2 F2) func(T.Tuple2[A1, A2]) IOOption[T.Tuple2[T1, T2]] {
|
||||
return G.TraverseTuple2[IOOption[T.Tuple2[T1, T2]]](f1, f2)
|
||||
return G.TraverseTuple2[IOOption[T.Tuple2[T1, T2]]](f1, f2)
|
||||
}
|
||||
|
||||
// SequenceT3 converts 3 [IOOption[T]] into a [IOOption[T.Tuple3[T1, T2, T3]]]
|
||||
func SequenceT3[T1, T2, T3 any](
|
||||
t1 IOOption[T1],
|
||||
t2 IOOption[T2],
|
||||
t3 IOOption[T3],
|
||||
t1 IOOption[T1],
|
||||
t2 IOOption[T2],
|
||||
t3 IOOption[T3],
|
||||
) IOOption[T.Tuple3[T1, T2, T3]] {
|
||||
return G.SequenceT3[
|
||||
IOOption[T.Tuple3[T1, T2, T3]],
|
||||
IOOption[T1],
|
||||
IOOption[T2],
|
||||
IOOption[T3],
|
||||
](t1, t2, t3)
|
||||
return G.SequenceT3[
|
||||
IOOption[T.Tuple3[T1, T2, T3]],
|
||||
IOOption[T1],
|
||||
IOOption[T2],
|
||||
IOOption[T3],
|
||||
](t1, t2, t3)
|
||||
}
|
||||
|
||||
// SequenceTuple3 converts a [T.Tuple3[IOOption[T]]] into a [IOOption[T.Tuple3[T1, T2, T3]]]
|
||||
func SequenceTuple3[T1, T2, T3 any](t T.Tuple3[IOOption[T1], IOOption[T2], IOOption[T3]]) IOOption[T.Tuple3[T1, T2, T3]] {
|
||||
return G.SequenceTuple3[
|
||||
IOOption[T.Tuple3[T1, T2, T3]],
|
||||
IOOption[T1],
|
||||
IOOption[T2],
|
||||
IOOption[T3],
|
||||
](t)
|
||||
return G.SequenceTuple3[
|
||||
IOOption[T.Tuple3[T1, T2, T3]],
|
||||
IOOption[T1],
|
||||
IOOption[T2],
|
||||
IOOption[T3],
|
||||
](t)
|
||||
}
|
||||
|
||||
// TraverseTuple3 converts a [T.Tuple3[IOOption[T]]] into a [IOOption[T.Tuple3[T1, T2, T3]]]
|
||||
func TraverseTuple3[F1 ~func(A1) IOOption[T1], F2 ~func(A2) IOOption[T2], F3 ~func(A3) IOOption[T3], A1, A2, A3, T1, T2, T3 any](f1 F1, f2 F2, f3 F3) func(T.Tuple3[A1, A2, A3]) IOOption[T.Tuple3[T1, T2, T3]] {
|
||||
return G.TraverseTuple3[IOOption[T.Tuple3[T1, T2, T3]]](f1, f2, f3)
|
||||
return G.TraverseTuple3[IOOption[T.Tuple3[T1, T2, T3]]](f1, f2, f3)
|
||||
}
|
||||
|
||||
// SequenceT4 converts 4 [IOOption[T]] into a [IOOption[T.Tuple4[T1, T2, T3, T4]]]
|
||||
func SequenceT4[T1, T2, T3, T4 any](
|
||||
t1 IOOption[T1],
|
||||
t2 IOOption[T2],
|
||||
t3 IOOption[T3],
|
||||
t4 IOOption[T4],
|
||||
t1 IOOption[T1],
|
||||
t2 IOOption[T2],
|
||||
t3 IOOption[T3],
|
||||
t4 IOOption[T4],
|
||||
) IOOption[T.Tuple4[T1, T2, T3, T4]] {
|
||||
return G.SequenceT4[
|
||||
IOOption[T.Tuple4[T1, T2, T3, T4]],
|
||||
IOOption[T1],
|
||||
IOOption[T2],
|
||||
IOOption[T3],
|
||||
IOOption[T4],
|
||||
](t1, t2, t3, t4)
|
||||
return G.SequenceT4[
|
||||
IOOption[T.Tuple4[T1, T2, T3, T4]],
|
||||
IOOption[T1],
|
||||
IOOption[T2],
|
||||
IOOption[T3],
|
||||
IOOption[T4],
|
||||
](t1, t2, t3, t4)
|
||||
}
|
||||
|
||||
// SequenceTuple4 converts a [T.Tuple4[IOOption[T]]] into a [IOOption[T.Tuple4[T1, T2, T3, T4]]]
|
||||
func SequenceTuple4[T1, T2, T3, T4 any](t T.Tuple4[IOOption[T1], IOOption[T2], IOOption[T3], IOOption[T4]]) IOOption[T.Tuple4[T1, T2, T3, T4]] {
|
||||
return G.SequenceTuple4[
|
||||
IOOption[T.Tuple4[T1, T2, T3, T4]],
|
||||
IOOption[T1],
|
||||
IOOption[T2],
|
||||
IOOption[T3],
|
||||
IOOption[T4],
|
||||
](t)
|
||||
return G.SequenceTuple4[
|
||||
IOOption[T.Tuple4[T1, T2, T3, T4]],
|
||||
IOOption[T1],
|
||||
IOOption[T2],
|
||||
IOOption[T3],
|
||||
IOOption[T4],
|
||||
](t)
|
||||
}
|
||||
|
||||
// TraverseTuple4 converts a [T.Tuple4[IOOption[T]]] into a [IOOption[T.Tuple4[T1, T2, T3, T4]]]
|
||||
func TraverseTuple4[F1 ~func(A1) IOOption[T1], F2 ~func(A2) IOOption[T2], F3 ~func(A3) IOOption[T3], F4 ~func(A4) IOOption[T4], A1, A2, A3, A4, T1, T2, T3, T4 any](f1 F1, f2 F2, f3 F3, f4 F4) func(T.Tuple4[A1, A2, A3, A4]) IOOption[T.Tuple4[T1, T2, T3, T4]] {
|
||||
return G.TraverseTuple4[IOOption[T.Tuple4[T1, T2, T3, T4]]](f1, f2, f3, f4)
|
||||
return G.TraverseTuple4[IOOption[T.Tuple4[T1, T2, T3, T4]]](f1, f2, f3, f4)
|
||||
}
|
||||
|
||||
// SequenceT5 converts 5 [IOOption[T]] into a [IOOption[T.Tuple5[T1, T2, T3, T4, T5]]]
|
||||
func SequenceT5[T1, T2, T3, T4, T5 any](
|
||||
t1 IOOption[T1],
|
||||
t2 IOOption[T2],
|
||||
t3 IOOption[T3],
|
||||
t4 IOOption[T4],
|
||||
t5 IOOption[T5],
|
||||
t1 IOOption[T1],
|
||||
t2 IOOption[T2],
|
||||
t3 IOOption[T3],
|
||||
t4 IOOption[T4],
|
||||
t5 IOOption[T5],
|
||||
) IOOption[T.Tuple5[T1, T2, T3, T4, T5]] {
|
||||
return G.SequenceT5[
|
||||
IOOption[T.Tuple5[T1, T2, T3, T4, T5]],
|
||||
IOOption[T1],
|
||||
IOOption[T2],
|
||||
IOOption[T3],
|
||||
IOOption[T4],
|
||||
IOOption[T5],
|
||||
](t1, t2, t3, t4, t5)
|
||||
return G.SequenceT5[
|
||||
IOOption[T.Tuple5[T1, T2, T3, T4, T5]],
|
||||
IOOption[T1],
|
||||
IOOption[T2],
|
||||
IOOption[T3],
|
||||
IOOption[T4],
|
||||
IOOption[T5],
|
||||
](t1, t2, t3, t4, t5)
|
||||
}
|
||||
|
||||
// SequenceTuple5 converts a [T.Tuple5[IOOption[T]]] into a [IOOption[T.Tuple5[T1, T2, T3, T4, T5]]]
|
||||
func SequenceTuple5[T1, T2, T3, T4, T5 any](t T.Tuple5[IOOption[T1], IOOption[T2], IOOption[T3], IOOption[T4], IOOption[T5]]) IOOption[T.Tuple5[T1, T2, T3, T4, T5]] {
|
||||
return G.SequenceTuple5[
|
||||
IOOption[T.Tuple5[T1, T2, T3, T4, T5]],
|
||||
IOOption[T1],
|
||||
IOOption[T2],
|
||||
IOOption[T3],
|
||||
IOOption[T4],
|
||||
IOOption[T5],
|
||||
](t)
|
||||
return G.SequenceTuple5[
|
||||
IOOption[T.Tuple5[T1, T2, T3, T4, T5]],
|
||||
IOOption[T1],
|
||||
IOOption[T2],
|
||||
IOOption[T3],
|
||||
IOOption[T4],
|
||||
IOOption[T5],
|
||||
](t)
|
||||
}
|
||||
|
||||
// TraverseTuple5 converts a [T.Tuple5[IOOption[T]]] into a [IOOption[T.Tuple5[T1, T2, T3, T4, T5]]]
|
||||
func TraverseTuple5[F1 ~func(A1) IOOption[T1], F2 ~func(A2) IOOption[T2], F3 ~func(A3) IOOption[T3], F4 ~func(A4) IOOption[T4], F5 ~func(A5) IOOption[T5], A1, A2, A3, A4, A5, T1, T2, T3, T4, T5 any](f1 F1, f2 F2, f3 F3, f4 F4, f5 F5) func(T.Tuple5[A1, A2, A3, A4, A5]) IOOption[T.Tuple5[T1, T2, T3, T4, T5]] {
|
||||
return G.TraverseTuple5[IOOption[T.Tuple5[T1, T2, T3, T4, T5]]](f1, f2, f3, f4, f5)
|
||||
return G.TraverseTuple5[IOOption[T.Tuple5[T1, T2, T3, T4, T5]]](f1, f2, f3, f4, f5)
|
||||
}
|
||||
|
||||
// SequenceT6 converts 6 [IOOption[T]] into a [IOOption[T.Tuple6[T1, T2, T3, T4, T5, T6]]]
|
||||
func SequenceT6[T1, T2, T3, T4, T5, T6 any](
|
||||
t1 IOOption[T1],
|
||||
t2 IOOption[T2],
|
||||
t3 IOOption[T3],
|
||||
t4 IOOption[T4],
|
||||
t5 IOOption[T5],
|
||||
t6 IOOption[T6],
|
||||
t1 IOOption[T1],
|
||||
t2 IOOption[T2],
|
||||
t3 IOOption[T3],
|
||||
t4 IOOption[T4],
|
||||
t5 IOOption[T5],
|
||||
t6 IOOption[T6],
|
||||
) IOOption[T.Tuple6[T1, T2, T3, T4, T5, T6]] {
|
||||
return G.SequenceT6[
|
||||
IOOption[T.Tuple6[T1, T2, T3, T4, T5, T6]],
|
||||
IOOption[T1],
|
||||
IOOption[T2],
|
||||
IOOption[T3],
|
||||
IOOption[T4],
|
||||
IOOption[T5],
|
||||
IOOption[T6],
|
||||
](t1, t2, t3, t4, t5, t6)
|
||||
return G.SequenceT6[
|
||||
IOOption[T.Tuple6[T1, T2, T3, T4, T5, T6]],
|
||||
IOOption[T1],
|
||||
IOOption[T2],
|
||||
IOOption[T3],
|
||||
IOOption[T4],
|
||||
IOOption[T5],
|
||||
IOOption[T6],
|
||||
](t1, t2, t3, t4, t5, t6)
|
||||
}
|
||||
|
||||
// SequenceTuple6 converts a [T.Tuple6[IOOption[T]]] into a [IOOption[T.Tuple6[T1, T2, T3, T4, T5, T6]]]
|
||||
func SequenceTuple6[T1, T2, T3, T4, T5, T6 any](t T.Tuple6[IOOption[T1], IOOption[T2], IOOption[T3], IOOption[T4], IOOption[T5], IOOption[T6]]) IOOption[T.Tuple6[T1, T2, T3, T4, T5, T6]] {
|
||||
return G.SequenceTuple6[
|
||||
IOOption[T.Tuple6[T1, T2, T3, T4, T5, T6]],
|
||||
IOOption[T1],
|
||||
IOOption[T2],
|
||||
IOOption[T3],
|
||||
IOOption[T4],
|
||||
IOOption[T5],
|
||||
IOOption[T6],
|
||||
](t)
|
||||
return G.SequenceTuple6[
|
||||
IOOption[T.Tuple6[T1, T2, T3, T4, T5, T6]],
|
||||
IOOption[T1],
|
||||
IOOption[T2],
|
||||
IOOption[T3],
|
||||
IOOption[T4],
|
||||
IOOption[T5],
|
||||
IOOption[T6],
|
||||
](t)
|
||||
}
|
||||
|
||||
// TraverseTuple6 converts a [T.Tuple6[IOOption[T]]] into a [IOOption[T.Tuple6[T1, T2, T3, T4, T5, T6]]]
|
||||
func TraverseTuple6[F1 ~func(A1) IOOption[T1], F2 ~func(A2) IOOption[T2], F3 ~func(A3) IOOption[T3], F4 ~func(A4) IOOption[T4], F5 ~func(A5) IOOption[T5], F6 ~func(A6) IOOption[T6], A1, A2, A3, A4, A5, A6, T1, T2, T3, T4, T5, T6 any](f1 F1, f2 F2, f3 F3, f4 F4, f5 F5, f6 F6) func(T.Tuple6[A1, A2, A3, A4, A5, A6]) IOOption[T.Tuple6[T1, T2, T3, T4, T5, T6]] {
|
||||
return G.TraverseTuple6[IOOption[T.Tuple6[T1, T2, T3, T4, T5, T6]]](f1, f2, f3, f4, f5, f6)
|
||||
return G.TraverseTuple6[IOOption[T.Tuple6[T1, T2, T3, T4, T5, T6]]](f1, f2, f3, f4, f5, f6)
|
||||
}
|
||||
|
||||
// SequenceT7 converts 7 [IOOption[T]] into a [IOOption[T.Tuple7[T1, T2, T3, T4, T5, T6, T7]]]
|
||||
func SequenceT7[T1, T2, T3, T4, T5, T6, T7 any](
|
||||
t1 IOOption[T1],
|
||||
t2 IOOption[T2],
|
||||
t3 IOOption[T3],
|
||||
t4 IOOption[T4],
|
||||
t5 IOOption[T5],
|
||||
t6 IOOption[T6],
|
||||
t7 IOOption[T7],
|
||||
t1 IOOption[T1],
|
||||
t2 IOOption[T2],
|
||||
t3 IOOption[T3],
|
||||
t4 IOOption[T4],
|
||||
t5 IOOption[T5],
|
||||
t6 IOOption[T6],
|
||||
t7 IOOption[T7],
|
||||
) IOOption[T.Tuple7[T1, T2, T3, T4, T5, T6, T7]] {
|
||||
return G.SequenceT7[
|
||||
IOOption[T.Tuple7[T1, T2, T3, T4, T5, T6, T7]],
|
||||
IOOption[T1],
|
||||
IOOption[T2],
|
||||
IOOption[T3],
|
||||
IOOption[T4],
|
||||
IOOption[T5],
|
||||
IOOption[T6],
|
||||
IOOption[T7],
|
||||
](t1, t2, t3, t4, t5, t6, t7)
|
||||
return G.SequenceT7[
|
||||
IOOption[T.Tuple7[T1, T2, T3, T4, T5, T6, T7]],
|
||||
IOOption[T1],
|
||||
IOOption[T2],
|
||||
IOOption[T3],
|
||||
IOOption[T4],
|
||||
IOOption[T5],
|
||||
IOOption[T6],
|
||||
IOOption[T7],
|
||||
](t1, t2, t3, t4, t5, t6, t7)
|
||||
}
|
||||
|
||||
// SequenceTuple7 converts a [T.Tuple7[IOOption[T]]] into a [IOOption[T.Tuple7[T1, T2, T3, T4, T5, T6, T7]]]
|
||||
func SequenceTuple7[T1, T2, T3, T4, T5, T6, T7 any](t T.Tuple7[IOOption[T1], IOOption[T2], IOOption[T3], IOOption[T4], IOOption[T5], IOOption[T6], IOOption[T7]]) IOOption[T.Tuple7[T1, T2, T3, T4, T5, T6, T7]] {
|
||||
return G.SequenceTuple7[
|
||||
IOOption[T.Tuple7[T1, T2, T3, T4, T5, T6, T7]],
|
||||
IOOption[T1],
|
||||
IOOption[T2],
|
||||
IOOption[T3],
|
||||
IOOption[T4],
|
||||
IOOption[T5],
|
||||
IOOption[T6],
|
||||
IOOption[T7],
|
||||
](t)
|
||||
return G.SequenceTuple7[
|
||||
IOOption[T.Tuple7[T1, T2, T3, T4, T5, T6, T7]],
|
||||
IOOption[T1],
|
||||
IOOption[T2],
|
||||
IOOption[T3],
|
||||
IOOption[T4],
|
||||
IOOption[T5],
|
||||
IOOption[T6],
|
||||
IOOption[T7],
|
||||
](t)
|
||||
}
|
||||
|
||||
// TraverseTuple7 converts a [T.Tuple7[IOOption[T]]] into a [IOOption[T.Tuple7[T1, T2, T3, T4, T5, T6, T7]]]
|
||||
func TraverseTuple7[F1 ~func(A1) IOOption[T1], F2 ~func(A2) IOOption[T2], F3 ~func(A3) IOOption[T3], F4 ~func(A4) IOOption[T4], F5 ~func(A5) IOOption[T5], F6 ~func(A6) IOOption[T6], F7 ~func(A7) IOOption[T7], A1, A2, A3, A4, A5, A6, A7, T1, T2, T3, T4, T5, T6, 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]) IOOption[T.Tuple7[T1, T2, T3, T4, T5, T6, T7]] {
|
||||
return G.TraverseTuple7[IOOption[T.Tuple7[T1, T2, T3, T4, T5, T6, T7]]](f1, f2, f3, f4, f5, f6, f7)
|
||||
return G.TraverseTuple7[IOOption[T.Tuple7[T1, T2, T3, T4, T5, T6, T7]]](f1, f2, f3, f4, f5, f6, f7)
|
||||
}
|
||||
|
||||
// SequenceT8 converts 8 [IOOption[T]] into a [IOOption[T.Tuple8[T1, T2, T3, T4, T5, T6, T7, T8]]]
|
||||
func SequenceT8[T1, T2, T3, T4, T5, T6, T7, T8 any](
|
||||
t1 IOOption[T1],
|
||||
t2 IOOption[T2],
|
||||
t3 IOOption[T3],
|
||||
t4 IOOption[T4],
|
||||
t5 IOOption[T5],
|
||||
t6 IOOption[T6],
|
||||
t7 IOOption[T7],
|
||||
t8 IOOption[T8],
|
||||
t1 IOOption[T1],
|
||||
t2 IOOption[T2],
|
||||
t3 IOOption[T3],
|
||||
t4 IOOption[T4],
|
||||
t5 IOOption[T5],
|
||||
t6 IOOption[T6],
|
||||
t7 IOOption[T7],
|
||||
t8 IOOption[T8],
|
||||
) IOOption[T.Tuple8[T1, T2, T3, T4, T5, T6, T7, T8]] {
|
||||
return G.SequenceT8[
|
||||
IOOption[T.Tuple8[T1, T2, T3, T4, T5, T6, T7, T8]],
|
||||
IOOption[T1],
|
||||
IOOption[T2],
|
||||
IOOption[T3],
|
||||
IOOption[T4],
|
||||
IOOption[T5],
|
||||
IOOption[T6],
|
||||
IOOption[T7],
|
||||
IOOption[T8],
|
||||
](t1, t2, t3, t4, t5, t6, t7, t8)
|
||||
return G.SequenceT8[
|
||||
IOOption[T.Tuple8[T1, T2, T3, T4, T5, T6, T7, T8]],
|
||||
IOOption[T1],
|
||||
IOOption[T2],
|
||||
IOOption[T3],
|
||||
IOOption[T4],
|
||||
IOOption[T5],
|
||||
IOOption[T6],
|
||||
IOOption[T7],
|
||||
IOOption[T8],
|
||||
](t1, t2, t3, t4, t5, t6, t7, t8)
|
||||
}
|
||||
|
||||
// SequenceTuple8 converts a [T.Tuple8[IOOption[T]]] into a [IOOption[T.Tuple8[T1, T2, T3, T4, T5, T6, T7, T8]]]
|
||||
func SequenceTuple8[T1, T2, T3, T4, T5, T6, T7, T8 any](t T.Tuple8[IOOption[T1], IOOption[T2], IOOption[T3], IOOption[T4], IOOption[T5], IOOption[T6], IOOption[T7], IOOption[T8]]) IOOption[T.Tuple8[T1, T2, T3, T4, T5, T6, T7, T8]] {
|
||||
return G.SequenceTuple8[
|
||||
IOOption[T.Tuple8[T1, T2, T3, T4, T5, T6, T7, T8]],
|
||||
IOOption[T1],
|
||||
IOOption[T2],
|
||||
IOOption[T3],
|
||||
IOOption[T4],
|
||||
IOOption[T5],
|
||||
IOOption[T6],
|
||||
IOOption[T7],
|
||||
IOOption[T8],
|
||||
](t)
|
||||
return G.SequenceTuple8[
|
||||
IOOption[T.Tuple8[T1, T2, T3, T4, T5, T6, T7, T8]],
|
||||
IOOption[T1],
|
||||
IOOption[T2],
|
||||
IOOption[T3],
|
||||
IOOption[T4],
|
||||
IOOption[T5],
|
||||
IOOption[T6],
|
||||
IOOption[T7],
|
||||
IOOption[T8],
|
||||
](t)
|
||||
}
|
||||
|
||||
// TraverseTuple8 converts a [T.Tuple8[IOOption[T]]] into a [IOOption[T.Tuple8[T1, T2, T3, T4, T5, T6, T7, T8]]]
|
||||
func TraverseTuple8[F1 ~func(A1) IOOption[T1], F2 ~func(A2) IOOption[T2], F3 ~func(A3) IOOption[T3], F4 ~func(A4) IOOption[T4], F5 ~func(A5) IOOption[T5], F6 ~func(A6) IOOption[T6], F7 ~func(A7) IOOption[T7], F8 ~func(A8) IOOption[T8], A1, A2, A3, A4, A5, A6, A7, A8, T1, T2, T3, T4, T5, T6, T7, 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]) IOOption[T.Tuple8[T1, T2, T3, T4, T5, T6, T7, T8]] {
|
||||
return G.TraverseTuple8[IOOption[T.Tuple8[T1, T2, T3, T4, T5, T6, T7, T8]]](f1, f2, f3, f4, f5, f6, f7, f8)
|
||||
return G.TraverseTuple8[IOOption[T.Tuple8[T1, T2, T3, T4, T5, T6, T7, T8]]](f1, f2, f3, f4, f5, f6, f7, f8)
|
||||
}
|
||||
|
||||
// SequenceT9 converts 9 [IOOption[T]] into a [IOOption[T.Tuple9[T1, T2, T3, T4, T5, T6, T7, T8, T9]]]
|
||||
func SequenceT9[T1, T2, T3, T4, T5, T6, T7, T8, T9 any](
|
||||
t1 IOOption[T1],
|
||||
t2 IOOption[T2],
|
||||
t3 IOOption[T3],
|
||||
t4 IOOption[T4],
|
||||
t5 IOOption[T5],
|
||||
t6 IOOption[T6],
|
||||
t7 IOOption[T7],
|
||||
t8 IOOption[T8],
|
||||
t9 IOOption[T9],
|
||||
t1 IOOption[T1],
|
||||
t2 IOOption[T2],
|
||||
t3 IOOption[T3],
|
||||
t4 IOOption[T4],
|
||||
t5 IOOption[T5],
|
||||
t6 IOOption[T6],
|
||||
t7 IOOption[T7],
|
||||
t8 IOOption[T8],
|
||||
t9 IOOption[T9],
|
||||
) IOOption[T.Tuple9[T1, T2, T3, T4, T5, T6, T7, T8, T9]] {
|
||||
return G.SequenceT9[
|
||||
IOOption[T.Tuple9[T1, T2, T3, T4, T5, T6, T7, T8, T9]],
|
||||
IOOption[T1],
|
||||
IOOption[T2],
|
||||
IOOption[T3],
|
||||
IOOption[T4],
|
||||
IOOption[T5],
|
||||
IOOption[T6],
|
||||
IOOption[T7],
|
||||
IOOption[T8],
|
||||
IOOption[T9],
|
||||
](t1, t2, t3, t4, t5, t6, t7, t8, t9)
|
||||
return G.SequenceT9[
|
||||
IOOption[T.Tuple9[T1, T2, T3, T4, T5, T6, T7, T8, T9]],
|
||||
IOOption[T1],
|
||||
IOOption[T2],
|
||||
IOOption[T3],
|
||||
IOOption[T4],
|
||||
IOOption[T5],
|
||||
IOOption[T6],
|
||||
IOOption[T7],
|
||||
IOOption[T8],
|
||||
IOOption[T9],
|
||||
](t1, t2, t3, t4, t5, t6, t7, t8, t9)
|
||||
}
|
||||
|
||||
// SequenceTuple9 converts a [T.Tuple9[IOOption[T]]] into a [IOOption[T.Tuple9[T1, T2, T3, T4, T5, T6, T7, T8, T9]]]
|
||||
func SequenceTuple9[T1, T2, T3, T4, T5, T6, T7, T8, T9 any](t T.Tuple9[IOOption[T1], IOOption[T2], IOOption[T3], IOOption[T4], IOOption[T5], IOOption[T6], IOOption[T7], IOOption[T8], IOOption[T9]]) IOOption[T.Tuple9[T1, T2, T3, T4, T5, T6, T7, T8, T9]] {
|
||||
return G.SequenceTuple9[
|
||||
IOOption[T.Tuple9[T1, T2, T3, T4, T5, T6, T7, T8, T9]],
|
||||
IOOption[T1],
|
||||
IOOption[T2],
|
||||
IOOption[T3],
|
||||
IOOption[T4],
|
||||
IOOption[T5],
|
||||
IOOption[T6],
|
||||
IOOption[T7],
|
||||
IOOption[T8],
|
||||
IOOption[T9],
|
||||
](t)
|
||||
return G.SequenceTuple9[
|
||||
IOOption[T.Tuple9[T1, T2, T3, T4, T5, T6, T7, T8, T9]],
|
||||
IOOption[T1],
|
||||
IOOption[T2],
|
||||
IOOption[T3],
|
||||
IOOption[T4],
|
||||
IOOption[T5],
|
||||
IOOption[T6],
|
||||
IOOption[T7],
|
||||
IOOption[T8],
|
||||
IOOption[T9],
|
||||
](t)
|
||||
}
|
||||
|
||||
// TraverseTuple9 converts a [T.Tuple9[IOOption[T]]] into a [IOOption[T.Tuple9[T1, T2, T3, T4, T5, T6, T7, T8, T9]]]
|
||||
func TraverseTuple9[F1 ~func(A1) IOOption[T1], F2 ~func(A2) IOOption[T2], F3 ~func(A3) IOOption[T3], F4 ~func(A4) IOOption[T4], F5 ~func(A5) IOOption[T5], F6 ~func(A6) IOOption[T6], F7 ~func(A7) IOOption[T7], F8 ~func(A8) IOOption[T8], F9 ~func(A9) IOOption[T9], A1, A2, A3, A4, A5, A6, A7, A8, A9, T1, T2, T3, T4, T5, T6, T7, T8, 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]) IOOption[T.Tuple9[T1, T2, T3, T4, T5, T6, T7, T8, T9]] {
|
||||
return G.TraverseTuple9[IOOption[T.Tuple9[T1, T2, T3, T4, T5, T6, T7, T8, T9]]](f1, f2, f3, f4, f5, f6, f7, f8, f9)
|
||||
return G.TraverseTuple9[IOOption[T.Tuple9[T1, T2, T3, T4, T5, T6, T7, T8, T9]]](f1, f2, f3, f4, f5, f6, f7, f8, f9)
|
||||
}
|
||||
|
||||
// SequenceT10 converts 10 [IOOption[T]] into a [IOOption[T.Tuple10[T1, T2, T3, T4, T5, T6, T7, T8, T9, T10]]]
|
||||
func SequenceT10[T1, T2, T3, T4, T5, T6, T7, T8, T9, T10 any](
|
||||
t1 IOOption[T1],
|
||||
t2 IOOption[T2],
|
||||
t3 IOOption[T3],
|
||||
t4 IOOption[T4],
|
||||
t5 IOOption[T5],
|
||||
t6 IOOption[T6],
|
||||
t7 IOOption[T7],
|
||||
t8 IOOption[T8],
|
||||
t9 IOOption[T9],
|
||||
t10 IOOption[T10],
|
||||
t1 IOOption[T1],
|
||||
t2 IOOption[T2],
|
||||
t3 IOOption[T3],
|
||||
t4 IOOption[T4],
|
||||
t5 IOOption[T5],
|
||||
t6 IOOption[T6],
|
||||
t7 IOOption[T7],
|
||||
t8 IOOption[T8],
|
||||
t9 IOOption[T9],
|
||||
t10 IOOption[T10],
|
||||
) IOOption[T.Tuple10[T1, T2, T3, T4, T5, T6, T7, T8, T9, T10]] {
|
||||
return G.SequenceT10[
|
||||
IOOption[T.Tuple10[T1, T2, T3, T4, T5, T6, T7, T8, T9, T10]],
|
||||
IOOption[T1],
|
||||
IOOption[T2],
|
||||
IOOption[T3],
|
||||
IOOption[T4],
|
||||
IOOption[T5],
|
||||
IOOption[T6],
|
||||
IOOption[T7],
|
||||
IOOption[T8],
|
||||
IOOption[T9],
|
||||
IOOption[T10],
|
||||
](t1, t2, t3, t4, t5, t6, t7, t8, t9, t10)
|
||||
return G.SequenceT10[
|
||||
IOOption[T.Tuple10[T1, T2, T3, T4, T5, T6, T7, T8, T9, T10]],
|
||||
IOOption[T1],
|
||||
IOOption[T2],
|
||||
IOOption[T3],
|
||||
IOOption[T4],
|
||||
IOOption[T5],
|
||||
IOOption[T6],
|
||||
IOOption[T7],
|
||||
IOOption[T8],
|
||||
IOOption[T9],
|
||||
IOOption[T10],
|
||||
](t1, t2, t3, t4, t5, t6, t7, t8, t9, t10)
|
||||
}
|
||||
|
||||
// SequenceTuple10 converts a [T.Tuple10[IOOption[T]]] into a [IOOption[T.Tuple10[T1, T2, T3, T4, T5, T6, T7, T8, T9, T10]]]
|
||||
func SequenceTuple10[T1, T2, T3, T4, T5, T6, T7, T8, T9, T10 any](t T.Tuple10[IOOption[T1], IOOption[T2], IOOption[T3], IOOption[T4], IOOption[T5], IOOption[T6], IOOption[T7], IOOption[T8], IOOption[T9], IOOption[T10]]) IOOption[T.Tuple10[T1, T2, T3, T4, T5, T6, T7, T8, T9, T10]] {
|
||||
return G.SequenceTuple10[
|
||||
IOOption[T.Tuple10[T1, T2, T3, T4, T5, T6, T7, T8, T9, T10]],
|
||||
IOOption[T1],
|
||||
IOOption[T2],
|
||||
IOOption[T3],
|
||||
IOOption[T4],
|
||||
IOOption[T5],
|
||||
IOOption[T6],
|
||||
IOOption[T7],
|
||||
IOOption[T8],
|
||||
IOOption[T9],
|
||||
IOOption[T10],
|
||||
](t)
|
||||
return G.SequenceTuple10[
|
||||
IOOption[T.Tuple10[T1, T2, T3, T4, T5, T6, T7, T8, T9, T10]],
|
||||
IOOption[T1],
|
||||
IOOption[T2],
|
||||
IOOption[T3],
|
||||
IOOption[T4],
|
||||
IOOption[T5],
|
||||
IOOption[T6],
|
||||
IOOption[T7],
|
||||
IOOption[T8],
|
||||
IOOption[T9],
|
||||
IOOption[T10],
|
||||
](t)
|
||||
}
|
||||
|
||||
// TraverseTuple10 converts a [T.Tuple10[IOOption[T]]] into a [IOOption[T.Tuple10[T1, T2, T3, T4, T5, T6, T7, T8, T9, T10]]]
|
||||
func TraverseTuple10[F1 ~func(A1) IOOption[T1], F2 ~func(A2) IOOption[T2], F3 ~func(A3) IOOption[T3], F4 ~func(A4) IOOption[T4], F5 ~func(A5) IOOption[T5], F6 ~func(A6) IOOption[T6], F7 ~func(A7) IOOption[T7], F8 ~func(A8) IOOption[T8], F9 ~func(A9) IOOption[T9], F10 ~func(A10) IOOption[T10], A1, A2, A3, A4, A5, A6, A7, A8, A9, A10, T1, T2, T3, T4, T5, T6, T7, T8, T9, 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]) IOOption[T.Tuple10[T1, T2, T3, T4, T5, T6, T7, T8, T9, T10]] {
|
||||
return G.TraverseTuple10[IOOption[T.Tuple10[T1, T2, T3, T4, T5, T6, T7, T8, T9, T10]]](f1, f2, f3, f4, f5, f6, f7, f8, f9, f10)
|
||||
return G.TraverseTuple10[IOOption[T.Tuple10[T1, T2, T3, T4, T5, T6, T7, T8, T9, T10]]](f1, f2, f3, f4, f5, f6, f7, f8, f9, f10)
|
||||
}
|
||||
|
46
iooption/generic/bracket.go
Normal file
46
iooption/generic/bracket.go
Normal file
@@ -0,0 +1,46 @@
|
||||
// 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
|
||||
|
||||
import (
|
||||
G "github.com/IBM/fp-go/internal/bracket"
|
||||
I "github.com/IBM/fp-go/io/generic"
|
||||
O "github.com/IBM/fp-go/option"
|
||||
)
|
||||
|
||||
// Bracket makes sure that a resource is cleaned up in the event of an error. The release action is called regardless of
|
||||
// whether the body action returns and error or not.
|
||||
func Bracket[
|
||||
GA ~func() O.Option[A],
|
||||
GB ~func() O.Option[B],
|
||||
GANY ~func() O.Option[ANY],
|
||||
A, B, ANY any](
|
||||
|
||||
acquire GA,
|
||||
use func(A) GB,
|
||||
release func(A, O.Option[B]) GANY,
|
||||
) GB {
|
||||
return G.Bracket[GA, GB, GANY, O.Option[B], A, B](
|
||||
I.Of[GB, O.Option[B]],
|
||||
MonadChain[GA, GB, A, B],
|
||||
I.MonadChain[GB, GB, O.Option[B], O.Option[B]],
|
||||
MonadChain[GANY, GB, ANY, B],
|
||||
|
||||
acquire,
|
||||
use,
|
||||
release,
|
||||
)
|
||||
}
|
File diff suppressed because it is too large
Load Diff
28
iooption/generic/sync.go
Normal file
28
iooption/generic/sync.go
Normal file
@@ -0,0 +1,28 @@
|
||||
// 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
|
||||
|
||||
import (
|
||||
"context"
|
||||
|
||||
G "github.com/IBM/fp-go/io/generic"
|
||||
O "github.com/IBM/fp-go/option"
|
||||
)
|
||||
|
||||
// WithLock executes the provided IO operation in the scope of a lock
|
||||
func WithLock[GA ~func() O.Option[A], A any](lock func() context.CancelFunc) func(fa GA) GA {
|
||||
return G.WithLock[GA](lock)
|
||||
}
|
28
iooption/sync.go
Normal file
28
iooption/sync.go
Normal file
@@ -0,0 +1,28 @@
|
||||
// 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 iooption
|
||||
|
||||
import (
|
||||
"context"
|
||||
|
||||
IO "github.com/IBM/fp-go/io"
|
||||
G "github.com/IBM/fp-go/iooption/generic"
|
||||
)
|
||||
|
||||
// WithLock executes the provided IO operation in the scope of a lock
|
||||
func WithLock[E, A any](lock IO.IO[context.CancelFunc]) func(fa IOOption[A]) IOOption[A] {
|
||||
return G.WithLock[IOOption[A]](lock)
|
||||
}
|
12
json/json.go
12
json/json.go
@@ -23,16 +23,12 @@ import (
|
||||
|
||||
// Unmarshal parses a JSON data structure from bytes
|
||||
func Unmarshal[A any](data []byte) E.Either[error, A] {
|
||||
return E.TryCatchError(func() (A, error) {
|
||||
var result A
|
||||
err := json.Unmarshal(data, &result)
|
||||
return result, err
|
||||
})
|
||||
var result A
|
||||
err := json.Unmarshal(data, &result)
|
||||
return E.TryCatchError(result, err)
|
||||
}
|
||||
|
||||
// Marshal converts a data structure to json
|
||||
func Marshal[A any](a A) E.Either[error, []byte] {
|
||||
return E.TryCatchError(func() ([]byte, error) {
|
||||
return json.Marshal(a)
|
||||
})
|
||||
return E.TryCatchError(json.Marshal(a))
|
||||
}
|
||||
|
950
option/gen.go
950
option/gen.go
File diff suppressed because it is too large
Load Diff
@@ -1,75 +1,76 @@
|
||||
// Code generated by go generate; DO NOT EDIT.
|
||||
// This file was generated by robots at
|
||||
// 2023-09-12 13:44:36.1655251 +0200 CEST m=+0.010000501
|
||||
// 2023-10-23 08:31:13.0131834 +0200 CEST m=+0.010996501
|
||||
|
||||
package reader
|
||||
|
||||
|
||||
import (
|
||||
G "github.com/IBM/fp-go/reader/generic"
|
||||
G "github.com/IBM/fp-go/reader/generic"
|
||||
)
|
||||
|
||||
// From0 converts a function with 1 parameters returning a [R] into a function with 0 parameters returning a [Reader[C, R]]
|
||||
// The first parameter is considered to be the context [C] of the reader
|
||||
func From0[F ~func(C) R, C, R any](f F) func() Reader[C, R] {
|
||||
return G.From0[Reader[C, R]](f)
|
||||
return G.From0[Reader[C, R]](f)
|
||||
}
|
||||
|
||||
// From1 converts a function with 2 parameters returning a [R] into a function with 1 parameters returning a [Reader[C, R]]
|
||||
// The first parameter is considered to be the context [C] of the reader
|
||||
func From1[F ~func(C, T0) R, T0, C, R any](f F) func(T0) Reader[C, R] {
|
||||
return G.From1[Reader[C, R]](f)
|
||||
return G.From1[Reader[C, R]](f)
|
||||
}
|
||||
|
||||
// From2 converts a function with 3 parameters returning a [R] into a function with 2 parameters returning a [Reader[C, R]]
|
||||
// The first parameter is considered to be the context [C] of the reader
|
||||
func From2[F ~func(C, T0, T1) R, T0, T1, C, R any](f F) func(T0, T1) Reader[C, R] {
|
||||
return G.From2[Reader[C, R]](f)
|
||||
return G.From2[Reader[C, R]](f)
|
||||
}
|
||||
|
||||
// From3 converts a function with 4 parameters returning a [R] into a function with 3 parameters returning a [Reader[C, R]]
|
||||
// The first parameter is considered to be the context [C] of the reader
|
||||
func From3[F ~func(C, T0, T1, T2) R, T0, T1, T2, C, R any](f F) func(T0, T1, T2) Reader[C, R] {
|
||||
return G.From3[Reader[C, R]](f)
|
||||
return G.From3[Reader[C, R]](f)
|
||||
}
|
||||
|
||||
// From4 converts a function with 5 parameters returning a [R] into a function with 4 parameters returning a [Reader[C, R]]
|
||||
// The first parameter is considered to be the context [C] of the reader
|
||||
func From4[F ~func(C, T0, T1, T2, T3) R, T0, T1, T2, T3, C, R any](f F) func(T0, T1, T2, T3) Reader[C, R] {
|
||||
return G.From4[Reader[C, R]](f)
|
||||
return G.From4[Reader[C, R]](f)
|
||||
}
|
||||
|
||||
// From5 converts a function with 6 parameters returning a [R] into a function with 5 parameters returning a [Reader[C, R]]
|
||||
// The first parameter is considered to be the context [C] of the reader
|
||||
func From5[F ~func(C, T0, T1, T2, T3, T4) R, T0, T1, T2, T3, T4, C, R any](f F) func(T0, T1, T2, T3, T4) Reader[C, R] {
|
||||
return G.From5[Reader[C, R]](f)
|
||||
return G.From5[Reader[C, R]](f)
|
||||
}
|
||||
|
||||
// From6 converts a function with 7 parameters returning a [R] into a function with 6 parameters returning a [Reader[C, R]]
|
||||
// The first parameter is considered to be the context [C] of the reader
|
||||
func From6[F ~func(C, T0, T1, T2, T3, T4, T5) R, T0, T1, T2, T3, T4, T5, C, R any](f F) func(T0, T1, T2, T3, T4, T5) Reader[C, R] {
|
||||
return G.From6[Reader[C, R]](f)
|
||||
return G.From6[Reader[C, R]](f)
|
||||
}
|
||||
|
||||
// From7 converts a function with 8 parameters returning a [R] into a function with 7 parameters returning a [Reader[C, R]]
|
||||
// The first parameter is considered to be the context [C] of the reader
|
||||
func From7[F ~func(C, T0, T1, T2, T3, T4, T5, T6) R, T0, T1, T2, T3, T4, T5, T6, C, R any](f F) func(T0, T1, T2, T3, T4, T5, T6) Reader[C, R] {
|
||||
return G.From7[Reader[C, R]](f)
|
||||
return G.From7[Reader[C, R]](f)
|
||||
}
|
||||
|
||||
// From8 converts a function with 9 parameters returning a [R] into a function with 8 parameters returning a [Reader[C, R]]
|
||||
// The first parameter is considered to be the context [C] of the reader
|
||||
func From8[F ~func(C, T0, T1, T2, T3, T4, T5, T6, T7) R, T0, T1, T2, T3, T4, T5, T6, T7, C, R any](f F) func(T0, T1, T2, T3, T4, T5, T6, T7) Reader[C, R] {
|
||||
return G.From8[Reader[C, R]](f)
|
||||
return G.From8[Reader[C, R]](f)
|
||||
}
|
||||
|
||||
// From9 converts a function with 10 parameters returning a [R] into a function with 9 parameters returning a [Reader[C, R]]
|
||||
// The first parameter is considered to be the context [C] of the reader
|
||||
func From9[F ~func(C, T0, T1, T2, T3, T4, T5, T6, T7, T8) R, T0, T1, T2, T3, T4, T5, T6, T7, T8, C, R any](f F) func(T0, T1, T2, T3, T4, T5, T6, T7, T8) Reader[C, R] {
|
||||
return G.From9[Reader[C, R]](f)
|
||||
return G.From9[Reader[C, R]](f)
|
||||
}
|
||||
|
||||
// From10 converts a function with 11 parameters returning a [R] into a function with 10 parameters returning a [Reader[C, R]]
|
||||
// The first parameter is considered to be the context [C] of the reader
|
||||
func From10[F ~func(C, T0, T1, T2, T3, T4, T5, T6, T7, T8, T9) R, T0, T1, T2, T3, T4, T5, T6, T7, T8, T9, C, R any](f F) func(T0, T1, T2, T3, T4, T5, T6, T7, T8, T9) Reader[C, R] {
|
||||
return G.From10[Reader[C, R]](f)
|
||||
return G.From10[Reader[C, R]](f)
|
||||
}
|
||||
|
@@ -1,114 +1,115 @@
|
||||
// Code generated by go generate; DO NOT EDIT.
|
||||
// This file was generated by robots at
|
||||
// 2023-09-12 13:44:36.166526 +0200 CEST m=+0.011001401
|
||||
// 2023-10-23 08:31:13.0131834 +0200 CEST m=+0.010996501
|
||||
package generic
|
||||
|
||||
|
||||
// From0 converts a function with 1 parameters returning a [R] into a function with 0 parameters returning a [GRA]
|
||||
// The first parameter is considered to be the context [C].
|
||||
func From0[GRA ~func(C) R, F ~func(C) R, C, R any](f F) func() GRA {
|
||||
return func() GRA {
|
||||
return MakeReader[GRA](func(r C) R {
|
||||
return f(r)
|
||||
})
|
||||
}
|
||||
return func() GRA {
|
||||
return MakeReader[GRA](func(r C) R {
|
||||
return f(r)
|
||||
})
|
||||
}
|
||||
}
|
||||
|
||||
// From1 converts a function with 2 parameters returning a [R] into a function with 1 parameters returning a [GRA]
|
||||
// The first parameter is considered to be the context [C].
|
||||
func From1[GRA ~func(C) R, F ~func(C, T0) R, T0, C, R any](f F) func(T0) GRA {
|
||||
return func(t0 T0) GRA {
|
||||
return MakeReader[GRA](func(r C) R {
|
||||
return f(r, t0)
|
||||
})
|
||||
}
|
||||
return func(t0 T0) GRA {
|
||||
return MakeReader[GRA](func(r C) R {
|
||||
return f(r, t0)
|
||||
})
|
||||
}
|
||||
}
|
||||
|
||||
// From2 converts a function with 3 parameters returning a [R] into a function with 2 parameters returning a [GRA]
|
||||
// The first parameter is considered to be the context [C].
|
||||
func From2[GRA ~func(C) R, F ~func(C, T0, T1) R, T0, T1, C, R any](f F) func(T0, T1) GRA {
|
||||
return func(t0 T0, t1 T1) GRA {
|
||||
return MakeReader[GRA](func(r C) R {
|
||||
return f(r, t0, t1)
|
||||
})
|
||||
}
|
||||
return func(t0 T0, t1 T1) GRA {
|
||||
return MakeReader[GRA](func(r C) R {
|
||||
return f(r, t0, t1)
|
||||
})
|
||||
}
|
||||
}
|
||||
|
||||
// From3 converts a function with 4 parameters returning a [R] into a function with 3 parameters returning a [GRA]
|
||||
// The first parameter is considered to be the context [C].
|
||||
func From3[GRA ~func(C) R, F ~func(C, T0, T1, T2) R, T0, T1, T2, C, R any](f F) func(T0, T1, T2) GRA {
|
||||
return func(t0 T0, t1 T1, t2 T2) GRA {
|
||||
return MakeReader[GRA](func(r C) R {
|
||||
return f(r, t0, t1, t2)
|
||||
})
|
||||
}
|
||||
return func(t0 T0, t1 T1, t2 T2) GRA {
|
||||
return MakeReader[GRA](func(r C) R {
|
||||
return f(r, t0, t1, t2)
|
||||
})
|
||||
}
|
||||
}
|
||||
|
||||
// From4 converts a function with 5 parameters returning a [R] into a function with 4 parameters returning a [GRA]
|
||||
// The first parameter is considered to be the context [C].
|
||||
func From4[GRA ~func(C) R, F ~func(C, T0, T1, T2, T3) R, T0, T1, T2, T3, C, R any](f F) func(T0, T1, T2, T3) GRA {
|
||||
return func(t0 T0, t1 T1, t2 T2, t3 T3) GRA {
|
||||
return MakeReader[GRA](func(r C) R {
|
||||
return f(r, t0, t1, t2, t3)
|
||||
})
|
||||
}
|
||||
return func(t0 T0, t1 T1, t2 T2, t3 T3) GRA {
|
||||
return MakeReader[GRA](func(r C) R {
|
||||
return f(r, t0, t1, t2, t3)
|
||||
})
|
||||
}
|
||||
}
|
||||
|
||||
// From5 converts a function with 6 parameters returning a [R] into a function with 5 parameters returning a [GRA]
|
||||
// The first parameter is considered to be the context [C].
|
||||
func From5[GRA ~func(C) R, F ~func(C, T0, T1, T2, T3, T4) R, T0, T1, T2, T3, T4, C, R any](f F) func(T0, T1, T2, T3, T4) GRA {
|
||||
return func(t0 T0, t1 T1, t2 T2, t3 T3, t4 T4) GRA {
|
||||
return MakeReader[GRA](func(r C) R {
|
||||
return f(r, t0, t1, t2, t3, t4)
|
||||
})
|
||||
}
|
||||
return func(t0 T0, t1 T1, t2 T2, t3 T3, t4 T4) GRA {
|
||||
return MakeReader[GRA](func(r C) R {
|
||||
return f(r, t0, t1, t2, t3, t4)
|
||||
})
|
||||
}
|
||||
}
|
||||
|
||||
// From6 converts a function with 7 parameters returning a [R] into a function with 6 parameters returning a [GRA]
|
||||
// The first parameter is considered to be the context [C].
|
||||
func From6[GRA ~func(C) R, F ~func(C, T0, T1, T2, T3, T4, T5) R, T0, T1, T2, T3, T4, T5, C, R any](f F) func(T0, T1, T2, T3, T4, T5) GRA {
|
||||
return func(t0 T0, t1 T1, t2 T2, t3 T3, t4 T4, t5 T5) GRA {
|
||||
return MakeReader[GRA](func(r C) R {
|
||||
return f(r, t0, t1, t2, t3, t4, t5)
|
||||
})
|
||||
}
|
||||
return func(t0 T0, t1 T1, t2 T2, t3 T3, t4 T4, t5 T5) GRA {
|
||||
return MakeReader[GRA](func(r C) R {
|
||||
return f(r, t0, t1, t2, t3, t4, t5)
|
||||
})
|
||||
}
|
||||
}
|
||||
|
||||
// From7 converts a function with 8 parameters returning a [R] into a function with 7 parameters returning a [GRA]
|
||||
// The first parameter is considered to be the context [C].
|
||||
func From7[GRA ~func(C) R, F ~func(C, T0, T1, T2, T3, T4, T5, T6) R, T0, T1, T2, T3, T4, T5, T6, C, R any](f F) func(T0, T1, T2, T3, T4, T5, T6) GRA {
|
||||
return func(t0 T0, t1 T1, t2 T2, t3 T3, t4 T4, t5 T5, t6 T6) GRA {
|
||||
return MakeReader[GRA](func(r C) R {
|
||||
return f(r, t0, t1, t2, t3, t4, t5, t6)
|
||||
})
|
||||
}
|
||||
return func(t0 T0, t1 T1, t2 T2, t3 T3, t4 T4, t5 T5, t6 T6) GRA {
|
||||
return MakeReader[GRA](func(r C) R {
|
||||
return f(r, t0, t1, t2, t3, t4, t5, t6)
|
||||
})
|
||||
}
|
||||
}
|
||||
|
||||
// From8 converts a function with 9 parameters returning a [R] into a function with 8 parameters returning a [GRA]
|
||||
// The first parameter is considered to be the context [C].
|
||||
func From8[GRA ~func(C) R, F ~func(C, T0, T1, T2, T3, T4, T5, T6, T7) R, T0, T1, T2, T3, T4, T5, T6, T7, C, R any](f F) func(T0, T1, T2, T3, T4, T5, T6, T7) GRA {
|
||||
return func(t0 T0, t1 T1, t2 T2, t3 T3, t4 T4, t5 T5, t6 T6, t7 T7) GRA {
|
||||
return MakeReader[GRA](func(r C) R {
|
||||
return f(r, t0, t1, t2, t3, t4, t5, t6, t7)
|
||||
})
|
||||
}
|
||||
return func(t0 T0, t1 T1, t2 T2, t3 T3, t4 T4, t5 T5, t6 T6, t7 T7) GRA {
|
||||
return MakeReader[GRA](func(r C) R {
|
||||
return f(r, t0, t1, t2, t3, t4, t5, t6, t7)
|
||||
})
|
||||
}
|
||||
}
|
||||
|
||||
// From9 converts a function with 10 parameters returning a [R] into a function with 9 parameters returning a [GRA]
|
||||
// The first parameter is considered to be the context [C].
|
||||
func From9[GRA ~func(C) R, F ~func(C, T0, T1, T2, T3, T4, T5, T6, T7, T8) R, T0, T1, T2, T3, T4, T5, T6, T7, T8, C, R any](f F) func(T0, T1, T2, T3, T4, T5, T6, T7, T8) GRA {
|
||||
return func(t0 T0, t1 T1, t2 T2, t3 T3, t4 T4, t5 T5, t6 T6, t7 T7, t8 T8) GRA {
|
||||
return MakeReader[GRA](func(r C) R {
|
||||
return f(r, t0, t1, t2, t3, t4, t5, t6, t7, t8)
|
||||
})
|
||||
}
|
||||
return func(t0 T0, t1 T1, t2 T2, t3 T3, t4 T4, t5 T5, t6 T6, t7 T7, t8 T8) GRA {
|
||||
return MakeReader[GRA](func(r C) R {
|
||||
return f(r, t0, t1, t2, t3, t4, t5, t6, t7, t8)
|
||||
})
|
||||
}
|
||||
}
|
||||
|
||||
// From10 converts a function with 11 parameters returning a [R] into a function with 10 parameters returning a [GRA]
|
||||
// The first parameter is considered to be the context [C].
|
||||
func From10[GRA ~func(C) R, F ~func(C, T0, T1, T2, T3, T4, T5, T6, T7, T8, T9) R, T0, T1, T2, T3, T4, T5, T6, T7, T8, T9, C, R any](f F) func(T0, T1, T2, T3, T4, T5, T6, T7, T8, T9) GRA {
|
||||
return func(t0 T0, t1 T1, t2 T2, t3 T3, t4 T4, t5 T5, t6 T6, t7 T7, t8 T8, t9 T9) GRA {
|
||||
return MakeReader[GRA](func(r C) R {
|
||||
return f(r, t0, t1, t2, t3, t4, t5, t6, t7, t8, t9)
|
||||
})
|
||||
}
|
||||
return func(t0 T0, t1 T1, t2 T2, t3 T3, t4 T4, t5 T5, t6 T6, t7 T7, t8 T8, t9 T9) GRA {
|
||||
return MakeReader[GRA](func(r C) R {
|
||||
return f(r, t0, t1, t2, t3, t4, t5, t6, t7, t8, t9)
|
||||
})
|
||||
}
|
||||
}
|
||||
|
@@ -25,58 +25,58 @@ import (
|
||||
)
|
||||
|
||||
var (
|
||||
testError = fmt.Errorf("error")
|
||||
errFoo = fmt.Errorf("error")
|
||||
)
|
||||
|
||||
func TestSequenceT1(t *testing.T) {
|
||||
|
||||
t1 := Of[MyContext, error]("s1")
|
||||
e1 := Left[MyContext, string](testError)
|
||||
e1 := Left[MyContext, string](errFoo)
|
||||
|
||||
res1 := SequenceT1(t1)
|
||||
assert.Equal(t, E.Of[error](T.MakeTuple1("s1")), res1(defaultContext))
|
||||
|
||||
res2 := SequenceT1(e1)
|
||||
assert.Equal(t, E.Left[T.Tuple1[string]](testError), res2(defaultContext))
|
||||
assert.Equal(t, E.Left[T.Tuple1[string]](errFoo), res2(defaultContext))
|
||||
}
|
||||
|
||||
func TestSequenceT2(t *testing.T) {
|
||||
|
||||
t1 := Of[MyContext, error]("s1")
|
||||
e1 := Left[MyContext, string](testError)
|
||||
e1 := Left[MyContext, string](errFoo)
|
||||
t2 := Of[MyContext, error](2)
|
||||
e2 := Left[MyContext, int](testError)
|
||||
e2 := Left[MyContext, int](errFoo)
|
||||
|
||||
res1 := SequenceT2(t1, t2)
|
||||
assert.Equal(t, E.Of[error](T.MakeTuple2("s1", 2)), res1(defaultContext))
|
||||
|
||||
res2 := SequenceT2(e1, t2)
|
||||
assert.Equal(t, E.Left[T.Tuple2[string, int]](testError), res2(defaultContext))
|
||||
assert.Equal(t, E.Left[T.Tuple2[string, int]](errFoo), res2(defaultContext))
|
||||
|
||||
res3 := SequenceT2(t1, e2)
|
||||
assert.Equal(t, E.Left[T.Tuple2[string, int]](testError), res3(defaultContext))
|
||||
assert.Equal(t, E.Left[T.Tuple2[string, int]](errFoo), res3(defaultContext))
|
||||
}
|
||||
|
||||
func TestSequenceT3(t *testing.T) {
|
||||
|
||||
t1 := Of[MyContext, error]("s1")
|
||||
e1 := Left[MyContext, string](testError)
|
||||
e1 := Left[MyContext, string](errFoo)
|
||||
t2 := Of[MyContext, error](2)
|
||||
e2 := Left[MyContext, int](testError)
|
||||
e2 := Left[MyContext, int](errFoo)
|
||||
t3 := Of[MyContext, error](true)
|
||||
e3 := Left[MyContext, bool](testError)
|
||||
e3 := Left[MyContext, bool](errFoo)
|
||||
|
||||
res1 := SequenceT3(t1, t2, t3)
|
||||
assert.Equal(t, E.Of[error](T.MakeTuple3("s1", 2, true)), res1(defaultContext))
|
||||
|
||||
res2 := SequenceT3(e1, t2, t3)
|
||||
assert.Equal(t, E.Left[T.Tuple3[string, int, bool]](testError), res2(defaultContext))
|
||||
assert.Equal(t, E.Left[T.Tuple3[string, int, bool]](errFoo), res2(defaultContext))
|
||||
|
||||
res3 := SequenceT3(t1, e2, t3)
|
||||
assert.Equal(t, E.Left[T.Tuple3[string, int, bool]](testError), res3(defaultContext))
|
||||
assert.Equal(t, E.Left[T.Tuple3[string, int, bool]](errFoo), res3(defaultContext))
|
||||
|
||||
res4 := SequenceT3(t1, t2, e3)
|
||||
assert.Equal(t, E.Left[T.Tuple3[string, int, bool]](testError), res4(defaultContext))
|
||||
assert.Equal(t, E.Left[T.Tuple3[string, int, bool]](errFoo), res4(defaultContext))
|
||||
}
|
||||
|
||||
func TestSequenceT4(t *testing.T) {
|
||||
|
34
readerio/generic/sync.go
Normal file
34
readerio/generic/sync.go
Normal file
@@ -0,0 +1,34 @@
|
||||
// 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
|
||||
|
||||
import (
|
||||
"context"
|
||||
|
||||
F "github.com/IBM/fp-go/function"
|
||||
G "github.com/IBM/fp-go/io/generic"
|
||||
)
|
||||
|
||||
// WithLock executes the provided IO operation in the scope of a lock
|
||||
func WithLock[GEA ~func(R) GIOA, GIOA ~func() A, R, A any](lock func() context.CancelFunc) func(fa GEA) GEA {
|
||||
l := G.WithLock[GIOA](lock)
|
||||
return func(fa GEA) GEA {
|
||||
return F.Flow2(
|
||||
fa,
|
||||
l,
|
||||
)
|
||||
}
|
||||
}
|
@@ -13,14 +13,15 @@
|
||||
// See the License for the specific language governing permissions and
|
||||
// limitations under the License.
|
||||
|
||||
// Package readerio implements a specialization of the ReaderIO monad assuming a golang context as the context of the monad
|
||||
package readerio
|
||||
|
||||
import (
|
||||
"context"
|
||||
|
||||
R "github.com/IBM/fp-go/readerio"
|
||||
G "github.com/IBM/fp-go/readerio/generic"
|
||||
)
|
||||
|
||||
// ReaderIO is a specialization of the ReaderIO monad assuming a golang context as the context of the monad
|
||||
type ReaderIO[A any] R.ReaderIO[context.Context, A]
|
||||
// WithLock executes the provided IO operation in the scope of a lock
|
||||
func WithLock[R, A any](lock func() context.CancelFunc) func(fa ReaderIO[R, A]) ReaderIO[R, A] {
|
||||
return G.WithLock[ReaderIO[R, A]](lock)
|
||||
}
|
@@ -1,141 +1,142 @@
|
||||
// Code generated by go generate; DO NOT EDIT.
|
||||
// This file was generated by robots at
|
||||
// 2023-09-12 13:44:37.5566477 +0200 CEST m=+0.009011201
|
||||
// 2023-10-23 08:31:16.2414489 +0200 CEST m=+0.013052301
|
||||
|
||||
package readerioeither
|
||||
|
||||
|
||||
import (
|
||||
G "github.com/IBM/fp-go/readerioeither/generic"
|
||||
G "github.com/IBM/fp-go/readerioeither/generic"
|
||||
)
|
||||
|
||||
// From0 converts a function with 1 parameters returning a tuple into a function with 0 parameters returning a [ReaderIOEither[R]]
|
||||
// The first parameter is considered to be the context [C].
|
||||
func From0[F ~func(C) func() (R, error), C, R any](f F) func() ReaderIOEither[C, error, R] {
|
||||
return G.From0[ReaderIOEither[C, error, R]](f)
|
||||
return G.From0[ReaderIOEither[C, error, R]](f)
|
||||
}
|
||||
|
||||
// Eitherize0 converts a function with 1 parameters returning a tuple into a function with 0 parameters returning a [ReaderIOEither[C, error, R]]
|
||||
// The first parameter is considered to be the context [C].
|
||||
func Eitherize0[F ~func(C) (R, error), C, R any](f F) func() ReaderIOEither[C, error, R] {
|
||||
return G.Eitherize0[ReaderIOEither[C, error, R]](f)
|
||||
return G.Eitherize0[ReaderIOEither[C, error, R]](f)
|
||||
}
|
||||
|
||||
// From1 converts a function with 2 parameters returning a tuple into a function with 1 parameters returning a [ReaderIOEither[R]]
|
||||
// The first parameter is considered to be the context [C].
|
||||
func From1[F ~func(C, T0) func() (R, error), T0, C, R any](f F) func(T0) ReaderIOEither[C, error, R] {
|
||||
return G.From1[ReaderIOEither[C, error, R]](f)
|
||||
return G.From1[ReaderIOEither[C, error, R]](f)
|
||||
}
|
||||
|
||||
// Eitherize1 converts a function with 2 parameters returning a tuple into a function with 1 parameters returning a [ReaderIOEither[C, error, R]]
|
||||
// The first parameter is considered to be the context [C].
|
||||
func Eitherize1[F ~func(C, T0) (R, error), T0, C, R any](f F) func(T0) ReaderIOEither[C, error, R] {
|
||||
return G.Eitherize1[ReaderIOEither[C, error, R]](f)
|
||||
return G.Eitherize1[ReaderIOEither[C, error, R]](f)
|
||||
}
|
||||
|
||||
// From2 converts a function with 3 parameters returning a tuple into a function with 2 parameters returning a [ReaderIOEither[R]]
|
||||
// The first parameter is considered to be the context [C].
|
||||
func From2[F ~func(C, T0, T1) func() (R, error), T0, T1, C, R any](f F) func(T0, T1) ReaderIOEither[C, error, R] {
|
||||
return G.From2[ReaderIOEither[C, error, R]](f)
|
||||
return G.From2[ReaderIOEither[C, error, R]](f)
|
||||
}
|
||||
|
||||
// Eitherize2 converts a function with 3 parameters returning a tuple into a function with 2 parameters returning a [ReaderIOEither[C, error, R]]
|
||||
// The first parameter is considered to be the context [C].
|
||||
func Eitherize2[F ~func(C, T0, T1) (R, error), T0, T1, C, R any](f F) func(T0, T1) ReaderIOEither[C, error, R] {
|
||||
return G.Eitherize2[ReaderIOEither[C, error, R]](f)
|
||||
return G.Eitherize2[ReaderIOEither[C, error, R]](f)
|
||||
}
|
||||
|
||||
// From3 converts a function with 4 parameters returning a tuple into a function with 3 parameters returning a [ReaderIOEither[R]]
|
||||
// The first parameter is considered to be the context [C].
|
||||
func From3[F ~func(C, T0, T1, T2) func() (R, error), T0, T1, T2, C, R any](f F) func(T0, T1, T2) ReaderIOEither[C, error, R] {
|
||||
return G.From3[ReaderIOEither[C, error, R]](f)
|
||||
return G.From3[ReaderIOEither[C, error, R]](f)
|
||||
}
|
||||
|
||||
// Eitherize3 converts a function with 4 parameters returning a tuple into a function with 3 parameters returning a [ReaderIOEither[C, error, R]]
|
||||
// The first parameter is considered to be the context [C].
|
||||
func Eitherize3[F ~func(C, T0, T1, T2) (R, error), T0, T1, T2, C, R any](f F) func(T0, T1, T2) ReaderIOEither[C, error, R] {
|
||||
return G.Eitherize3[ReaderIOEither[C, error, R]](f)
|
||||
return G.Eitherize3[ReaderIOEither[C, error, R]](f)
|
||||
}
|
||||
|
||||
// From4 converts a function with 5 parameters returning a tuple into a function with 4 parameters returning a [ReaderIOEither[R]]
|
||||
// The first parameter is considered to be the context [C].
|
||||
func From4[F ~func(C, T0, T1, T2, T3) func() (R, error), T0, T1, T2, T3, C, R any](f F) func(T0, T1, T2, T3) ReaderIOEither[C, error, R] {
|
||||
return G.From4[ReaderIOEither[C, error, R]](f)
|
||||
return G.From4[ReaderIOEither[C, error, R]](f)
|
||||
}
|
||||
|
||||
// Eitherize4 converts a function with 5 parameters returning a tuple into a function with 4 parameters returning a [ReaderIOEither[C, error, R]]
|
||||
// The first parameter is considered to be the context [C].
|
||||
func Eitherize4[F ~func(C, T0, T1, T2, T3) (R, error), T0, T1, T2, T3, C, R any](f F) func(T0, T1, T2, T3) ReaderIOEither[C, error, R] {
|
||||
return G.Eitherize4[ReaderIOEither[C, error, R]](f)
|
||||
return G.Eitherize4[ReaderIOEither[C, error, R]](f)
|
||||
}
|
||||
|
||||
// From5 converts a function with 6 parameters returning a tuple into a function with 5 parameters returning a [ReaderIOEither[R]]
|
||||
// The first parameter is considered to be the context [C].
|
||||
func From5[F ~func(C, T0, T1, T2, T3, T4) func() (R, error), T0, T1, T2, T3, T4, C, R any](f F) func(T0, T1, T2, T3, T4) ReaderIOEither[C, error, R] {
|
||||
return G.From5[ReaderIOEither[C, error, R]](f)
|
||||
return G.From5[ReaderIOEither[C, error, R]](f)
|
||||
}
|
||||
|
||||
// Eitherize5 converts a function with 6 parameters returning a tuple into a function with 5 parameters returning a [ReaderIOEither[C, error, R]]
|
||||
// The first parameter is considered to be the context [C].
|
||||
func Eitherize5[F ~func(C, T0, T1, T2, T3, T4) (R, error), T0, T1, T2, T3, T4, C, R any](f F) func(T0, T1, T2, T3, T4) ReaderIOEither[C, error, R] {
|
||||
return G.Eitherize5[ReaderIOEither[C, error, R]](f)
|
||||
return G.Eitherize5[ReaderIOEither[C, error, R]](f)
|
||||
}
|
||||
|
||||
// From6 converts a function with 7 parameters returning a tuple into a function with 6 parameters returning a [ReaderIOEither[R]]
|
||||
// The first parameter is considered to be the context [C].
|
||||
func From6[F ~func(C, T0, T1, T2, T3, T4, T5) func() (R, error), T0, T1, T2, T3, T4, T5, C, R any](f F) func(T0, T1, T2, T3, T4, T5) ReaderIOEither[C, error, R] {
|
||||
return G.From6[ReaderIOEither[C, error, R]](f)
|
||||
return G.From6[ReaderIOEither[C, error, R]](f)
|
||||
}
|
||||
|
||||
// Eitherize6 converts a function with 7 parameters returning a tuple into a function with 6 parameters returning a [ReaderIOEither[C, error, R]]
|
||||
// The first parameter is considered to be the context [C].
|
||||
func Eitherize6[F ~func(C, T0, T1, T2, T3, T4, T5) (R, error), T0, T1, T2, T3, T4, T5, C, R any](f F) func(T0, T1, T2, T3, T4, T5) ReaderIOEither[C, error, R] {
|
||||
return G.Eitherize6[ReaderIOEither[C, error, R]](f)
|
||||
return G.Eitherize6[ReaderIOEither[C, error, R]](f)
|
||||
}
|
||||
|
||||
// From7 converts a function with 8 parameters returning a tuple into a function with 7 parameters returning a [ReaderIOEither[R]]
|
||||
// The first parameter is considered to be the context [C].
|
||||
func From7[F ~func(C, T0, T1, T2, T3, T4, T5, T6) func() (R, error), T0, T1, T2, T3, T4, T5, T6, C, R any](f F) func(T0, T1, T2, T3, T4, T5, T6) ReaderIOEither[C, error, R] {
|
||||
return G.From7[ReaderIOEither[C, error, R]](f)
|
||||
return G.From7[ReaderIOEither[C, error, R]](f)
|
||||
}
|
||||
|
||||
// Eitherize7 converts a function with 8 parameters returning a tuple into a function with 7 parameters returning a [ReaderIOEither[C, error, R]]
|
||||
// The first parameter is considered to be the context [C].
|
||||
func Eitherize7[F ~func(C, T0, T1, T2, T3, T4, T5, T6) (R, error), T0, T1, T2, T3, T4, T5, T6, C, R any](f F) func(T0, T1, T2, T3, T4, T5, T6) ReaderIOEither[C, error, R] {
|
||||
return G.Eitherize7[ReaderIOEither[C, error, R]](f)
|
||||
return G.Eitherize7[ReaderIOEither[C, error, R]](f)
|
||||
}
|
||||
|
||||
// From8 converts a function with 9 parameters returning a tuple into a function with 8 parameters returning a [ReaderIOEither[R]]
|
||||
// The first parameter is considered to be the context [C].
|
||||
func From8[F ~func(C, T0, T1, T2, T3, T4, T5, T6, T7) func() (R, error), T0, T1, T2, T3, T4, T5, T6, T7, C, R any](f F) func(T0, T1, T2, T3, T4, T5, T6, T7) ReaderIOEither[C, error, R] {
|
||||
return G.From8[ReaderIOEither[C, error, R]](f)
|
||||
return G.From8[ReaderIOEither[C, error, R]](f)
|
||||
}
|
||||
|
||||
// Eitherize8 converts a function with 9 parameters returning a tuple into a function with 8 parameters returning a [ReaderIOEither[C, error, R]]
|
||||
// The first parameter is considered to be the context [C].
|
||||
func Eitherize8[F ~func(C, T0, T1, T2, T3, T4, T5, T6, T7) (R, error), T0, T1, T2, T3, T4, T5, T6, T7, C, R any](f F) func(T0, T1, T2, T3, T4, T5, T6, T7) ReaderIOEither[C, error, R] {
|
||||
return G.Eitherize8[ReaderIOEither[C, error, R]](f)
|
||||
return G.Eitherize8[ReaderIOEither[C, error, R]](f)
|
||||
}
|
||||
|
||||
// From9 converts a function with 10 parameters returning a tuple into a function with 9 parameters returning a [ReaderIOEither[R]]
|
||||
// The first parameter is considered to be the context [C].
|
||||
func From9[F ~func(C, T0, T1, T2, T3, T4, T5, T6, T7, T8) func() (R, error), T0, T1, T2, T3, T4, T5, T6, T7, T8, C, R any](f F) func(T0, T1, T2, T3, T4, T5, T6, T7, T8) ReaderIOEither[C, error, R] {
|
||||
return G.From9[ReaderIOEither[C, error, R]](f)
|
||||
return G.From9[ReaderIOEither[C, error, R]](f)
|
||||
}
|
||||
|
||||
// Eitherize9 converts a function with 10 parameters returning a tuple into a function with 9 parameters returning a [ReaderIOEither[C, error, R]]
|
||||
// The first parameter is considered to be the context [C].
|
||||
func Eitherize9[F ~func(C, T0, T1, T2, T3, T4, T5, T6, T7, T8) (R, error), T0, T1, T2, T3, T4, T5, T6, T7, T8, C, R any](f F) func(T0, T1, T2, T3, T4, T5, T6, T7, T8) ReaderIOEither[C, error, R] {
|
||||
return G.Eitherize9[ReaderIOEither[C, error, R]](f)
|
||||
return G.Eitherize9[ReaderIOEither[C, error, R]](f)
|
||||
}
|
||||
|
||||
// From10 converts a function with 11 parameters returning a tuple into a function with 10 parameters returning a [ReaderIOEither[R]]
|
||||
// The first parameter is considered to be the context [C].
|
||||
func From10[F ~func(C, T0, T1, T2, T3, T4, T5, T6, T7, T8, T9) func() (R, error), T0, T1, T2, T3, T4, T5, T6, T7, T8, T9, C, R any](f F) func(T0, T1, T2, T3, T4, T5, T6, T7, T8, T9) ReaderIOEither[C, error, R] {
|
||||
return G.From10[ReaderIOEither[C, error, R]](f)
|
||||
return G.From10[ReaderIOEither[C, error, R]](f)
|
||||
}
|
||||
|
||||
// Eitherize10 converts a function with 11 parameters returning a tuple into a function with 10 parameters returning a [ReaderIOEither[C, error, R]]
|
||||
// The first parameter is considered to be the context [C].
|
||||
func Eitherize10[F ~func(C, T0, T1, T2, T3, T4, T5, T6, T7, T8, T9) (R, error), T0, T1, T2, T3, T4, T5, T6, T7, T8, T9, C, R any](f F) func(T0, T1, T2, T3, T4, T5, T6, T7, T8, T9) ReaderIOEither[C, error, R] {
|
||||
return G.Eitherize10[ReaderIOEither[C, error, R]](f)
|
||||
return G.Eitherize10[ReaderIOEither[C, error, R]](f)
|
||||
}
|
||||
|
@@ -17,7 +17,7 @@ package generic
|
||||
|
||||
import (
|
||||
ET "github.com/IBM/fp-go/either"
|
||||
G "github.com/IBM/fp-go/internal/file"
|
||||
G "github.com/IBM/fp-go/internal/bracket"
|
||||
I "github.com/IBM/fp-go/readerio/generic"
|
||||
)
|
||||
|
||||
|
@@ -1,8 +1,9 @@
|
||||
// Code generated by go generate; DO NOT EDIT.
|
||||
// This file was generated by robots at
|
||||
// 2023-09-12 13:44:37.5566477 +0200 CEST m=+0.009011201
|
||||
// 2023-10-23 08:31:16.241979 +0200 CEST m=+0.013582401
|
||||
package generic
|
||||
|
||||
|
||||
import (
|
||||
E "github.com/IBM/fp-go/either"
|
||||
RD "github.com/IBM/fp-go/reader/generic"
|
||||
@@ -11,197 +12,186 @@ import (
|
||||
// From0 converts a function with 1 parameters returning a tuple into a function with 0 parameters returning a [GRA]
|
||||
// The first parameter is considerd to be the context [C].
|
||||
func From0[GRA ~func(C) GIOA, F ~func(C) func() (R, error), GIOA ~func() E.Either[error, R], C, R any](f F) func() GRA {
|
||||
return RD.From0[GRA](func(r C) GIOA {
|
||||
return E.Eitherize0(f(r))
|
||||
})
|
||||
return RD.From0[GRA](func(r C) GIOA {
|
||||
return E.Eitherize0(f(r))
|
||||
})
|
||||
}
|
||||
|
||||
// Eitherize0 converts a function with 0 parameters returning a tuple into a function with 0 parameters returning a [GRA]
|
||||
// The first parameter is considered to be the context [C].
|
||||
func Eitherize0[GRA ~func(C) GIOA, F ~func(C) (R, error), GIOA ~func() E.Either[error, R], C, R any](f F) func() GRA {
|
||||
return From0[GRA](func(r C) func() (R, error) {
|
||||
return func() (R, error) {
|
||||
return f(r)
|
||||
}
|
||||
})
|
||||
return From0[GRA](func(r C) func() (R, error) {
|
||||
return func() (R, error) {
|
||||
return f(r)
|
||||
}})
|
||||
}
|
||||
|
||||
// From1 converts a function with 2 parameters returning a tuple into a function with 1 parameters returning a [GRA]
|
||||
// The first parameter is considerd to be the context [C].
|
||||
func From1[GRA ~func(C) GIOA, F ~func(C, T0) func() (R, error), GIOA ~func() E.Either[error, R], T0, C, R any](f F) func(T0) GRA {
|
||||
return RD.From1[GRA](func(r C, t0 T0) GIOA {
|
||||
return E.Eitherize0(f(r, t0))
|
||||
})
|
||||
return RD.From1[GRA](func(r C, t0 T0) GIOA {
|
||||
return E.Eitherize0(f(r, t0))
|
||||
})
|
||||
}
|
||||
|
||||
// Eitherize1 converts a function with 1 parameters returning a tuple into a function with 1 parameters returning a [GRA]
|
||||
// The first parameter is considered to be the context [C].
|
||||
func Eitherize1[GRA ~func(C) GIOA, F ~func(C, T0) (R, error), GIOA ~func() E.Either[error, R], T0, C, R any](f F) func(T0) GRA {
|
||||
return From1[GRA](func(r C, t0 T0) func() (R, error) {
|
||||
return func() (R, error) {
|
||||
return f(r, t0)
|
||||
}
|
||||
})
|
||||
return From1[GRA](func(r C, t0 T0) func() (R, error) {
|
||||
return func() (R, error) {
|
||||
return f(r, t0)
|
||||
}})
|
||||
}
|
||||
|
||||
// From2 converts a function with 3 parameters returning a tuple into a function with 2 parameters returning a [GRA]
|
||||
// The first parameter is considerd to be the context [C].
|
||||
func From2[GRA ~func(C) GIOA, F ~func(C, T0, T1) func() (R, error), GIOA ~func() E.Either[error, R], T0, T1, C, R any](f F) func(T0, T1) GRA {
|
||||
return RD.From2[GRA](func(r C, t0 T0, t1 T1) GIOA {
|
||||
return E.Eitherize0(f(r, t0, t1))
|
||||
})
|
||||
return RD.From2[GRA](func(r C, t0 T0, t1 T1) GIOA {
|
||||
return E.Eitherize0(f(r, t0, t1))
|
||||
})
|
||||
}
|
||||
|
||||
// Eitherize2 converts a function with 2 parameters returning a tuple into a function with 2 parameters returning a [GRA]
|
||||
// The first parameter is considered to be the context [C].
|
||||
func Eitherize2[GRA ~func(C) GIOA, F ~func(C, T0, T1) (R, error), GIOA ~func() E.Either[error, R], T0, T1, C, R any](f F) func(T0, T1) GRA {
|
||||
return From2[GRA](func(r C, t0 T0, t1 T1) func() (R, error) {
|
||||
return func() (R, error) {
|
||||
return f(r, t0, t1)
|
||||
}
|
||||
})
|
||||
return From2[GRA](func(r C, t0 T0, t1 T1) func() (R, error) {
|
||||
return func() (R, error) {
|
||||
return f(r, t0, t1)
|
||||
}})
|
||||
}
|
||||
|
||||
// From3 converts a function with 4 parameters returning a tuple into a function with 3 parameters returning a [GRA]
|
||||
// The first parameter is considerd to be the context [C].
|
||||
func From3[GRA ~func(C) GIOA, F ~func(C, T0, T1, T2) func() (R, error), GIOA ~func() E.Either[error, R], T0, T1, T2, C, R any](f F) func(T0, T1, T2) GRA {
|
||||
return RD.From3[GRA](func(r C, t0 T0, t1 T1, t2 T2) GIOA {
|
||||
return E.Eitherize0(f(r, t0, t1, t2))
|
||||
})
|
||||
return RD.From3[GRA](func(r C, t0 T0, t1 T1, t2 T2) GIOA {
|
||||
return E.Eitherize0(f(r, t0, t1, t2))
|
||||
})
|
||||
}
|
||||
|
||||
// Eitherize3 converts a function with 3 parameters returning a tuple into a function with 3 parameters returning a [GRA]
|
||||
// The first parameter is considered to be the context [C].
|
||||
func Eitherize3[GRA ~func(C) GIOA, F ~func(C, T0, T1, T2) (R, error), GIOA ~func() E.Either[error, R], T0, T1, T2, C, R any](f F) func(T0, T1, T2) GRA {
|
||||
return From3[GRA](func(r C, t0 T0, t1 T1, t2 T2) func() (R, error) {
|
||||
return func() (R, error) {
|
||||
return f(r, t0, t1, t2)
|
||||
}
|
||||
})
|
||||
return From3[GRA](func(r C, t0 T0, t1 T1, t2 T2) func() (R, error) {
|
||||
return func() (R, error) {
|
||||
return f(r, t0, t1, t2)
|
||||
}})
|
||||
}
|
||||
|
||||
// From4 converts a function with 5 parameters returning a tuple into a function with 4 parameters returning a [GRA]
|
||||
// The first parameter is considerd to be the context [C].
|
||||
func From4[GRA ~func(C) GIOA, F ~func(C, T0, T1, T2, T3) func() (R, error), GIOA ~func() E.Either[error, R], T0, T1, T2, T3, C, R any](f F) func(T0, T1, T2, T3) GRA {
|
||||
return RD.From4[GRA](func(r C, t0 T0, t1 T1, t2 T2, t3 T3) GIOA {
|
||||
return E.Eitherize0(f(r, t0, t1, t2, t3))
|
||||
})
|
||||
return RD.From4[GRA](func(r C, t0 T0, t1 T1, t2 T2, t3 T3) GIOA {
|
||||
return E.Eitherize0(f(r, t0, t1, t2, t3))
|
||||
})
|
||||
}
|
||||
|
||||
// Eitherize4 converts a function with 4 parameters returning a tuple into a function with 4 parameters returning a [GRA]
|
||||
// The first parameter is considered to be the context [C].
|
||||
func Eitherize4[GRA ~func(C) GIOA, F ~func(C, T0, T1, T2, T3) (R, error), GIOA ~func() E.Either[error, R], T0, T1, T2, T3, C, R any](f F) func(T0, T1, T2, T3) GRA {
|
||||
return From4[GRA](func(r C, t0 T0, t1 T1, t2 T2, t3 T3) func() (R, error) {
|
||||
return func() (R, error) {
|
||||
return f(r, t0, t1, t2, t3)
|
||||
}
|
||||
})
|
||||
return From4[GRA](func(r C, t0 T0, t1 T1, t2 T2, t3 T3) func() (R, error) {
|
||||
return func() (R, error) {
|
||||
return f(r, t0, t1, t2, t3)
|
||||
}})
|
||||
}
|
||||
|
||||
// From5 converts a function with 6 parameters returning a tuple into a function with 5 parameters returning a [GRA]
|
||||
// The first parameter is considerd to be the context [C].
|
||||
func From5[GRA ~func(C) GIOA, F ~func(C, T0, T1, T2, T3, T4) func() (R, error), GIOA ~func() E.Either[error, R], T0, T1, T2, T3, T4, C, R any](f F) func(T0, T1, T2, T3, T4) GRA {
|
||||
return RD.From5[GRA](func(r C, t0 T0, t1 T1, t2 T2, t3 T3, t4 T4) GIOA {
|
||||
return E.Eitherize0(f(r, t0, t1, t2, t3, t4))
|
||||
})
|
||||
return RD.From5[GRA](func(r C, t0 T0, t1 T1, t2 T2, t3 T3, t4 T4) GIOA {
|
||||
return E.Eitherize0(f(r, t0, t1, t2, t3, t4))
|
||||
})
|
||||
}
|
||||
|
||||
// Eitherize5 converts a function with 5 parameters returning a tuple into a function with 5 parameters returning a [GRA]
|
||||
// The first parameter is considered to be the context [C].
|
||||
func Eitherize5[GRA ~func(C) GIOA, F ~func(C, T0, T1, T2, T3, T4) (R, error), GIOA ~func() E.Either[error, R], T0, T1, T2, T3, T4, C, R any](f F) func(T0, T1, T2, T3, T4) GRA {
|
||||
return From5[GRA](func(r C, t0 T0, t1 T1, t2 T2, t3 T3, t4 T4) func() (R, error) {
|
||||
return func() (R, error) {
|
||||
return f(r, t0, t1, t2, t3, t4)
|
||||
}
|
||||
})
|
||||
return From5[GRA](func(r C, t0 T0, t1 T1, t2 T2, t3 T3, t4 T4) func() (R, error) {
|
||||
return func() (R, error) {
|
||||
return f(r, t0, t1, t2, t3, t4)
|
||||
}})
|
||||
}
|
||||
|
||||
// From6 converts a function with 7 parameters returning a tuple into a function with 6 parameters returning a [GRA]
|
||||
// The first parameter is considerd to be the context [C].
|
||||
func From6[GRA ~func(C) GIOA, F ~func(C, T0, T1, T2, T3, T4, T5) func() (R, error), GIOA ~func() E.Either[error, R], T0, T1, T2, T3, T4, T5, C, R any](f F) func(T0, T1, T2, T3, T4, T5) GRA {
|
||||
return RD.From6[GRA](func(r C, t0 T0, t1 T1, t2 T2, t3 T3, t4 T4, t5 T5) GIOA {
|
||||
return E.Eitherize0(f(r, t0, t1, t2, t3, t4, t5))
|
||||
})
|
||||
return RD.From6[GRA](func(r C, t0 T0, t1 T1, t2 T2, t3 T3, t4 T4, t5 T5) GIOA {
|
||||
return E.Eitherize0(f(r, t0, t1, t2, t3, t4, t5))
|
||||
})
|
||||
}
|
||||
|
||||
// Eitherize6 converts a function with 6 parameters returning a tuple into a function with 6 parameters returning a [GRA]
|
||||
// The first parameter is considered to be the context [C].
|
||||
func Eitherize6[GRA ~func(C) GIOA, F ~func(C, T0, T1, T2, T3, T4, T5) (R, error), GIOA ~func() E.Either[error, R], T0, T1, T2, T3, T4, T5, C, R any](f F) func(T0, T1, T2, T3, T4, T5) GRA {
|
||||
return From6[GRA](func(r C, t0 T0, t1 T1, t2 T2, t3 T3, t4 T4, t5 T5) func() (R, error) {
|
||||
return func() (R, error) {
|
||||
return f(r, t0, t1, t2, t3, t4, t5)
|
||||
}
|
||||
})
|
||||
return From6[GRA](func(r C, t0 T0, t1 T1, t2 T2, t3 T3, t4 T4, t5 T5) func() (R, error) {
|
||||
return func() (R, error) {
|
||||
return f(r, t0, t1, t2, t3, t4, t5)
|
||||
}})
|
||||
}
|
||||
|
||||
// From7 converts a function with 8 parameters returning a tuple into a function with 7 parameters returning a [GRA]
|
||||
// The first parameter is considerd to be the context [C].
|
||||
func From7[GRA ~func(C) GIOA, F ~func(C, T0, T1, T2, T3, T4, T5, T6) func() (R, error), GIOA ~func() E.Either[error, R], T0, T1, T2, T3, T4, T5, T6, C, R any](f F) func(T0, T1, T2, T3, T4, T5, T6) GRA {
|
||||
return RD.From7[GRA](func(r C, t0 T0, t1 T1, t2 T2, t3 T3, t4 T4, t5 T5, t6 T6) GIOA {
|
||||
return E.Eitherize0(f(r, t0, t1, t2, t3, t4, t5, t6))
|
||||
})
|
||||
return RD.From7[GRA](func(r C, t0 T0, t1 T1, t2 T2, t3 T3, t4 T4, t5 T5, t6 T6) GIOA {
|
||||
return E.Eitherize0(f(r, t0, t1, t2, t3, t4, t5, t6))
|
||||
})
|
||||
}
|
||||
|
||||
// Eitherize7 converts a function with 7 parameters returning a tuple into a function with 7 parameters returning a [GRA]
|
||||
// The first parameter is considered to be the context [C].
|
||||
func Eitherize7[GRA ~func(C) GIOA, F ~func(C, T0, T1, T2, T3, T4, T5, T6) (R, error), GIOA ~func() E.Either[error, R], T0, T1, T2, T3, T4, T5, T6, C, R any](f F) func(T0, T1, T2, T3, T4, T5, T6) GRA {
|
||||
return From7[GRA](func(r C, t0 T0, t1 T1, t2 T2, t3 T3, t4 T4, t5 T5, t6 T6) func() (R, error) {
|
||||
return func() (R, error) {
|
||||
return f(r, t0, t1, t2, t3, t4, t5, t6)
|
||||
}
|
||||
})
|
||||
return From7[GRA](func(r C, t0 T0, t1 T1, t2 T2, t3 T3, t4 T4, t5 T5, t6 T6) func() (R, error) {
|
||||
return func() (R, error) {
|
||||
return f(r, t0, t1, t2, t3, t4, t5, t6)
|
||||
}})
|
||||
}
|
||||
|
||||
// From8 converts a function with 9 parameters returning a tuple into a function with 8 parameters returning a [GRA]
|
||||
// The first parameter is considerd to be the context [C].
|
||||
func From8[GRA ~func(C) GIOA, F ~func(C, T0, T1, T2, T3, T4, T5, T6, T7) func() (R, error), GIOA ~func() E.Either[error, R], T0, T1, T2, T3, T4, T5, T6, T7, C, R any](f F) func(T0, T1, T2, T3, T4, T5, T6, T7) GRA {
|
||||
return RD.From8[GRA](func(r C, t0 T0, t1 T1, t2 T2, t3 T3, t4 T4, t5 T5, t6 T6, t7 T7) GIOA {
|
||||
return E.Eitherize0(f(r, t0, t1, t2, t3, t4, t5, t6, t7))
|
||||
})
|
||||
return RD.From8[GRA](func(r C, t0 T0, t1 T1, t2 T2, t3 T3, t4 T4, t5 T5, t6 T6, t7 T7) GIOA {
|
||||
return E.Eitherize0(f(r, t0, t1, t2, t3, t4, t5, t6, t7))
|
||||
})
|
||||
}
|
||||
|
||||
// Eitherize8 converts a function with 8 parameters returning a tuple into a function with 8 parameters returning a [GRA]
|
||||
// The first parameter is considered to be the context [C].
|
||||
func Eitherize8[GRA ~func(C) GIOA, F ~func(C, T0, T1, T2, T3, T4, T5, T6, T7) (R, error), GIOA ~func() E.Either[error, R], T0, T1, T2, T3, T4, T5, T6, T7, C, R any](f F) func(T0, T1, T2, T3, T4, T5, T6, T7) GRA {
|
||||
return From8[GRA](func(r C, t0 T0, t1 T1, t2 T2, t3 T3, t4 T4, t5 T5, t6 T6, t7 T7) func() (R, error) {
|
||||
return func() (R, error) {
|
||||
return f(r, t0, t1, t2, t3, t4, t5, t6, t7)
|
||||
}
|
||||
})
|
||||
return From8[GRA](func(r C, t0 T0, t1 T1, t2 T2, t3 T3, t4 T4, t5 T5, t6 T6, t7 T7) func() (R, error) {
|
||||
return func() (R, error) {
|
||||
return f(r, t0, t1, t2, t3, t4, t5, t6, t7)
|
||||
}})
|
||||
}
|
||||
|
||||
// From9 converts a function with 10 parameters returning a tuple into a function with 9 parameters returning a [GRA]
|
||||
// The first parameter is considerd to be the context [C].
|
||||
func From9[GRA ~func(C) GIOA, F ~func(C, T0, T1, T2, T3, T4, T5, T6, T7, T8) func() (R, error), GIOA ~func() E.Either[error, R], T0, T1, T2, T3, T4, T5, T6, T7, T8, C, R any](f F) func(T0, T1, T2, T3, T4, T5, T6, T7, T8) GRA {
|
||||
return RD.From9[GRA](func(r C, t0 T0, t1 T1, t2 T2, t3 T3, t4 T4, t5 T5, t6 T6, t7 T7, t8 T8) GIOA {
|
||||
return E.Eitherize0(f(r, t0, t1, t2, t3, t4, t5, t6, t7, t8))
|
||||
})
|
||||
return RD.From9[GRA](func(r C, t0 T0, t1 T1, t2 T2, t3 T3, t4 T4, t5 T5, t6 T6, t7 T7, t8 T8) GIOA {
|
||||
return E.Eitherize0(f(r, t0, t1, t2, t3, t4, t5, t6, t7, t8))
|
||||
})
|
||||
}
|
||||
|
||||
// Eitherize9 converts a function with 9 parameters returning a tuple into a function with 9 parameters returning a [GRA]
|
||||
// The first parameter is considered to be the context [C].
|
||||
func Eitherize9[GRA ~func(C) GIOA, F ~func(C, 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, C, R any](f F) func(T0, T1, T2, T3, T4, T5, T6, T7, T8) GRA {
|
||||
return From9[GRA](func(r C, t0 T0, t1 T1, t2 T2, t3 T3, t4 T4, t5 T5, t6 T6, t7 T7, t8 T8) func() (R, error) {
|
||||
return func() (R, error) {
|
||||
return f(r, t0, t1, t2, t3, t4, t5, t6, t7, t8)
|
||||
}
|
||||
})
|
||||
return From9[GRA](func(r C, t0 T0, t1 T1, t2 T2, t3 T3, t4 T4, t5 T5, t6 T6, t7 T7, t8 T8) func() (R, error) {
|
||||
return func() (R, error) {
|
||||
return f(r, t0, t1, t2, t3, t4, t5, t6, t7, t8)
|
||||
}})
|
||||
}
|
||||
|
||||
// From10 converts a function with 11 parameters returning a tuple into a function with 10 parameters returning a [GRA]
|
||||
// The first parameter is considerd to be the context [C].
|
||||
func From10[GRA ~func(C) GIOA, F ~func(C, T0, T1, T2, T3, T4, T5, T6, T7, T8, T9) func() (R, error), GIOA ~func() E.Either[error, R], T0, T1, T2, T3, T4, T5, T6, T7, T8, T9, C, R any](f F) func(T0, T1, T2, T3, T4, T5, T6, T7, T8, T9) GRA {
|
||||
return RD.From10[GRA](func(r C, t0 T0, t1 T1, t2 T2, t3 T3, t4 T4, t5 T5, t6 T6, t7 T7, t8 T8, t9 T9) GIOA {
|
||||
return E.Eitherize0(f(r, t0, t1, t2, t3, t4, t5, t6, t7, t8, t9))
|
||||
})
|
||||
return RD.From10[GRA](func(r C, t0 T0, t1 T1, t2 T2, t3 T3, t4 T4, t5 T5, t6 T6, t7 T7, t8 T8, t9 T9) GIOA {
|
||||
return E.Eitherize0(f(r, t0, t1, t2, t3, t4, t5, t6, t7, t8, t9))
|
||||
})
|
||||
}
|
||||
|
||||
// Eitherize10 converts a function with 10 parameters returning a tuple into a function with 10 parameters returning a [GRA]
|
||||
// The first parameter is considered to be the context [C].
|
||||
func Eitherize10[GRA ~func(C) GIOA, F ~func(C, 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, C, R any](f F) func(T0, T1, T2, T3, T4, T5, T6, T7, T8, T9) GRA {
|
||||
return From10[GRA](func(r C, t0 T0, t1 T1, t2 T2, t3 T3, t4 T4, t5 T5, t6 T6, t7 T7, t8 T8, t9 T9) func() (R, error) {
|
||||
return func() (R, error) {
|
||||
return f(r, t0, t1, t2, t3, t4, t5, t6, t7, t8, t9)
|
||||
}
|
||||
})
|
||||
return From10[GRA](func(r C, t0 T0, t1 T1, t2 T2, t3 T3, t4 T4, t5 T5, t6 T6, t7 T7, t8 T8, t9 T9) func() (R, error) {
|
||||
return func() (R, error) {
|
||||
return f(r, t0, t1, t2, t3, t4, t5, t6, t7, t8, t9)
|
||||
}})
|
||||
}
|
||||
|
28
readerioeither/generic/sync.go
Normal file
28
readerioeither/generic/sync.go
Normal file
@@ -0,0 +1,28 @@
|
||||
// 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
|
||||
|
||||
import (
|
||||
"context"
|
||||
|
||||
ET "github.com/IBM/fp-go/either"
|
||||
G "github.com/IBM/fp-go/readerio/generic"
|
||||
)
|
||||
|
||||
// WithLock executes the provided IO operation in the scope of a lock
|
||||
func WithLock[GEA ~func(R) GIOA, GIOA ~func() ET.Either[E, A], R, E, A any](lock func() context.CancelFunc) func(fa GEA) GEA {
|
||||
return G.WithLock[GEA](lock)
|
||||
}
|
27
readerioeither/sync.go
Normal file
27
readerioeither/sync.go
Normal file
@@ -0,0 +1,27 @@
|
||||
// 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 readerioeither
|
||||
|
||||
import (
|
||||
"context"
|
||||
|
||||
G "github.com/IBM/fp-go/readerioeither/generic"
|
||||
)
|
||||
|
||||
// WithLock executes the provided IO operation in the scope of a lock
|
||||
func WithLock[R, E, A any](lock func() context.CancelFunc) func(fa ReaderIOEither[R, E, A]) ReaderIOEither[R, E, A] {
|
||||
return G.WithLock[ReaderIOEither[R, E, A]](lock)
|
||||
}
|
@@ -105,7 +105,7 @@ var (
|
||||
)
|
||||
|
||||
// checkActive :: User -> Either error User
|
||||
checkActive = E.FromPredicate(Chapter08User.isActive, F.Constant1[Chapter08User](fmt.Errorf("Your account is not active")))
|
||||
checkActive = E.FromPredicate(Chapter08User.isActive, F.Constant1[Chapter08User](fmt.Errorf("your account is not active")))
|
||||
|
||||
// validateUser :: (User -> Either String ()) -> User -> Either String User
|
||||
validateUser = F.Curry2(func(validate func(Chapter08User) E.Either[error, any], user Chapter08User) E.Either[error, Chapter08User] {
|
||||
@@ -235,7 +235,7 @@ func Example_solution08C() {
|
||||
fmt.Println(eitherWelcome(theresa08))
|
||||
|
||||
// Output:
|
||||
// Left[*errors.errorString, string](Your account is not active)
|
||||
// Left[*errors.errorString, string](your account is not active)
|
||||
// Right[<nil>, string](Welcome Theresa)
|
||||
}
|
||||
|
||||
|
@@ -58,10 +58,8 @@ func TestSampleConvertDocx2(t *testing.T) {
|
||||
// The disadvantage is that its input has to exist in memory which is probably not a good
|
||||
// idea for large inputs
|
||||
convertDocx := func(data []byte) E.Either[error, T.Tuple2[string, map[string]string]] {
|
||||
return E.TryCatchError(func() (T.Tuple2[string, map[string]string], error) {
|
||||
text, meta, err := sampleConvertDocx(bytes.NewReader(data))
|
||||
return T.MakeTuple2(text, meta), err
|
||||
})
|
||||
text, meta, err := sampleConvertDocx(bytes.NewReader(data))
|
||||
return E.TryCatchError(T.MakeTuple2(text, meta), err)
|
||||
}
|
||||
|
||||
resE := convertDocx([]byte("abc"))
|
||||
|
2
test.bat
2
test.bat
@@ -1,3 +1,3 @@
|
||||
@echo off
|
||||
mkdir build 2> NUL
|
||||
gotip test .\... && go1.20.1 test .\... && go test -v -coverprofile build/cover.out -coverpkg=./... -covermode=atomic .\...
|
||||
gotip test .\... && go1.20.5 test .\... && go test -v -coverprofile build/cover.out -coverpkg=./... -covermode=atomic .\...
|
1816
tuple/gen.go
1816
tuple/gen.go
File diff suppressed because it is too large
Load Diff
Reference in New Issue
Block a user