mirror of
https://github.com/IBM/fp-go.git
synced 2025-12-09 23:11:40 +02:00
Compare commits
41 Commits
cleue-bett
...
cleue-add-
| Author | SHA1 | Date | |
|---|---|---|---|
|
|
a2a6a41993 | ||
|
|
7da9de6f41 | ||
|
|
ff1b6faf84 | ||
|
|
38120764e7 | ||
|
|
a83c2aec49 | ||
|
|
03debd37c8 | ||
|
|
4f04344cda | ||
|
|
cf1c886f48 | ||
|
|
3e0eb99b88 | ||
|
|
cb15a3d9fc | ||
|
|
16535605f5 | ||
|
|
53f4e5ebd7 | ||
|
|
fb91fd5dc8 | ||
|
|
3ccafb5302 | ||
|
|
52b71ef4f3 | ||
|
|
5d77d5bb3d | ||
|
|
8ba8f852fa | ||
|
|
29d9882d2a | ||
|
|
f80ca31e14 | ||
|
|
8692078972 | ||
|
|
12a4f6801c | ||
|
|
8650a8a600 | ||
|
|
fb3b1f115c | ||
|
|
ce66cf2295 | ||
|
|
80e579dd0b | ||
|
|
ddafd1ee57 | ||
|
|
b5f077da71 | ||
|
|
1a0c40b419 | ||
|
|
d5d89b1853 | ||
|
|
0f061a5099 | ||
|
|
45e05f25ff | ||
|
|
a390d53451 | ||
|
|
1346b9378a | ||
|
|
befd4f471e | ||
|
|
db8d3da87a | ||
|
|
ee4e936183 | ||
|
|
0064ac1c75 | ||
|
|
8944a66c18 | ||
|
|
bd0c42db01 | ||
|
|
e9f03e2d26 | ||
|
|
bb630810fc |
@@ -73,7 +73,7 @@ This library aims to provide a set of data types and functions that make it easy
|
|||||||
|
|
||||||
The library itself also comprises many small functions, but it's admittedly harder to maintain than code that uses it. However this asymmetry is intended because it offloads complexity from users into a central component.
|
The library itself also comprises many small functions, but it's admittedly harder to maintain than code that uses it. However this asymmetry is intended because it offloads complexity from users into a central component.
|
||||||
|
|
||||||
## Comparation to Idiomatic Go
|
## Comparison to Idiomatic Go
|
||||||
|
|
||||||
In this section we discuss how the functional APIs differ from idiomatic go function signatures and how to convert back and forth.
|
In this section we discuss how the functional APIs differ from idiomatic go function signatures and how to convert back and forth.
|
||||||
|
|
||||||
@@ -181,7 +181,7 @@ The `Map` operation for `ReaderIOEither` is defined as:
|
|||||||
func Map[R, E, A, B any](f func(A) B) func(fa ReaderIOEither[R, E, A]) ReaderIOEither[R, E, B]
|
func Map[R, E, A, B any](f func(A) B) func(fa ReaderIOEither[R, E, A]) ReaderIOEither[R, E, B]
|
||||||
```
|
```
|
||||||
|
|
||||||
and in fact the equivalent operations for all other mondas follow the same pattern, we could try to introduce a new type for `ReaderIOEither` (without a parameter) as a HKT, e.g. like so (made-up syntax, does not work in go):
|
and in fact the equivalent operations for all other monads follow the same pattern, we could try to introduce a new type for `ReaderIOEither` (without a parameter) as a HKT, e.g. like so (made-up syntax, does not work in go):
|
||||||
|
|
||||||
```go
|
```go
|
||||||
func Map[HKT, R, E, A, B any](f func(A) B) func(HKT[R, E, A]) HKT[R, E, B]
|
func Map[HKT, R, E, A, B any](f func(A) B) func(HKT[R, E, A]) HKT[R, E, B]
|
||||||
|
|||||||
@@ -304,3 +304,7 @@ func FoldMap[A, B any](m M.Monoid[B]) func(func(A) B) func([]A) B {
|
|||||||
func Fold[A any](m M.Monoid[A]) func([]A) A {
|
func Fold[A any](m M.Monoid[A]) func([]A) A {
|
||||||
return G.Fold[[]A](m)
|
return G.Fold[[]A](m)
|
||||||
}
|
}
|
||||||
|
|
||||||
|
func Push[A any](a A) func([]A) []A {
|
||||||
|
return G.Push[[]A](a)
|
||||||
|
}
|
||||||
|
|||||||
59
array/examples_basic_test.go
Normal file
59
array/examples_basic_test.go
Normal file
@@ -0,0 +1,59 @@
|
|||||||
|
// 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 array
|
||||||
|
|
||||||
|
import (
|
||||||
|
"fmt"
|
||||||
|
|
||||||
|
F "github.com/IBM/fp-go/function"
|
||||||
|
O "github.com/IBM/fp-go/option"
|
||||||
|
)
|
||||||
|
|
||||||
|
// Example_basic adapts examples from [https://github.com/inato/fp-ts-cheatsheet#basic-manipulation]
|
||||||
|
func Example_basic() {
|
||||||
|
|
||||||
|
someArray := From(0, 1, 2, 3, 4, 5, 6, 7, 8, 9) // []int
|
||||||
|
|
||||||
|
isEven := func(num int) bool {
|
||||||
|
return num%2 == 0
|
||||||
|
}
|
||||||
|
|
||||||
|
square := func(num int) int {
|
||||||
|
return num * num
|
||||||
|
}
|
||||||
|
|
||||||
|
// filter and map
|
||||||
|
result := F.Pipe2(
|
||||||
|
someArray,
|
||||||
|
Filter(isEven),
|
||||||
|
Map(square),
|
||||||
|
) // [0 4 16 36 64]
|
||||||
|
|
||||||
|
// or in one go with filterMap
|
||||||
|
resultFilterMap := F.Pipe1(
|
||||||
|
someArray,
|
||||||
|
FilterMap(
|
||||||
|
F.Flow2(O.FromPredicate(isEven), O.Map(square)),
|
||||||
|
),
|
||||||
|
)
|
||||||
|
|
||||||
|
fmt.Println(result)
|
||||||
|
fmt.Println(resultFilterMap)
|
||||||
|
|
||||||
|
// Output:
|
||||||
|
// [0 4 16 36 64]
|
||||||
|
// [0 4 16 36 64]
|
||||||
|
}
|
||||||
92
array/examples_sort_test.go
Normal file
92
array/examples_sort_test.go
Normal file
@@ -0,0 +1,92 @@
|
|||||||
|
// 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 array
|
||||||
|
|
||||||
|
import (
|
||||||
|
"fmt"
|
||||||
|
|
||||||
|
F "github.com/IBM/fp-go/function"
|
||||||
|
I "github.com/IBM/fp-go/number/integer"
|
||||||
|
O "github.com/IBM/fp-go/option"
|
||||||
|
"github.com/IBM/fp-go/ord"
|
||||||
|
S "github.com/IBM/fp-go/string"
|
||||||
|
)
|
||||||
|
|
||||||
|
type user struct {
|
||||||
|
name string
|
||||||
|
age O.Option[int]
|
||||||
|
}
|
||||||
|
|
||||||
|
func (user user) GetName() string {
|
||||||
|
return user.name
|
||||||
|
}
|
||||||
|
|
||||||
|
func (user user) GetAge() O.Option[int] {
|
||||||
|
return user.age
|
||||||
|
}
|
||||||
|
|
||||||
|
// Example_sort adapts examples from [https://github.com/inato/fp-ts-cheatsheet#sort-elements-with-ord]
|
||||||
|
func Example_sort() {
|
||||||
|
|
||||||
|
strings := From("zyx", "abc", "klm")
|
||||||
|
|
||||||
|
sortedStrings := F.Pipe1(
|
||||||
|
strings,
|
||||||
|
Sort(S.Ord),
|
||||||
|
) // => ['abc', 'klm', 'zyx']
|
||||||
|
|
||||||
|
// reverse sort
|
||||||
|
reverseSortedStrings := F.Pipe1(
|
||||||
|
strings,
|
||||||
|
Sort(ord.Reverse(S.Ord)),
|
||||||
|
) // => ['zyx', 'klm', 'abc']
|
||||||
|
|
||||||
|
// sort Option
|
||||||
|
optionalNumbers := From(O.Some(1337), O.None[int](), O.Some(42))
|
||||||
|
|
||||||
|
sortedNums := F.Pipe1(
|
||||||
|
optionalNumbers,
|
||||||
|
Sort(O.Ord(I.Ord)),
|
||||||
|
)
|
||||||
|
|
||||||
|
// complex object with different rules
|
||||||
|
byName := F.Pipe1(
|
||||||
|
S.Ord,
|
||||||
|
ord.Contramap(user.GetName),
|
||||||
|
) // ord.Ord[user]
|
||||||
|
|
||||||
|
byAge := F.Pipe1(
|
||||||
|
O.Ord(I.Ord),
|
||||||
|
ord.Contramap(user.GetAge),
|
||||||
|
) // ord.Ord[user]
|
||||||
|
|
||||||
|
sortedUsers := F.Pipe1(
|
||||||
|
From(user{name: "a", age: O.Of(30)}, user{name: "d", age: O.Of(10)}, user{name: "c"}, user{name: "b", age: O.Of(10)}),
|
||||||
|
SortBy(From(byAge, byName)),
|
||||||
|
)
|
||||||
|
|
||||||
|
fmt.Println(sortedStrings)
|
||||||
|
fmt.Println(reverseSortedStrings)
|
||||||
|
fmt.Println(sortedNums)
|
||||||
|
fmt.Println(sortedUsers)
|
||||||
|
|
||||||
|
// Output:
|
||||||
|
// [abc klm zyx]
|
||||||
|
// [zyx klm abc]
|
||||||
|
// [None[int] Some[int](42) Some[int](1337)]
|
||||||
|
// [{c {false 0}} {b {true 10}} {d {true 10}} {a {true 30}}]
|
||||||
|
|
||||||
|
}
|
||||||
@@ -28,6 +28,14 @@ func Of[GA ~[]A, A any](value A) GA {
|
|||||||
return GA{value}
|
return GA{value}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
func Reduce[GA ~[]A, A, B any](fa GA, f func(B, A) B, initial B) B {
|
||||||
|
return array.Reduce(fa, f, initial)
|
||||||
|
}
|
||||||
|
|
||||||
|
func ReduceWithIndex[GA ~[]A, A, B any](fa GA, f func(int, B, A) B, initial B) B {
|
||||||
|
return array.ReduceWithIndex(fa, f, initial)
|
||||||
|
}
|
||||||
|
|
||||||
// From constructs an array from a set of variadic arguments
|
// From constructs an array from a set of variadic arguments
|
||||||
func From[GA ~[]A, A any](data ...A) GA {
|
func From[GA ~[]A, A any](data ...A) GA {
|
||||||
return data
|
return data
|
||||||
@@ -105,6 +113,10 @@ func MonadMap[GA ~[]A, GB ~[]B, A, B any](as GA, f func(a A) B) GB {
|
|||||||
return array.MonadMap[GA, GB](as, f)
|
return array.MonadMap[GA, GB](as, f)
|
||||||
}
|
}
|
||||||
|
|
||||||
|
func Map[GA ~[]A, GB ~[]B, A, B any](f func(a A) B) func(GA) GB {
|
||||||
|
return F.Bind2nd(MonadMap[GA, GB, A, B], f)
|
||||||
|
}
|
||||||
|
|
||||||
func Size[GA ~[]A, A any](as GA) int {
|
func Size[GA ~[]A, A any](as GA) int {
|
||||||
return len(as)
|
return len(as)
|
||||||
}
|
}
|
||||||
@@ -175,6 +187,14 @@ func IsEmpty[AS ~[]A, A any](as AS) bool {
|
|||||||
return array.IsEmpty(as)
|
return array.IsEmpty(as)
|
||||||
}
|
}
|
||||||
|
|
||||||
|
func IsNil[GA ~[]A, A any](as GA) bool {
|
||||||
|
return array.IsNil(as)
|
||||||
|
}
|
||||||
|
|
||||||
|
func IsNonNil[GA ~[]A, A any](as GA) bool {
|
||||||
|
return array.IsNonNil(as)
|
||||||
|
}
|
||||||
|
|
||||||
func Match[AS ~[]A, A, B any](onEmpty func() B, onNonEmpty func(AS) B) func(AS) B {
|
func Match[AS ~[]A, A, B any](onEmpty func() B, onNonEmpty func(AS) B) func(AS) B {
|
||||||
return func(as AS) B {
|
return func(as AS) B {
|
||||||
if IsEmpty(as) {
|
if IsEmpty(as) {
|
||||||
@@ -226,3 +246,7 @@ func Fold[AS ~[]A, A any](m M.Monoid[A]) func(AS) A {
|
|||||||
return array.Reduce(as, m.Concat, m.Empty())
|
return array.Reduce(as, m.Concat, m.Empty())
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
func Push[GA ~[]A, A any](a A) func(GA) GA {
|
||||||
|
return F.Bind2nd(array.Push[GA, A], a)
|
||||||
|
}
|
||||||
|
|||||||
@@ -45,3 +45,12 @@ func SortByKey[GA ~[]T, K, T any](ord O.Ord[K], f func(T) K) func(ma GA) GA {
|
|||||||
return cpy
|
return cpy
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// SortBy implements a stable sort on the array given the provided ordering
|
||||||
|
func SortBy[GA ~[]T, GO ~[]O.Ord[T], T any](ord GO) func(ma GA) GA {
|
||||||
|
return F.Pipe2(
|
||||||
|
ord,
|
||||||
|
Fold[GO](O.Monoid[T]()),
|
||||||
|
Sort[GA, T],
|
||||||
|
)
|
||||||
|
}
|
||||||
|
|||||||
@@ -29,3 +29,8 @@ func Sort[T any](ord O.Ord[T]) func(ma []T) []T {
|
|||||||
func SortByKey[K, T any](ord O.Ord[K], f func(T) K) func(ma []T) []T {
|
func SortByKey[K, T any](ord O.Ord[K], f func(T) K) func(ma []T) []T {
|
||||||
return G.SortByKey[[]T](ord, f)
|
return G.SortByKey[[]T](ord, f)
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// SortBy implements a stable sort on the array given the provided ordering
|
||||||
|
func SortBy[T any](ord []O.Ord[T]) func(ma []T) []T {
|
||||||
|
return G.SortBy[[]T, []O.Ord[T]](ord)
|
||||||
|
}
|
||||||
|
|||||||
50
cli/tuple.go
50
cli/tuple.go
@@ -20,6 +20,7 @@ import (
|
|||||||
"log"
|
"log"
|
||||||
"os"
|
"os"
|
||||||
"path/filepath"
|
"path/filepath"
|
||||||
|
"strings"
|
||||||
"time"
|
"time"
|
||||||
|
|
||||||
C "github.com/urfave/cli/v2"
|
C "github.com/urfave/cli/v2"
|
||||||
@@ -36,8 +37,51 @@ func writeTupleType(f *os.File, symbol string, i int) {
|
|||||||
fmt.Fprintf(f, "]")
|
fmt.Fprintf(f, "]")
|
||||||
}
|
}
|
||||||
|
|
||||||
|
func makeTupleType(name string) func(i int) string {
|
||||||
|
return func(i int) string {
|
||||||
|
var buf strings.Builder
|
||||||
|
buf.WriteString(fmt.Sprintf("Tuple%d[", i))
|
||||||
|
for j := 0; j < i; j++ {
|
||||||
|
if j > 0 {
|
||||||
|
buf.WriteString(", ")
|
||||||
|
}
|
||||||
|
buf.WriteString(fmt.Sprintf("%s%d", name, j+1))
|
||||||
|
}
|
||||||
|
buf.WriteString("]")
|
||||||
|
|
||||||
|
return buf.String()
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
func generatePush(f *os.File, i int) {
|
||||||
|
tuple1 := makeTupleType("T")(i)
|
||||||
|
tuple2 := makeTupleType("T")(i + 1)
|
||||||
|
// Create the replicate version
|
||||||
|
fmt.Fprintf(f, "\n// Push%d creates a [Tuple%d] from a [Tuple%d] by appending a constant value\n", i, i+1, i)
|
||||||
|
fmt.Fprintf(f, "func Push%d[", i)
|
||||||
|
// function prototypes
|
||||||
|
for j := 0; j <= i; j++ {
|
||||||
|
if j > 0 {
|
||||||
|
fmt.Fprintf(f, ", ")
|
||||||
|
}
|
||||||
|
fmt.Fprintf(f, "T%d", j+1)
|
||||||
|
}
|
||||||
|
fmt.Fprintf(f, " any](value T%d) func(%s) %s {\n", i+1, tuple1, tuple2)
|
||||||
|
fmt.Fprintf(f, " return func(t %s) %s {\n", tuple1, tuple2)
|
||||||
|
fmt.Fprintf(f, " return MakeTuple%d(", i+1)
|
||||||
|
for j := 0; j < i; j++ {
|
||||||
|
if j > 0 {
|
||||||
|
fmt.Fprintf(f, ", ")
|
||||||
|
}
|
||||||
|
fmt.Fprintf(f, "t.F%d", j+1)
|
||||||
|
}
|
||||||
|
fmt.Fprintf(f, ", value)\n")
|
||||||
|
fmt.Fprintf(f, " }\n")
|
||||||
|
fmt.Fprintf(f, "}\n")
|
||||||
|
}
|
||||||
|
|
||||||
func generateReplicate(f *os.File, i int) {
|
func generateReplicate(f *os.File, i int) {
|
||||||
// Create the optionize version
|
// Create the replicate version
|
||||||
fmt.Fprintf(f, "\n// Replicate%d creates a [Tuple%d] with all fields set to the input value `t`\n", i, i)
|
fmt.Fprintf(f, "\n// Replicate%d creates a [Tuple%d] with all fields set to the input value `t`\n", i, i)
|
||||||
fmt.Fprintf(f, "func Replicate%d[T any](t T) Tuple%d[", i, i)
|
fmt.Fprintf(f, "func Replicate%d[T any](t T) Tuple%d[", i, i)
|
||||||
for j := 1; j <= i; j++ {
|
for j := 1; j <= i; j++ {
|
||||||
@@ -398,6 +442,10 @@ import (
|
|||||||
generateToArray(f, i)
|
generateToArray(f, i)
|
||||||
// generate fromArray
|
// generate fromArray
|
||||||
generateFromArray(f, i)
|
generateFromArray(f, i)
|
||||||
|
// generate push
|
||||||
|
if i < count {
|
||||||
|
generatePush(f, i)
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
return nil
|
return nil
|
||||||
|
|||||||
@@ -24,6 +24,11 @@ func TraverseArray[A, B any](f func(A) Reader[B]) func([]A) Reader[[]B] {
|
|||||||
return R.TraverseArray[Reader[B], Reader[[]B], []A](f)
|
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
|
// SequenceArray converts a homogeneous sequence of either into an either of sequence
|
||||||
func SequenceArray[A any](ma []Reader[A]) Reader[[]A] {
|
func SequenceArray[A any](ma []Reader[A]) Reader[[]A] {
|
||||||
return R.SequenceArray[Reader[A], Reader[[]A]](ma)
|
return R.SequenceArray[Reader[A], Reader[[]A]](ma)
|
||||||
|
|||||||
@@ -24,6 +24,11 @@ func TraverseArray[A, B any](f func(A) ReaderEither[B]) func([]A) ReaderEither[[
|
|||||||
return RE.TraverseArray[ReaderEither[B], ReaderEither[[]B], []A](f)
|
return RE.TraverseArray[ReaderEither[B], ReaderEither[[]B], []A](f)
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// TraverseArrayWithIndex transforms an array
|
||||||
|
func TraverseArrayWithIndex[A, B any](f func(int, A) ReaderEither[B]) func([]A) ReaderEither[[]B] {
|
||||||
|
return RE.TraverseArrayWithIndex[ReaderEither[B], ReaderEither[[]B], []A](f)
|
||||||
|
}
|
||||||
|
|
||||||
// SequenceArray converts a homogeneous sequence of either into an either of sequence
|
// SequenceArray converts a homogeneous sequence of either into an either of sequence
|
||||||
func SequenceArray[A any](ma []ReaderEither[A]) ReaderEither[[]A] {
|
func SequenceArray[A any](ma []ReaderEither[A]) ReaderEither[[]A] {
|
||||||
return RE.SequenceArray[ReaderEither[A], ReaderEither[[]A]](ma)
|
return RE.SequenceArray[ReaderEither[A], ReaderEither[[]A]](ma)
|
||||||
|
|||||||
@@ -25,6 +25,11 @@ 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)
|
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
|
// SequenceArray converts a homogeneous sequence of either into an either of sequence
|
||||||
func SequenceArray[A any](ma []ReaderIO[A]) ReaderIO[[]A] {
|
func SequenceArray[A any](ma []ReaderIO[A]) ReaderIO[[]A] {
|
||||||
return R.SequenceArray[ReaderIO[A], ReaderIO[[]A]](ma)
|
return R.SequenceArray[ReaderIO[A], ReaderIO[[]A]](ma)
|
||||||
|
|||||||
@@ -2,8 +2,7 @@ package readerioeither
|
|||||||
|
|
||||||
// Code generated by go generate; DO NOT EDIT.
|
// Code generated by go generate; DO NOT EDIT.
|
||||||
// This file was generated by robots at
|
// This file was generated by robots at
|
||||||
// 2023-08-11 11:37:34.0836986 +0200 CEST m=+0.009764601
|
// 2023-08-17 22:58:56.457404 +0200 CEST m=+0.024265101
|
||||||
|
|
||||||
|
|
||||||
import (
|
import (
|
||||||
"context"
|
"context"
|
||||||
@@ -15,515 +14,515 @@ import (
|
|||||||
// Eitherize0 converts a function with 0 parameters returning a tuple into a function with 0 parameters returning a [ReaderIOEither[R]]
|
// 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]
|
// The inverse function is [Uneitherize0]
|
||||||
func Eitherize0[F ~func(context.Context) (R, error), R any](f F) func() ReaderIOEither[R] {
|
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]]
|
// 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]
|
// The inverse function is [Uneitherize1]
|
||||||
func Eitherize1[F ~func(context.Context, T0) (R, error), T0, R any](f F) func(T0) ReaderIOEither[R] {
|
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].
|
// SequenceT1 converts 1 [ReaderIOEither] into a [ReaderIOEither] of a [T.Tuple1].
|
||||||
func SequenceT1[T1 any](t1 ReaderIOEither[T1]) ReaderIOEither[T.Tuple1[T1]] {
|
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].
|
// SequenceSeqT1 converts 1 [ReaderIOEither] into a [ReaderIOEither] of a [T.Tuple1].
|
||||||
func SequenceSeqT1[T1 any](t1 ReaderIOEither[T1]) ReaderIOEither[T.Tuple1[T1]] {
|
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].
|
// SequenceParT1 converts 1 [ReaderIOEither] into a [ReaderIOEither] of a [T.Tuple1].
|
||||||
func SequenceParT1[T1 any](t1 ReaderIOEither[T1]) ReaderIOEither[T.Tuple1[T1]] {
|
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].
|
// 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]] {
|
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].
|
// 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]] {
|
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].
|
// 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]] {
|
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].
|
// 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]] {
|
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].
|
// 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]] {
|
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].
|
// 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]] {
|
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]]
|
// 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]
|
// 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] {
|
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].
|
// 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]] {
|
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].
|
// 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]] {
|
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].
|
// 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]] {
|
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].
|
// 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]] {
|
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].
|
// 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]] {
|
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].
|
// 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]] {
|
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].
|
// 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]] {
|
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].
|
// 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]] {
|
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].
|
// 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]] {
|
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]]
|
// 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]
|
// 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] {
|
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].
|
// 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]] {
|
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].
|
// 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]] {
|
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].
|
// 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]] {
|
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].
|
// 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]] {
|
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].
|
// 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]] {
|
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].
|
// 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]] {
|
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].
|
// 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]] {
|
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].
|
// 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]] {
|
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].
|
// 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]] {
|
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]]
|
// 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]
|
// 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] {
|
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].
|
// 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]] {
|
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].
|
// 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]] {
|
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].
|
// 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]] {
|
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].
|
// 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]] {
|
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].
|
// 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]] {
|
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].
|
// 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]] {
|
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].
|
// 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]] {
|
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].
|
// 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]] {
|
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].
|
// 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]] {
|
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]]
|
// 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]
|
// 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] {
|
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].
|
// 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]] {
|
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].
|
// 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]] {
|
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].
|
// 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]] {
|
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].
|
// 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]] {
|
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].
|
// 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]] {
|
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].
|
// 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]] {
|
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].
|
// 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]] {
|
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].
|
// 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]] {
|
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].
|
// 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]] {
|
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]]
|
// 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]
|
// 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] {
|
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].
|
// 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]] {
|
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].
|
// 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]] {
|
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].
|
// 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]] {
|
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].
|
// 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]] {
|
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].
|
// 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]] {
|
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].
|
// 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]] {
|
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].
|
// 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]] {
|
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].
|
// 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]] {
|
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].
|
// 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]] {
|
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]]
|
// 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]
|
// 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] {
|
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].
|
// 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]] {
|
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].
|
// 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]] {
|
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].
|
// 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]] {
|
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].
|
// 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]] {
|
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].
|
// 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]] {
|
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].
|
// 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]] {
|
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].
|
// 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]] {
|
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].
|
// 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]] {
|
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].
|
// 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]] {
|
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]]
|
// 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]
|
// 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] {
|
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].
|
// 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]] {
|
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].
|
// 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]] {
|
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].
|
// 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]] {
|
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].
|
// 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]] {
|
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].
|
// 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]] {
|
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].
|
// 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]] {
|
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].
|
// 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]] {
|
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].
|
// 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]] {
|
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].
|
// 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]] {
|
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]]
|
// 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]
|
// 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] {
|
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].
|
// 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]] {
|
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].
|
// 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]] {
|
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].
|
// 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]] {
|
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].
|
// 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]] {
|
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].
|
// 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]] {
|
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].
|
// 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]] {
|
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].
|
// 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]] {
|
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].
|
// 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]] {
|
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].
|
// 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]] {
|
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]]
|
// 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]
|
// 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] {
|
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].
|
// 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]] {
|
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].
|
// 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]] {
|
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].
|
// 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]] {
|
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].
|
// 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]] {
|
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].
|
// 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]] {
|
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].
|
// 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]] {
|
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].
|
// 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]] {
|
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].
|
// 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]] {
|
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].
|
// 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]] {
|
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)
|
||||||
}
|
}
|
||||||
|
|||||||
File diff suppressed because it is too large
Load Diff
@@ -62,6 +62,25 @@ func TraverseArray[
|
|||||||
)
|
)
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// TraverseArrayWithIndex transforms an array
|
||||||
|
func TraverseArrayWithIndex[
|
||||||
|
AS ~[]A,
|
||||||
|
GRBS ~func(context.Context) GIOBS,
|
||||||
|
GRB ~func(context.Context) GIOB,
|
||||||
|
GIOBS ~func() E.Either[error, BS],
|
||||||
|
GIOB ~func() E.Either[error, B],
|
||||||
|
BS ~[]B,
|
||||||
|
A, B any](f func(int, A) GRB) func(AS) GRBS {
|
||||||
|
|
||||||
|
return RA.TraverseWithIndex[AS](
|
||||||
|
Of[GRBS, GIOBS, BS],
|
||||||
|
Map[GRBS, func(context.Context) func() E.Either[error, func(B) BS], GIOBS, func() E.Either[error, func(B) BS], BS, func(B) BS],
|
||||||
|
Ap[GRBS, func(context.Context) func() E.Either[error, func(B) BS], GRB],
|
||||||
|
|
||||||
|
f,
|
||||||
|
)
|
||||||
|
}
|
||||||
|
|
||||||
// SequenceArray converts a homogeneous sequence of either into an either of sequence
|
// SequenceArray converts a homogeneous sequence of either into an either of sequence
|
||||||
func SequenceArray[
|
func SequenceArray[
|
||||||
AS ~[]A,
|
AS ~[]A,
|
||||||
@@ -115,6 +134,26 @@ func TraverseRecord[K comparable,
|
|||||||
)
|
)
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// TraverseRecordWithIndex transforms a record
|
||||||
|
func TraverseRecordWithIndex[K comparable,
|
||||||
|
AS ~map[K]A,
|
||||||
|
GRBS ~func(context.Context) GIOBS,
|
||||||
|
GRB ~func(context.Context) GIOB,
|
||||||
|
GIOBS ~func() E.Either[error, BS],
|
||||||
|
GIOB ~func() E.Either[error, B],
|
||||||
|
BS ~map[K]B,
|
||||||
|
|
||||||
|
A, B any](f func(K, A) GRB) func(AS) GRBS {
|
||||||
|
|
||||||
|
return RR.TraverseWithIndex[AS](
|
||||||
|
Of[GRBS, GIOBS, BS],
|
||||||
|
Map[GRBS, func(context.Context) func() E.Either[error, func(B) BS], GIOBS, func() E.Either[error, func(B) BS], BS, func(B) BS],
|
||||||
|
Ap[GRBS, func(context.Context) func() E.Either[error, func(B) BS], GRB],
|
||||||
|
|
||||||
|
f,
|
||||||
|
)
|
||||||
|
}
|
||||||
|
|
||||||
// SequenceRecord converts a homogeneous sequence of either into an either of sequence
|
// SequenceRecord converts a homogeneous sequence of either into an either of sequence
|
||||||
func SequenceRecord[K comparable,
|
func SequenceRecord[K comparable,
|
||||||
AS ~map[K]A,
|
AS ~map[K]A,
|
||||||
|
|||||||
@@ -21,6 +21,13 @@ import (
|
|||||||
"testing"
|
"testing"
|
||||||
|
|
||||||
H "net/http"
|
H "net/http"
|
||||||
|
|
||||||
|
R "github.com/IBM/fp-go/context/readerioeither"
|
||||||
|
E "github.com/IBM/fp-go/either"
|
||||||
|
"github.com/IBM/fp-go/errors"
|
||||||
|
F "github.com/IBM/fp-go/function"
|
||||||
|
IOE "github.com/IBM/fp-go/ioeither"
|
||||||
|
"github.com/stretchr/testify/assert"
|
||||||
)
|
)
|
||||||
|
|
||||||
type PostItem struct {
|
type PostItem struct {
|
||||||
@@ -30,6 +37,47 @@ type PostItem struct {
|
|||||||
Body string `json:"body"`
|
Body string `json:"body"`
|
||||||
}
|
}
|
||||||
|
|
||||||
|
func getTitle(item PostItem) string {
|
||||||
|
return item.Title
|
||||||
|
}
|
||||||
|
|
||||||
|
type simpleRequestBuilder struct {
|
||||||
|
method string
|
||||||
|
url string
|
||||||
|
headers H.Header
|
||||||
|
}
|
||||||
|
|
||||||
|
func requestBuilder() simpleRequestBuilder {
|
||||||
|
return simpleRequestBuilder{method: "GET"}
|
||||||
|
}
|
||||||
|
|
||||||
|
func (b simpleRequestBuilder) WithURL(url string) simpleRequestBuilder {
|
||||||
|
b.url = url
|
||||||
|
return b
|
||||||
|
}
|
||||||
|
|
||||||
|
func (b simpleRequestBuilder) WithHeader(key, value string) simpleRequestBuilder {
|
||||||
|
if b.headers == nil {
|
||||||
|
b.headers = make(H.Header)
|
||||||
|
} else {
|
||||||
|
b.headers = b.headers.Clone()
|
||||||
|
}
|
||||||
|
b.headers.Set(key, value)
|
||||||
|
return b
|
||||||
|
}
|
||||||
|
|
||||||
|
func (b simpleRequestBuilder) Build() R.ReaderIOEither[*H.Request] {
|
||||||
|
return func(ctx context.Context) IOE.IOEither[error, *H.Request] {
|
||||||
|
return IOE.TryCatchError(func() (*H.Request, error) {
|
||||||
|
req, err := H.NewRequestWithContext(ctx, b.method, b.url, nil)
|
||||||
|
if err == nil {
|
||||||
|
req.Header = b.headers
|
||||||
|
}
|
||||||
|
return req, err
|
||||||
|
})
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
func TestSendSingleRequest(t *testing.T) {
|
func TestSendSingleRequest(t *testing.T) {
|
||||||
|
|
||||||
client := MakeClient(H.DefaultClient)
|
client := MakeClient(H.DefaultClient)
|
||||||
@@ -40,7 +88,70 @@ func TestSendSingleRequest(t *testing.T) {
|
|||||||
|
|
||||||
resp1 := readItem(req1)
|
resp1 := readItem(req1)
|
||||||
|
|
||||||
resE := resp1(context.Background())()
|
resE := resp1(context.TODO())()
|
||||||
|
|
||||||
fmt.Println(resE)
|
fmt.Println(resE)
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// setHeaderUnsafe updates a header value in a request object by mutating the request object
|
||||||
|
func setHeaderUnsafe(key, value string) func(*H.Request) *H.Request {
|
||||||
|
return func(req *H.Request) *H.Request {
|
||||||
|
req.Header.Set(key, value)
|
||||||
|
return req
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
func TestSendSingleRequestWithHeaderUnsafe(t *testing.T) {
|
||||||
|
|
||||||
|
client := MakeClient(H.DefaultClient)
|
||||||
|
|
||||||
|
// this is not safe from a puristic perspective, because the map call mutates the request object
|
||||||
|
req1 := F.Pipe2(
|
||||||
|
"https://jsonplaceholder.typicode.com/posts/1",
|
||||||
|
MakeGetRequest,
|
||||||
|
R.Map(setHeaderUnsafe("Content-Type", "text/html")),
|
||||||
|
)
|
||||||
|
|
||||||
|
readItem := ReadJson[PostItem](client)
|
||||||
|
|
||||||
|
resp1 := F.Pipe2(
|
||||||
|
req1,
|
||||||
|
readItem,
|
||||||
|
R.Map(getTitle),
|
||||||
|
)
|
||||||
|
|
||||||
|
res := F.Pipe1(
|
||||||
|
resp1(context.TODO())(),
|
||||||
|
E.GetOrElse(errors.ToString),
|
||||||
|
)
|
||||||
|
|
||||||
|
assert.Equal(t, "sunt aut facere repellat provident occaecati excepturi optio reprehenderit", res)
|
||||||
|
}
|
||||||
|
|
||||||
|
func TestSendSingleRequestWithHeaderSafe(t *testing.T) {
|
||||||
|
|
||||||
|
client := MakeClient(H.DefaultClient)
|
||||||
|
|
||||||
|
// the request builder assembles config values to construct
|
||||||
|
// the final http request. Each `With` step creates a copy of the settings
|
||||||
|
// so the flow is pure
|
||||||
|
request := requestBuilder().
|
||||||
|
WithURL("https://jsonplaceholder.typicode.com/posts/1").
|
||||||
|
WithHeader("Content-Type", "text/html").
|
||||||
|
Build()
|
||||||
|
|
||||||
|
readItem := ReadJson[PostItem](client)
|
||||||
|
|
||||||
|
response := F.Pipe2(
|
||||||
|
request,
|
||||||
|
readItem,
|
||||||
|
R.Map(getTitle),
|
||||||
|
)
|
||||||
|
|
||||||
|
res := F.Pipe1(
|
||||||
|
response(context.TODO())(),
|
||||||
|
E.GetOrElse(errors.ToString),
|
||||||
|
)
|
||||||
|
|
||||||
|
assert.Equal(t, "sunt aut facere repellat provident occaecati excepturi optio reprehenderit", res)
|
||||||
|
}
|
||||||
|
|||||||
@@ -24,6 +24,11 @@ func TraverseArray[A, B any](f func(A) ReaderIOEither[B]) func([]A) ReaderIOEith
|
|||||||
return G.TraverseArray[[]A, ReaderIOEither[[]B]](f)
|
return G.TraverseArray[[]A, ReaderIOEither[[]B]](f)
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// TraverseArrayWithIndex uses transforms an array [[]A] into [[]ReaderIOEither[B]] and then resolves that into a [ReaderIOEither[[]B]]
|
||||||
|
func TraverseArrayWithIndex[A, B any](f func(int, A) ReaderIOEither[B]) func([]A) ReaderIOEither[[]B] {
|
||||||
|
return G.TraverseArrayWithIndex[[]A, ReaderIOEither[[]B]](f)
|
||||||
|
}
|
||||||
|
|
||||||
// SequenceArray converts a homogeneous sequence of either into an either of sequence
|
// SequenceArray converts a homogeneous sequence of either into an either of sequence
|
||||||
func SequenceArray[A any](ma []ReaderIOEither[A]) ReaderIOEither[[]A] {
|
func SequenceArray[A any](ma []ReaderIOEither[A]) ReaderIOEither[[]A] {
|
||||||
return G.SequenceArray[[]A, []ReaderIOEither[A], ReaderIOEither[[]A]](ma)
|
return G.SequenceArray[[]A, []ReaderIOEither[A], ReaderIOEither[[]A]](ma)
|
||||||
@@ -34,6 +39,11 @@ func TraverseRecord[K comparable, A, B any](f func(A) ReaderIOEither[B]) func(ma
|
|||||||
return G.TraverseRecord[K, map[K]A, ReaderIOEither[map[K]B]](f)
|
return G.TraverseRecord[K, map[K]A, ReaderIOEither[map[K]B]](f)
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// TraverseRecordWithIndex uses transforms a record [map[K]A] into [map[K]ReaderIOEither[B]] and then resolves that into a [ReaderIOEither[map[K]B]]
|
||||||
|
func TraverseRecordWithIndex[K comparable, A, B any](f func(K, A) ReaderIOEither[B]) func(map[K]A) ReaderIOEither[map[K]B] {
|
||||||
|
return G.TraverseRecordWithIndex[K, map[K]A, ReaderIOEither[map[K]B]](f)
|
||||||
|
}
|
||||||
|
|
||||||
// SequenceRecord converts a homogeneous sequence of either into an either of sequence
|
// SequenceRecord converts a homogeneous sequence of either into an either of sequence
|
||||||
func SequenceRecord[K comparable, A any](ma map[K]ReaderIOEither[A]) ReaderIOEither[map[K]A] {
|
func SequenceRecord[K comparable, A any](ma map[K]ReaderIOEither[A]) ReaderIOEither[map[K]A] {
|
||||||
return G.SequenceRecord[K, map[K]A, map[K]ReaderIOEither[A], ReaderIOEither[map[K]A]](ma)
|
return G.SequenceRecord[K, map[K]A, map[K]ReaderIOEither[A], ReaderIOEither[map[K]A]](ma)
|
||||||
|
|||||||
@@ -20,7 +20,7 @@ import (
|
|||||||
RA "github.com/IBM/fp-go/internal/array"
|
RA "github.com/IBM/fp-go/internal/array"
|
||||||
)
|
)
|
||||||
|
|
||||||
// TraverseArray transforms an array
|
// TraverseArrayG transforms an array
|
||||||
func TraverseArrayG[GA ~[]A, GB ~[]B, E, A, B any](f func(A) Either[E, B]) func(GA) Either[E, GB] {
|
func TraverseArrayG[GA ~[]A, GB ~[]B, E, A, B any](f func(A) Either[E, B]) func(GA) Either[E, GB] {
|
||||||
return RA.Traverse[GA](
|
return RA.Traverse[GA](
|
||||||
Of[E, GB],
|
Of[E, GB],
|
||||||
@@ -36,6 +36,22 @@ func TraverseArray[E, A, B any](f func(A) Either[E, B]) func([]A) Either[E, []B]
|
|||||||
return TraverseArrayG[[]A, []B](f)
|
return TraverseArrayG[[]A, []B](f)
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// TraverseArrayWithIndexG transforms an array
|
||||||
|
func TraverseArrayWithIndexG[GA ~[]A, GB ~[]B, E, A, B any](f func(int, A) Either[E, B]) func(GA) Either[E, GB] {
|
||||||
|
return RA.TraverseWithIndex[GA](
|
||||||
|
Of[E, GB],
|
||||||
|
Map[E, GB, func(B) GB],
|
||||||
|
Ap[GB, E, B],
|
||||||
|
|
||||||
|
f,
|
||||||
|
)
|
||||||
|
}
|
||||||
|
|
||||||
|
// TraverseArrayWithIndex transforms an array
|
||||||
|
func TraverseArrayWithIndex[E, A, B any](f func(int, A) Either[E, B]) func([]A) Either[E, []B] {
|
||||||
|
return TraverseArrayWithIndexG[[]A, []B](f)
|
||||||
|
}
|
||||||
|
|
||||||
func SequenceArrayG[GA ~[]A, GOA ~[]Either[E, A], E, A any](ma GOA) Either[E, GA] {
|
func SequenceArrayG[GA ~[]A, GOA ~[]Either[E, A], E, A any](ma GOA) Either[E, GA] {
|
||||||
return TraverseArrayG[GOA, GA](F.Identity[Either[E, A]])(ma)
|
return TraverseArrayG[GOA, GA](F.Identity[Either[E, A]])(ma)
|
||||||
}
|
}
|
||||||
@@ -44,3 +60,15 @@ func SequenceArrayG[GA ~[]A, GOA ~[]Either[E, A], E, A any](ma GOA) Either[E, GA
|
|||||||
func SequenceArray[E, A any](ma []Either[E, A]) Either[E, []A] {
|
func SequenceArray[E, A any](ma []Either[E, A]) Either[E, []A] {
|
||||||
return SequenceArrayG[[]A](ma)
|
return SequenceArrayG[[]A](ma)
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// CompactArrayG discards the none values and keeps the some values
|
||||||
|
func CompactArrayG[A1 ~[]Either[E, A], A2 ~[]A, E, A any](fa A1) A2 {
|
||||||
|
return RA.Reduce(fa, func(out A2, value Either[E, A]) A2 {
|
||||||
|
return MonadFold(value, F.Constant1[E](out), F.Bind1st(RA.Append[A2, A], out))
|
||||||
|
}, make(A2, len(fa)))
|
||||||
|
}
|
||||||
|
|
||||||
|
// CompactArray discards the none values and keeps the some values
|
||||||
|
func CompactArray[E, A any](fa []Either[E, A]) []A {
|
||||||
|
return CompactArrayG[[]Either[E, A], []A](fa)
|
||||||
|
}
|
||||||
|
|||||||
@@ -13,6 +13,7 @@
|
|||||||
// See the License for the specific language governing permissions and
|
// See the License for the specific language governing permissions and
|
||||||
// limitations under the License.
|
// limitations under the License.
|
||||||
|
|
||||||
|
// Package option defines the [Either] datastructure and its monadic operations
|
||||||
package either
|
package either
|
||||||
|
|
||||||
//go:generate go run .. either --count 10 --filename gen.go
|
//go:generate go run .. either --count 10 --filename gen.go
|
||||||
|
|||||||
@@ -91,11 +91,11 @@ func MonadChainTo[E, A, B any](ma Either[E, A], mb Either[E, B]) Either[E, B] {
|
|||||||
return mb
|
return mb
|
||||||
}
|
}
|
||||||
|
|
||||||
func MonadChainOptionK[E, A, B any](onNone func() E, ma Either[E, A], f func(A) O.Option[B]) Either[E, B] {
|
func MonadChainOptionK[A, B, E any](onNone func() E, ma Either[E, A], f func(A) O.Option[B]) Either[E, B] {
|
||||||
return MonadChain(ma, F.Flow2(f, FromOption[E, B](onNone)))
|
return MonadChain(ma, F.Flow2(f, FromOption[E, B](onNone)))
|
||||||
}
|
}
|
||||||
|
|
||||||
func ChainOptionK[E, A, B any](onNone func() E) func(func(A) O.Option[B]) func(Either[E, A]) Either[E, B] {
|
func ChainOptionK[A, B, E any](onNone func() E) func(func(A) O.Option[B]) func(Either[E, A]) Either[E, B] {
|
||||||
from := FromOption[E, B](onNone)
|
from := FromOption[E, B](onNone)
|
||||||
return func(f func(A) O.Option[B]) func(Either[E, A]) Either[E, B] {
|
return func(f func(A) O.Option[B]) func(Either[E, A]) Either[E, B] {
|
||||||
return Chain(F.Flow2(f, from))
|
return Chain(F.Flow2(f, from))
|
||||||
@@ -146,8 +146,8 @@ func FromOption[E, A any](onNone func() E) func(O.Option[A]) Either[E, A] {
|
|||||||
return O.Fold(F.Nullary2(onNone, Left[A, E]), Right[E, A])
|
return O.Fold(F.Nullary2(onNone, Left[A, E]), Right[E, A])
|
||||||
}
|
}
|
||||||
|
|
||||||
func ToOption[E, A any]() func(Either[E, A]) O.Option[A] {
|
func ToOption[E, A any](ma Either[E, A]) O.Option[A] {
|
||||||
return Fold(F.Ignore1of1[E](O.None[A]), O.Some[A])
|
return MonadFold(ma, F.Ignore1of1[E](O.None[A]), O.Some[A])
|
||||||
}
|
}
|
||||||
|
|
||||||
func FromError[A any](f func(a A) error) func(A) Either[error, A] {
|
func FromError[A any](f func(a A) error) func(A) Either[error, A] {
|
||||||
@@ -182,7 +182,7 @@ func FromPredicate[E, A any](pred func(A) bool, onFalse func(A) E) func(A) Eithe
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
func FromNillable[E, A any](e E) func(*A) Either[E, *A] {
|
func FromNillable[A, E any](e E) func(*A) Either[E, *A] {
|
||||||
return FromPredicate(F.IsNonNil[A], F.Constant1[*A](e))
|
return FromPredicate(F.IsNonNil[A], F.Constant1[*A](e))
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -209,7 +209,7 @@ func OrElse[E, A any](onLeft func(e E) Either[E, A]) func(Either[E, A]) Either[E
|
|||||||
return Fold(onLeft, Of[E, A])
|
return Fold(onLeft, Of[E, A])
|
||||||
}
|
}
|
||||||
|
|
||||||
func ToType[E, A any](onError func(any) E) func(any) Either[E, A] {
|
func ToType[A, E any](onError func(any) E) func(any) Either[E, A] {
|
||||||
return func(value any) Either[E, A] {
|
return func(value any) Either[E, A] {
|
||||||
return F.Pipe2(
|
return F.Pipe2(
|
||||||
value,
|
value,
|
||||||
|
|||||||
@@ -100,7 +100,7 @@ func TestChainFirst(t *testing.T) {
|
|||||||
}
|
}
|
||||||
|
|
||||||
func TestChainOptionK(t *testing.T) {
|
func TestChainOptionK(t *testing.T) {
|
||||||
f := ChainOptionK[string, int, int](F.Constant("a"))(func(n int) O.Option[int] {
|
f := ChainOptionK[int, int](F.Constant("a"))(func(n int) O.Option[int] {
|
||||||
if n > 0 {
|
if n > 0 {
|
||||||
return O.Some(n)
|
return O.Some(n)
|
||||||
}
|
}
|
||||||
|
|||||||
58
either/examples_create_test.go
Normal file
58
either/examples_create_test.go
Normal file
@@ -0,0 +1,58 @@
|
|||||||
|
// 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 either
|
||||||
|
|
||||||
|
import (
|
||||||
|
"fmt"
|
||||||
|
|
||||||
|
"github.com/IBM/fp-go/errors"
|
||||||
|
)
|
||||||
|
|
||||||
|
func ExampleEither_creation() {
|
||||||
|
// Build an Either
|
||||||
|
leftValue := Left[string](fmt.Errorf("some error"))
|
||||||
|
rightValue := Right[error]("value")
|
||||||
|
|
||||||
|
// Build from a value
|
||||||
|
fromNillable := FromNillable[string](fmt.Errorf("value was nil"))
|
||||||
|
leftFromNil := fromNillable(nil)
|
||||||
|
value := "value"
|
||||||
|
rightFromPointer := fromNillable(&value)
|
||||||
|
|
||||||
|
// some predicate
|
||||||
|
isEven := func(num int) bool {
|
||||||
|
return num%2 == 0
|
||||||
|
}
|
||||||
|
fromEven := FromPredicate(isEven, errors.OnSome[int]("%d is an odd number"))
|
||||||
|
leftFromPred := fromEven(3)
|
||||||
|
rightFromPred := fromEven(4)
|
||||||
|
|
||||||
|
fmt.Println(leftValue)
|
||||||
|
fmt.Println(rightValue)
|
||||||
|
fmt.Println(leftFromNil)
|
||||||
|
fmt.Println(IsRight(rightFromPointer))
|
||||||
|
fmt.Println(leftFromPred)
|
||||||
|
fmt.Println(rightFromPred)
|
||||||
|
|
||||||
|
// Output:
|
||||||
|
// Left[*errors.errorString, string](some error)
|
||||||
|
// Right[<nil>, string](value)
|
||||||
|
// Left[*errors.errorString, *string](value was nil)
|
||||||
|
// true
|
||||||
|
// Left[*errors.errorString, int](3 is an odd number)
|
||||||
|
// Right[<nil>, int](4)
|
||||||
|
|
||||||
|
}
|
||||||
64
either/examples_extract_test.go
Normal file
64
either/examples_extract_test.go
Normal file
@@ -0,0 +1,64 @@
|
|||||||
|
// 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 either
|
||||||
|
|
||||||
|
import (
|
||||||
|
"fmt"
|
||||||
|
|
||||||
|
F "github.com/IBM/fp-go/function"
|
||||||
|
N "github.com/IBM/fp-go/number"
|
||||||
|
)
|
||||||
|
|
||||||
|
func ExampleEither_extraction() {
|
||||||
|
leftValue := Left[int](fmt.Errorf("Division by Zero!"))
|
||||||
|
rightValue := Right[error](10)
|
||||||
|
|
||||||
|
// Convert Either[E, A] to A with a default value
|
||||||
|
leftWithDefault := GetOrElse(F.Constant1[error](0))(leftValue) // 0
|
||||||
|
rightWithDefault := GetOrElse(F.Constant1[error](0))(rightValue) // 10
|
||||||
|
|
||||||
|
// Apply a different function on Left(...)/Right(...)
|
||||||
|
doubleOrZero := Fold(F.Constant1[error](0), N.Mul(2)) // func(Either[error, int]) int
|
||||||
|
doubleFromLeft := doubleOrZero(leftValue) // 0
|
||||||
|
doubleFromRight := doubleOrZero(rightValue) // 20
|
||||||
|
|
||||||
|
// Pro-tip: Fold is short for the following:
|
||||||
|
doubleOrZeroBis := F.Flow2(
|
||||||
|
Map[error](N.Mul(2)),
|
||||||
|
GetOrElse(F.Constant1[error](0)),
|
||||||
|
)
|
||||||
|
doubleFromLeftBis := doubleOrZeroBis(leftValue) // 0
|
||||||
|
doubleFromRightBis := doubleOrZeroBis(rightValue) // 20
|
||||||
|
|
||||||
|
fmt.Println(leftValue)
|
||||||
|
fmt.Println(rightValue)
|
||||||
|
fmt.Println(leftWithDefault)
|
||||||
|
fmt.Println(rightWithDefault)
|
||||||
|
fmt.Println(doubleFromLeft)
|
||||||
|
fmt.Println(doubleFromRight)
|
||||||
|
fmt.Println(doubleFromLeftBis)
|
||||||
|
fmt.Println(doubleFromRightBis)
|
||||||
|
|
||||||
|
// Output:
|
||||||
|
// Left[*errors.errorString, int](Division by Zero!)
|
||||||
|
// Right[<nil>, int](10)
|
||||||
|
// 0
|
||||||
|
// 10
|
||||||
|
// 0
|
||||||
|
// 20
|
||||||
|
// 0
|
||||||
|
// 20
|
||||||
|
}
|
||||||
949
either/gen.go
949
either/gen.go
File diff suppressed because it is too large
Load Diff
@@ -20,7 +20,7 @@ import (
|
|||||||
RR "github.com/IBM/fp-go/internal/record"
|
RR "github.com/IBM/fp-go/internal/record"
|
||||||
)
|
)
|
||||||
|
|
||||||
// TraverseRecord transforms a record of options into an option of a record
|
// TraverseRecordG transforms a record of options into an option of a record
|
||||||
func TraverseRecordG[GA ~map[K]A, GB ~map[K]B, K comparable, E, A, B any](f func(A) Either[E, B]) func(GA) Either[E, GB] {
|
func TraverseRecordG[GA ~map[K]A, GB ~map[K]B, K comparable, E, A, B any](f func(A) Either[E, B]) func(GA) Either[E, GB] {
|
||||||
return RR.Traverse[GA](
|
return RR.Traverse[GA](
|
||||||
Of[E, GB],
|
Of[E, GB],
|
||||||
@@ -35,6 +35,21 @@ func TraverseRecord[K comparable, E, A, B any](f func(A) Either[E, B]) func(map[
|
|||||||
return TraverseRecordG[map[K]A, map[K]B](f)
|
return TraverseRecordG[map[K]A, map[K]B](f)
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// TraverseRecordWithIndexG transforms a record of options into an option of a record
|
||||||
|
func TraverseRecordWithIndexG[GA ~map[K]A, GB ~map[K]B, K comparable, E, A, B any](f func(K, A) Either[E, B]) func(GA) Either[E, GB] {
|
||||||
|
return RR.TraverseWithIndex[GA](
|
||||||
|
Of[E, GB],
|
||||||
|
Map[E, GB, func(B) GB],
|
||||||
|
Ap[GB, E, B],
|
||||||
|
f,
|
||||||
|
)
|
||||||
|
}
|
||||||
|
|
||||||
|
// TraverseRecordWithIndex transforms a record of eithers into an either of a record
|
||||||
|
func TraverseRecordWithIndex[K comparable, E, A, B any](f func(K, A) Either[E, B]) func(map[K]A) Either[E, map[K]B] {
|
||||||
|
return TraverseRecordWithIndexG[map[K]A, map[K]B](f)
|
||||||
|
}
|
||||||
|
|
||||||
func SequenceRecordG[GA ~map[K]A, GOA ~map[K]Either[E, A], K comparable, E, A any](ma GOA) Either[E, GA] {
|
func SequenceRecordG[GA ~map[K]A, GOA ~map[K]Either[E, A], K comparable, E, A any](ma GOA) Either[E, GA] {
|
||||||
return TraverseRecordG[GOA, GA](F.Identity[Either[E, A]])(ma)
|
return TraverseRecordG[GOA, GA](F.Identity[Either[E, A]])(ma)
|
||||||
}
|
}
|
||||||
@@ -43,3 +58,24 @@ func SequenceRecordG[GA ~map[K]A, GOA ~map[K]Either[E, A], K comparable, E, A an
|
|||||||
func SequenceRecord[K comparable, E, A any](ma map[K]Either[E, A]) Either[E, map[K]A] {
|
func SequenceRecord[K comparable, E, A any](ma map[K]Either[E, A]) Either[E, map[K]A] {
|
||||||
return SequenceRecordG[map[K]A](ma)
|
return SequenceRecordG[map[K]A](ma)
|
||||||
}
|
}
|
||||||
|
|
||||||
|
func upsertAtReadWrite[M ~map[K]V, K comparable, V any](r M, k K, v V) M {
|
||||||
|
r[k] = v
|
||||||
|
return r
|
||||||
|
}
|
||||||
|
|
||||||
|
// CompactRecordG discards the noe values and keeps the some values
|
||||||
|
func CompactRecordG[M1 ~map[K]Either[E, A], M2 ~map[K]A, K comparable, E, A any](m M1) M2 {
|
||||||
|
out := make(M2)
|
||||||
|
onLeft := F.Constant1[E](out)
|
||||||
|
return RR.ReduceWithIndex(m, func(key K, _ M2, value Either[E, A]) M2 {
|
||||||
|
return MonadFold(value, onLeft, func(v A) M2 {
|
||||||
|
return upsertAtReadWrite(out, key, v)
|
||||||
|
})
|
||||||
|
}, out)
|
||||||
|
}
|
||||||
|
|
||||||
|
// CompactRecord discards all none values and keeps the somes
|
||||||
|
func CompactRecord[K comparable, E, A any](m map[K]Either[E, A]) map[K]A {
|
||||||
|
return CompactRecordG[map[K]Either[E, A], map[K]A](m)
|
||||||
|
}
|
||||||
|
|||||||
37
either/record_test.go
Normal file
37
either/record_test.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 either
|
||||||
|
|
||||||
|
import (
|
||||||
|
"testing"
|
||||||
|
|
||||||
|
"github.com/stretchr/testify/assert"
|
||||||
|
)
|
||||||
|
|
||||||
|
func TestCompactRecord(t *testing.T) {
|
||||||
|
// make the map
|
||||||
|
m := make(map[string]Either[string, int])
|
||||||
|
m["foo"] = Left[int]("error")
|
||||||
|
m["bar"] = Right[string](1)
|
||||||
|
// compact it
|
||||||
|
m1 := CompactRecord(m)
|
||||||
|
// check expected
|
||||||
|
exp := map[string]int{
|
||||||
|
"bar": 1,
|
||||||
|
}
|
||||||
|
|
||||||
|
assert.Equal(t, exp, m1)
|
||||||
|
}
|
||||||
@@ -27,13 +27,13 @@ HKTRB = HKT<Either[B]>
|
|||||||
HKTA = HKT<A>
|
HKTA = HKT<A>
|
||||||
HKTB = HKT<B>
|
HKTB = HKT<B>
|
||||||
*/
|
*/
|
||||||
func traverse[E, A, B, HKTA, HKTB, HKTRB any](
|
func traverse[E, A, B, HKTB, HKTRB any](
|
||||||
_of func(Either[E, B]) HKTRB,
|
mof func(Either[E, B]) HKTRB,
|
||||||
_map func(HKTB, func(B) Either[E, B]) HKTRB,
|
mmap func(func(B) Either[E, B]) func(HKTB) HKTRB,
|
||||||
) func(Either[E, A], func(A) HKTB) HKTRB {
|
) func(Either[E, A], func(A) HKTB) HKTRB {
|
||||||
|
|
||||||
left := F.Flow2(Left[B, E], _of)
|
left := F.Flow2(Left[B, E], mof)
|
||||||
right := F.Bind2nd(_map, Right[E, B])
|
right := mmap(Right[E, B])
|
||||||
|
|
||||||
return func(ta Either[E, A], f func(A) HKTB) HKTRB {
|
return func(ta Either[E, A], f func(A) HKTB) HKTRB {
|
||||||
return MonadFold(ta,
|
return MonadFold(ta,
|
||||||
@@ -43,27 +43,21 @@ func traverse[E, A, B, HKTA, HKTB, HKTRB any](
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
func Traverse[E, A, B, HKTA, HKTB, HKTRB any](
|
// Traverse converts an [Either] of some higher kinded type into the higher kinded type of an [Either]
|
||||||
_of func(Either[E, B]) HKTRB,
|
func Traverse[A, E, B, HKTB, HKTRB any](
|
||||||
_map func(HKTB, func(B) Either[E, B]) HKTRB,
|
mof func(Either[E, B]) HKTRB,
|
||||||
|
mmap func(func(B) Either[E, B]) func(HKTB) HKTRB,
|
||||||
) func(func(A) HKTB) func(Either[E, A]) HKTRB {
|
) func(func(A) HKTB) func(Either[E, A]) HKTRB {
|
||||||
delegate := traverse[E, A, B, HKTA](_of, _map)
|
delegate := traverse[E, A, B](mof, mmap)
|
||||||
return func(f func(A) HKTB) func(Either[E, A]) HKTRB {
|
return func(f func(A) HKTB) func(Either[E, A]) HKTRB {
|
||||||
return F.Bind2nd(delegate, f)
|
return F.Bind2nd(delegate, f)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
/*
|
// Sequence converts an [Either] of some higher kinded type into the higher kinded type of an [Either]
|
||||||
*
|
|
||||||
We need to pass the members of the applicative explicitly, because golang does neither support higher kinded types nor template methods on structs or interfaces
|
|
||||||
|
|
||||||
HKTRA = HKT<Either[A]>
|
|
||||||
HKTA = HKT<A>
|
|
||||||
HKTB = HKT<B>
|
|
||||||
*/
|
|
||||||
func Sequence[E, A, HKTA, HKTRA any](
|
func Sequence[E, A, HKTA, HKTRA any](
|
||||||
_of func(Either[E, A]) HKTRA,
|
mof func(Either[E, A]) HKTRA,
|
||||||
_map func(HKTA, func(A) Either[E, A]) HKTRA,
|
mmap func(func(A) Either[E, A]) func(HKTA) HKTRA,
|
||||||
) func(Either[E, HKTA]) HKTRA {
|
) func(Either[E, HKTA]) HKTRA {
|
||||||
return Fold(F.Flow2(Left[A, E], _of), F.Bind2nd(_map, Right[E, A]))
|
return Fold(F.Flow2(Left[A, E], mof), mmap(Right[E, A]))
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -30,9 +30,9 @@ func TestTraverse(t *testing.T) {
|
|||||||
}
|
}
|
||||||
return O.None[int]()
|
return O.None[int]()
|
||||||
}
|
}
|
||||||
trav := Traverse[string, int, int, O.Option[Either[string, int]]](
|
trav := Traverse[int](
|
||||||
O.Of[Either[string, int]],
|
O.Of[Either[string, int]],
|
||||||
O.MonadMap[int, Either[string, int]],
|
O.Map[int, Either[string, int]],
|
||||||
)(f)
|
)(f)
|
||||||
|
|
||||||
assert.Equal(t, O.Of(Left[int]("a")), F.Pipe1(Left[int]("a"), trav))
|
assert.Equal(t, O.Of(Left[int]("a")), F.Pipe1(Left[int]("a"), trav))
|
||||||
@@ -44,7 +44,7 @@ func TestSequence(t *testing.T) {
|
|||||||
|
|
||||||
seq := Sequence(
|
seq := Sequence(
|
||||||
O.Of[Either[string, int]],
|
O.Of[Either[string, int]],
|
||||||
O.MonadMap[int, Either[string, int]],
|
O.Map[int, Either[string, int]],
|
||||||
)
|
)
|
||||||
|
|
||||||
assert.Equal(t, O.Of(Right[string](1)), seq(Right[string](O.Of(1))))
|
assert.Equal(t, O.Of(Right[string](1)), seq(Right[string](O.Of(1))))
|
||||||
|
|||||||
@@ -28,6 +28,22 @@ func OnNone(msg string, args ...any) func() error {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// OnSome generates a unary function that produces a formatted error
|
||||||
|
func OnSome[T any](msg string, args ...any) func(T) error {
|
||||||
|
l := len(args)
|
||||||
|
if l == 0 {
|
||||||
|
return func(value T) error {
|
||||||
|
return fmt.Errorf(msg, value)
|
||||||
|
}
|
||||||
|
}
|
||||||
|
return func(value T) error {
|
||||||
|
data := make([]any, l)
|
||||||
|
copy(data[1:], args)
|
||||||
|
data[0] = value
|
||||||
|
return fmt.Errorf(msg, data...)
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
// OnError generates a unary function that produces a formatted error. The argument
|
// OnError generates a unary function that produces a formatted error. The argument
|
||||||
// to that function is the root cause of the error and the message will be augmented with
|
// to that function is the root cause of the error and the message will be augmented with
|
||||||
// a format string containing %w
|
// a format string containing %w
|
||||||
|
|||||||
@@ -1,451 +1,455 @@
|
|||||||
// Code generated by go generate; DO NOT EDIT.
|
// Code generated by go generate; DO NOT EDIT.
|
||||||
// This file was generated by robots at
|
// This file was generated by robots at
|
||||||
// 2023-08-11 11:37:50.171038 +0200 CEST m=+0.031513801
|
// 2023-08-17 22:59:01.9404821 +0200 CEST m=+0.161366801
|
||||||
|
|
||||||
package function
|
package function
|
||||||
|
|
||||||
// Combinations for a total of 1 arguments
|
// 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.
|
// 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.
|
// 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 {
|
func Bind1of1[F ~func(T1) R, T1, R any](f F) func(T1) func() R {
|
||||||
return func(t1 T1) func() R {
|
return func(t1 T1) func() R {
|
||||||
return func() R {
|
return func() R {
|
||||||
return f(t1)
|
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
|
// 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 {
|
func Ignore1of1[T1 any, F ~func() R, R any](f F) func(T1) R {
|
||||||
return func(t1 T1) R {
|
return func(t1 T1) R {
|
||||||
return f()
|
return f()
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
// Combinations for a total of 2 arguments
|
// 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.
|
// 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.
|
// 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 {
|
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(t1 T1) func(T2) R {
|
||||||
return func(t2 T2) R {
|
return func(t2 T2) R {
|
||||||
return f(t1, t2)
|
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
|
// 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 {
|
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 func(t1 T1, t2 T2) R {
|
||||||
return f(t2)
|
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.
|
// 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.
|
// 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 {
|
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(t2 T2) func(T1) R {
|
||||||
return func(t1 T1) R {
|
return func(t1 T1) R {
|
||||||
return f(t1, t2)
|
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
|
// 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 {
|
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 func(t1 T1, t2 T2) R {
|
||||||
return f(t1)
|
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.
|
// 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.
|
// 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 {
|
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(t1 T1, t2 T2) func() R {
|
||||||
return func() R {
|
return func() R {
|
||||||
return f(t1, t2)
|
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
|
// 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 {
|
func Ignore12of2[T1, T2 any, F ~func() R, R any](f F) func(T1, T2) R {
|
||||||
return func(t1 T1, t2 T2) R {
|
return func(t1 T1, t2 T2) R {
|
||||||
return f()
|
return f()
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
// Combinations for a total of 3 arguments
|
// 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.
|
// 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.
|
// 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 {
|
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(t1 T1) func(T2, T3) R {
|
||||||
return func(t2 T2, t3 T3) R {
|
return func(t2 T2, t3 T3) R {
|
||||||
return f(t1, t2, t3)
|
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
|
// 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 {
|
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 func(t1 T1, t2 T2, t3 T3) R {
|
||||||
return f(t2, t3)
|
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.
|
// 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.
|
// 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 {
|
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(t2 T2) func(T1, T3) R {
|
||||||
return func(t1 T1, t3 T3) R {
|
return func(t1 T1, t3 T3) R {
|
||||||
return f(t1, t2, t3)
|
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
|
// 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 {
|
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 func(t1 T1, t2 T2, t3 T3) R {
|
||||||
return f(t1, t3)
|
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.
|
// 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.
|
// 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 {
|
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(t3 T3) func(T1, T2) R {
|
||||||
return func(t1 T1, t2 T2) R {
|
return func(t1 T1, t2 T2) R {
|
||||||
return f(t1, t2, t3)
|
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
|
// 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 {
|
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 func(t1 T1, t2 T2, t3 T3) R {
|
||||||
return f(t1, t2)
|
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.
|
// 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.
|
// 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 {
|
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(t1 T1, t2 T2) func(T3) R {
|
||||||
return func(t3 T3) R {
|
return func(t3 T3) R {
|
||||||
return f(t1, t2, t3)
|
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
|
// 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 {
|
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 func(t1 T1, t2 T2, t3 T3) R {
|
||||||
return f(t3)
|
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.
|
// 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.
|
// 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 {
|
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(t1 T1, t3 T3) func(T2) R {
|
||||||
return func(t2 T2) R {
|
return func(t2 T2) R {
|
||||||
return f(t1, t2, t3)
|
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
|
// 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 {
|
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 func(t1 T1, t2 T2, t3 T3) R {
|
||||||
return f(t2)
|
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.
|
// 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.
|
// 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 {
|
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(t2 T2, t3 T3) func(T1) R {
|
||||||
return func(t1 T1) R {
|
return func(t1 T1) R {
|
||||||
return f(t1, t2, t3)
|
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
|
// 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 {
|
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 func(t1 T1, t2 T2, t3 T3) R {
|
||||||
return f(t1)
|
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.
|
// 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.
|
// 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 {
|
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(t1 T1, t2 T2, t3 T3) func() R {
|
||||||
return func() R {
|
return func() R {
|
||||||
return f(t1, t2, t3)
|
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
|
// 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 {
|
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 func(t1 T1, t2 T2, t3 T3) R {
|
||||||
return f()
|
return f()
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
// Combinations for a total of 4 arguments
|
// 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.
|
// 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.
|
// 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 {
|
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(t1 T1) func(T2, T3, T4) R {
|
||||||
return func(t2 T2, t3 T3, t4 T4) R {
|
return func(t2 T2, t3 T3, t4 T4) R {
|
||||||
return f(t1, t2, t3, t4)
|
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
|
// 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 {
|
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 func(t1 T1, t2 T2, t3 T3, t4 T4) R {
|
||||||
return f(t2, t3, t4)
|
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.
|
// 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.
|
// 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 {
|
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(t2 T2) func(T1, T3, T4) R {
|
||||||
return func(t1 T1, t3 T3, t4 T4) R {
|
return func(t1 T1, t3 T3, t4 T4) R {
|
||||||
return f(t1, t2, t3, t4)
|
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
|
// 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 {
|
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 func(t1 T1, t2 T2, t3 T3, t4 T4) R {
|
||||||
return f(t1, t3, t4)
|
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.
|
// 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.
|
// 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 {
|
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(t3 T3) func(T1, T2, T4) R {
|
||||||
return func(t1 T1, t2 T2, t4 T4) R {
|
return func(t1 T1, t2 T2, t4 T4) R {
|
||||||
return f(t1, t2, t3, t4)
|
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
|
// 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 {
|
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 func(t1 T1, t2 T2, t3 T3, t4 T4) R {
|
||||||
return f(t1, t2, t4)
|
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.
|
// 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.
|
// 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 {
|
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(t4 T4) func(T1, T2, T3) R {
|
||||||
return func(t1 T1, t2 T2, t3 T3) R {
|
return func(t1 T1, t2 T2, t3 T3) R {
|
||||||
return f(t1, t2, t3, t4)
|
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
|
// 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 {
|
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 func(t1 T1, t2 T2, t3 T3, t4 T4) R {
|
||||||
return f(t1, t2, t3)
|
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.
|
// 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.
|
// 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 {
|
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(t1 T1, t2 T2) func(T3, T4) R {
|
||||||
return func(t3 T3, t4 T4) R {
|
return func(t3 T3, t4 T4) R {
|
||||||
return f(t1, t2, t3, t4)
|
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
|
// 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 {
|
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 func(t1 T1, t2 T2, t3 T3, t4 T4) R {
|
||||||
return f(t3, t4)
|
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.
|
// 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.
|
// 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 {
|
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(t1 T1, t3 T3) func(T2, T4) R {
|
||||||
return func(t2 T2, t4 T4) R {
|
return func(t2 T2, t4 T4) R {
|
||||||
return f(t1, t2, t3, t4)
|
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
|
// 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 {
|
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 func(t1 T1, t2 T2, t3 T3, t4 T4) R {
|
||||||
return f(t2, t4)
|
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.
|
// 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.
|
// 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 {
|
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(t1 T1, t4 T4) func(T2, T3) R {
|
||||||
return func(t2 T2, t3 T3) R {
|
return func(t2 T2, t3 T3) R {
|
||||||
return f(t1, t2, t3, t4)
|
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
|
// 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 {
|
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 func(t1 T1, t2 T2, t3 T3, t4 T4) R {
|
||||||
return f(t2, t3)
|
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.
|
// 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.
|
// 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 {
|
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(t2 T2, t3 T3) func(T1, T4) R {
|
||||||
return func(t1 T1, t4 T4) R {
|
return func(t1 T1, t4 T4) R {
|
||||||
return f(t1, t2, t3, t4)
|
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
|
// 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 {
|
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 func(t1 T1, t2 T2, t3 T3, t4 T4) R {
|
||||||
return f(t1, t4)
|
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.
|
// 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.
|
// 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 {
|
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(t2 T2, t4 T4) func(T1, T3) R {
|
||||||
return func(t1 T1, t3 T3) R {
|
return func(t1 T1, t3 T3) R {
|
||||||
return f(t1, t2, t3, t4)
|
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
|
// 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 {
|
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 func(t1 T1, t2 T2, t3 T3, t4 T4) R {
|
||||||
return f(t1, t3)
|
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.
|
// 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.
|
// 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 {
|
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(t3 T3, t4 T4) func(T1, T2) R {
|
||||||
return func(t1 T1, t2 T2) R {
|
return func(t1 T1, t2 T2) R {
|
||||||
return f(t1, t2, t3, t4)
|
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
|
// 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 {
|
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 func(t1 T1, t2 T2, t3 T3, t4 T4) R {
|
||||||
return f(t1, t2)
|
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.
|
// 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.
|
// 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 {
|
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(t1 T1, t2 T2, t3 T3) func(T4) R {
|
||||||
return func(t4 T4) R {
|
return func(t4 T4) R {
|
||||||
return f(t1, t2, t3, t4)
|
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
|
// 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 {
|
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 func(t1 T1, t2 T2, t3 T3, t4 T4) R {
|
||||||
return f(t4)
|
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.
|
// 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.
|
// 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 {
|
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(t1 T1, t2 T2, t4 T4) func(T3) R {
|
||||||
return func(t3 T3) R {
|
return func(t3 T3) R {
|
||||||
return f(t1, t2, t3, t4)
|
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
|
// 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 {
|
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 func(t1 T1, t2 T2, t3 T3, t4 T4) R {
|
||||||
return f(t3)
|
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.
|
// 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.
|
// 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 {
|
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(t1 T1, t3 T3, t4 T4) func(T2) R {
|
||||||
return func(t2 T2) R {
|
return func(t2 T2) R {
|
||||||
return f(t1, t2, t3, t4)
|
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
|
// 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 {
|
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 func(t1 T1, t2 T2, t3 T3, t4 T4) R {
|
||||||
return f(t2)
|
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.
|
// 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.
|
// 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 {
|
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(t2 T2, t3 T3, t4 T4) func(T1) R {
|
||||||
return func(t1 T1) R {
|
return func(t1 T1) R {
|
||||||
return f(t1, t2, t3, t4)
|
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
|
// 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 {
|
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 func(t1 T1, t2 T2, t3 T3, t4 T4) R {
|
||||||
return f(t1)
|
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.
|
// 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.
|
// 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 {
|
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(t1 T1, t2 T2, t3 T3, t4 T4) func() R {
|
||||||
return func() R {
|
return func() R {
|
||||||
return f(t1, t2, t3, t4)
|
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
|
// 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 {
|
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 func(t1 T1, t2 T2, t3 T3, t4 T4) R {
|
||||||
return f()
|
return f()
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
30
function/cache.go
Normal file
30
function/cache.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 function
|
||||||
|
|
||||||
|
import (
|
||||||
|
G "github.com/IBM/fp-go/function/generic"
|
||||||
|
)
|
||||||
|
|
||||||
|
// Memoize converts a unary function into a unary function that caches the value depending on the parameter
|
||||||
|
func Memoize[K comparable, T any](f func(K) T) func(K) T {
|
||||||
|
return G.Memoize(f)
|
||||||
|
}
|
||||||
|
|
||||||
|
// ContramapMemoize converts a unary function into a unary function that caches the value depending on the parameter
|
||||||
|
func ContramapMemoize[A any, K comparable, T any](kf func(A) K) func(func(A) T) func(A) T {
|
||||||
|
return G.ContramapMemoize[func(A) T](kf)
|
||||||
|
}
|
||||||
50
function/cache_test.go
Normal file
50
function/cache_test.go
Normal file
@@ -0,0 +1,50 @@
|
|||||||
|
// Copyright (c) 2023 IBM Corp.
|
||||||
|
// All rights reserved.
|
||||||
|
//
|
||||||
|
// Licensed under the Apache License, Version 2.0 (the "License");
|
||||||
|
// you may not use this file except in compliance with the License.
|
||||||
|
// You may obtain a copy of the License at
|
||||||
|
//
|
||||||
|
// http://www.apache.org/licenses/LICENSE-2.0
|
||||||
|
//
|
||||||
|
// Unless required by applicable law or agreed to in writing, software
|
||||||
|
// distributed under the License is distributed on an "AS IS" BASIS,
|
||||||
|
// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
||||||
|
// See the License for the specific language governing permissions and
|
||||||
|
// limitations under the License.
|
||||||
|
|
||||||
|
package function
|
||||||
|
|
||||||
|
import (
|
||||||
|
"testing"
|
||||||
|
|
||||||
|
"github.com/stretchr/testify/assert"
|
||||||
|
)
|
||||||
|
|
||||||
|
func TestCache(t *testing.T) {
|
||||||
|
var count int
|
||||||
|
|
||||||
|
withSideEffect := func(n int) int {
|
||||||
|
count++
|
||||||
|
return n
|
||||||
|
}
|
||||||
|
|
||||||
|
cached := Memoize(withSideEffect)
|
||||||
|
|
||||||
|
assert.Equal(t, 0, count)
|
||||||
|
|
||||||
|
assert.Equal(t, 10, cached(10))
|
||||||
|
assert.Equal(t, 1, count)
|
||||||
|
|
||||||
|
assert.Equal(t, 10, cached(10))
|
||||||
|
assert.Equal(t, 1, count)
|
||||||
|
|
||||||
|
assert.Equal(t, 20, cached(20))
|
||||||
|
assert.Equal(t, 2, count)
|
||||||
|
|
||||||
|
assert.Equal(t, 20, cached(20))
|
||||||
|
assert.Equal(t, 2, count)
|
||||||
|
|
||||||
|
assert.Equal(t, 10, cached(10))
|
||||||
|
assert.Equal(t, 2, count)
|
||||||
|
}
|
||||||
@@ -13,6 +13,7 @@
|
|||||||
// See the License for the specific language governing permissions and
|
// See the License for the specific language governing permissions and
|
||||||
// limitations under the License.
|
// limitations under the License.
|
||||||
|
|
||||||
|
// Package function implements function composition primitives, most prominently [Pipe2] and [Flow2]
|
||||||
package function
|
package function
|
||||||
|
|
||||||
//go:generate go run .. pipe --count 20 --filename gen.go
|
//go:generate go run .. pipe --count 20 --filename gen.go
|
||||||
|
|||||||
1999
function/gen.go
1999
function/gen.go
File diff suppressed because it is too large
Load Diff
65
function/generic/cache.go
Normal file
65
function/generic/cache.go
Normal file
@@ -0,0 +1,65 @@
|
|||||||
|
// 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 (
|
||||||
|
"sync"
|
||||||
|
|
||||||
|
L "github.com/IBM/fp-go/internal/lazy"
|
||||||
|
)
|
||||||
|
|
||||||
|
// Memoize converts a unary function into a unary function that caches the value depending on the parameter
|
||||||
|
func Memoize[F ~func(K) T, K comparable, T any](f F) F {
|
||||||
|
return ContramapMemoize[F](func(k K) K { return k })(f)
|
||||||
|
}
|
||||||
|
|
||||||
|
// ContramapMemoize converts a unary function into a unary function that caches the value depending on the parameter
|
||||||
|
func ContramapMemoize[F ~func(A) T, KF func(A) K, A any, K comparable, T any](kf KF) func(F) F {
|
||||||
|
return CacheCallback[F](kf, getOrCreate[K, T]())
|
||||||
|
}
|
||||||
|
|
||||||
|
// getOrCreate is a naive implementation of a cache, without bounds
|
||||||
|
func getOrCreate[K comparable, T any]() func(K, func() func() T) func() T {
|
||||||
|
cache := make(map[K]func() T)
|
||||||
|
var l sync.Mutex
|
||||||
|
|
||||||
|
return func(k K, cb func() func() T) func() T {
|
||||||
|
// only lock to access a lazy accessor to the value
|
||||||
|
l.Lock()
|
||||||
|
existing, ok := cache[k]
|
||||||
|
if !ok {
|
||||||
|
existing = cb()
|
||||||
|
cache[k] = existing
|
||||||
|
}
|
||||||
|
l.Unlock()
|
||||||
|
// compute the value outside of the lock
|
||||||
|
return existing
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
// CacheCallback converts a unary function into a unary function that caches the value depending on the parameter
|
||||||
|
func CacheCallback[F ~func(A) T, KF func(A) K, C ~func(K, func() func() T) func() T, A any, K comparable, T any](kf KF, getOrCreate C) func(F) F {
|
||||||
|
return func(f F) F {
|
||||||
|
return func(a A) T {
|
||||||
|
// cache entry
|
||||||
|
return getOrCreate(kf(a), func() func() T {
|
||||||
|
return L.Memoize[func() T](func() T {
|
||||||
|
return f(a)
|
||||||
|
})
|
||||||
|
})()
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
62
function/pipe_test.go
Normal file
62
function/pipe_test.go
Normal file
@@ -0,0 +1,62 @@
|
|||||||
|
// Copyright (c) 2023 IBM Corp.
|
||||||
|
// All rights reserved.
|
||||||
|
//
|
||||||
|
// Licensed under the Apache License, Version 2.0 (the "License");
|
||||||
|
// you may not use this file except in compliance with the License.
|
||||||
|
// You may obtain a copy of the License at
|
||||||
|
//
|
||||||
|
// http://www.apache.org/licenses/LICENSE-2.0
|
||||||
|
//
|
||||||
|
// Unless required by applicable law or agreed to in writing, software
|
||||||
|
// distributed under the License is distributed on an "AS IS" BASIS,
|
||||||
|
// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
||||||
|
// See the License for the specific language governing permissions and
|
||||||
|
// limitations under the License.
|
||||||
|
|
||||||
|
package function
|
||||||
|
|
||||||
|
import (
|
||||||
|
"fmt"
|
||||||
|
)
|
||||||
|
|
||||||
|
func addSthg(value int) int {
|
||||||
|
return value + 1
|
||||||
|
}
|
||||||
|
|
||||||
|
func doSthgElse(value int) int {
|
||||||
|
return value * 2
|
||||||
|
}
|
||||||
|
|
||||||
|
func doFinalSthg(value int) string {
|
||||||
|
return fmt.Sprintf("final value: %d", value)
|
||||||
|
}
|
||||||
|
|
||||||
|
func Example() {
|
||||||
|
// start point
|
||||||
|
value := 1
|
||||||
|
// imperative style
|
||||||
|
value1 := addSthg(value) // 2
|
||||||
|
value2 := doSthgElse(value1) // 4
|
||||||
|
finalValueImperative := doFinalSthg(value2) // "final value: 4"
|
||||||
|
|
||||||
|
// the same but inline
|
||||||
|
finalValueInline := doFinalSthg(doSthgElse(addSthg(value)))
|
||||||
|
|
||||||
|
// with pipe
|
||||||
|
finalValuePipe := Pipe3(value, addSthg, doSthgElse, doFinalSthg)
|
||||||
|
|
||||||
|
// with flow
|
||||||
|
transform := Flow3(addSthg, doSthgElse, doFinalSthg)
|
||||||
|
finalValueFlow := transform(value)
|
||||||
|
|
||||||
|
fmt.Println(finalValueImperative)
|
||||||
|
fmt.Println(finalValueInline)
|
||||||
|
fmt.Println(finalValuePipe)
|
||||||
|
fmt.Println(finalValueFlow)
|
||||||
|
|
||||||
|
// Output:
|
||||||
|
// final value: 4
|
||||||
|
// final value: 4
|
||||||
|
// final value: 4
|
||||||
|
// final value: 4
|
||||||
|
}
|
||||||
773
identity/gen.go
773
identity/gen.go
@@ -1,10 +1,9 @@
|
|||||||
// Code generated by go generate; DO NOT EDIT.
|
// Code generated by go generate; DO NOT EDIT.
|
||||||
// This file was generated by robots at
|
// This file was generated by robots at
|
||||||
// 2023-08-11 11:38:00.2678592 +0200 CEST m=+0.008890401
|
// 2023-08-17 22:59:06.2987136 +0200 CEST m=+0.049156901
|
||||||
|
|
||||||
package identity
|
package identity
|
||||||
|
|
||||||
|
|
||||||
import (
|
import (
|
||||||
A "github.com/IBM/fp-go/internal/apply"
|
A "github.com/IBM/fp-go/internal/apply"
|
||||||
T "github.com/IBM/fp-go/tuple"
|
T "github.com/IBM/fp-go/tuple"
|
||||||
@@ -12,495 +11,495 @@ import (
|
|||||||
|
|
||||||
// SequenceT1 converts 1 parameters of [T] into a [Tuple1].
|
// SequenceT1 converts 1 parameters of [T] into a [Tuple1].
|
||||||
func SequenceT1[T1 any](t1 T1) T.Tuple1[T1] {
|
func SequenceT1[T1 any](t1 T1) T.Tuple1[T1] {
|
||||||
return A.SequenceT1(
|
return A.SequenceT1(
|
||||||
Map[T1, T.Tuple1[T1]],
|
Map[T1, T.Tuple1[T1]],
|
||||||
t1,
|
t1,
|
||||||
)
|
)
|
||||||
}
|
}
|
||||||
|
|
||||||
// SequenceTuple1 converts a [Tuple1] of [T] into an [Tuple1].
|
// SequenceTuple1 converts a [Tuple1] of [T] into an [Tuple1].
|
||||||
func SequenceTuple1[T1 any](t T.Tuple1[T1]) T.Tuple1[T1] {
|
func SequenceTuple1[T1 any](t T.Tuple1[T1]) T.Tuple1[T1] {
|
||||||
return A.SequenceTuple1(
|
return A.SequenceTuple1(
|
||||||
Map[T1, T.Tuple1[T1]],
|
Map[T1, T.Tuple1[T1]],
|
||||||
t,
|
t,
|
||||||
)
|
)
|
||||||
}
|
}
|
||||||
|
|
||||||
// TraverseTuple1 converts a [Tuple1] of [A] via transformation functions transforming [A] to [A] into a [Tuple1].
|
// 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] {
|
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 func(t T.Tuple1[A1]) T.Tuple1[T1] {
|
||||||
return A.TraverseTuple1(
|
return A.TraverseTuple1(
|
||||||
Map[T1, T.Tuple1[T1]],
|
Map[T1, T.Tuple1[T1]],
|
||||||
f1,
|
f1,
|
||||||
t,
|
t,
|
||||||
)
|
)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
// SequenceT2 converts 2 parameters of [T] into a [Tuple2].
|
// SequenceT2 converts 2 parameters of [T] into a [Tuple2].
|
||||||
func SequenceT2[T1, T2 any](t1 T1, t2 T2) T.Tuple2[T1, T2] {
|
func SequenceT2[T1, T2 any](t1 T1, t2 T2) T.Tuple2[T1, T2] {
|
||||||
return A.SequenceT2(
|
return A.SequenceT2(
|
||||||
Map[T1, func(T2) T.Tuple2[T1, T2]],
|
Map[T1, func(T2) T.Tuple2[T1, T2]],
|
||||||
Ap[T.Tuple2[T1, T2], T2],
|
Ap[T.Tuple2[T1, T2], T2],
|
||||||
t1,
|
t1,
|
||||||
t2,
|
t2,
|
||||||
)
|
)
|
||||||
}
|
}
|
||||||
|
|
||||||
// SequenceTuple2 converts a [Tuple2] of [T] into an [Tuple2].
|
// SequenceTuple2 converts a [Tuple2] of [T] into an [Tuple2].
|
||||||
func SequenceTuple2[T1, T2 any](t T.Tuple2[T1, T2]) T.Tuple2[T1, T2] {
|
func SequenceTuple2[T1, T2 any](t T.Tuple2[T1, T2]) T.Tuple2[T1, T2] {
|
||||||
return A.SequenceTuple2(
|
return A.SequenceTuple2(
|
||||||
Map[T1, func(T2) T.Tuple2[T1, T2]],
|
Map[T1, func(T2) T.Tuple2[T1, T2]],
|
||||||
Ap[T.Tuple2[T1, T2], T2],
|
Ap[T.Tuple2[T1, T2], T2],
|
||||||
t,
|
t,
|
||||||
)
|
)
|
||||||
}
|
}
|
||||||
|
|
||||||
// TraverseTuple2 converts a [Tuple2] of [A] via transformation functions transforming [A] to [A] into a [Tuple2].
|
// 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] {
|
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 func(t T.Tuple2[A1, A2]) T.Tuple2[T1, T2] {
|
||||||
return A.TraverseTuple2(
|
return A.TraverseTuple2(
|
||||||
Map[T1, func(T2) T.Tuple2[T1, T2]],
|
Map[T1, func(T2) T.Tuple2[T1, T2]],
|
||||||
Ap[T.Tuple2[T1, T2], T2],
|
Ap[T.Tuple2[T1, T2], T2],
|
||||||
f1,
|
f1,
|
||||||
f2,
|
f2,
|
||||||
t,
|
t,
|
||||||
)
|
)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
// SequenceT3 converts 3 parameters of [T] into a [Tuple3].
|
// 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] {
|
func SequenceT3[T1, T2, T3 any](t1 T1, t2 T2, t3 T3) T.Tuple3[T1, T2, T3] {
|
||||||
return A.SequenceT3(
|
return A.SequenceT3(
|
||||||
Map[T1, func(T2) func(T3) T.Tuple3[T1, T2, T3]],
|
Map[T1, func(T2) func(T3) T.Tuple3[T1, T2, T3]],
|
||||||
Ap[func(T3) T.Tuple3[T1, T2, T3], T2],
|
Ap[func(T3) T.Tuple3[T1, T2, T3], T2],
|
||||||
Ap[T.Tuple3[T1, T2, T3], T3],
|
Ap[T.Tuple3[T1, T2, T3], T3],
|
||||||
t1,
|
t1,
|
||||||
t2,
|
t2,
|
||||||
t3,
|
t3,
|
||||||
)
|
)
|
||||||
}
|
}
|
||||||
|
|
||||||
// SequenceTuple3 converts a [Tuple3] of [T] into an [Tuple3].
|
// 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] {
|
func SequenceTuple3[T1, T2, T3 any](t T.Tuple3[T1, T2, T3]) T.Tuple3[T1, T2, T3] {
|
||||||
return A.SequenceTuple3(
|
return A.SequenceTuple3(
|
||||||
Map[T1, func(T2) func(T3) T.Tuple3[T1, T2, T3]],
|
Map[T1, func(T2) func(T3) T.Tuple3[T1, T2, T3]],
|
||||||
Ap[func(T3) T.Tuple3[T1, T2, T3], T2],
|
Ap[func(T3) T.Tuple3[T1, T2, T3], T2],
|
||||||
Ap[T.Tuple3[T1, T2, T3], T3],
|
Ap[T.Tuple3[T1, T2, T3], T3],
|
||||||
t,
|
t,
|
||||||
)
|
)
|
||||||
}
|
}
|
||||||
|
|
||||||
// TraverseTuple3 converts a [Tuple3] of [A] via transformation functions transforming [A] to [A] into a [Tuple3].
|
// 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] {
|
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 func(t T.Tuple3[A1, A2, A3]) T.Tuple3[T1, T2, T3] {
|
||||||
return A.TraverseTuple3(
|
return A.TraverseTuple3(
|
||||||
Map[T1, func(T2) func(T3) T.Tuple3[T1, T2, T3]],
|
Map[T1, func(T2) func(T3) T.Tuple3[T1, T2, T3]],
|
||||||
Ap[func(T3) T.Tuple3[T1, T2, T3], T2],
|
Ap[func(T3) T.Tuple3[T1, T2, T3], T2],
|
||||||
Ap[T.Tuple3[T1, T2, T3], T3],
|
Ap[T.Tuple3[T1, T2, T3], T3],
|
||||||
f1,
|
f1,
|
||||||
f2,
|
f2,
|
||||||
f3,
|
f3,
|
||||||
t,
|
t,
|
||||||
)
|
)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
// SequenceT4 converts 4 parameters of [T] into a [Tuple4].
|
// 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] {
|
func SequenceT4[T1, T2, T3, T4 any](t1 T1, t2 T2, t3 T3, t4 T4) T.Tuple4[T1, T2, T3, T4] {
|
||||||
return A.SequenceT4(
|
return A.SequenceT4(
|
||||||
Map[T1, func(T2) func(T3) func(T4) T.Tuple4[T1, T2, T3, T4]],
|
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(T3) func(T4) T.Tuple4[T1, T2, T3, T4], T2],
|
||||||
Ap[func(T4) T.Tuple4[T1, T2, T3, T4], T3],
|
Ap[func(T4) T.Tuple4[T1, T2, T3, T4], T3],
|
||||||
Ap[T.Tuple4[T1, T2, T3, T4], T4],
|
Ap[T.Tuple4[T1, T2, T3, T4], T4],
|
||||||
t1,
|
t1,
|
||||||
t2,
|
t2,
|
||||||
t3,
|
t3,
|
||||||
t4,
|
t4,
|
||||||
)
|
)
|
||||||
}
|
}
|
||||||
|
|
||||||
// SequenceTuple4 converts a [Tuple4] of [T] into an [Tuple4].
|
// 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] {
|
func SequenceTuple4[T1, T2, T3, T4 any](t T.Tuple4[T1, T2, T3, T4]) T.Tuple4[T1, T2, T3, T4] {
|
||||||
return A.SequenceTuple4(
|
return A.SequenceTuple4(
|
||||||
Map[T1, func(T2) func(T3) func(T4) T.Tuple4[T1, T2, T3, T4]],
|
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(T3) func(T4) T.Tuple4[T1, T2, T3, T4], T2],
|
||||||
Ap[func(T4) T.Tuple4[T1, T2, T3, T4], T3],
|
Ap[func(T4) T.Tuple4[T1, T2, T3, T4], T3],
|
||||||
Ap[T.Tuple4[T1, T2, T3, T4], T4],
|
Ap[T.Tuple4[T1, T2, T3, T4], T4],
|
||||||
t,
|
t,
|
||||||
)
|
)
|
||||||
}
|
}
|
||||||
|
|
||||||
// TraverseTuple4 converts a [Tuple4] of [A] via transformation functions transforming [A] to [A] into a [Tuple4].
|
// 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] {
|
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 func(t T.Tuple4[A1, A2, A3, A4]) T.Tuple4[T1, T2, T3, T4] {
|
||||||
return A.TraverseTuple4(
|
return A.TraverseTuple4(
|
||||||
Map[T1, func(T2) func(T3) func(T4) T.Tuple4[T1, T2, T3, T4]],
|
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(T3) func(T4) T.Tuple4[T1, T2, T3, T4], T2],
|
||||||
Ap[func(T4) T.Tuple4[T1, T2, T3, T4], T3],
|
Ap[func(T4) T.Tuple4[T1, T2, T3, T4], T3],
|
||||||
Ap[T.Tuple4[T1, T2, T3, T4], T4],
|
Ap[T.Tuple4[T1, T2, T3, T4], T4],
|
||||||
f1,
|
f1,
|
||||||
f2,
|
f2,
|
||||||
f3,
|
f3,
|
||||||
f4,
|
f4,
|
||||||
t,
|
t,
|
||||||
)
|
)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
// SequenceT5 converts 5 parameters of [T] into a [Tuple5].
|
// 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] {
|
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(
|
return A.SequenceT5(
|
||||||
Map[T1, func(T2) func(T3) func(T4) func(T5) T.Tuple5[T1, T2, T3, T4, T5]],
|
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(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(T4) func(T5) T.Tuple5[T1, T2, T3, T4, T5], T3],
|
||||||
Ap[func(T5) T.Tuple5[T1, T2, T3, T4, T5], T4],
|
Ap[func(T5) T.Tuple5[T1, T2, T3, T4, T5], T4],
|
||||||
Ap[T.Tuple5[T1, T2, T3, T4, T5], T5],
|
Ap[T.Tuple5[T1, T2, T3, T4, T5], T5],
|
||||||
t1,
|
t1,
|
||||||
t2,
|
t2,
|
||||||
t3,
|
t3,
|
||||||
t4,
|
t4,
|
||||||
t5,
|
t5,
|
||||||
)
|
)
|
||||||
}
|
}
|
||||||
|
|
||||||
// SequenceTuple5 converts a [Tuple5] of [T] into an [Tuple5].
|
// 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] {
|
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(
|
return A.SequenceTuple5(
|
||||||
Map[T1, func(T2) func(T3) func(T4) func(T5) T.Tuple5[T1, T2, T3, T4, T5]],
|
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(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(T4) func(T5) T.Tuple5[T1, T2, T3, T4, T5], T3],
|
||||||
Ap[func(T5) T.Tuple5[T1, T2, T3, T4, T5], T4],
|
Ap[func(T5) T.Tuple5[T1, T2, T3, T4, T5], T4],
|
||||||
Ap[T.Tuple5[T1, T2, T3, T4, T5], T5],
|
Ap[T.Tuple5[T1, T2, T3, T4, T5], T5],
|
||||||
t,
|
t,
|
||||||
)
|
)
|
||||||
}
|
}
|
||||||
|
|
||||||
// TraverseTuple5 converts a [Tuple5] of [A] via transformation functions transforming [A] to [A] into a [Tuple5].
|
// 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] {
|
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 func(t T.Tuple5[A1, A2, A3, A4, A5]) T.Tuple5[T1, T2, T3, T4, T5] {
|
||||||
return A.TraverseTuple5(
|
return A.TraverseTuple5(
|
||||||
Map[T1, func(T2) func(T3) func(T4) func(T5) T.Tuple5[T1, T2, T3, T4, T5]],
|
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(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(T4) func(T5) T.Tuple5[T1, T2, T3, T4, T5], T3],
|
||||||
Ap[func(T5) T.Tuple5[T1, T2, T3, T4, T5], T4],
|
Ap[func(T5) T.Tuple5[T1, T2, T3, T4, T5], T4],
|
||||||
Ap[T.Tuple5[T1, T2, T3, T4, T5], T5],
|
Ap[T.Tuple5[T1, T2, T3, T4, T5], T5],
|
||||||
f1,
|
f1,
|
||||||
f2,
|
f2,
|
||||||
f3,
|
f3,
|
||||||
f4,
|
f4,
|
||||||
f5,
|
f5,
|
||||||
t,
|
t,
|
||||||
)
|
)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
// SequenceT6 converts 6 parameters of [T] into a [Tuple6].
|
// 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] {
|
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(
|
return A.SequenceT6(
|
||||||
Map[T1, func(T2) func(T3) func(T4) func(T5) func(T6) T.Tuple6[T1, T2, T3, T4, T5, T6]],
|
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(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(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(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[func(T6) T.Tuple6[T1, T2, T3, T4, T5, T6], T5],
|
||||||
Ap[T.Tuple6[T1, T2, T3, T4, T5, T6], T6],
|
Ap[T.Tuple6[T1, T2, T3, T4, T5, T6], T6],
|
||||||
t1,
|
t1,
|
||||||
t2,
|
t2,
|
||||||
t3,
|
t3,
|
||||||
t4,
|
t4,
|
||||||
t5,
|
t5,
|
||||||
t6,
|
t6,
|
||||||
)
|
)
|
||||||
}
|
}
|
||||||
|
|
||||||
// SequenceTuple6 converts a [Tuple6] of [T] into an [Tuple6].
|
// 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] {
|
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(
|
return A.SequenceTuple6(
|
||||||
Map[T1, func(T2) func(T3) func(T4) func(T5) func(T6) T.Tuple6[T1, T2, T3, T4, T5, T6]],
|
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(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(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(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[func(T6) T.Tuple6[T1, T2, T3, T4, T5, T6], T5],
|
||||||
Ap[T.Tuple6[T1, T2, T3, T4, T5, T6], T6],
|
Ap[T.Tuple6[T1, T2, T3, T4, T5, T6], T6],
|
||||||
t,
|
t,
|
||||||
)
|
)
|
||||||
}
|
}
|
||||||
|
|
||||||
// TraverseTuple6 converts a [Tuple6] of [A] via transformation functions transforming [A] to [A] into a [Tuple6].
|
// 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] {
|
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 func(t T.Tuple6[A1, A2, A3, A4, A5, A6]) T.Tuple6[T1, T2, T3, T4, T5, T6] {
|
||||||
return A.TraverseTuple6(
|
return A.TraverseTuple6(
|
||||||
Map[T1, func(T2) func(T3) func(T4) func(T5) func(T6) T.Tuple6[T1, T2, T3, T4, T5, T6]],
|
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(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(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(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[func(T6) T.Tuple6[T1, T2, T3, T4, T5, T6], T5],
|
||||||
Ap[T.Tuple6[T1, T2, T3, T4, T5, T6], T6],
|
Ap[T.Tuple6[T1, T2, T3, T4, T5, T6], T6],
|
||||||
f1,
|
f1,
|
||||||
f2,
|
f2,
|
||||||
f3,
|
f3,
|
||||||
f4,
|
f4,
|
||||||
f5,
|
f5,
|
||||||
f6,
|
f6,
|
||||||
t,
|
t,
|
||||||
)
|
)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
// SequenceT7 converts 7 parameters of [T] into a [Tuple7].
|
// 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] {
|
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(
|
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]],
|
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(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(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(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(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[func(T7) T.Tuple7[T1, T2, T3, T4, T5, T6, T7], T6],
|
||||||
Ap[T.Tuple7[T1, T2, T3, T4, T5, T6, T7], T7],
|
Ap[T.Tuple7[T1, T2, T3, T4, T5, T6, T7], T7],
|
||||||
t1,
|
t1,
|
||||||
t2,
|
t2,
|
||||||
t3,
|
t3,
|
||||||
t4,
|
t4,
|
||||||
t5,
|
t5,
|
||||||
t6,
|
t6,
|
||||||
t7,
|
t7,
|
||||||
)
|
)
|
||||||
}
|
}
|
||||||
|
|
||||||
// SequenceTuple7 converts a [Tuple7] of [T] into an [Tuple7].
|
// 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] {
|
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(
|
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]],
|
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(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(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(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(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[func(T7) T.Tuple7[T1, T2, T3, T4, T5, T6, T7], T6],
|
||||||
Ap[T.Tuple7[T1, T2, T3, T4, T5, T6, T7], T7],
|
Ap[T.Tuple7[T1, T2, T3, T4, T5, T6, T7], T7],
|
||||||
t,
|
t,
|
||||||
)
|
)
|
||||||
}
|
}
|
||||||
|
|
||||||
// TraverseTuple7 converts a [Tuple7] of [A] via transformation functions transforming [A] to [A] into a [Tuple7].
|
// 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] {
|
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 func(t T.Tuple7[A1, A2, A3, A4, A5, A6, A7]) T.Tuple7[T1, T2, T3, T4, T5, T6, T7] {
|
||||||
return A.TraverseTuple7(
|
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]],
|
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(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(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(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(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[func(T7) T.Tuple7[T1, T2, T3, T4, T5, T6, T7], T6],
|
||||||
Ap[T.Tuple7[T1, T2, T3, T4, T5, T6, T7], T7],
|
Ap[T.Tuple7[T1, T2, T3, T4, T5, T6, T7], T7],
|
||||||
f1,
|
f1,
|
||||||
f2,
|
f2,
|
||||||
f3,
|
f3,
|
||||||
f4,
|
f4,
|
||||||
f5,
|
f5,
|
||||||
f6,
|
f6,
|
||||||
f7,
|
f7,
|
||||||
t,
|
t,
|
||||||
)
|
)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
// SequenceT8 converts 8 parameters of [T] into a [Tuple8].
|
// 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] {
|
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(
|
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]],
|
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(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(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(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(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(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[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],
|
Ap[T.Tuple8[T1, T2, T3, T4, T5, T6, T7, T8], T8],
|
||||||
t1,
|
t1,
|
||||||
t2,
|
t2,
|
||||||
t3,
|
t3,
|
||||||
t4,
|
t4,
|
||||||
t5,
|
t5,
|
||||||
t6,
|
t6,
|
||||||
t7,
|
t7,
|
||||||
t8,
|
t8,
|
||||||
)
|
)
|
||||||
}
|
}
|
||||||
|
|
||||||
// SequenceTuple8 converts a [Tuple8] of [T] into an [Tuple8].
|
// 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] {
|
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(
|
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]],
|
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(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(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(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(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(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[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],
|
Ap[T.Tuple8[T1, T2, T3, T4, T5, T6, T7, T8], T8],
|
||||||
t,
|
t,
|
||||||
)
|
)
|
||||||
}
|
}
|
||||||
|
|
||||||
// TraverseTuple8 converts a [Tuple8] of [A] via transformation functions transforming [A] to [A] into a [Tuple8].
|
// 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] {
|
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 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(
|
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]],
|
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(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(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(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(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(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[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],
|
Ap[T.Tuple8[T1, T2, T3, T4, T5, T6, T7, T8], T8],
|
||||||
f1,
|
f1,
|
||||||
f2,
|
f2,
|
||||||
f3,
|
f3,
|
||||||
f4,
|
f4,
|
||||||
f5,
|
f5,
|
||||||
f6,
|
f6,
|
||||||
f7,
|
f7,
|
||||||
f8,
|
f8,
|
||||||
t,
|
t,
|
||||||
)
|
)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
// SequenceT9 converts 9 parameters of [T] into a [Tuple9].
|
// 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] {
|
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(
|
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]],
|
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(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(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(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(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(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(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[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],
|
Ap[T.Tuple9[T1, T2, T3, T4, T5, T6, T7, T8, T9], T9],
|
||||||
t1,
|
t1,
|
||||||
t2,
|
t2,
|
||||||
t3,
|
t3,
|
||||||
t4,
|
t4,
|
||||||
t5,
|
t5,
|
||||||
t6,
|
t6,
|
||||||
t7,
|
t7,
|
||||||
t8,
|
t8,
|
||||||
t9,
|
t9,
|
||||||
)
|
)
|
||||||
}
|
}
|
||||||
|
|
||||||
// SequenceTuple9 converts a [Tuple9] of [T] into an [Tuple9].
|
// 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] {
|
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(
|
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]],
|
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(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(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(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(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(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(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[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],
|
Ap[T.Tuple9[T1, T2, T3, T4, T5, T6, T7, T8, T9], T9],
|
||||||
t,
|
t,
|
||||||
)
|
)
|
||||||
}
|
}
|
||||||
|
|
||||||
// TraverseTuple9 converts a [Tuple9] of [A] via transformation functions transforming [A] to [A] into a [Tuple9].
|
// 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] {
|
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 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(
|
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]],
|
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(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(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(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(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(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(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[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],
|
Ap[T.Tuple9[T1, T2, T3, T4, T5, T6, T7, T8, T9], T9],
|
||||||
f1,
|
f1,
|
||||||
f2,
|
f2,
|
||||||
f3,
|
f3,
|
||||||
f4,
|
f4,
|
||||||
f5,
|
f5,
|
||||||
f6,
|
f6,
|
||||||
f7,
|
f7,
|
||||||
f8,
|
f8,
|
||||||
f9,
|
f9,
|
||||||
t,
|
t,
|
||||||
)
|
)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
// SequenceT10 converts 10 parameters of [T] into a [Tuple10].
|
// 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] {
|
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(
|
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]],
|
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(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(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(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(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(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(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(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[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],
|
Ap[T.Tuple10[T1, T2, T3, T4, T5, T6, T7, T8, T9, T10], T10],
|
||||||
t1,
|
t1,
|
||||||
t2,
|
t2,
|
||||||
t3,
|
t3,
|
||||||
t4,
|
t4,
|
||||||
t5,
|
t5,
|
||||||
t6,
|
t6,
|
||||||
t7,
|
t7,
|
||||||
t8,
|
t8,
|
||||||
t9,
|
t9,
|
||||||
t10,
|
t10,
|
||||||
)
|
)
|
||||||
}
|
}
|
||||||
|
|
||||||
// SequenceTuple10 converts a [Tuple10] of [T] into an [Tuple10].
|
// 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] {
|
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(
|
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]],
|
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(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(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(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(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(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(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(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[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],
|
Ap[T.Tuple10[T1, T2, T3, T4, T5, T6, T7, T8, T9, T10], T10],
|
||||||
t,
|
t,
|
||||||
)
|
)
|
||||||
}
|
}
|
||||||
|
|
||||||
// TraverseTuple10 converts a [Tuple10] of [A] via transformation functions transforming [A] to [A] into a [Tuple10].
|
// 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] {
|
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 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(
|
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]],
|
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(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(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(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(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(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(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(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[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],
|
Ap[T.Tuple10[T1, T2, T3, T4, T5, T6, T7, T8, T9, T10], T10],
|
||||||
f1,
|
f1,
|
||||||
f2,
|
f2,
|
||||||
f3,
|
f3,
|
||||||
f4,
|
f4,
|
||||||
f5,
|
f5,
|
||||||
f6,
|
f6,
|
||||||
f7,
|
f7,
|
||||||
f8,
|
f8,
|
||||||
f9,
|
f9,
|
||||||
f10,
|
f10,
|
||||||
t,
|
t,
|
||||||
)
|
)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
File diff suppressed because it is too large
Load Diff
@@ -42,10 +42,27 @@ func Reduce[GA ~[]A, A, B any](fa GA, f func(B, A) B, initial B) B {
|
|||||||
return current
|
return current
|
||||||
}
|
}
|
||||||
|
|
||||||
|
func ReduceWithIndex[GA ~[]A, A, B any](fa GA, f func(int, B, A) B, initial B) B {
|
||||||
|
current := initial
|
||||||
|
count := len(fa)
|
||||||
|
for i := 0; i < count; i++ {
|
||||||
|
current = f(i, current, fa[i])
|
||||||
|
}
|
||||||
|
return current
|
||||||
|
}
|
||||||
|
|
||||||
func Append[GA ~[]A, A any](as GA, a A) GA {
|
func Append[GA ~[]A, A any](as GA, a A) GA {
|
||||||
return append(as, a)
|
return append(as, a)
|
||||||
}
|
}
|
||||||
|
|
||||||
|
func Push[GA ~[]A, A any](as GA, a A) GA {
|
||||||
|
l := len(as)
|
||||||
|
cpy := make(GA, l+1)
|
||||||
|
copy(cpy, as)
|
||||||
|
cpy[l] = a
|
||||||
|
return cpy
|
||||||
|
}
|
||||||
|
|
||||||
func Empty[GA ~[]A, A any]() GA {
|
func Empty[GA ~[]A, A any]() GA {
|
||||||
return make(GA, 0)
|
return make(GA, 0)
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -37,6 +37,24 @@ func MonadTraverse[GA ~[]A, GB ~[]B, A, B, HKTB, HKTAB, HKTRB any](
|
|||||||
return MonadTraverseReduce(fof, fmap, fap, ta, f, Append[GB, B], Empty[GB]())
|
return MonadTraverseReduce(fof, fmap, fap, ta, f, Append[GB, B], Empty[GB]())
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/*
|
||||||
|
*
|
||||||
|
We need to pass the members of the applicative explicitly, because golang does neither support higher kinded types nor template methods on structs or interfaces
|
||||||
|
|
||||||
|
HKTRB = HKT<GB>
|
||||||
|
HKTB = HKT<B>
|
||||||
|
HKTAB = HKT<func(A)B>
|
||||||
|
*/
|
||||||
|
func MonadTraverseWithIndex[GA ~[]A, GB ~[]B, A, B, HKTB, HKTAB, HKTRB any](
|
||||||
|
fof func(GB) HKTRB,
|
||||||
|
fmap func(func(GB) func(B) GB) func(HKTRB) HKTAB,
|
||||||
|
fap func(HKTB) func(HKTAB) HKTRB,
|
||||||
|
|
||||||
|
ta GA,
|
||||||
|
f func(int, A) HKTB) HKTRB {
|
||||||
|
return MonadTraverseReduceWithIndex(fof, fmap, fap, ta, f, Append[GB, B], Empty[GB]())
|
||||||
|
}
|
||||||
|
|
||||||
func Traverse[GA ~[]A, GB ~[]B, A, B, HKTB, HKTAB, HKTRB any](
|
func Traverse[GA ~[]A, GB ~[]B, A, B, HKTB, HKTAB, HKTRB any](
|
||||||
fof func(GB) HKTRB,
|
fof func(GB) HKTRB,
|
||||||
fmap func(func(GB) func(B) GB) func(HKTRB) HKTAB,
|
fmap func(func(GB) func(B) GB) func(HKTRB) HKTAB,
|
||||||
@@ -49,6 +67,18 @@ func Traverse[GA ~[]A, GB ~[]B, A, B, HKTB, HKTAB, HKTRB any](
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
func TraverseWithIndex[GA ~[]A, GB ~[]B, A, B, HKTB, HKTAB, HKTRB any](
|
||||||
|
fof func(GB) HKTRB,
|
||||||
|
fmap func(func(GB) func(B) GB) func(HKTRB) HKTAB,
|
||||||
|
fap func(HKTB) func(HKTAB) HKTRB,
|
||||||
|
|
||||||
|
f func(int, A) HKTB) func(GA) HKTRB {
|
||||||
|
|
||||||
|
return func(ma GA) HKTRB {
|
||||||
|
return MonadTraverseWithIndex(fof, fmap, fap, ma, f)
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
func MonadTraverseReduce[GA ~[]A, GB, A, B, HKTB, HKTAB, HKTRB any](
|
func MonadTraverseReduce[GA ~[]A, GB, A, B, HKTB, HKTAB, HKTRB any](
|
||||||
fof func(GB) HKTRB,
|
fof func(GB) HKTRB,
|
||||||
fmap func(func(GB) func(B) GB) func(HKTRB) HKTAB,
|
fmap func(func(GB) func(B) GB) func(HKTRB) HKTAB,
|
||||||
@@ -71,6 +101,28 @@ func MonadTraverseReduce[GA ~[]A, GB, A, B, HKTB, HKTAB, HKTRB any](
|
|||||||
}, fof(initial))
|
}, fof(initial))
|
||||||
}
|
}
|
||||||
|
|
||||||
|
func MonadTraverseReduceWithIndex[GA ~[]A, GB, A, B, HKTB, HKTAB, HKTRB any](
|
||||||
|
fof func(GB) HKTRB,
|
||||||
|
fmap func(func(GB) func(B) GB) func(HKTRB) HKTAB,
|
||||||
|
fap func(HKTB) func(HKTAB) HKTRB,
|
||||||
|
|
||||||
|
ta GA,
|
||||||
|
|
||||||
|
transform func(int, A) HKTB,
|
||||||
|
reduce func(GB, B) GB,
|
||||||
|
initial GB,
|
||||||
|
) HKTRB {
|
||||||
|
mmap := fmap(F.Curry2(reduce))
|
||||||
|
|
||||||
|
return ReduceWithIndex(ta, func(idx int, r HKTRB, a A) HKTRB {
|
||||||
|
return F.Pipe2(
|
||||||
|
r,
|
||||||
|
mmap,
|
||||||
|
fap(transform(idx, a)),
|
||||||
|
)
|
||||||
|
}, fof(initial))
|
||||||
|
}
|
||||||
|
|
||||||
func TraverseReduce[GA ~[]A, GB, A, B, HKTB, HKTAB, HKTRB any](
|
func TraverseReduce[GA ~[]A, GB, A, B, HKTB, HKTAB, HKTRB any](
|
||||||
fof func(GB) HKTRB,
|
fof func(GB) HKTRB,
|
||||||
fmap func(func(GB) func(B) GB) func(HKTRB) HKTAB,
|
fmap func(func(GB) func(B) GB) func(HKTRB) HKTAB,
|
||||||
@@ -84,3 +136,17 @@ func TraverseReduce[GA ~[]A, GB, A, B, HKTB, HKTAB, HKTRB any](
|
|||||||
return MonadTraverseReduce(fof, fmap, fap, ta, transform, reduce, initial)
|
return MonadTraverseReduce(fof, fmap, fap, ta, transform, reduce, initial)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
func TraverseReduceWithIndex[GA ~[]A, GB, A, B, HKTB, HKTAB, HKTRB any](
|
||||||
|
fof func(GB) HKTRB,
|
||||||
|
fmap func(func(GB) func(B) GB) func(HKTRB) HKTAB,
|
||||||
|
fap func(HKTB) func(HKTAB) HKTRB,
|
||||||
|
|
||||||
|
transform func(int, A) HKTB,
|
||||||
|
reduce func(GB, B) GB,
|
||||||
|
initial GB,
|
||||||
|
) func(GA) HKTRB {
|
||||||
|
return func(ta GA) HKTRB {
|
||||||
|
return MonadTraverseReduceWithIndex(fof, fmap, fap, ta, transform, reduce, initial)
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|||||||
75
internal/bindt/bind.go
Normal file
75
internal/bindt/bind.go
Normal file
@@ -0,0 +1,75 @@
|
|||||||
|
// 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 bindt
|
||||||
|
|
||||||
|
import (
|
||||||
|
F "github.com/IBM/fp-go/function"
|
||||||
|
I "github.com/IBM/fp-go/identity"
|
||||||
|
T "github.com/IBM/fp-go/tuple"
|
||||||
|
)
|
||||||
|
|
||||||
|
func Bind[SET ~func(B) func(S1) S2, FCT ~func(S1) HKTB, S1, S2, B, HKTS1, HKTS2, HKTB any](
|
||||||
|
mchain func(func(S1) HKTS2) func(HKTS1) HKTS2,
|
||||||
|
mmap func(func(B) S2) func(HKTB) HKTS2,
|
||||||
|
s SET,
|
||||||
|
f FCT,
|
||||||
|
) func(HKTS1) HKTS2 {
|
||||||
|
return mchain(F.Flow3(
|
||||||
|
T.Replicate2[S1],
|
||||||
|
T.Map2(F.Flow2(
|
||||||
|
I.Ap[S2, S1],
|
||||||
|
F.Flow2(
|
||||||
|
F.Bind1st(F.Flow2[SET, func(func(S1) S2) S2], s),
|
||||||
|
mmap,
|
||||||
|
)), f),
|
||||||
|
T.Tupled2(I.MonadAp[HKTS2, HKTB]),
|
||||||
|
))
|
||||||
|
}
|
||||||
|
|
||||||
|
func BindTo[SET ~func(B) S2, S2, B, HKTS2, HKTB any](
|
||||||
|
mmap func(func(B) S2) func(HKTB) HKTS2,
|
||||||
|
s SET,
|
||||||
|
) func(HKTB) HKTS2 {
|
||||||
|
return mmap(s)
|
||||||
|
}
|
||||||
|
|
||||||
|
func ApS[
|
||||||
|
SET ~func(B) func(S1) S2,
|
||||||
|
S1, S2, B, HKTS1S2, HKTS1, HKTS2, HKTB any,
|
||||||
|
](
|
||||||
|
ap func(HKTS1) func(HKTS1S2) HKTS2,
|
||||||
|
mmap func(func(B) func(S1) S2) func(HKTB) HKTS1S2,
|
||||||
|
s SET, fb HKTB) func(HKTS1) HKTS2 {
|
||||||
|
|
||||||
|
return F.Flow2(
|
||||||
|
ap,
|
||||||
|
I.Ap[HKTS2, HKTS1S2](mmap(s)(fb)),
|
||||||
|
)
|
||||||
|
}
|
||||||
|
|
||||||
|
func Let[SET ~func(B) func(S1) S2, FCT ~func(S1) B, S1, S2, B, HKTS1, HKTS2 any](
|
||||||
|
mmap func(func(S1) S2) func(HKTS1) HKTS2,
|
||||||
|
s SET,
|
||||||
|
f FCT,
|
||||||
|
) func(HKTS1) HKTS2 {
|
||||||
|
return mmap(F.Flow3(
|
||||||
|
T.Replicate2[S1],
|
||||||
|
T.Map2(F.Flow2(
|
||||||
|
I.Ap[S2, S1],
|
||||||
|
F.Bind1st(F.Flow2[SET, func(func(S1) S2) S2], s)), f),
|
||||||
|
T.Tupled2(I.MonadAp[S2, B]),
|
||||||
|
))
|
||||||
|
}
|
||||||
34
internal/lazy/memoize.go
Normal file
34
internal/lazy/memoize.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 lazy
|
||||||
|
|
||||||
|
import "sync"
|
||||||
|
|
||||||
|
// Memoize computes the value of the provided IO monad lazily but exactly once
|
||||||
|
func Memoize[GA ~func() A, A any](ma GA) GA {
|
||||||
|
// synchronization primitives
|
||||||
|
var once sync.Once
|
||||||
|
var result A
|
||||||
|
// callback
|
||||||
|
gen := func() {
|
||||||
|
result = ma()
|
||||||
|
}
|
||||||
|
// returns our memoized wrapper
|
||||||
|
return func() A {
|
||||||
|
once.Do(gen)
|
||||||
|
return result
|
||||||
|
}
|
||||||
|
}
|
||||||
475
io/gen.go
475
io/gen.go
@@ -1,376 +1,375 @@
|
|||||||
// Code generated by go generate; DO NOT EDIT.
|
// Code generated by go generate; DO NOT EDIT.
|
||||||
// This file was generated by robots at
|
// This file was generated by robots at
|
||||||
// 2023-08-11 11:38:07.3305497 +0200 CEST m=+0.014821301
|
// 2023-08-17 22:59:10.1040409 +0200 CEST m=+0.089470201
|
||||||
|
|
||||||
package io
|
package io
|
||||||
|
|
||||||
|
|
||||||
import (
|
import (
|
||||||
G "github.com/IBM/fp-go/io/generic"
|
G "github.com/IBM/fp-go/io/generic"
|
||||||
T "github.com/IBM/fp-go/tuple"
|
T "github.com/IBM/fp-go/tuple"
|
||||||
)
|
)
|
||||||
|
|
||||||
// SequenceT1 converts 1 [IO[T]] into a [IO[T.Tuple1[T1]]]
|
// SequenceT1 converts 1 [IO[T]] into a [IO[T.Tuple1[T1]]]
|
||||||
func SequenceT1[T1 any](
|
func SequenceT1[T1 any](
|
||||||
t1 IO[T1],
|
t1 IO[T1],
|
||||||
) IO[T.Tuple1[T1]] {
|
) IO[T.Tuple1[T1]] {
|
||||||
return G.SequenceT1[
|
return G.SequenceT1[
|
||||||
IO[T.Tuple1[T1]],
|
IO[T.Tuple1[T1]],
|
||||||
IO[T1],
|
IO[T1],
|
||||||
](t1)
|
](t1)
|
||||||
}
|
}
|
||||||
|
|
||||||
// SequenceTuple1 converts a [T.Tuple1[IO[T]]] into a [IO[T.Tuple1[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]] {
|
func SequenceTuple1[T1 any](t T.Tuple1[IO[T1]]) IO[T.Tuple1[T1]] {
|
||||||
return G.SequenceTuple1[
|
return G.SequenceTuple1[
|
||||||
IO[T.Tuple1[T1]],
|
IO[T.Tuple1[T1]],
|
||||||
IO[T1],
|
IO[T1],
|
||||||
](t)
|
](t)
|
||||||
}
|
}
|
||||||
|
|
||||||
// TraverseTuple1 converts a [T.Tuple1[IO[T]]] into a [IO[T.Tuple1[T1]]]
|
// 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]] {
|
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]]]
|
// SequenceT2 converts 2 [IO[T]] into a [IO[T.Tuple2[T1, T2]]]
|
||||||
func SequenceT2[T1, T2 any](
|
func SequenceT2[T1, T2 any](
|
||||||
t1 IO[T1],
|
t1 IO[T1],
|
||||||
t2 IO[T2],
|
t2 IO[T2],
|
||||||
) IO[T.Tuple2[T1, T2]] {
|
) IO[T.Tuple2[T1, T2]] {
|
||||||
return G.SequenceT2[
|
return G.SequenceT2[
|
||||||
IO[T.Tuple2[T1, T2]],
|
IO[T.Tuple2[T1, T2]],
|
||||||
IO[T1],
|
IO[T1],
|
||||||
IO[T2],
|
IO[T2],
|
||||||
](t1, t2)
|
](t1, t2)
|
||||||
}
|
}
|
||||||
|
|
||||||
// SequenceTuple2 converts a [T.Tuple2[IO[T]]] into a [IO[T.Tuple2[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]] {
|
func SequenceTuple2[T1, T2 any](t T.Tuple2[IO[T1], IO[T2]]) IO[T.Tuple2[T1, T2]] {
|
||||||
return G.SequenceTuple2[
|
return G.SequenceTuple2[
|
||||||
IO[T.Tuple2[T1, T2]],
|
IO[T.Tuple2[T1, T2]],
|
||||||
IO[T1],
|
IO[T1],
|
||||||
IO[T2],
|
IO[T2],
|
||||||
](t)
|
](t)
|
||||||
}
|
}
|
||||||
|
|
||||||
// TraverseTuple2 converts a [T.Tuple2[IO[T]]] into a [IO[T.Tuple2[T1, T2]]]
|
// 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]] {
|
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]]]
|
// SequenceT3 converts 3 [IO[T]] into a [IO[T.Tuple3[T1, T2, T3]]]
|
||||||
func SequenceT3[T1, T2, T3 any](
|
func SequenceT3[T1, T2, T3 any](
|
||||||
t1 IO[T1],
|
t1 IO[T1],
|
||||||
t2 IO[T2],
|
t2 IO[T2],
|
||||||
t3 IO[T3],
|
t3 IO[T3],
|
||||||
) IO[T.Tuple3[T1, T2, T3]] {
|
) IO[T.Tuple3[T1, T2, T3]] {
|
||||||
return G.SequenceT3[
|
return G.SequenceT3[
|
||||||
IO[T.Tuple3[T1, T2, T3]],
|
IO[T.Tuple3[T1, T2, T3]],
|
||||||
IO[T1],
|
IO[T1],
|
||||||
IO[T2],
|
IO[T2],
|
||||||
IO[T3],
|
IO[T3],
|
||||||
](t1, t2, t3)
|
](t1, t2, t3)
|
||||||
}
|
}
|
||||||
|
|
||||||
// SequenceTuple3 converts a [T.Tuple3[IO[T]]] into a [IO[T.Tuple3[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]] {
|
func SequenceTuple3[T1, T2, T3 any](t T.Tuple3[IO[T1], IO[T2], IO[T3]]) IO[T.Tuple3[T1, T2, T3]] {
|
||||||
return G.SequenceTuple3[
|
return G.SequenceTuple3[
|
||||||
IO[T.Tuple3[T1, T2, T3]],
|
IO[T.Tuple3[T1, T2, T3]],
|
||||||
IO[T1],
|
IO[T1],
|
||||||
IO[T2],
|
IO[T2],
|
||||||
IO[T3],
|
IO[T3],
|
||||||
](t)
|
](t)
|
||||||
}
|
}
|
||||||
|
|
||||||
// TraverseTuple3 converts a [T.Tuple3[IO[T]]] into a [IO[T.Tuple3[T1, T2, T3]]]
|
// 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]] {
|
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]]]
|
// SequenceT4 converts 4 [IO[T]] into a [IO[T.Tuple4[T1, T2, T3, T4]]]
|
||||||
func SequenceT4[T1, T2, T3, T4 any](
|
func SequenceT4[T1, T2, T3, T4 any](
|
||||||
t1 IO[T1],
|
t1 IO[T1],
|
||||||
t2 IO[T2],
|
t2 IO[T2],
|
||||||
t3 IO[T3],
|
t3 IO[T3],
|
||||||
t4 IO[T4],
|
t4 IO[T4],
|
||||||
) IO[T.Tuple4[T1, T2, T3, T4]] {
|
) IO[T.Tuple4[T1, T2, T3, T4]] {
|
||||||
return G.SequenceT4[
|
return G.SequenceT4[
|
||||||
IO[T.Tuple4[T1, T2, T3, T4]],
|
IO[T.Tuple4[T1, T2, T3, T4]],
|
||||||
IO[T1],
|
IO[T1],
|
||||||
IO[T2],
|
IO[T2],
|
||||||
IO[T3],
|
IO[T3],
|
||||||
IO[T4],
|
IO[T4],
|
||||||
](t1, t2, t3, t4)
|
](t1, t2, t3, t4)
|
||||||
}
|
}
|
||||||
|
|
||||||
// SequenceTuple4 converts a [T.Tuple4[IO[T]]] into a [IO[T.Tuple4[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]] {
|
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[
|
return G.SequenceTuple4[
|
||||||
IO[T.Tuple4[T1, T2, T3, T4]],
|
IO[T.Tuple4[T1, T2, T3, T4]],
|
||||||
IO[T1],
|
IO[T1],
|
||||||
IO[T2],
|
IO[T2],
|
||||||
IO[T3],
|
IO[T3],
|
||||||
IO[T4],
|
IO[T4],
|
||||||
](t)
|
](t)
|
||||||
}
|
}
|
||||||
|
|
||||||
// TraverseTuple4 converts a [T.Tuple4[IO[T]]] into a [IO[T.Tuple4[T1, T2, T3, T4]]]
|
// 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]] {
|
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]]]
|
// SequenceT5 converts 5 [IO[T]] into a [IO[T.Tuple5[T1, T2, T3, T4, T5]]]
|
||||||
func SequenceT5[T1, T2, T3, T4, T5 any](
|
func SequenceT5[T1, T2, T3, T4, T5 any](
|
||||||
t1 IO[T1],
|
t1 IO[T1],
|
||||||
t2 IO[T2],
|
t2 IO[T2],
|
||||||
t3 IO[T3],
|
t3 IO[T3],
|
||||||
t4 IO[T4],
|
t4 IO[T4],
|
||||||
t5 IO[T5],
|
t5 IO[T5],
|
||||||
) IO[T.Tuple5[T1, T2, T3, T4, T5]] {
|
) IO[T.Tuple5[T1, T2, T3, T4, T5]] {
|
||||||
return G.SequenceT5[
|
return G.SequenceT5[
|
||||||
IO[T.Tuple5[T1, T2, T3, T4, T5]],
|
IO[T.Tuple5[T1, T2, T3, T4, T5]],
|
||||||
IO[T1],
|
IO[T1],
|
||||||
IO[T2],
|
IO[T2],
|
||||||
IO[T3],
|
IO[T3],
|
||||||
IO[T4],
|
IO[T4],
|
||||||
IO[T5],
|
IO[T5],
|
||||||
](t1, t2, t3, t4, t5)
|
](t1, t2, t3, t4, t5)
|
||||||
}
|
}
|
||||||
|
|
||||||
// SequenceTuple5 converts a [T.Tuple5[IO[T]]] into a [IO[T.Tuple5[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]] {
|
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[
|
return G.SequenceTuple5[
|
||||||
IO[T.Tuple5[T1, T2, T3, T4, T5]],
|
IO[T.Tuple5[T1, T2, T3, T4, T5]],
|
||||||
IO[T1],
|
IO[T1],
|
||||||
IO[T2],
|
IO[T2],
|
||||||
IO[T3],
|
IO[T3],
|
||||||
IO[T4],
|
IO[T4],
|
||||||
IO[T5],
|
IO[T5],
|
||||||
](t)
|
](t)
|
||||||
}
|
}
|
||||||
|
|
||||||
// TraverseTuple5 converts a [T.Tuple5[IO[T]]] into a [IO[T.Tuple5[T1, T2, T3, T4, T5]]]
|
// 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]] {
|
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]]]
|
// 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](
|
func SequenceT6[T1, T2, T3, T4, T5, T6 any](
|
||||||
t1 IO[T1],
|
t1 IO[T1],
|
||||||
t2 IO[T2],
|
t2 IO[T2],
|
||||||
t3 IO[T3],
|
t3 IO[T3],
|
||||||
t4 IO[T4],
|
t4 IO[T4],
|
||||||
t5 IO[T5],
|
t5 IO[T5],
|
||||||
t6 IO[T6],
|
t6 IO[T6],
|
||||||
) IO[T.Tuple6[T1, T2, T3, T4, T5, T6]] {
|
) IO[T.Tuple6[T1, T2, T3, T4, T5, T6]] {
|
||||||
return G.SequenceT6[
|
return G.SequenceT6[
|
||||||
IO[T.Tuple6[T1, T2, T3, T4, T5, T6]],
|
IO[T.Tuple6[T1, T2, T3, T4, T5, T6]],
|
||||||
IO[T1],
|
IO[T1],
|
||||||
IO[T2],
|
IO[T2],
|
||||||
IO[T3],
|
IO[T3],
|
||||||
IO[T4],
|
IO[T4],
|
||||||
IO[T5],
|
IO[T5],
|
||||||
IO[T6],
|
IO[T6],
|
||||||
](t1, t2, t3, t4, t5, 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]]]
|
// 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]] {
|
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[
|
return G.SequenceTuple6[
|
||||||
IO[T.Tuple6[T1, T2, T3, T4, T5, T6]],
|
IO[T.Tuple6[T1, T2, T3, T4, T5, T6]],
|
||||||
IO[T1],
|
IO[T1],
|
||||||
IO[T2],
|
IO[T2],
|
||||||
IO[T3],
|
IO[T3],
|
||||||
IO[T4],
|
IO[T4],
|
||||||
IO[T5],
|
IO[T5],
|
||||||
IO[T6],
|
IO[T6],
|
||||||
](t)
|
](t)
|
||||||
}
|
}
|
||||||
|
|
||||||
// TraverseTuple6 converts a [T.Tuple6[IO[T]]] into a [IO[T.Tuple6[T1, T2, T3, T4, T5, T6]]]
|
// 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]] {
|
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]]]
|
// 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](
|
func SequenceT7[T1, T2, T3, T4, T5, T6, T7 any](
|
||||||
t1 IO[T1],
|
t1 IO[T1],
|
||||||
t2 IO[T2],
|
t2 IO[T2],
|
||||||
t3 IO[T3],
|
t3 IO[T3],
|
||||||
t4 IO[T4],
|
t4 IO[T4],
|
||||||
t5 IO[T5],
|
t5 IO[T5],
|
||||||
t6 IO[T6],
|
t6 IO[T6],
|
||||||
t7 IO[T7],
|
t7 IO[T7],
|
||||||
) IO[T.Tuple7[T1, T2, T3, T4, T5, T6, T7]] {
|
) IO[T.Tuple7[T1, T2, T3, T4, T5, T6, T7]] {
|
||||||
return G.SequenceT7[
|
return G.SequenceT7[
|
||||||
IO[T.Tuple7[T1, T2, T3, T4, T5, T6, T7]],
|
IO[T.Tuple7[T1, T2, T3, T4, T5, T6, T7]],
|
||||||
IO[T1],
|
IO[T1],
|
||||||
IO[T2],
|
IO[T2],
|
||||||
IO[T3],
|
IO[T3],
|
||||||
IO[T4],
|
IO[T4],
|
||||||
IO[T5],
|
IO[T5],
|
||||||
IO[T6],
|
IO[T6],
|
||||||
IO[T7],
|
IO[T7],
|
||||||
](t1, t2, t3, t4, t5, t6, 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]]]
|
// 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]] {
|
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[
|
return G.SequenceTuple7[
|
||||||
IO[T.Tuple7[T1, T2, T3, T4, T5, T6, T7]],
|
IO[T.Tuple7[T1, T2, T3, T4, T5, T6, T7]],
|
||||||
IO[T1],
|
IO[T1],
|
||||||
IO[T2],
|
IO[T2],
|
||||||
IO[T3],
|
IO[T3],
|
||||||
IO[T4],
|
IO[T4],
|
||||||
IO[T5],
|
IO[T5],
|
||||||
IO[T6],
|
IO[T6],
|
||||||
IO[T7],
|
IO[T7],
|
||||||
](t)
|
](t)
|
||||||
}
|
}
|
||||||
|
|
||||||
// TraverseTuple7 converts a [T.Tuple7[IO[T]]] into a [IO[T.Tuple7[T1, T2, T3, T4, T5, T6, T7]]]
|
// 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]] {
|
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]]]
|
// 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](
|
func SequenceT8[T1, T2, T3, T4, T5, T6, T7, T8 any](
|
||||||
t1 IO[T1],
|
t1 IO[T1],
|
||||||
t2 IO[T2],
|
t2 IO[T2],
|
||||||
t3 IO[T3],
|
t3 IO[T3],
|
||||||
t4 IO[T4],
|
t4 IO[T4],
|
||||||
t5 IO[T5],
|
t5 IO[T5],
|
||||||
t6 IO[T6],
|
t6 IO[T6],
|
||||||
t7 IO[T7],
|
t7 IO[T7],
|
||||||
t8 IO[T8],
|
t8 IO[T8],
|
||||||
) IO[T.Tuple8[T1, T2, T3, T4, T5, T6, T7, T8]] {
|
) IO[T.Tuple8[T1, T2, T3, T4, T5, T6, T7, T8]] {
|
||||||
return G.SequenceT8[
|
return G.SequenceT8[
|
||||||
IO[T.Tuple8[T1, T2, T3, T4, T5, T6, T7, T8]],
|
IO[T.Tuple8[T1, T2, T3, T4, T5, T6, T7, T8]],
|
||||||
IO[T1],
|
IO[T1],
|
||||||
IO[T2],
|
IO[T2],
|
||||||
IO[T3],
|
IO[T3],
|
||||||
IO[T4],
|
IO[T4],
|
||||||
IO[T5],
|
IO[T5],
|
||||||
IO[T6],
|
IO[T6],
|
||||||
IO[T7],
|
IO[T7],
|
||||||
IO[T8],
|
IO[T8],
|
||||||
](t1, t2, t3, t4, t5, t6, t7, 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]]]
|
// 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]] {
|
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[
|
return G.SequenceTuple8[
|
||||||
IO[T.Tuple8[T1, T2, T3, T4, T5, T6, T7, T8]],
|
IO[T.Tuple8[T1, T2, T3, T4, T5, T6, T7, T8]],
|
||||||
IO[T1],
|
IO[T1],
|
||||||
IO[T2],
|
IO[T2],
|
||||||
IO[T3],
|
IO[T3],
|
||||||
IO[T4],
|
IO[T4],
|
||||||
IO[T5],
|
IO[T5],
|
||||||
IO[T6],
|
IO[T6],
|
||||||
IO[T7],
|
IO[T7],
|
||||||
IO[T8],
|
IO[T8],
|
||||||
](t)
|
](t)
|
||||||
}
|
}
|
||||||
|
|
||||||
// TraverseTuple8 converts a [T.Tuple8[IO[T]]] into a [IO[T.Tuple8[T1, T2, T3, T4, T5, T6, T7, T8]]]
|
// 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]] {
|
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]]]
|
// 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](
|
func SequenceT9[T1, T2, T3, T4, T5, T6, T7, T8, T9 any](
|
||||||
t1 IO[T1],
|
t1 IO[T1],
|
||||||
t2 IO[T2],
|
t2 IO[T2],
|
||||||
t3 IO[T3],
|
t3 IO[T3],
|
||||||
t4 IO[T4],
|
t4 IO[T4],
|
||||||
t5 IO[T5],
|
t5 IO[T5],
|
||||||
t6 IO[T6],
|
t6 IO[T6],
|
||||||
t7 IO[T7],
|
t7 IO[T7],
|
||||||
t8 IO[T8],
|
t8 IO[T8],
|
||||||
t9 IO[T9],
|
t9 IO[T9],
|
||||||
) IO[T.Tuple9[T1, T2, T3, T4, T5, T6, T7, T8, T9]] {
|
) IO[T.Tuple9[T1, T2, T3, T4, T5, T6, T7, T8, T9]] {
|
||||||
return G.SequenceT9[
|
return G.SequenceT9[
|
||||||
IO[T.Tuple9[T1, T2, T3, T4, T5, T6, T7, T8, T9]],
|
IO[T.Tuple9[T1, T2, T3, T4, T5, T6, T7, T8, T9]],
|
||||||
IO[T1],
|
IO[T1],
|
||||||
IO[T2],
|
IO[T2],
|
||||||
IO[T3],
|
IO[T3],
|
||||||
IO[T4],
|
IO[T4],
|
||||||
IO[T5],
|
IO[T5],
|
||||||
IO[T6],
|
IO[T6],
|
||||||
IO[T7],
|
IO[T7],
|
||||||
IO[T8],
|
IO[T8],
|
||||||
IO[T9],
|
IO[T9],
|
||||||
](t1, t2, t3, t4, t5, t6, t7, t8, 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]]]
|
// 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]] {
|
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[
|
return G.SequenceTuple9[
|
||||||
IO[T.Tuple9[T1, T2, T3, T4, T5, T6, T7, T8, T9]],
|
IO[T.Tuple9[T1, T2, T3, T4, T5, T6, T7, T8, T9]],
|
||||||
IO[T1],
|
IO[T1],
|
||||||
IO[T2],
|
IO[T2],
|
||||||
IO[T3],
|
IO[T3],
|
||||||
IO[T4],
|
IO[T4],
|
||||||
IO[T5],
|
IO[T5],
|
||||||
IO[T6],
|
IO[T6],
|
||||||
IO[T7],
|
IO[T7],
|
||||||
IO[T8],
|
IO[T8],
|
||||||
IO[T9],
|
IO[T9],
|
||||||
](t)
|
](t)
|
||||||
}
|
}
|
||||||
|
|
||||||
// TraverseTuple9 converts a [T.Tuple9[IO[T]]] into a [IO[T.Tuple9[T1, T2, T3, T4, T5, T6, T7, T8, T9]]]
|
// 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]] {
|
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]]]
|
// 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](
|
func SequenceT10[T1, T2, T3, T4, T5, T6, T7, T8, T9, T10 any](
|
||||||
t1 IO[T1],
|
t1 IO[T1],
|
||||||
t2 IO[T2],
|
t2 IO[T2],
|
||||||
t3 IO[T3],
|
t3 IO[T3],
|
||||||
t4 IO[T4],
|
t4 IO[T4],
|
||||||
t5 IO[T5],
|
t5 IO[T5],
|
||||||
t6 IO[T6],
|
t6 IO[T6],
|
||||||
t7 IO[T7],
|
t7 IO[T7],
|
||||||
t8 IO[T8],
|
t8 IO[T8],
|
||||||
t9 IO[T9],
|
t9 IO[T9],
|
||||||
t10 IO[T10],
|
t10 IO[T10],
|
||||||
) IO[T.Tuple10[T1, T2, T3, T4, T5, T6, T7, T8, T9, T10]] {
|
) IO[T.Tuple10[T1, T2, T3, T4, T5, T6, T7, T8, T9, T10]] {
|
||||||
return G.SequenceT10[
|
return G.SequenceT10[
|
||||||
IO[T.Tuple10[T1, T2, T3, T4, T5, T6, T7, T8, T9, T10]],
|
IO[T.Tuple10[T1, T2, T3, T4, T5, T6, T7, T8, T9, T10]],
|
||||||
IO[T1],
|
IO[T1],
|
||||||
IO[T2],
|
IO[T2],
|
||||||
IO[T3],
|
IO[T3],
|
||||||
IO[T4],
|
IO[T4],
|
||||||
IO[T5],
|
IO[T5],
|
||||||
IO[T6],
|
IO[T6],
|
||||||
IO[T7],
|
IO[T7],
|
||||||
IO[T8],
|
IO[T8],
|
||||||
IO[T9],
|
IO[T9],
|
||||||
IO[T10],
|
IO[T10],
|
||||||
](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[IO[T]]] into a [IO[T.Tuple10[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]] {
|
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[
|
return G.SequenceTuple10[
|
||||||
IO[T.Tuple10[T1, T2, T3, T4, T5, T6, T7, T8, T9, T10]],
|
IO[T.Tuple10[T1, T2, T3, T4, T5, T6, T7, T8, T9, T10]],
|
||||||
IO[T1],
|
IO[T1],
|
||||||
IO[T2],
|
IO[T2],
|
||||||
IO[T3],
|
IO[T3],
|
||||||
IO[T4],
|
IO[T4],
|
||||||
IO[T5],
|
IO[T5],
|
||||||
IO[T6],
|
IO[T6],
|
||||||
IO[T7],
|
IO[T7],
|
||||||
IO[T8],
|
IO[T8],
|
||||||
IO[T9],
|
IO[T9],
|
||||||
IO[T10],
|
IO[T10],
|
||||||
](t)
|
](t)
|
||||||
}
|
}
|
||||||
|
|
||||||
// TraverseTuple10 converts a [T.Tuple10[IO[T]]] into a [IO[T.Tuple10[T1, T2, T3, T4, T5, T6, T7, T8, T9, T10]]]
|
// 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]] {
|
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)
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -64,6 +64,28 @@ func MonadApFirst[GA ~func() A, GB ~func() B, GBA ~func() func(B) A, A, B any](f
|
|||||||
)
|
)
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// MonadApFirstPar combines two effectful actions, keeping only the result of the first.
|
||||||
|
func MonadApFirstPar[GA ~func() A, GB ~func() B, GBA ~func() func(B) A, A, B any](first GA, second GB) GA {
|
||||||
|
return G.MonadApFirst(
|
||||||
|
MonadApPar[GB, GA, GBA, B, A],
|
||||||
|
MonadMap[GA, GBA, A, func(B) A],
|
||||||
|
|
||||||
|
first,
|
||||||
|
second,
|
||||||
|
)
|
||||||
|
}
|
||||||
|
|
||||||
|
// MonadApFirstSeq combines two effectful actions, keeping only the result of the first.
|
||||||
|
func MonadApFirstSeq[GA ~func() A, GB ~func() B, GBA ~func() func(B) A, A, B any](first GA, second GB) GA {
|
||||||
|
return G.MonadApFirst(
|
||||||
|
MonadApSeq[GB, GA, GBA, B, A],
|
||||||
|
MonadMap[GA, GBA, A, func(B) A],
|
||||||
|
|
||||||
|
first,
|
||||||
|
second,
|
||||||
|
)
|
||||||
|
}
|
||||||
|
|
||||||
// ApFirst combines two effectful actions, keeping only the result of the first.
|
// ApFirst combines two effectful actions, keeping only the result of the first.
|
||||||
func ApFirst[GA ~func() A, GB ~func() B, GBA ~func() func(B) A, A, B any](second GB) func(GA) GA {
|
func ApFirst[GA ~func() A, GB ~func() B, GBA ~func() func(B) A, A, B any](second GB) func(GA) GA {
|
||||||
return G.ApFirst(
|
return G.ApFirst(
|
||||||
@@ -74,6 +96,26 @@ func ApFirst[GA ~func() A, GB ~func() B, GBA ~func() func(B) A, A, B any](second
|
|||||||
)
|
)
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// ApFirstPar combines two effectful actions, keeping only the result of the first.
|
||||||
|
func ApFirstPar[GA ~func() A, GB ~func() B, GBA ~func() func(B) A, A, B any](second GB) func(GA) GA {
|
||||||
|
return G.ApFirst(
|
||||||
|
MonadApPar[GB, GA, GBA, B, A],
|
||||||
|
MonadMap[GA, GBA, A, func(B) A],
|
||||||
|
|
||||||
|
second,
|
||||||
|
)
|
||||||
|
}
|
||||||
|
|
||||||
|
// ApFirstSeq combines two effectful actions, keeping only the result of the first.
|
||||||
|
func ApFirstSeq[GA ~func() A, GB ~func() B, GBA ~func() func(B) A, A, B any](second GB) func(GA) GA {
|
||||||
|
return G.ApFirst(
|
||||||
|
MonadApSeq[GB, GA, GBA, B, A],
|
||||||
|
MonadMap[GA, GBA, A, func(B) A],
|
||||||
|
|
||||||
|
second,
|
||||||
|
)
|
||||||
|
}
|
||||||
|
|
||||||
// MonadApSecond combines two effectful actions, keeping only the result of the second.
|
// MonadApSecond combines two effectful actions, keeping only the result of the second.
|
||||||
func MonadApSecond[GA ~func() A, GB ~func() B, GBB ~func() func(B) B, A, B any](first GA, second GB) GB {
|
func MonadApSecond[GA ~func() A, GB ~func() B, GBB ~func() func(B) B, A, B any](first GA, second GB) GB {
|
||||||
return G.MonadApSecond(
|
return G.MonadApSecond(
|
||||||
|
|||||||
1405
io/generic/gen.go
1405
io/generic/gen.go
File diff suppressed because it is too large
Load Diff
@@ -16,11 +16,11 @@
|
|||||||
package generic
|
package generic
|
||||||
|
|
||||||
import (
|
import (
|
||||||
"sync"
|
|
||||||
"time"
|
"time"
|
||||||
|
|
||||||
F "github.com/IBM/fp-go/function"
|
F "github.com/IBM/fp-go/function"
|
||||||
C "github.com/IBM/fp-go/internal/chain"
|
C "github.com/IBM/fp-go/internal/chain"
|
||||||
|
L "github.com/IBM/fp-go/internal/lazy"
|
||||||
)
|
)
|
||||||
|
|
||||||
// type IO[A any] = func() A
|
// type IO[A any] = func() A
|
||||||
@@ -119,18 +119,7 @@ func Flatten[GA ~func() A, GAA ~func() GA, A any](mma GAA) GA {
|
|||||||
|
|
||||||
// Memoize computes the value of the provided IO monad lazily but exactly once
|
// Memoize computes the value of the provided IO monad lazily but exactly once
|
||||||
func Memoize[GA ~func() A, A any](ma GA) GA {
|
func Memoize[GA ~func() A, A any](ma GA) GA {
|
||||||
// synchronization primitives
|
return L.Memoize[GA, A](ma)
|
||||||
var once sync.Once
|
|
||||||
var result A
|
|
||||||
// callback
|
|
||||||
gen := func() {
|
|
||||||
result = ma()
|
|
||||||
}
|
|
||||||
// returns our memoized wrapper
|
|
||||||
return func() A {
|
|
||||||
once.Do(gen)
|
|
||||||
return result
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
|
|
||||||
// Delay creates an operation that passes in the value after some delay
|
// Delay creates an operation that passes in the value after some delay
|
||||||
|
|||||||
@@ -42,6 +42,16 @@ func TraverseArray[GB ~func() B, GBS ~func() BBS, AAS ~[]A, BBS ~[]B, A, B any](
|
|||||||
)
|
)
|
||||||
}
|
}
|
||||||
|
|
||||||
|
func TraverseArrayWithIndex[GB ~func() B, GBS ~func() BBS, AAS ~[]A, BBS ~[]B, A, B any](f func(int, A) GB) func(AAS) GBS {
|
||||||
|
return RA.TraverseWithIndex[AAS](
|
||||||
|
Of[GBS, BBS],
|
||||||
|
Map[GBS, func() func(B) BBS, BBS, func(B) BBS],
|
||||||
|
Ap[GBS, func() func(B) BBS, GB],
|
||||||
|
|
||||||
|
f,
|
||||||
|
)
|
||||||
|
}
|
||||||
|
|
||||||
func SequenceArray[GA ~func() A, GAS ~func() AAS, AAS ~[]A, GAAS ~[]GA, A any](tas GAAS) GAS {
|
func SequenceArray[GA ~func() A, GAS ~func() AAS, AAS ~[]A, GAAS ~[]GA, A any](tas GAAS) GAS {
|
||||||
return MonadTraverseArray[GA, GAS](tas, F.Identity[GA])
|
return MonadTraverseArray[GA, GAS](tas, F.Identity[GA])
|
||||||
}
|
}
|
||||||
@@ -66,6 +76,16 @@ func TraverseRecord[GB ~func() B, GBS ~func() MB, MA ~map[K]A, MB ~map[K]B, K co
|
|||||||
)
|
)
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// TraverseRecordWithIndex transforms a record using an IO transform an IO of a record
|
||||||
|
func TraverseRecordWithIndex[GB ~func() B, GBS ~func() MB, MA ~map[K]A, MB ~map[K]B, K comparable, A, B any](f func(K, A) GB) func(MA) GBS {
|
||||||
|
return RR.TraverseWithIndex[MA](
|
||||||
|
Of[GBS, MB],
|
||||||
|
Map[GBS, func() func(B) MB, MB, func(B) MB],
|
||||||
|
Ap[GBS, func() func(B) MB, GB],
|
||||||
|
f,
|
||||||
|
)
|
||||||
|
}
|
||||||
|
|
||||||
func SequenceRecord[GA ~func() A, GAS ~func() AAS, AAS ~map[K]A, GAAS ~map[K]GA, K comparable, A any](tas GAAS) GAS {
|
func SequenceRecord[GA ~func() A, GAS ~func() AAS, AAS ~map[K]A, GAAS ~map[K]GA, K comparable, A any](tas GAAS) GAS {
|
||||||
return MonadTraverseRecord[GA, GAS](tas, F.Identity[GA])
|
return MonadTraverseRecord[GA, GAS](tas, F.Identity[GA])
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -29,6 +29,12 @@ func TraverseArray[A, B any](f func(A) IO[B]) func([]A) IO[[]B] {
|
|||||||
return G.TraverseArray[IO[B], IO[[]B], []A](f)
|
return G.TraverseArray[IO[B], IO[[]B], []A](f)
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// TraverseArrayWithIndex applies a function returning an [IO] to all elements in an array and the
|
||||||
|
// transforms this into an [IO] of that array
|
||||||
|
func TraverseArrayWithIndex[A, B any](f func(int, A) IO[B]) func([]A) IO[[]B] {
|
||||||
|
return G.TraverseArrayWithIndex[IO[B], IO[[]B], []A](f)
|
||||||
|
}
|
||||||
|
|
||||||
// SequenceArray converts an array of [IO] to an [IO] of an array
|
// SequenceArray converts an array of [IO] to an [IO] of an array
|
||||||
func SequenceArray[A any](tas []IO[A]) IO[[]A] {
|
func SequenceArray[A any](tas []IO[A]) IO[[]A] {
|
||||||
return G.SequenceArray[IO[A], IO[[]A]](tas)
|
return G.SequenceArray[IO[A], IO[[]A]](tas)
|
||||||
@@ -38,12 +44,18 @@ func MonadTraverseRecord[K comparable, A, B any](tas map[K]A, f func(A) IO[B]) I
|
|||||||
return G.MonadTraverseRecord[IO[B], IO[map[K]B]](tas, f)
|
return G.MonadTraverseRecord[IO[B], IO[map[K]B]](tas, f)
|
||||||
}
|
}
|
||||||
|
|
||||||
// TraverseArray applies a function returning an [IO] to all elements in a record and the
|
// TraverseRecord applies a function returning an [IO] to all elements in a record and the
|
||||||
// transforms this into an [IO] of that record
|
// transforms this into an [IO] of that record
|
||||||
func TraverseRecord[K comparable, A, B any](f func(A) IO[B]) func(map[K]A) IO[map[K]B] {
|
func TraverseRecord[K comparable, A, B any](f func(A) IO[B]) func(map[K]A) IO[map[K]B] {
|
||||||
return G.TraverseRecord[IO[B], IO[map[K]B], map[K]A](f)
|
return G.TraverseRecord[IO[B], IO[map[K]B], map[K]A](f)
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// TraverseRecordWithIndex applies a function returning an [IO] to all elements in a record and the
|
||||||
|
// transforms this into an [IO] of that record
|
||||||
|
func TraverseRecordWithIndex[K comparable, A, B any](f func(K, A) IO[B]) func(map[K]A) IO[map[K]B] {
|
||||||
|
return G.TraverseRecordWithIndex[IO[B], IO[map[K]B], map[K]A](f)
|
||||||
|
}
|
||||||
|
|
||||||
// SequenceRecord converts a record of [IO] to an [IO] of a record
|
// SequenceRecord converts a record of [IO] to an [IO] of a record
|
||||||
func SequenceRecord[K comparable, A any](tas map[K]IO[A]) IO[map[K]A] {
|
func SequenceRecord[K comparable, A any](tas map[K]IO[A]) IO[map[K]A] {
|
||||||
return G.SequenceRecord[IO[A], IO[map[K]A]](tas)
|
return G.SequenceRecord[IO[A], IO[map[K]A]](tas)
|
||||||
|
|||||||
44
ioeither/bind.go
Normal file
44
ioeither/bind.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 ioeither
|
||||||
|
|
||||||
|
import (
|
||||||
|
G "github.com/IBM/fp-go/ioeither/generic"
|
||||||
|
)
|
||||||
|
|
||||||
|
// Bind applies a function to an input state and merges the result into that state
|
||||||
|
func Bind[E, A, S1, S2 any](s func(A) func(S1) S2, f func(S1) IOEither[E, A]) func(IOEither[E, S1]) IOEither[E, S2] {
|
||||||
|
return G.Bind[IOEither[E, S1], IOEither[E, S2], IOEither[E, A], func(S1) IOEither[E, A]](s, f)
|
||||||
|
}
|
||||||
|
|
||||||
|
// BindTo initializes some state based on a value
|
||||||
|
func BindTo[
|
||||||
|
E, A, S2 any](s func(A) S2) func(IOEither[E, A]) IOEither[E, S2] {
|
||||||
|
return G.BindTo[IOEither[E, S2], IOEither[E, A]](s)
|
||||||
|
}
|
||||||
|
|
||||||
|
func ApS[
|
||||||
|
E, A, S1, S2 any,
|
||||||
|
](s func(A) func(S1) S2, fa IOEither[E, A]) func(IOEither[E, S1]) IOEither[E, S2] {
|
||||||
|
return G.ApS[IOEither[E, S1], IOEither[E, S2], IOEither[E, A], IOEither[E, func(S1) S2]](s, fa)
|
||||||
|
}
|
||||||
|
|
||||||
|
func Let[E, A, S1, S2 any](
|
||||||
|
s func(A) func(S1) S2,
|
||||||
|
f func(S1) A,
|
||||||
|
) func(IOEither[E, S1]) IOEither[E, S2] {
|
||||||
|
return G.Let[IOEither[E, S1], IOEither[E, S2]](s, f)
|
||||||
|
}
|
||||||
57
ioeither/examples_create_test.go
Normal file
57
ioeither/examples_create_test.go
Normal file
@@ -0,0 +1,57 @@
|
|||||||
|
// 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 (
|
||||||
|
"fmt"
|
||||||
|
|
||||||
|
E "github.com/IBM/fp-go/either"
|
||||||
|
)
|
||||||
|
|
||||||
|
func ExampleIOEither_creation() {
|
||||||
|
// Build an IOEither
|
||||||
|
leftValue := Left[string](fmt.Errorf("some error"))
|
||||||
|
rightValue := Right[error]("value")
|
||||||
|
|
||||||
|
// Convert from Either
|
||||||
|
eitherValue := E.Of[error](42)
|
||||||
|
ioFromEither := FromEither(eitherValue)
|
||||||
|
|
||||||
|
// some predicate
|
||||||
|
isEven := func(num int) (int, error) {
|
||||||
|
if num%2 == 0 {
|
||||||
|
return num, nil
|
||||||
|
}
|
||||||
|
return 0, fmt.Errorf("%d is an odd number", num)
|
||||||
|
}
|
||||||
|
fromEven := Eitherize1(isEven)
|
||||||
|
leftFromPred := fromEven(3)
|
||||||
|
rightFromPred := fromEven(4)
|
||||||
|
|
||||||
|
fmt.Println(leftValue())
|
||||||
|
fmt.Println(rightValue())
|
||||||
|
fmt.Println(ioFromEither())
|
||||||
|
fmt.Println(leftFromPred())
|
||||||
|
fmt.Println(rightFromPred())
|
||||||
|
|
||||||
|
// Output:
|
||||||
|
// Left[*errors.errorString, string](some error)
|
||||||
|
// Right[<nil>, string](value)
|
||||||
|
// Right[<nil>, int](42)
|
||||||
|
// Left[*errors.errorString, int](3 is an odd number)
|
||||||
|
// Right[<nil>, int](4)
|
||||||
|
|
||||||
|
}
|
||||||
57
ioeither/examples_do_test.go
Normal file
57
ioeither/examples_do_test.go
Normal file
@@ -0,0 +1,57 @@
|
|||||||
|
// 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 (
|
||||||
|
"fmt"
|
||||||
|
"log"
|
||||||
|
|
||||||
|
F "github.com/IBM/fp-go/function"
|
||||||
|
IO "github.com/IBM/fp-go/io"
|
||||||
|
T "github.com/IBM/fp-go/tuple"
|
||||||
|
)
|
||||||
|
|
||||||
|
func ExampleIOEither_do() {
|
||||||
|
foo := Of[error]("foo")
|
||||||
|
bar := Of[error](1)
|
||||||
|
|
||||||
|
// quux consumes the state of three bindings and returns an [IO] instead of an [IOEither]
|
||||||
|
quux := func(t T.Tuple3[string, int, string]) IO.IO[any] {
|
||||||
|
return IO.FromImpure(func() {
|
||||||
|
log.Printf("t1: %s, t2: %d, t3: %s", t.F1, t.F2, t.F3)
|
||||||
|
})
|
||||||
|
}
|
||||||
|
|
||||||
|
transform := func(t T.Tuple3[string, int, string]) int {
|
||||||
|
return len(t.F1) + t.F2 + len(t.F3)
|
||||||
|
}
|
||||||
|
|
||||||
|
b := F.Pipe5(
|
||||||
|
foo,
|
||||||
|
BindTo[error](T.Of[string]),
|
||||||
|
ApS(T.Push1[string, int], bar),
|
||||||
|
Bind(T.Push2[string, int, string], func(t T.Tuple2[string, int]) IOEither[error, string] {
|
||||||
|
return Of[error](fmt.Sprintf("%s%d", t.F1, t.F2))
|
||||||
|
}),
|
||||||
|
ChainFirstIOK[error](quux),
|
||||||
|
Map[error](transform),
|
||||||
|
)
|
||||||
|
|
||||||
|
fmt.Println(b())
|
||||||
|
|
||||||
|
// Output:
|
||||||
|
// Right[<nil>, int](8)
|
||||||
|
}
|
||||||
45
ioeither/examples_extract_test.go
Normal file
45
ioeither/examples_extract_test.go
Normal file
@@ -0,0 +1,45 @@
|
|||||||
|
// Copyright (c) 2023 IBM Corp.
|
||||||
|
// All rights reserved.
|
||||||
|
//
|
||||||
|
// Licensed under the Apache License, Version 2.0 (the "License");
|
||||||
|
// you may not use this file except in compliance with the License.
|
||||||
|
// You may obtain a copy of the License at
|
||||||
|
//
|
||||||
|
// http://www.apache.org/licenses/LICENSE-2.0
|
||||||
|
//
|
||||||
|
// Unless required by applicable law or agreed to in writing, software
|
||||||
|
// distributed under the License is distributed on an "AS IS" BASIS,
|
||||||
|
// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
||||||
|
// See the License for the specific language governing permissions and
|
||||||
|
// limitations under the License.
|
||||||
|
|
||||||
|
package ioeither
|
||||||
|
|
||||||
|
import (
|
||||||
|
"fmt"
|
||||||
|
|
||||||
|
E "github.com/IBM/fp-go/either"
|
||||||
|
F "github.com/IBM/fp-go/function"
|
||||||
|
IO "github.com/IBM/fp-go/io"
|
||||||
|
)
|
||||||
|
|
||||||
|
func ExampleIOEither_extraction() {
|
||||||
|
// IOEither
|
||||||
|
someIOEither := Right[error](42)
|
||||||
|
eitherValue := someIOEither() // E.Right(42)
|
||||||
|
value := E.GetOrElse(F.Constant1[error](0))(eitherValue) // 42
|
||||||
|
|
||||||
|
// Or more directly
|
||||||
|
infaillibleIO := GetOrElse(F.Constant1[error](IO.Of(0)))(someIOEither) // => IO.Right(42)
|
||||||
|
valueFromIO := infaillibleIO() // => 42
|
||||||
|
|
||||||
|
fmt.Println(eitherValue)
|
||||||
|
fmt.Println(value)
|
||||||
|
fmt.Println(valueFromIO)
|
||||||
|
|
||||||
|
// Output:
|
||||||
|
// Right[<nil>, int](42)
|
||||||
|
// 42
|
||||||
|
// 42
|
||||||
|
|
||||||
|
}
|
||||||
519
ioeither/gen.go
519
ioeither/gen.go
@@ -1,486 +1,485 @@
|
|||||||
// Code generated by go generate; DO NOT EDIT.
|
// Code generated by go generate; DO NOT EDIT.
|
||||||
// This file was generated by robots at
|
// This file was generated by robots at
|
||||||
// 2023-08-11 11:38:09.4187123 +0200 CEST m=+0.099620101
|
// 2023-08-17 22:59:12.0033119 +0200 CEST m=+0.096740401
|
||||||
|
|
||||||
package ioeither
|
package ioeither
|
||||||
|
|
||||||
|
|
||||||
import (
|
import (
|
||||||
G "github.com/IBM/fp-go/ioeither/generic"
|
G "github.com/IBM/fp-go/ioeither/generic"
|
||||||
T "github.com/IBM/fp-go/tuple"
|
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]]
|
// 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] {
|
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]]
|
// 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) {
|
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]]
|
// 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] {
|
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]]
|
// 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) {
|
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]]]
|
// SequenceT1 converts 1 [IOEither[E, T]] into a [IOEither[E, T.Tuple1[T1]]]
|
||||||
func SequenceT1[E, T1 any](
|
func SequenceT1[E, T1 any](
|
||||||
t1 IOEither[E, T1],
|
t1 IOEither[E, T1],
|
||||||
) IOEither[E, T.Tuple1[T1]] {
|
) IOEither[E, T.Tuple1[T1]] {
|
||||||
return G.SequenceT1[
|
return G.SequenceT1[
|
||||||
IOEither[E, T.Tuple1[T1]],
|
IOEither[E, T.Tuple1[T1]],
|
||||||
IOEither[E, T1],
|
IOEither[E, T1],
|
||||||
](t1)
|
](t1)
|
||||||
}
|
}
|
||||||
|
|
||||||
// SequenceTuple1 converts a [T.Tuple1[IOEither[E, T]]] into a [IOEither[E, T.Tuple1[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]] {
|
func SequenceTuple1[E, T1 any](t T.Tuple1[IOEither[E, T1]]) IOEither[E, T.Tuple1[T1]] {
|
||||||
return G.SequenceTuple1[
|
return G.SequenceTuple1[
|
||||||
IOEither[E, T.Tuple1[T1]],
|
IOEither[E, T.Tuple1[T1]],
|
||||||
IOEither[E, T1],
|
IOEither[E, T1],
|
||||||
](t)
|
](t)
|
||||||
}
|
}
|
||||||
|
|
||||||
// TraverseTuple1 converts a [T.Tuple1[IOEither[E, T]]] into a [IOEither[E, T.Tuple1[T1]]]
|
// 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]] {
|
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]]
|
// 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] {
|
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]]
|
// 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) {
|
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]]]
|
// SequenceT2 converts 2 [IOEither[E, T]] into a [IOEither[E, T.Tuple2[T1, T2]]]
|
||||||
func SequenceT2[E, T1, T2 any](
|
func SequenceT2[E, T1, T2 any](
|
||||||
t1 IOEither[E, T1],
|
t1 IOEither[E, T1],
|
||||||
t2 IOEither[E, T2],
|
t2 IOEither[E, T2],
|
||||||
) IOEither[E, T.Tuple2[T1, T2]] {
|
) IOEither[E, T.Tuple2[T1, T2]] {
|
||||||
return G.SequenceT2[
|
return G.SequenceT2[
|
||||||
IOEither[E, T.Tuple2[T1, T2]],
|
IOEither[E, T.Tuple2[T1, T2]],
|
||||||
IOEither[E, T1],
|
IOEither[E, T1],
|
||||||
IOEither[E, T2],
|
IOEither[E, T2],
|
||||||
](t1, t2)
|
](t1, t2)
|
||||||
}
|
}
|
||||||
|
|
||||||
// SequenceTuple2 converts a [T.Tuple2[IOEither[E, T]]] into a [IOEither[E, T.Tuple2[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]] {
|
func SequenceTuple2[E, T1, T2 any](t T.Tuple2[IOEither[E, T1], IOEither[E, T2]]) IOEither[E, T.Tuple2[T1, T2]] {
|
||||||
return G.SequenceTuple2[
|
return G.SequenceTuple2[
|
||||||
IOEither[E, T.Tuple2[T1, T2]],
|
IOEither[E, T.Tuple2[T1, T2]],
|
||||||
IOEither[E, T1],
|
IOEither[E, T1],
|
||||||
IOEither[E, T2],
|
IOEither[E, T2],
|
||||||
](t)
|
](t)
|
||||||
}
|
}
|
||||||
|
|
||||||
// TraverseTuple2 converts a [T.Tuple2[IOEither[E, T]]] into a [IOEither[E, T.Tuple2[T1, T2]]]
|
// 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]] {
|
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]]
|
// 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] {
|
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]]
|
// 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) {
|
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]]]
|
// SequenceT3 converts 3 [IOEither[E, T]] into a [IOEither[E, T.Tuple3[T1, T2, T3]]]
|
||||||
func SequenceT3[E, T1, T2, T3 any](
|
func SequenceT3[E, T1, T2, T3 any](
|
||||||
t1 IOEither[E, T1],
|
t1 IOEither[E, T1],
|
||||||
t2 IOEither[E, T2],
|
t2 IOEither[E, T2],
|
||||||
t3 IOEither[E, T3],
|
t3 IOEither[E, T3],
|
||||||
) IOEither[E, T.Tuple3[T1, T2, T3]] {
|
) IOEither[E, T.Tuple3[T1, T2, T3]] {
|
||||||
return G.SequenceT3[
|
return G.SequenceT3[
|
||||||
IOEither[E, T.Tuple3[T1, T2, T3]],
|
IOEither[E, T.Tuple3[T1, T2, T3]],
|
||||||
IOEither[E, T1],
|
IOEither[E, T1],
|
||||||
IOEither[E, T2],
|
IOEither[E, T2],
|
||||||
IOEither[E, T3],
|
IOEither[E, T3],
|
||||||
](t1, t2, t3)
|
](t1, t2, t3)
|
||||||
}
|
}
|
||||||
|
|
||||||
// SequenceTuple3 converts a [T.Tuple3[IOEither[E, T]]] into a [IOEither[E, T.Tuple3[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]] {
|
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[
|
return G.SequenceTuple3[
|
||||||
IOEither[E, T.Tuple3[T1, T2, T3]],
|
IOEither[E, T.Tuple3[T1, T2, T3]],
|
||||||
IOEither[E, T1],
|
IOEither[E, T1],
|
||||||
IOEither[E, T2],
|
IOEither[E, T2],
|
||||||
IOEither[E, T3],
|
IOEither[E, T3],
|
||||||
](t)
|
](t)
|
||||||
}
|
}
|
||||||
|
|
||||||
// TraverseTuple3 converts a [T.Tuple3[IOEither[E, T]]] into a [IOEither[E, T.Tuple3[T1, T2, T3]]]
|
// 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]] {
|
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]]
|
// 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] {
|
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]]
|
// 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) {
|
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]]]
|
// SequenceT4 converts 4 [IOEither[E, T]] into a [IOEither[E, T.Tuple4[T1, T2, T3, T4]]]
|
||||||
func SequenceT4[E, T1, T2, T3, T4 any](
|
func SequenceT4[E, T1, T2, T3, T4 any](
|
||||||
t1 IOEither[E, T1],
|
t1 IOEither[E, T1],
|
||||||
t2 IOEither[E, T2],
|
t2 IOEither[E, T2],
|
||||||
t3 IOEither[E, T3],
|
t3 IOEither[E, T3],
|
||||||
t4 IOEither[E, T4],
|
t4 IOEither[E, T4],
|
||||||
) IOEither[E, T.Tuple4[T1, T2, T3, T4]] {
|
) IOEither[E, T.Tuple4[T1, T2, T3, T4]] {
|
||||||
return G.SequenceT4[
|
return G.SequenceT4[
|
||||||
IOEither[E, T.Tuple4[T1, T2, T3, T4]],
|
IOEither[E, T.Tuple4[T1, T2, T3, T4]],
|
||||||
IOEither[E, T1],
|
IOEither[E, T1],
|
||||||
IOEither[E, T2],
|
IOEither[E, T2],
|
||||||
IOEither[E, T3],
|
IOEither[E, T3],
|
||||||
IOEither[E, T4],
|
IOEither[E, T4],
|
||||||
](t1, t2, t3, t4)
|
](t1, t2, t3, t4)
|
||||||
}
|
}
|
||||||
|
|
||||||
// SequenceTuple4 converts a [T.Tuple4[IOEither[E, T]]] into a [IOEither[E, T.Tuple4[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]] {
|
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[
|
return G.SequenceTuple4[
|
||||||
IOEither[E, T.Tuple4[T1, T2, T3, T4]],
|
IOEither[E, T.Tuple4[T1, T2, T3, T4]],
|
||||||
IOEither[E, T1],
|
IOEither[E, T1],
|
||||||
IOEither[E, T2],
|
IOEither[E, T2],
|
||||||
IOEither[E, T3],
|
IOEither[E, T3],
|
||||||
IOEither[E, T4],
|
IOEither[E, T4],
|
||||||
](t)
|
](t)
|
||||||
}
|
}
|
||||||
|
|
||||||
// TraverseTuple4 converts a [T.Tuple4[IOEither[E, T]]] into a [IOEither[E, T.Tuple4[T1, T2, T3, T4]]]
|
// 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]] {
|
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]]
|
// 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] {
|
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]]
|
// 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) {
|
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]]]
|
// 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](
|
func SequenceT5[E, T1, T2, T3, T4, T5 any](
|
||||||
t1 IOEither[E, T1],
|
t1 IOEither[E, T1],
|
||||||
t2 IOEither[E, T2],
|
t2 IOEither[E, T2],
|
||||||
t3 IOEither[E, T3],
|
t3 IOEither[E, T3],
|
||||||
t4 IOEither[E, T4],
|
t4 IOEither[E, T4],
|
||||||
t5 IOEither[E, T5],
|
t5 IOEither[E, T5],
|
||||||
) IOEither[E, T.Tuple5[T1, T2, T3, T4, T5]] {
|
) IOEither[E, T.Tuple5[T1, T2, T3, T4, T5]] {
|
||||||
return G.SequenceT5[
|
return G.SequenceT5[
|
||||||
IOEither[E, T.Tuple5[T1, T2, T3, T4, T5]],
|
IOEither[E, T.Tuple5[T1, T2, T3, T4, T5]],
|
||||||
IOEither[E, T1],
|
IOEither[E, T1],
|
||||||
IOEither[E, T2],
|
IOEither[E, T2],
|
||||||
IOEither[E, T3],
|
IOEither[E, T3],
|
||||||
IOEither[E, T4],
|
IOEither[E, T4],
|
||||||
IOEither[E, T5],
|
IOEither[E, T5],
|
||||||
](t1, t2, t3, t4, 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]]]
|
// 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]] {
|
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[
|
return G.SequenceTuple5[
|
||||||
IOEither[E, T.Tuple5[T1, T2, T3, T4, T5]],
|
IOEither[E, T.Tuple5[T1, T2, T3, T4, T5]],
|
||||||
IOEither[E, T1],
|
IOEither[E, T1],
|
||||||
IOEither[E, T2],
|
IOEither[E, T2],
|
||||||
IOEither[E, T3],
|
IOEither[E, T3],
|
||||||
IOEither[E, T4],
|
IOEither[E, T4],
|
||||||
IOEither[E, T5],
|
IOEither[E, T5],
|
||||||
](t)
|
](t)
|
||||||
}
|
}
|
||||||
|
|
||||||
// TraverseTuple5 converts a [T.Tuple5[IOEither[E, T]]] into a [IOEither[E, T.Tuple5[T1, T2, T3, T4, T5]]]
|
// 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]] {
|
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]]
|
// 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] {
|
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]]
|
// 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) {
|
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]]]
|
// 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](
|
func SequenceT6[E, T1, T2, T3, T4, T5, T6 any](
|
||||||
t1 IOEither[E, T1],
|
t1 IOEither[E, T1],
|
||||||
t2 IOEither[E, T2],
|
t2 IOEither[E, T2],
|
||||||
t3 IOEither[E, T3],
|
t3 IOEither[E, T3],
|
||||||
t4 IOEither[E, T4],
|
t4 IOEither[E, T4],
|
||||||
t5 IOEither[E, T5],
|
t5 IOEither[E, T5],
|
||||||
t6 IOEither[E, T6],
|
t6 IOEither[E, T6],
|
||||||
) IOEither[E, T.Tuple6[T1, T2, T3, T4, T5, T6]] {
|
) IOEither[E, T.Tuple6[T1, T2, T3, T4, T5, T6]] {
|
||||||
return G.SequenceT6[
|
return G.SequenceT6[
|
||||||
IOEither[E, T.Tuple6[T1, T2, T3, T4, T5, T6]],
|
IOEither[E, T.Tuple6[T1, T2, T3, T4, T5, T6]],
|
||||||
IOEither[E, T1],
|
IOEither[E, T1],
|
||||||
IOEither[E, T2],
|
IOEither[E, T2],
|
||||||
IOEither[E, T3],
|
IOEither[E, T3],
|
||||||
IOEither[E, T4],
|
IOEither[E, T4],
|
||||||
IOEither[E, T5],
|
IOEither[E, T5],
|
||||||
IOEither[E, T6],
|
IOEither[E, T6],
|
||||||
](t1, t2, t3, t4, t5, 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]]]
|
// 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]] {
|
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[
|
return G.SequenceTuple6[
|
||||||
IOEither[E, T.Tuple6[T1, T2, T3, T4, T5, T6]],
|
IOEither[E, T.Tuple6[T1, T2, T3, T4, T5, T6]],
|
||||||
IOEither[E, T1],
|
IOEither[E, T1],
|
||||||
IOEither[E, T2],
|
IOEither[E, T2],
|
||||||
IOEither[E, T3],
|
IOEither[E, T3],
|
||||||
IOEither[E, T4],
|
IOEither[E, T4],
|
||||||
IOEither[E, T5],
|
IOEither[E, T5],
|
||||||
IOEither[E, T6],
|
IOEither[E, T6],
|
||||||
](t)
|
](t)
|
||||||
}
|
}
|
||||||
|
|
||||||
// TraverseTuple6 converts a [T.Tuple6[IOEither[E, T]]] into a [IOEither[E, T.Tuple6[T1, T2, T3, T4, T5, T6]]]
|
// 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]] {
|
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]]
|
// 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] {
|
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]]
|
// 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) {
|
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]]]
|
// 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](
|
func SequenceT7[E, T1, T2, T3, T4, T5, T6, T7 any](
|
||||||
t1 IOEither[E, T1],
|
t1 IOEither[E, T1],
|
||||||
t2 IOEither[E, T2],
|
t2 IOEither[E, T2],
|
||||||
t3 IOEither[E, T3],
|
t3 IOEither[E, T3],
|
||||||
t4 IOEither[E, T4],
|
t4 IOEither[E, T4],
|
||||||
t5 IOEither[E, T5],
|
t5 IOEither[E, T5],
|
||||||
t6 IOEither[E, T6],
|
t6 IOEither[E, T6],
|
||||||
t7 IOEither[E, T7],
|
t7 IOEither[E, T7],
|
||||||
) IOEither[E, T.Tuple7[T1, T2, T3, T4, T5, T6, T7]] {
|
) IOEither[E, T.Tuple7[T1, T2, T3, T4, T5, T6, T7]] {
|
||||||
return G.SequenceT7[
|
return G.SequenceT7[
|
||||||
IOEither[E, T.Tuple7[T1, T2, T3, T4, T5, T6, T7]],
|
IOEither[E, T.Tuple7[T1, T2, T3, T4, T5, T6, T7]],
|
||||||
IOEither[E, T1],
|
IOEither[E, T1],
|
||||||
IOEither[E, T2],
|
IOEither[E, T2],
|
||||||
IOEither[E, T3],
|
IOEither[E, T3],
|
||||||
IOEither[E, T4],
|
IOEither[E, T4],
|
||||||
IOEither[E, T5],
|
IOEither[E, T5],
|
||||||
IOEither[E, T6],
|
IOEither[E, T6],
|
||||||
IOEither[E, T7],
|
IOEither[E, T7],
|
||||||
](t1, t2, t3, t4, t5, t6, 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]]]
|
// 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]] {
|
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[
|
return G.SequenceTuple7[
|
||||||
IOEither[E, T.Tuple7[T1, T2, T3, T4, T5, T6, T7]],
|
IOEither[E, T.Tuple7[T1, T2, T3, T4, T5, T6, T7]],
|
||||||
IOEither[E, T1],
|
IOEither[E, T1],
|
||||||
IOEither[E, T2],
|
IOEither[E, T2],
|
||||||
IOEither[E, T3],
|
IOEither[E, T3],
|
||||||
IOEither[E, T4],
|
IOEither[E, T4],
|
||||||
IOEither[E, T5],
|
IOEither[E, T5],
|
||||||
IOEither[E, T6],
|
IOEither[E, T6],
|
||||||
IOEither[E, T7],
|
IOEither[E, T7],
|
||||||
](t)
|
](t)
|
||||||
}
|
}
|
||||||
|
|
||||||
// TraverseTuple7 converts a [T.Tuple7[IOEither[E, T]]] into a [IOEither[E, T.Tuple7[T1, T2, T3, T4, T5, T6, T7]]]
|
// 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]] {
|
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]]
|
// 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] {
|
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]]
|
// 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) {
|
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]]]
|
// 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](
|
func SequenceT8[E, T1, T2, T3, T4, T5, T6, T7, T8 any](
|
||||||
t1 IOEither[E, T1],
|
t1 IOEither[E, T1],
|
||||||
t2 IOEither[E, T2],
|
t2 IOEither[E, T2],
|
||||||
t3 IOEither[E, T3],
|
t3 IOEither[E, T3],
|
||||||
t4 IOEither[E, T4],
|
t4 IOEither[E, T4],
|
||||||
t5 IOEither[E, T5],
|
t5 IOEither[E, T5],
|
||||||
t6 IOEither[E, T6],
|
t6 IOEither[E, T6],
|
||||||
t7 IOEither[E, T7],
|
t7 IOEither[E, T7],
|
||||||
t8 IOEither[E, T8],
|
t8 IOEither[E, T8],
|
||||||
) IOEither[E, T.Tuple8[T1, T2, T3, T4, T5, T6, T7, T8]] {
|
) IOEither[E, T.Tuple8[T1, T2, T3, T4, T5, T6, T7, T8]] {
|
||||||
return G.SequenceT8[
|
return G.SequenceT8[
|
||||||
IOEither[E, T.Tuple8[T1, T2, T3, T4, T5, T6, T7, T8]],
|
IOEither[E, T.Tuple8[T1, T2, T3, T4, T5, T6, T7, T8]],
|
||||||
IOEither[E, T1],
|
IOEither[E, T1],
|
||||||
IOEither[E, T2],
|
IOEither[E, T2],
|
||||||
IOEither[E, T3],
|
IOEither[E, T3],
|
||||||
IOEither[E, T4],
|
IOEither[E, T4],
|
||||||
IOEither[E, T5],
|
IOEither[E, T5],
|
||||||
IOEither[E, T6],
|
IOEither[E, T6],
|
||||||
IOEither[E, T7],
|
IOEither[E, T7],
|
||||||
IOEither[E, T8],
|
IOEither[E, T8],
|
||||||
](t1, t2, t3, t4, t5, t6, t7, 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]]]
|
// 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]] {
|
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[
|
return G.SequenceTuple8[
|
||||||
IOEither[E, T.Tuple8[T1, T2, T3, T4, T5, T6, T7, T8]],
|
IOEither[E, T.Tuple8[T1, T2, T3, T4, T5, T6, T7, T8]],
|
||||||
IOEither[E, T1],
|
IOEither[E, T1],
|
||||||
IOEither[E, T2],
|
IOEither[E, T2],
|
||||||
IOEither[E, T3],
|
IOEither[E, T3],
|
||||||
IOEither[E, T4],
|
IOEither[E, T4],
|
||||||
IOEither[E, T5],
|
IOEither[E, T5],
|
||||||
IOEither[E, T6],
|
IOEither[E, T6],
|
||||||
IOEither[E, T7],
|
IOEither[E, T7],
|
||||||
IOEither[E, T8],
|
IOEither[E, T8],
|
||||||
](t)
|
](t)
|
||||||
}
|
}
|
||||||
|
|
||||||
// TraverseTuple8 converts a [T.Tuple8[IOEither[E, T]]] into a [IOEither[E, T.Tuple8[T1, T2, T3, T4, T5, T6, T7, T8]]]
|
// 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]] {
|
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]]
|
// 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] {
|
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]]
|
// 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) {
|
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]]]
|
// 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](
|
func SequenceT9[E, T1, T2, T3, T4, T5, T6, T7, T8, T9 any](
|
||||||
t1 IOEither[E, T1],
|
t1 IOEither[E, T1],
|
||||||
t2 IOEither[E, T2],
|
t2 IOEither[E, T2],
|
||||||
t3 IOEither[E, T3],
|
t3 IOEither[E, T3],
|
||||||
t4 IOEither[E, T4],
|
t4 IOEither[E, T4],
|
||||||
t5 IOEither[E, T5],
|
t5 IOEither[E, T5],
|
||||||
t6 IOEither[E, T6],
|
t6 IOEither[E, T6],
|
||||||
t7 IOEither[E, T7],
|
t7 IOEither[E, T7],
|
||||||
t8 IOEither[E, T8],
|
t8 IOEither[E, T8],
|
||||||
t9 IOEither[E, T9],
|
t9 IOEither[E, T9],
|
||||||
) IOEither[E, T.Tuple9[T1, T2, T3, T4, T5, T6, T7, T8, T9]] {
|
) IOEither[E, T.Tuple9[T1, T2, T3, T4, T5, T6, T7, T8, T9]] {
|
||||||
return G.SequenceT9[
|
return G.SequenceT9[
|
||||||
IOEither[E, T.Tuple9[T1, T2, T3, T4, T5, T6, T7, T8, T9]],
|
IOEither[E, T.Tuple9[T1, T2, T3, T4, T5, T6, T7, T8, T9]],
|
||||||
IOEither[E, T1],
|
IOEither[E, T1],
|
||||||
IOEither[E, T2],
|
IOEither[E, T2],
|
||||||
IOEither[E, T3],
|
IOEither[E, T3],
|
||||||
IOEither[E, T4],
|
IOEither[E, T4],
|
||||||
IOEither[E, T5],
|
IOEither[E, T5],
|
||||||
IOEither[E, T6],
|
IOEither[E, T6],
|
||||||
IOEither[E, T7],
|
IOEither[E, T7],
|
||||||
IOEither[E, T8],
|
IOEither[E, T8],
|
||||||
IOEither[E, T9],
|
IOEither[E, T9],
|
||||||
](t1, t2, t3, t4, t5, t6, t7, t8, 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]]]
|
// 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]] {
|
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[
|
return G.SequenceTuple9[
|
||||||
IOEither[E, T.Tuple9[T1, T2, T3, T4, T5, T6, T7, T8, T9]],
|
IOEither[E, T.Tuple9[T1, T2, T3, T4, T5, T6, T7, T8, T9]],
|
||||||
IOEither[E, T1],
|
IOEither[E, T1],
|
||||||
IOEither[E, T2],
|
IOEither[E, T2],
|
||||||
IOEither[E, T3],
|
IOEither[E, T3],
|
||||||
IOEither[E, T4],
|
IOEither[E, T4],
|
||||||
IOEither[E, T5],
|
IOEither[E, T5],
|
||||||
IOEither[E, T6],
|
IOEither[E, T6],
|
||||||
IOEither[E, T7],
|
IOEither[E, T7],
|
||||||
IOEither[E, T8],
|
IOEither[E, T8],
|
||||||
IOEither[E, T9],
|
IOEither[E, T9],
|
||||||
](t)
|
](t)
|
||||||
}
|
}
|
||||||
|
|
||||||
// TraverseTuple9 converts a [T.Tuple9[IOEither[E, T]]] into a [IOEither[E, T.Tuple9[T1, T2, T3, T4, T5, T6, T7, T8, T9]]]
|
// 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]] {
|
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]]
|
// 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] {
|
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]]
|
// 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) {
|
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]]]
|
// 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](
|
func SequenceT10[E, T1, T2, T3, T4, T5, T6, T7, T8, T9, T10 any](
|
||||||
t1 IOEither[E, T1],
|
t1 IOEither[E, T1],
|
||||||
t2 IOEither[E, T2],
|
t2 IOEither[E, T2],
|
||||||
t3 IOEither[E, T3],
|
t3 IOEither[E, T3],
|
||||||
t4 IOEither[E, T4],
|
t4 IOEither[E, T4],
|
||||||
t5 IOEither[E, T5],
|
t5 IOEither[E, T5],
|
||||||
t6 IOEither[E, T6],
|
t6 IOEither[E, T6],
|
||||||
t7 IOEither[E, T7],
|
t7 IOEither[E, T7],
|
||||||
t8 IOEither[E, T8],
|
t8 IOEither[E, T8],
|
||||||
t9 IOEither[E, T9],
|
t9 IOEither[E, T9],
|
||||||
t10 IOEither[E, T10],
|
t10 IOEither[E, T10],
|
||||||
) IOEither[E, T.Tuple10[T1, T2, T3, T4, T5, T6, T7, T8, T9, T10]] {
|
) IOEither[E, T.Tuple10[T1, T2, T3, T4, T5, T6, T7, T8, T9, T10]] {
|
||||||
return G.SequenceT10[
|
return G.SequenceT10[
|
||||||
IOEither[E, T.Tuple10[T1, T2, T3, T4, T5, T6, T7, T8, T9, T10]],
|
IOEither[E, T.Tuple10[T1, T2, T3, T4, T5, T6, T7, T8, T9, T10]],
|
||||||
IOEither[E, T1],
|
IOEither[E, T1],
|
||||||
IOEither[E, T2],
|
IOEither[E, T2],
|
||||||
IOEither[E, T3],
|
IOEither[E, T3],
|
||||||
IOEither[E, T4],
|
IOEither[E, T4],
|
||||||
IOEither[E, T5],
|
IOEither[E, T5],
|
||||||
IOEither[E, T6],
|
IOEither[E, T6],
|
||||||
IOEither[E, T7],
|
IOEither[E, T7],
|
||||||
IOEither[E, T8],
|
IOEither[E, T8],
|
||||||
IOEither[E, T9],
|
IOEither[E, T9],
|
||||||
IOEither[E, T10],
|
IOEither[E, T10],
|
||||||
](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[IOEither[E, T]]] into a [IOEither[E, T.Tuple10[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]] {
|
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[
|
return G.SequenceTuple10[
|
||||||
IOEither[E, T.Tuple10[T1, T2, T3, T4, T5, T6, T7, T8, T9, T10]],
|
IOEither[E, T.Tuple10[T1, T2, T3, T4, T5, T6, T7, T8, T9, T10]],
|
||||||
IOEither[E, T1],
|
IOEither[E, T1],
|
||||||
IOEither[E, T2],
|
IOEither[E, T2],
|
||||||
IOEither[E, T3],
|
IOEither[E, T3],
|
||||||
IOEither[E, T4],
|
IOEither[E, T4],
|
||||||
IOEither[E, T5],
|
IOEither[E, T5],
|
||||||
IOEither[E, T6],
|
IOEither[E, T6],
|
||||||
IOEither[E, T7],
|
IOEither[E, T7],
|
||||||
IOEither[E, T8],
|
IOEither[E, T8],
|
||||||
IOEither[E, T9],
|
IOEither[E, T9],
|
||||||
IOEither[E, T10],
|
IOEither[E, T10],
|
||||||
](t)
|
](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]]]
|
// 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]] {
|
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)
|
||||||
}
|
}
|
||||||
|
|||||||
79
ioeither/generic/bind.go
Normal file
79
ioeither/generic/bind.go
Normal file
@@ -0,0 +1,79 @@
|
|||||||
|
// 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 (
|
||||||
|
ET "github.com/IBM/fp-go/either"
|
||||||
|
G "github.com/IBM/fp-go/internal/bindt"
|
||||||
|
)
|
||||||
|
|
||||||
|
// Bind applies a function to an input state and merges the result into that state
|
||||||
|
func Bind[
|
||||||
|
GS1 ~func() ET.Either[E, S1],
|
||||||
|
GS2 ~func() ET.Either[E, S2],
|
||||||
|
GA ~func() ET.Either[E, A],
|
||||||
|
FCT ~func(S1) GA,
|
||||||
|
E any,
|
||||||
|
SET ~func(A) func(S1) S2,
|
||||||
|
A, S1, S2 any](s SET, f FCT) func(GS1) GS2 {
|
||||||
|
return G.Bind(
|
||||||
|
Chain[GS1, GS2, E, S1, S2],
|
||||||
|
Map[GA, GS2, E, A, S2],
|
||||||
|
s,
|
||||||
|
f,
|
||||||
|
)
|
||||||
|
}
|
||||||
|
|
||||||
|
// BindTo initializes some state based on a value
|
||||||
|
func BindTo[
|
||||||
|
GS2 ~func() ET.Either[E, S2],
|
||||||
|
GA ~func() ET.Either[E, A],
|
||||||
|
E any,
|
||||||
|
SET ~func(A) S2,
|
||||||
|
A, S2 any](s SET) func(GA) GS2 {
|
||||||
|
return G.BindTo(
|
||||||
|
Map[GA, GS2, E, A, S2],
|
||||||
|
s,
|
||||||
|
)
|
||||||
|
}
|
||||||
|
|
||||||
|
func ApS[
|
||||||
|
GS1 ~func() ET.Either[E, S1],
|
||||||
|
GS2 ~func() ET.Either[E, S2],
|
||||||
|
GB ~func() ET.Either[E, B],
|
||||||
|
GS1S2 ~func() ET.Either[E, func(S1) S2],
|
||||||
|
SET ~func(B) func(S1) S2,
|
||||||
|
E, S1, S2, B any,
|
||||||
|
](s SET, fb GB) func(GS1) GS2 {
|
||||||
|
return G.ApS[SET, S1, S2, B, GS1S2, GS1, GS2, GB](
|
||||||
|
Ap[GS2, GS1S2, GS1, E, S1, S2],
|
||||||
|
Map[GB, GS1S2, E, B, func(S1) S2],
|
||||||
|
s,
|
||||||
|
fb,
|
||||||
|
)
|
||||||
|
}
|
||||||
|
|
||||||
|
func Let[
|
||||||
|
GS1 ~func() ET.Either[E, S1],
|
||||||
|
GS2 ~func() ET.Either[E, S2],
|
||||||
|
SET ~func(B) func(S1) S2,
|
||||||
|
FCT ~func(S1) B,
|
||||||
|
E, S1, S2, B any](
|
||||||
|
s SET,
|
||||||
|
f FCT,
|
||||||
|
) func(GS1) GS2 {
|
||||||
|
return G.Let[SET, FCT, S1, S2, B, GS1, GS2](Map[GS1, GS2, E, S1, S2], s, f)
|
||||||
|
}
|
||||||
File diff suppressed because it is too large
Load Diff
@@ -45,6 +45,29 @@ func TraverseArray[GB ~func() ET.Either[E, B], GBS ~func() ET.Either[E, BBS], AA
|
|||||||
)
|
)
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// MonadTraverseArrayWithIndex transforms an array
|
||||||
|
func MonadTraverseArrayWithIndex[GB ~func() ET.Either[E, B], GBS ~func() ET.Either[E, BBS], AAS ~[]A, BBS ~[]B, E, A, B any](tas AAS, f func(int, A) GB) GBS {
|
||||||
|
return RA.MonadTraverseWithIndex[AAS](
|
||||||
|
Of[GBS, E, BBS],
|
||||||
|
Map[GBS, func() ET.Either[E, func(B) BBS], E, BBS, func(B) BBS],
|
||||||
|
Ap[GBS, func() ET.Either[E, func(B) BBS], GB],
|
||||||
|
|
||||||
|
tas,
|
||||||
|
f,
|
||||||
|
)
|
||||||
|
}
|
||||||
|
|
||||||
|
// TraverseArrayWithIndex transforms an array
|
||||||
|
func TraverseArrayWithIndex[GB ~func() ET.Either[E, B], GBS ~func() ET.Either[E, BBS], AAS ~[]A, BBS ~[]B, E, A, B any](f func(int, A) GB) func(AAS) GBS {
|
||||||
|
return RA.TraverseWithIndex[AAS](
|
||||||
|
Of[GBS, E, BBS],
|
||||||
|
Map[GBS, func() ET.Either[E, func(B) BBS], E, BBS, func(B) BBS],
|
||||||
|
Ap[GBS, func() ET.Either[E, func(B) BBS], GB],
|
||||||
|
|
||||||
|
f,
|
||||||
|
)
|
||||||
|
}
|
||||||
|
|
||||||
// SequenceArray converts a homogeneous sequence of either into an either of sequence
|
// SequenceArray converts a homogeneous sequence of either into an either of sequence
|
||||||
func SequenceArray[GA ~func() ET.Either[E, A], GAS ~func() ET.Either[E, AAS], AAS ~[]A, GAAS ~[]GA, E, A any](tas GAAS) GAS {
|
func SequenceArray[GA ~func() ET.Either[E, A], GAS ~func() ET.Either[E, AAS], AAS ~[]A, GAAS ~[]GA, E, A any](tas GAAS) GAS {
|
||||||
return MonadTraverseArray[GA, GAS](tas, F.Identity[GA])
|
return MonadTraverseArray[GA, GAS](tas, F.Identity[GA])
|
||||||
@@ -73,6 +96,17 @@ func TraverseRecord[GB ~func() ET.Either[E, B], GBS ~func() ET.Either[E, BBS], A
|
|||||||
)
|
)
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// TraverseRecordWithIndex transforms an array
|
||||||
|
func TraverseRecordWithIndex[GB ~func() ET.Either[E, B], GBS ~func() ET.Either[E, BBS], AAS ~map[K]A, BBS ~map[K]B, K comparable, E, A, B any](f func(K, A) GB) func(AAS) GBS {
|
||||||
|
return RR.TraverseWithIndex[AAS](
|
||||||
|
Of[GBS, E, BBS],
|
||||||
|
Map[GBS, func() ET.Either[E, func(B) BBS], E, BBS, func(B) BBS],
|
||||||
|
Ap[GBS, func() ET.Either[E, func(B) BBS], GB],
|
||||||
|
|
||||||
|
f,
|
||||||
|
)
|
||||||
|
}
|
||||||
|
|
||||||
// SequenceRecord converts a homogeneous sequence of either into an either of sequence
|
// SequenceRecord converts a homogeneous sequence of either into an either of sequence
|
||||||
func SequenceRecord[GA ~func() ET.Either[E, A], GAS ~func() ET.Either[E, AAS], AAS ~map[K]A, GAAS ~map[K]GA, K comparable, E, A any](tas GAAS) GAS {
|
func SequenceRecord[GA ~func() ET.Either[E, A], GAS ~func() ET.Either[E, AAS], AAS ~map[K]A, GAAS ~map[K]GA, K comparable, E, A any](tas GAAS) GAS {
|
||||||
return MonadTraverseRecord[GA, GAS](tas, F.Identity[GA])
|
return MonadTraverseRecord[GA, GAS](tas, F.Identity[GA])
|
||||||
|
|||||||
@@ -24,6 +24,11 @@ func TraverseArray[E, A, B any](f func(A) IOEither[E, B]) func([]A) IOEither[E,
|
|||||||
return G.TraverseArray[IOEither[E, B], IOEither[E, []B], []A](f)
|
return G.TraverseArray[IOEither[E, B], IOEither[E, []B], []A](f)
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// TraverseArrayWithIndex transforms an array
|
||||||
|
func TraverseArrayWithIndex[E, A, B any](f func(int, A) IOEither[E, B]) func([]A) IOEither[E, []B] {
|
||||||
|
return G.TraverseArrayWithIndex[IOEither[E, B], IOEither[E, []B], []A](f)
|
||||||
|
}
|
||||||
|
|
||||||
// SequenceArray converts a homogeneous sequence of either into an either of sequence
|
// SequenceArray converts a homogeneous sequence of either into an either of sequence
|
||||||
func SequenceArray[E, A any](ma []IOEither[E, A]) IOEither[E, []A] {
|
func SequenceArray[E, A any](ma []IOEither[E, A]) IOEither[E, []A] {
|
||||||
return G.SequenceArray[IOEither[E, A], IOEither[E, []A]](ma)
|
return G.SequenceArray[IOEither[E, A], IOEither[E, []A]](ma)
|
||||||
@@ -34,6 +39,11 @@ func TraverseRecord[K comparable, E, A, B any](f func(A) IOEither[E, B]) func(ma
|
|||||||
return G.TraverseRecord[IOEither[E, B], IOEither[E, map[K]B], map[K]A](f)
|
return G.TraverseRecord[IOEither[E, B], IOEither[E, map[K]B], map[K]A](f)
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// TraverseRecordWithIndex transforms a record
|
||||||
|
func TraverseRecordWithIndex[K comparable, E, A, B any](f func(K, A) IOEither[E, B]) func(map[K]A) IOEither[E, map[K]B] {
|
||||||
|
return G.TraverseRecordWithIndex[IOEither[E, B], IOEither[E, map[K]B], map[K]A](f)
|
||||||
|
}
|
||||||
|
|
||||||
// SequenceRecord converts a homogeneous sequence of either into an either of sequence
|
// SequenceRecord converts a homogeneous sequence of either into an either of sequence
|
||||||
func SequenceRecord[K comparable, E, A any](ma map[K]IOEither[E, A]) IOEither[E, map[K]A] {
|
func SequenceRecord[K comparable, E, A any](ma map[K]IOEither[E, A]) IOEither[E, map[K]A] {
|
||||||
return G.SequenceRecord[IOEither[E, A], IOEither[E, map[K]A]](ma)
|
return G.SequenceRecord[IOEither[E, A], IOEither[E, map[K]A]](ma)
|
||||||
|
|||||||
37
ioeither/traverse_test.go
Normal file
37
ioeither/traverse_test.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 ioeither
|
||||||
|
|
||||||
|
import (
|
||||||
|
"fmt"
|
||||||
|
"testing"
|
||||||
|
|
||||||
|
A "github.com/IBM/fp-go/array"
|
||||||
|
E "github.com/IBM/fp-go/either"
|
||||||
|
"github.com/stretchr/testify/assert"
|
||||||
|
)
|
||||||
|
|
||||||
|
func TestTraverseArray(t *testing.T) {
|
||||||
|
|
||||||
|
src := A.From("A", "B")
|
||||||
|
|
||||||
|
trfrm := TraverseArrayWithIndex(func(idx int, data string) IOEither[error, string] {
|
||||||
|
return Of[error](fmt.Sprintf("idx: %d, data: %s", idx, data))
|
||||||
|
})
|
||||||
|
|
||||||
|
assert.Equal(t, E.Of[error](A.From("idx: 0, data: A", "idx: 1, data: B")), trfrm(src)())
|
||||||
|
|
||||||
|
}
|
||||||
@@ -24,6 +24,11 @@ func TraverseArray[A, B any](f func(A) IOOption[B]) func([]A) IOOption[[]B] {
|
|||||||
return G.TraverseArray[IOOption[B], IOOption[[]B], []A](f)
|
return G.TraverseArray[IOOption[B], IOOption[[]B], []A](f)
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// TraverseArrayWithIndex transforms an array
|
||||||
|
func TraverseArrayWithIndex[A, B any](f func(int, A) IOOption[B]) func([]A) IOOption[[]B] {
|
||||||
|
return G.TraverseArrayWithIndex[IOOption[B], IOOption[[]B], []A](f)
|
||||||
|
}
|
||||||
|
|
||||||
// SequenceArray converts a homogeneous sequence of either into an either of sequence
|
// SequenceArray converts a homogeneous sequence of either into an either of sequence
|
||||||
func SequenceArray[A any](ma []IOOption[A]) IOOption[[]A] {
|
func SequenceArray[A any](ma []IOOption[A]) IOOption[[]A] {
|
||||||
return G.SequenceArray[IOOption[A], IOOption[[]A], []IOOption[A], []A, A](ma)
|
return G.SequenceArray[IOOption[A], IOOption[[]A], []IOOption[A], []A, A](ma)
|
||||||
|
|||||||
475
iooption/gen.go
475
iooption/gen.go
@@ -1,376 +1,375 @@
|
|||||||
// Code generated by go generate; DO NOT EDIT.
|
// Code generated by go generate; DO NOT EDIT.
|
||||||
// This file was generated by robots at
|
// This file was generated by robots at
|
||||||
// 2023-08-11 11:38:12.1021634 +0200 CEST m=+0.041956701
|
// 2023-08-17 22:59:14.0582736 +0200 CEST m=+0.248503201
|
||||||
|
|
||||||
package iooption
|
package iooption
|
||||||
|
|
||||||
|
|
||||||
import (
|
import (
|
||||||
G "github.com/IBM/fp-go/iooption/generic"
|
G "github.com/IBM/fp-go/iooption/generic"
|
||||||
T "github.com/IBM/fp-go/tuple"
|
T "github.com/IBM/fp-go/tuple"
|
||||||
)
|
)
|
||||||
|
|
||||||
// SequenceT1 converts 1 [IOOption[T]] into a [IOOption[T.Tuple1[T1]]]
|
// SequenceT1 converts 1 [IOOption[T]] into a [IOOption[T.Tuple1[T1]]]
|
||||||
func SequenceT1[T1 any](
|
func SequenceT1[T1 any](
|
||||||
t1 IOOption[T1],
|
t1 IOOption[T1],
|
||||||
) IOOption[T.Tuple1[T1]] {
|
) IOOption[T.Tuple1[T1]] {
|
||||||
return G.SequenceT1[
|
return G.SequenceT1[
|
||||||
IOOption[T.Tuple1[T1]],
|
IOOption[T.Tuple1[T1]],
|
||||||
IOOption[T1],
|
IOOption[T1],
|
||||||
](t1)
|
](t1)
|
||||||
}
|
}
|
||||||
|
|
||||||
// SequenceTuple1 converts a [T.Tuple1[IOOption[T]]] into a [IOOption[T.Tuple1[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]] {
|
func SequenceTuple1[T1 any](t T.Tuple1[IOOption[T1]]) IOOption[T.Tuple1[T1]] {
|
||||||
return G.SequenceTuple1[
|
return G.SequenceTuple1[
|
||||||
IOOption[T.Tuple1[T1]],
|
IOOption[T.Tuple1[T1]],
|
||||||
IOOption[T1],
|
IOOption[T1],
|
||||||
](t)
|
](t)
|
||||||
}
|
}
|
||||||
|
|
||||||
// TraverseTuple1 converts a [T.Tuple1[IOOption[T]]] into a [IOOption[T.Tuple1[T1]]]
|
// 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]] {
|
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]]]
|
// SequenceT2 converts 2 [IOOption[T]] into a [IOOption[T.Tuple2[T1, T2]]]
|
||||||
func SequenceT2[T1, T2 any](
|
func SequenceT2[T1, T2 any](
|
||||||
t1 IOOption[T1],
|
t1 IOOption[T1],
|
||||||
t2 IOOption[T2],
|
t2 IOOption[T2],
|
||||||
) IOOption[T.Tuple2[T1, T2]] {
|
) IOOption[T.Tuple2[T1, T2]] {
|
||||||
return G.SequenceT2[
|
return G.SequenceT2[
|
||||||
IOOption[T.Tuple2[T1, T2]],
|
IOOption[T.Tuple2[T1, T2]],
|
||||||
IOOption[T1],
|
IOOption[T1],
|
||||||
IOOption[T2],
|
IOOption[T2],
|
||||||
](t1, t2)
|
](t1, t2)
|
||||||
}
|
}
|
||||||
|
|
||||||
// SequenceTuple2 converts a [T.Tuple2[IOOption[T]]] into a [IOOption[T.Tuple2[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]] {
|
func SequenceTuple2[T1, T2 any](t T.Tuple2[IOOption[T1], IOOption[T2]]) IOOption[T.Tuple2[T1, T2]] {
|
||||||
return G.SequenceTuple2[
|
return G.SequenceTuple2[
|
||||||
IOOption[T.Tuple2[T1, T2]],
|
IOOption[T.Tuple2[T1, T2]],
|
||||||
IOOption[T1],
|
IOOption[T1],
|
||||||
IOOption[T2],
|
IOOption[T2],
|
||||||
](t)
|
](t)
|
||||||
}
|
}
|
||||||
|
|
||||||
// TraverseTuple2 converts a [T.Tuple2[IOOption[T]]] into a [IOOption[T.Tuple2[T1, T2]]]
|
// 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]] {
|
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]]]
|
// SequenceT3 converts 3 [IOOption[T]] into a [IOOption[T.Tuple3[T1, T2, T3]]]
|
||||||
func SequenceT3[T1, T2, T3 any](
|
func SequenceT3[T1, T2, T3 any](
|
||||||
t1 IOOption[T1],
|
t1 IOOption[T1],
|
||||||
t2 IOOption[T2],
|
t2 IOOption[T2],
|
||||||
t3 IOOption[T3],
|
t3 IOOption[T3],
|
||||||
) IOOption[T.Tuple3[T1, T2, T3]] {
|
) IOOption[T.Tuple3[T1, T2, T3]] {
|
||||||
return G.SequenceT3[
|
return G.SequenceT3[
|
||||||
IOOption[T.Tuple3[T1, T2, T3]],
|
IOOption[T.Tuple3[T1, T2, T3]],
|
||||||
IOOption[T1],
|
IOOption[T1],
|
||||||
IOOption[T2],
|
IOOption[T2],
|
||||||
IOOption[T3],
|
IOOption[T3],
|
||||||
](t1, t2, t3)
|
](t1, t2, t3)
|
||||||
}
|
}
|
||||||
|
|
||||||
// SequenceTuple3 converts a [T.Tuple3[IOOption[T]]] into a [IOOption[T.Tuple3[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]] {
|
func SequenceTuple3[T1, T2, T3 any](t T.Tuple3[IOOption[T1], IOOption[T2], IOOption[T3]]) IOOption[T.Tuple3[T1, T2, T3]] {
|
||||||
return G.SequenceTuple3[
|
return G.SequenceTuple3[
|
||||||
IOOption[T.Tuple3[T1, T2, T3]],
|
IOOption[T.Tuple3[T1, T2, T3]],
|
||||||
IOOption[T1],
|
IOOption[T1],
|
||||||
IOOption[T2],
|
IOOption[T2],
|
||||||
IOOption[T3],
|
IOOption[T3],
|
||||||
](t)
|
](t)
|
||||||
}
|
}
|
||||||
|
|
||||||
// TraverseTuple3 converts a [T.Tuple3[IOOption[T]]] into a [IOOption[T.Tuple3[T1, T2, T3]]]
|
// 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]] {
|
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]]]
|
// SequenceT4 converts 4 [IOOption[T]] into a [IOOption[T.Tuple4[T1, T2, T3, T4]]]
|
||||||
func SequenceT4[T1, T2, T3, T4 any](
|
func SequenceT4[T1, T2, T3, T4 any](
|
||||||
t1 IOOption[T1],
|
t1 IOOption[T1],
|
||||||
t2 IOOption[T2],
|
t2 IOOption[T2],
|
||||||
t3 IOOption[T3],
|
t3 IOOption[T3],
|
||||||
t4 IOOption[T4],
|
t4 IOOption[T4],
|
||||||
) IOOption[T.Tuple4[T1, T2, T3, T4]] {
|
) IOOption[T.Tuple4[T1, T2, T3, T4]] {
|
||||||
return G.SequenceT4[
|
return G.SequenceT4[
|
||||||
IOOption[T.Tuple4[T1, T2, T3, T4]],
|
IOOption[T.Tuple4[T1, T2, T3, T4]],
|
||||||
IOOption[T1],
|
IOOption[T1],
|
||||||
IOOption[T2],
|
IOOption[T2],
|
||||||
IOOption[T3],
|
IOOption[T3],
|
||||||
IOOption[T4],
|
IOOption[T4],
|
||||||
](t1, t2, t3, t4)
|
](t1, t2, t3, t4)
|
||||||
}
|
}
|
||||||
|
|
||||||
// SequenceTuple4 converts a [T.Tuple4[IOOption[T]]] into a [IOOption[T.Tuple4[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]] {
|
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[
|
return G.SequenceTuple4[
|
||||||
IOOption[T.Tuple4[T1, T2, T3, T4]],
|
IOOption[T.Tuple4[T1, T2, T3, T4]],
|
||||||
IOOption[T1],
|
IOOption[T1],
|
||||||
IOOption[T2],
|
IOOption[T2],
|
||||||
IOOption[T3],
|
IOOption[T3],
|
||||||
IOOption[T4],
|
IOOption[T4],
|
||||||
](t)
|
](t)
|
||||||
}
|
}
|
||||||
|
|
||||||
// TraverseTuple4 converts a [T.Tuple4[IOOption[T]]] into a [IOOption[T.Tuple4[T1, T2, T3, T4]]]
|
// 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]] {
|
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]]]
|
// SequenceT5 converts 5 [IOOption[T]] into a [IOOption[T.Tuple5[T1, T2, T3, T4, T5]]]
|
||||||
func SequenceT5[T1, T2, T3, T4, T5 any](
|
func SequenceT5[T1, T2, T3, T4, T5 any](
|
||||||
t1 IOOption[T1],
|
t1 IOOption[T1],
|
||||||
t2 IOOption[T2],
|
t2 IOOption[T2],
|
||||||
t3 IOOption[T3],
|
t3 IOOption[T3],
|
||||||
t4 IOOption[T4],
|
t4 IOOption[T4],
|
||||||
t5 IOOption[T5],
|
t5 IOOption[T5],
|
||||||
) IOOption[T.Tuple5[T1, T2, T3, T4, T5]] {
|
) IOOption[T.Tuple5[T1, T2, T3, T4, T5]] {
|
||||||
return G.SequenceT5[
|
return G.SequenceT5[
|
||||||
IOOption[T.Tuple5[T1, T2, T3, T4, T5]],
|
IOOption[T.Tuple5[T1, T2, T3, T4, T5]],
|
||||||
IOOption[T1],
|
IOOption[T1],
|
||||||
IOOption[T2],
|
IOOption[T2],
|
||||||
IOOption[T3],
|
IOOption[T3],
|
||||||
IOOption[T4],
|
IOOption[T4],
|
||||||
IOOption[T5],
|
IOOption[T5],
|
||||||
](t1, t2, t3, t4, t5)
|
](t1, t2, t3, t4, t5)
|
||||||
}
|
}
|
||||||
|
|
||||||
// SequenceTuple5 converts a [T.Tuple5[IOOption[T]]] into a [IOOption[T.Tuple5[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]] {
|
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[
|
return G.SequenceTuple5[
|
||||||
IOOption[T.Tuple5[T1, T2, T3, T4, T5]],
|
IOOption[T.Tuple5[T1, T2, T3, T4, T5]],
|
||||||
IOOption[T1],
|
IOOption[T1],
|
||||||
IOOption[T2],
|
IOOption[T2],
|
||||||
IOOption[T3],
|
IOOption[T3],
|
||||||
IOOption[T4],
|
IOOption[T4],
|
||||||
IOOption[T5],
|
IOOption[T5],
|
||||||
](t)
|
](t)
|
||||||
}
|
}
|
||||||
|
|
||||||
// TraverseTuple5 converts a [T.Tuple5[IOOption[T]]] into a [IOOption[T.Tuple5[T1, T2, T3, T4, T5]]]
|
// 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]] {
|
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]]]
|
// 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](
|
func SequenceT6[T1, T2, T3, T4, T5, T6 any](
|
||||||
t1 IOOption[T1],
|
t1 IOOption[T1],
|
||||||
t2 IOOption[T2],
|
t2 IOOption[T2],
|
||||||
t3 IOOption[T3],
|
t3 IOOption[T3],
|
||||||
t4 IOOption[T4],
|
t4 IOOption[T4],
|
||||||
t5 IOOption[T5],
|
t5 IOOption[T5],
|
||||||
t6 IOOption[T6],
|
t6 IOOption[T6],
|
||||||
) IOOption[T.Tuple6[T1, T2, T3, T4, T5, T6]] {
|
) IOOption[T.Tuple6[T1, T2, T3, T4, T5, T6]] {
|
||||||
return G.SequenceT6[
|
return G.SequenceT6[
|
||||||
IOOption[T.Tuple6[T1, T2, T3, T4, T5, T6]],
|
IOOption[T.Tuple6[T1, T2, T3, T4, T5, T6]],
|
||||||
IOOption[T1],
|
IOOption[T1],
|
||||||
IOOption[T2],
|
IOOption[T2],
|
||||||
IOOption[T3],
|
IOOption[T3],
|
||||||
IOOption[T4],
|
IOOption[T4],
|
||||||
IOOption[T5],
|
IOOption[T5],
|
||||||
IOOption[T6],
|
IOOption[T6],
|
||||||
](t1, t2, t3, t4, t5, 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]]]
|
// 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]] {
|
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[
|
return G.SequenceTuple6[
|
||||||
IOOption[T.Tuple6[T1, T2, T3, T4, T5, T6]],
|
IOOption[T.Tuple6[T1, T2, T3, T4, T5, T6]],
|
||||||
IOOption[T1],
|
IOOption[T1],
|
||||||
IOOption[T2],
|
IOOption[T2],
|
||||||
IOOption[T3],
|
IOOption[T3],
|
||||||
IOOption[T4],
|
IOOption[T4],
|
||||||
IOOption[T5],
|
IOOption[T5],
|
||||||
IOOption[T6],
|
IOOption[T6],
|
||||||
](t)
|
](t)
|
||||||
}
|
}
|
||||||
|
|
||||||
// TraverseTuple6 converts a [T.Tuple6[IOOption[T]]] into a [IOOption[T.Tuple6[T1, T2, T3, T4, T5, T6]]]
|
// 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]] {
|
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]]]
|
// 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](
|
func SequenceT7[T1, T2, T3, T4, T5, T6, T7 any](
|
||||||
t1 IOOption[T1],
|
t1 IOOption[T1],
|
||||||
t2 IOOption[T2],
|
t2 IOOption[T2],
|
||||||
t3 IOOption[T3],
|
t3 IOOption[T3],
|
||||||
t4 IOOption[T4],
|
t4 IOOption[T4],
|
||||||
t5 IOOption[T5],
|
t5 IOOption[T5],
|
||||||
t6 IOOption[T6],
|
t6 IOOption[T6],
|
||||||
t7 IOOption[T7],
|
t7 IOOption[T7],
|
||||||
) IOOption[T.Tuple7[T1, T2, T3, T4, T5, T6, T7]] {
|
) IOOption[T.Tuple7[T1, T2, T3, T4, T5, T6, T7]] {
|
||||||
return G.SequenceT7[
|
return G.SequenceT7[
|
||||||
IOOption[T.Tuple7[T1, T2, T3, T4, T5, T6, T7]],
|
IOOption[T.Tuple7[T1, T2, T3, T4, T5, T6, T7]],
|
||||||
IOOption[T1],
|
IOOption[T1],
|
||||||
IOOption[T2],
|
IOOption[T2],
|
||||||
IOOption[T3],
|
IOOption[T3],
|
||||||
IOOption[T4],
|
IOOption[T4],
|
||||||
IOOption[T5],
|
IOOption[T5],
|
||||||
IOOption[T6],
|
IOOption[T6],
|
||||||
IOOption[T7],
|
IOOption[T7],
|
||||||
](t1, t2, t3, t4, t5, t6, 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]]]
|
// 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]] {
|
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[
|
return G.SequenceTuple7[
|
||||||
IOOption[T.Tuple7[T1, T2, T3, T4, T5, T6, T7]],
|
IOOption[T.Tuple7[T1, T2, T3, T4, T5, T6, T7]],
|
||||||
IOOption[T1],
|
IOOption[T1],
|
||||||
IOOption[T2],
|
IOOption[T2],
|
||||||
IOOption[T3],
|
IOOption[T3],
|
||||||
IOOption[T4],
|
IOOption[T4],
|
||||||
IOOption[T5],
|
IOOption[T5],
|
||||||
IOOption[T6],
|
IOOption[T6],
|
||||||
IOOption[T7],
|
IOOption[T7],
|
||||||
](t)
|
](t)
|
||||||
}
|
}
|
||||||
|
|
||||||
// TraverseTuple7 converts a [T.Tuple7[IOOption[T]]] into a [IOOption[T.Tuple7[T1, T2, T3, T4, T5, T6, T7]]]
|
// 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]] {
|
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]]]
|
// 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](
|
func SequenceT8[T1, T2, T3, T4, T5, T6, T7, T8 any](
|
||||||
t1 IOOption[T1],
|
t1 IOOption[T1],
|
||||||
t2 IOOption[T2],
|
t2 IOOption[T2],
|
||||||
t3 IOOption[T3],
|
t3 IOOption[T3],
|
||||||
t4 IOOption[T4],
|
t4 IOOption[T4],
|
||||||
t5 IOOption[T5],
|
t5 IOOption[T5],
|
||||||
t6 IOOption[T6],
|
t6 IOOption[T6],
|
||||||
t7 IOOption[T7],
|
t7 IOOption[T7],
|
||||||
t8 IOOption[T8],
|
t8 IOOption[T8],
|
||||||
) IOOption[T.Tuple8[T1, T2, T3, T4, T5, T6, T7, T8]] {
|
) IOOption[T.Tuple8[T1, T2, T3, T4, T5, T6, T7, T8]] {
|
||||||
return G.SequenceT8[
|
return G.SequenceT8[
|
||||||
IOOption[T.Tuple8[T1, T2, T3, T4, T5, T6, T7, T8]],
|
IOOption[T.Tuple8[T1, T2, T3, T4, T5, T6, T7, T8]],
|
||||||
IOOption[T1],
|
IOOption[T1],
|
||||||
IOOption[T2],
|
IOOption[T2],
|
||||||
IOOption[T3],
|
IOOption[T3],
|
||||||
IOOption[T4],
|
IOOption[T4],
|
||||||
IOOption[T5],
|
IOOption[T5],
|
||||||
IOOption[T6],
|
IOOption[T6],
|
||||||
IOOption[T7],
|
IOOption[T7],
|
||||||
IOOption[T8],
|
IOOption[T8],
|
||||||
](t1, t2, t3, t4, t5, t6, t7, 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]]]
|
// 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]] {
|
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[
|
return G.SequenceTuple8[
|
||||||
IOOption[T.Tuple8[T1, T2, T3, T4, T5, T6, T7, T8]],
|
IOOption[T.Tuple8[T1, T2, T3, T4, T5, T6, T7, T8]],
|
||||||
IOOption[T1],
|
IOOption[T1],
|
||||||
IOOption[T2],
|
IOOption[T2],
|
||||||
IOOption[T3],
|
IOOption[T3],
|
||||||
IOOption[T4],
|
IOOption[T4],
|
||||||
IOOption[T5],
|
IOOption[T5],
|
||||||
IOOption[T6],
|
IOOption[T6],
|
||||||
IOOption[T7],
|
IOOption[T7],
|
||||||
IOOption[T8],
|
IOOption[T8],
|
||||||
](t)
|
](t)
|
||||||
}
|
}
|
||||||
|
|
||||||
// TraverseTuple8 converts a [T.Tuple8[IOOption[T]]] into a [IOOption[T.Tuple8[T1, T2, T3, T4, T5, T6, T7, T8]]]
|
// 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]] {
|
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]]]
|
// 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](
|
func SequenceT9[T1, T2, T3, T4, T5, T6, T7, T8, T9 any](
|
||||||
t1 IOOption[T1],
|
t1 IOOption[T1],
|
||||||
t2 IOOption[T2],
|
t2 IOOption[T2],
|
||||||
t3 IOOption[T3],
|
t3 IOOption[T3],
|
||||||
t4 IOOption[T4],
|
t4 IOOption[T4],
|
||||||
t5 IOOption[T5],
|
t5 IOOption[T5],
|
||||||
t6 IOOption[T6],
|
t6 IOOption[T6],
|
||||||
t7 IOOption[T7],
|
t7 IOOption[T7],
|
||||||
t8 IOOption[T8],
|
t8 IOOption[T8],
|
||||||
t9 IOOption[T9],
|
t9 IOOption[T9],
|
||||||
) IOOption[T.Tuple9[T1, T2, T3, T4, T5, T6, T7, T8, T9]] {
|
) IOOption[T.Tuple9[T1, T2, T3, T4, T5, T6, T7, T8, T9]] {
|
||||||
return G.SequenceT9[
|
return G.SequenceT9[
|
||||||
IOOption[T.Tuple9[T1, T2, T3, T4, T5, T6, T7, T8, T9]],
|
IOOption[T.Tuple9[T1, T2, T3, T4, T5, T6, T7, T8, T9]],
|
||||||
IOOption[T1],
|
IOOption[T1],
|
||||||
IOOption[T2],
|
IOOption[T2],
|
||||||
IOOption[T3],
|
IOOption[T3],
|
||||||
IOOption[T4],
|
IOOption[T4],
|
||||||
IOOption[T5],
|
IOOption[T5],
|
||||||
IOOption[T6],
|
IOOption[T6],
|
||||||
IOOption[T7],
|
IOOption[T7],
|
||||||
IOOption[T8],
|
IOOption[T8],
|
||||||
IOOption[T9],
|
IOOption[T9],
|
||||||
](t1, t2, t3, t4, t5, t6, t7, t8, 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]]]
|
// 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]] {
|
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[
|
return G.SequenceTuple9[
|
||||||
IOOption[T.Tuple9[T1, T2, T3, T4, T5, T6, T7, T8, T9]],
|
IOOption[T.Tuple9[T1, T2, T3, T4, T5, T6, T7, T8, T9]],
|
||||||
IOOption[T1],
|
IOOption[T1],
|
||||||
IOOption[T2],
|
IOOption[T2],
|
||||||
IOOption[T3],
|
IOOption[T3],
|
||||||
IOOption[T4],
|
IOOption[T4],
|
||||||
IOOption[T5],
|
IOOption[T5],
|
||||||
IOOption[T6],
|
IOOption[T6],
|
||||||
IOOption[T7],
|
IOOption[T7],
|
||||||
IOOption[T8],
|
IOOption[T8],
|
||||||
IOOption[T9],
|
IOOption[T9],
|
||||||
](t)
|
](t)
|
||||||
}
|
}
|
||||||
|
|
||||||
// TraverseTuple9 converts a [T.Tuple9[IOOption[T]]] into a [IOOption[T.Tuple9[T1, T2, T3, T4, T5, T6, T7, T8, T9]]]
|
// 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]] {
|
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]]]
|
// 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](
|
func SequenceT10[T1, T2, T3, T4, T5, T6, T7, T8, T9, T10 any](
|
||||||
t1 IOOption[T1],
|
t1 IOOption[T1],
|
||||||
t2 IOOption[T2],
|
t2 IOOption[T2],
|
||||||
t3 IOOption[T3],
|
t3 IOOption[T3],
|
||||||
t4 IOOption[T4],
|
t4 IOOption[T4],
|
||||||
t5 IOOption[T5],
|
t5 IOOption[T5],
|
||||||
t6 IOOption[T6],
|
t6 IOOption[T6],
|
||||||
t7 IOOption[T7],
|
t7 IOOption[T7],
|
||||||
t8 IOOption[T8],
|
t8 IOOption[T8],
|
||||||
t9 IOOption[T9],
|
t9 IOOption[T9],
|
||||||
t10 IOOption[T10],
|
t10 IOOption[T10],
|
||||||
) IOOption[T.Tuple10[T1, T2, T3, T4, T5, T6, T7, T8, T9, T10]] {
|
) IOOption[T.Tuple10[T1, T2, T3, T4, T5, T6, T7, T8, T9, T10]] {
|
||||||
return G.SequenceT10[
|
return G.SequenceT10[
|
||||||
IOOption[T.Tuple10[T1, T2, T3, T4, T5, T6, T7, T8, T9, T10]],
|
IOOption[T.Tuple10[T1, T2, T3, T4, T5, T6, T7, T8, T9, T10]],
|
||||||
IOOption[T1],
|
IOOption[T1],
|
||||||
IOOption[T2],
|
IOOption[T2],
|
||||||
IOOption[T3],
|
IOOption[T3],
|
||||||
IOOption[T4],
|
IOOption[T4],
|
||||||
IOOption[T5],
|
IOOption[T5],
|
||||||
IOOption[T6],
|
IOOption[T6],
|
||||||
IOOption[T7],
|
IOOption[T7],
|
||||||
IOOption[T8],
|
IOOption[T8],
|
||||||
IOOption[T9],
|
IOOption[T9],
|
||||||
IOOption[T10],
|
IOOption[T10],
|
||||||
](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[IOOption[T]]] into a [IOOption[T.Tuple10[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]] {
|
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[
|
return G.SequenceTuple10[
|
||||||
IOOption[T.Tuple10[T1, T2, T3, T4, T5, T6, T7, T8, T9, T10]],
|
IOOption[T.Tuple10[T1, T2, T3, T4, T5, T6, T7, T8, T9, T10]],
|
||||||
IOOption[T1],
|
IOOption[T1],
|
||||||
IOOption[T2],
|
IOOption[T2],
|
||||||
IOOption[T3],
|
IOOption[T3],
|
||||||
IOOption[T4],
|
IOOption[T4],
|
||||||
IOOption[T5],
|
IOOption[T5],
|
||||||
IOOption[T6],
|
IOOption[T6],
|
||||||
IOOption[T7],
|
IOOption[T7],
|
||||||
IOOption[T8],
|
IOOption[T8],
|
||||||
IOOption[T9],
|
IOOption[T9],
|
||||||
IOOption[T10],
|
IOOption[T10],
|
||||||
](t)
|
](t)
|
||||||
}
|
}
|
||||||
|
|
||||||
// TraverseTuple10 converts a [T.Tuple10[IOOption[T]]] into a [IOOption[T.Tuple10[T1, T2, T3, T4, T5, T6, T7, T8, T9, T10]]]
|
// 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]] {
|
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)
|
||||||
}
|
}
|
||||||
|
|||||||
File diff suppressed because it is too large
Load Diff
@@ -28,6 +28,13 @@ func TraverseArray[TB ~func() O.Option[B], TBS ~func() O.Option[GB], GA ~[]A, GB
|
|||||||
)
|
)
|
||||||
}
|
}
|
||||||
|
|
||||||
|
func TraverseArrayWithIndex[TB ~func() O.Option[B], TBS ~func() O.Option[GB], GA ~[]A, GB ~[]B, A, B any](f func(int, A) TB) func(GA) TBS {
|
||||||
|
return F.Flow2(
|
||||||
|
I.TraverseArrayWithIndex[TB, func() []O.Option[B], GA](f),
|
||||||
|
I.Map[func() []O.Option[B], TBS](O.SequenceArrayG[GB, []O.Option[B], B]),
|
||||||
|
)
|
||||||
|
}
|
||||||
|
|
||||||
func SequenceArray[TB ~func() O.Option[B], TBS ~func() O.Option[GB], GA ~[]TB, GB ~[]B, A, B any](ma GA) TBS {
|
func SequenceArray[TB ~func() O.Option[B], TBS ~func() O.Option[GB], GA ~[]TB, GB ~[]B, A, B any](ma GA) TBS {
|
||||||
return TraverseArray[TB, TBS, GA](F.Identity[TB])(ma)
|
return TraverseArray[TB, TBS, GA](F.Identity[TB])(ma)
|
||||||
}
|
}
|
||||||
|
|||||||
53
iterator/stateless/generic/reflect.go
Normal file
53
iterator/stateless/generic/reflect.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 (
|
||||||
|
R "reflect"
|
||||||
|
|
||||||
|
F "github.com/IBM/fp-go/function"
|
||||||
|
LG "github.com/IBM/fp-go/io/generic"
|
||||||
|
L "github.com/IBM/fp-go/lazy"
|
||||||
|
N "github.com/IBM/fp-go/number"
|
||||||
|
I "github.com/IBM/fp-go/number/integer"
|
||||||
|
O "github.com/IBM/fp-go/option"
|
||||||
|
T "github.com/IBM/fp-go/tuple"
|
||||||
|
)
|
||||||
|
|
||||||
|
func FromReflect[GR ~func() O.Option[T.Tuple2[GR, R.Value]]](val R.Value) GR {
|
||||||
|
// recursive callback
|
||||||
|
var recurse func(idx int) GR
|
||||||
|
|
||||||
|
// limits the index
|
||||||
|
fromPred := O.FromPredicate(I.Between(0, val.Len()))
|
||||||
|
|
||||||
|
recurse = func(idx int) GR {
|
||||||
|
return F.Pipe3(
|
||||||
|
idx,
|
||||||
|
L.Of[int],
|
||||||
|
L.Map(fromPred),
|
||||||
|
LG.Map[L.Lazy[O.Option[int]], GR](O.Map(
|
||||||
|
F.Flow2(
|
||||||
|
T.Replicate2[int],
|
||||||
|
T.Map2(F.Flow2(N.Add(1), recurse), val.Index),
|
||||||
|
),
|
||||||
|
)),
|
||||||
|
)
|
||||||
|
}
|
||||||
|
|
||||||
|
// start the recursion
|
||||||
|
return recurse(0)
|
||||||
|
}
|
||||||
27
iterator/stateless/reflect.go
Normal file
27
iterator/stateless/reflect.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 stateless
|
||||||
|
|
||||||
|
import (
|
||||||
|
R "reflect"
|
||||||
|
|
||||||
|
G "github.com/IBM/fp-go/iterator/stateless/generic"
|
||||||
|
)
|
||||||
|
|
||||||
|
// FromReflect creates an iterator that can iterate over types that define [R.Index] and [R.Len]
|
||||||
|
func FromReflect(val R.Value) Iterator[R.Value] {
|
||||||
|
return G.FromReflect[Iterator[R.Value]](val)
|
||||||
|
}
|
||||||
38
iterator/stateless/reflect_test.go
Normal file
38
iterator/stateless/reflect_test.go
Normal file
@@ -0,0 +1,38 @@
|
|||||||
|
// 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 stateless
|
||||||
|
|
||||||
|
import (
|
||||||
|
"reflect"
|
||||||
|
"testing"
|
||||||
|
|
||||||
|
A "github.com/IBM/fp-go/array"
|
||||||
|
F "github.com/IBM/fp-go/function"
|
||||||
|
"github.com/stretchr/testify/assert"
|
||||||
|
)
|
||||||
|
|
||||||
|
func TestReflect(t *testing.T) {
|
||||||
|
ar := A.From("a", "b", "c")
|
||||||
|
|
||||||
|
res := F.Pipe3(
|
||||||
|
reflect.ValueOf(ar),
|
||||||
|
FromReflect,
|
||||||
|
ToArray[reflect.Value],
|
||||||
|
A.Map(reflect.Value.String),
|
||||||
|
)
|
||||||
|
|
||||||
|
assert.Equal(t, ar, res)
|
||||||
|
}
|
||||||
@@ -32,6 +32,6 @@ func ToTypeE[A any](src any) E.Either[error, A] {
|
|||||||
func ToTypeO[A any](src any) O.Option[A] {
|
func ToTypeO[A any](src any) O.Option[A] {
|
||||||
return F.Pipe1(
|
return F.Pipe1(
|
||||||
ToTypeE[A](src),
|
ToTypeE[A](src),
|
||||||
E.ToOption[error, A](),
|
E.ToOption[error, A],
|
||||||
)
|
)
|
||||||
}
|
}
|
||||||
|
|||||||
38
lazy/example_lazy_test.go
Normal file
38
lazy/example_lazy_test.go
Normal file
@@ -0,0 +1,38 @@
|
|||||||
|
// 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 lazy
|
||||||
|
|
||||||
|
import (
|
||||||
|
"fmt"
|
||||||
|
"strconv"
|
||||||
|
|
||||||
|
F "github.com/IBM/fp-go/function"
|
||||||
|
)
|
||||||
|
|
||||||
|
func ExampleLazy_creation() {
|
||||||
|
// lazy function of a constant value
|
||||||
|
val := Of(42)
|
||||||
|
// create another function to transform this
|
||||||
|
valS := F.Pipe1(
|
||||||
|
val,
|
||||||
|
Map(strconv.Itoa),
|
||||||
|
)
|
||||||
|
|
||||||
|
fmt.Println(valS())
|
||||||
|
|
||||||
|
// Output:
|
||||||
|
// 42
|
||||||
|
}
|
||||||
@@ -72,18 +72,18 @@ func Chain[A, B any](f func(A) Lazy[B]) func(Lazy[A]) Lazy[B] {
|
|||||||
}
|
}
|
||||||
|
|
||||||
func MonadAp[B, A any](mab Lazy[func(A) B], ma Lazy[A]) Lazy[B] {
|
func MonadAp[B, A any](mab Lazy[func(A) B], ma Lazy[A]) Lazy[B] {
|
||||||
return G.MonadAp[Lazy[A], Lazy[B]](mab, ma)
|
return G.MonadApSeq[Lazy[A], Lazy[B]](mab, ma)
|
||||||
}
|
}
|
||||||
|
|
||||||
func Ap[B, A any](ma Lazy[A]) func(Lazy[func(A) B]) Lazy[B] {
|
func Ap[B, A any](ma Lazy[A]) func(Lazy[func(A) B]) Lazy[B] {
|
||||||
return G.Ap[Lazy[B], Lazy[func(A) B], Lazy[A]](ma)
|
return G.ApSeq[Lazy[B], Lazy[func(A) B], Lazy[A]](ma)
|
||||||
}
|
}
|
||||||
|
|
||||||
func Flatten[A any](mma Lazy[Lazy[A]]) Lazy[A] {
|
func Flatten[A any](mma Lazy[Lazy[A]]) Lazy[A] {
|
||||||
return G.Flatten(mma)
|
return G.Flatten(mma)
|
||||||
}
|
}
|
||||||
|
|
||||||
// Memoize computes the value of the provided IO monad lazily but exactly once
|
// Memoize computes the value of the provided [Lazy] monad lazily but exactly once
|
||||||
func Memoize[A any](ma Lazy[A]) Lazy[A] {
|
func Memoize[A any](ma Lazy[A]) Lazy[A] {
|
||||||
return G.Memoize(ma)
|
return G.Memoize(ma)
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -29,6 +29,12 @@ func TraverseArray[A, B any](f func(A) Lazy[B]) func([]A) Lazy[[]B] {
|
|||||||
return G.TraverseArray[Lazy[B], Lazy[[]B], []A](f)
|
return G.TraverseArray[Lazy[B], Lazy[[]B], []A](f)
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// TraverseArrayWithIndex applies a function returning an [IO] to all elements in an array and the
|
||||||
|
// transforms this into an [IO] of that array
|
||||||
|
func TraverseArrayWithIndex[A, B any](f func(int, A) Lazy[B]) func([]A) Lazy[[]B] {
|
||||||
|
return G.TraverseArrayWithIndex[Lazy[B], Lazy[[]B], []A](f)
|
||||||
|
}
|
||||||
|
|
||||||
// SequenceArray converts an array of [IO] to an [IO] of an array
|
// SequenceArray converts an array of [IO] to an [IO] of an array
|
||||||
func SequenceArray[A any](tas []Lazy[A]) Lazy[[]A] {
|
func SequenceArray[A any](tas []Lazy[A]) Lazy[[]A] {
|
||||||
return G.SequenceArray[Lazy[A], Lazy[[]A]](tas)
|
return G.SequenceArray[Lazy[A], Lazy[[]A]](tas)
|
||||||
@@ -38,12 +44,18 @@ func MonadTraverseRecord[K comparable, A, B any](tas map[K]A, f func(A) Lazy[B])
|
|||||||
return G.MonadTraverseRecord[Lazy[B], Lazy[map[K]B]](tas, f)
|
return G.MonadTraverseRecord[Lazy[B], Lazy[map[K]B]](tas, f)
|
||||||
}
|
}
|
||||||
|
|
||||||
// TraverseArray applies a function returning an [IO] to all elements in a record and the
|
// TraverseRecord applies a function returning an [IO] to all elements in a record and the
|
||||||
// transforms this into an [IO] of that record
|
// transforms this into an [IO] of that record
|
||||||
func TraverseRecord[K comparable, A, B any](f func(A) Lazy[B]) func(map[K]A) Lazy[map[K]B] {
|
func TraverseRecord[K comparable, A, B any](f func(A) Lazy[B]) func(map[K]A) Lazy[map[K]B] {
|
||||||
return G.TraverseRecord[Lazy[B], Lazy[map[K]B], map[K]A](f)
|
return G.TraverseRecord[Lazy[B], Lazy[map[K]B], map[K]A](f)
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// TraverseRecord applies a function returning an [IO] to all elements in a record and the
|
||||||
|
// transforms this into an [IO] of that record
|
||||||
|
func TraverseRecordWithIndex[K comparable, A, B any](f func(K, A) Lazy[B]) func(map[K]A) Lazy[map[K]B] {
|
||||||
|
return G.TraverseRecordWithIndex[Lazy[B], Lazy[map[K]B], map[K]A](f)
|
||||||
|
}
|
||||||
|
|
||||||
// SequenceRecord converts a record of [IO] to an [IO] of a record
|
// SequenceRecord converts a record of [IO] to an [IO] of a record
|
||||||
func SequenceRecord[K comparable, A any](tas map[K]Lazy[A]) Lazy[map[K]A] {
|
func SequenceRecord[K comparable, A any](tas map[K]Lazy[A]) Lazy[map[K]A] {
|
||||||
return G.SequenceRecord[Lazy[A], Lazy[map[K]A]](tas)
|
return G.SequenceRecord[Lazy[A], Lazy[map[K]A]](tas)
|
||||||
|
|||||||
23
number/integer/string.go
Normal file
23
number/integer/string.go
Normal file
@@ -0,0 +1,23 @@
|
|||||||
|
// 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 integer
|
||||||
|
|
||||||
|
import "strconv"
|
||||||
|
|
||||||
|
var (
|
||||||
|
// ToString converts an integer to a string
|
||||||
|
ToString = strconv.Itoa
|
||||||
|
)
|
||||||
@@ -24,3 +24,9 @@ func MagmaSub[A Number]() M.Magma[A] {
|
|||||||
return first - second
|
return first - second
|
||||||
})
|
})
|
||||||
}
|
}
|
||||||
|
|
||||||
|
func MagmaDiv[A Number]() M.Magma[A] {
|
||||||
|
return M.MakeMagma(func(first A, second A) A {
|
||||||
|
return first / second
|
||||||
|
})
|
||||||
|
}
|
||||||
|
|||||||
@@ -19,6 +19,7 @@ import (
|
|||||||
M "github.com/IBM/fp-go/monoid"
|
M "github.com/IBM/fp-go/monoid"
|
||||||
)
|
)
|
||||||
|
|
||||||
|
// MonoidSum is the [Monoid] that adds elements with a zero empty element
|
||||||
func MonoidSum[A Number]() M.Monoid[A] {
|
func MonoidSum[A Number]() M.Monoid[A] {
|
||||||
s := SemigroupSum[A]()
|
s := SemigroupSum[A]()
|
||||||
return M.MakeMonoid(
|
return M.MakeMonoid(
|
||||||
@@ -26,3 +27,12 @@ func MonoidSum[A Number]() M.Monoid[A] {
|
|||||||
0,
|
0,
|
||||||
)
|
)
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// MonoidProduct is the [Monoid] that multiplies elements with a one empty element
|
||||||
|
func MonoidProduct[A Number]() M.Monoid[A] {
|
||||||
|
s := SemigroupProduct[A]()
|
||||||
|
return M.MakeMonoid(
|
||||||
|
s.Concat,
|
||||||
|
1,
|
||||||
|
)
|
||||||
|
}
|
||||||
|
|||||||
@@ -24,3 +24,9 @@ func SemigroupSum[A Number]() S.Semigroup[A] {
|
|||||||
return first + second
|
return first + second
|
||||||
})
|
})
|
||||||
}
|
}
|
||||||
|
|
||||||
|
func SemigroupProduct[A Number]() S.Semigroup[A] {
|
||||||
|
return S.MakeSemigroup(func(first A, second A) A {
|
||||||
|
return first * second
|
||||||
|
})
|
||||||
|
}
|
||||||
|
|||||||
@@ -24,12 +24,33 @@ type Number interface {
|
|||||||
}
|
}
|
||||||
|
|
||||||
// Add is a curried function used to add two numbers
|
// Add is a curried function used to add two numbers
|
||||||
func Add[T Number](left T) func(T) T {
|
func Add[T Number](right T) func(T) T {
|
||||||
return func(right T) T {
|
return func(left T) T {
|
||||||
return left + right
|
return left + right
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// Sub is a curried function used to subtract two numbers
|
||||||
|
func Sub[T Number](right T) func(T) T {
|
||||||
|
return func(left T) T {
|
||||||
|
return left - right
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
// Mul is a curried function used to multiply two numbers
|
||||||
|
func Mul[T Number](right T) func(T) T {
|
||||||
|
return func(left T) T {
|
||||||
|
return left * right
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
// Div is a curried function used to divide two numbers
|
||||||
|
func Div[T Number](right T) func(T) T {
|
||||||
|
return func(left T) T {
|
||||||
|
return left / right
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
// Inc is a function that increments a number
|
// Inc is a function that increments a number
|
||||||
func Inc[T Number](value T) T {
|
func Inc[T Number](value T) T {
|
||||||
return value + 1
|
return value + 1
|
||||||
|
|||||||
@@ -67,7 +67,7 @@ func Modify[S, A any](f func(A) A) func(Iso[S, A]) func(S) S {
|
|||||||
}
|
}
|
||||||
|
|
||||||
// Wrap wraps the value
|
// Wrap wraps the value
|
||||||
func Unwrap[S, A any](s S) func(Iso[S, A]) A {
|
func Unwrap[A, S any](s S) func(Iso[S, A]) A {
|
||||||
return func(sa Iso[S, A]) A {
|
return func(sa Iso[S, A]) A {
|
||||||
return sa.Get(s)
|
return sa.Get(s)
|
||||||
}
|
}
|
||||||
@@ -81,8 +81,8 @@ func Wrap[S, A any](a A) func(Iso[S, A]) S {
|
|||||||
}
|
}
|
||||||
|
|
||||||
// From wraps the value
|
// From wraps the value
|
||||||
func To[S, A any](s S) func(Iso[S, A]) A {
|
func To[A, S any](s S) func(Iso[S, A]) A {
|
||||||
return Unwrap[S, A](s)
|
return Unwrap[A, S](s)
|
||||||
}
|
}
|
||||||
|
|
||||||
// To unwraps the value
|
// To unwraps the value
|
||||||
|
|||||||
@@ -121,7 +121,7 @@ func Compose[S, A, B any](ab Lens[A, B]) func(Lens[S, A]) Lens[S, B] {
|
|||||||
// the getter returns an `Option[B]` because the container `A` could already be an option
|
// the getter returns an `Option[B]` because the container `A` could already be an option
|
||||||
// if the setter is invoked with `Some[B]` then the value of `B` will be set, potentially on a default value of `A` if `A` did not exist
|
// if the setter is invoked with `Some[B]` then the value of `B` will be set, potentially on a default value of `A` if `A` did not exist
|
||||||
// if the setter is invoked with `None[B]` then the container `A` is reset to `None[A]` because this is the only way to remove `B`
|
// if the setter is invoked with `None[B]` then the container `A` is reset to `None[A]` because this is the only way to remove `B`
|
||||||
func ComposeOption[S, A, B any](defaultA A) func(ab Lens[A, B]) func(Lens[S, O.Option[A]]) Lens[S, O.Option[B]] {
|
func ComposeOption[S, B, A any](defaultA A) func(ab Lens[A, B]) func(Lens[S, O.Option[A]]) Lens[S, O.Option[B]] {
|
||||||
defa := F.Constant(defaultA)
|
defa := F.Constant(defaultA)
|
||||||
return func(ab Lens[A, B]) func(Lens[S, O.Option[A]]) Lens[S, O.Option[B]] {
|
return func(ab Lens[A, B]) func(Lens[S, O.Option[A]]) Lens[S, O.Option[B]] {
|
||||||
foldab := O.Fold(O.None[B], F.Flow2(ab.Get, O.Some[B]))
|
foldab := O.Fold(O.None[B], F.Flow2(ab.Get, O.Some[B]))
|
||||||
@@ -172,7 +172,7 @@ func ComposeOption[S, A, B any](defaultA A) func(ab Lens[A, B]) func(Lens[S, O.O
|
|||||||
// if the setter is called with `Some[B]` and `A` does not exist, the default of 'A' is updated with `B`
|
// if the setter is called with `Some[B]` and `A` does not exist, the default of 'A' is updated with `B`
|
||||||
// if the setter is called with `None[B]` and `A` does not exist this is the identity operation on 'S'
|
// if the setter is called with `None[B]` and `A` does not exist this is the identity operation on 'S'
|
||||||
// if the setter is called with `None[B]` and `A` does exist, 'B' is removed from 'A'
|
// if the setter is called with `None[B]` and `A` does exist, 'B' is removed from 'A'
|
||||||
func ComposeOptions[S, A, B any](defaultA A) func(ab Lens[A, O.Option[B]]) func(Lens[S, O.Option[A]]) Lens[S, O.Option[B]] {
|
func ComposeOptions[S, B, A any](defaultA A) func(ab Lens[A, O.Option[B]]) func(Lens[S, O.Option[A]]) Lens[S, O.Option[B]] {
|
||||||
defa := F.Constant(defaultA)
|
defa := F.Constant(defaultA)
|
||||||
noops := F.Constant(F.Identity[S])
|
noops := F.Constant(F.Identity[S])
|
||||||
noneb := O.None[B]()
|
noneb := O.None[B]()
|
||||||
|
|||||||
@@ -209,7 +209,7 @@ func TestComposeOption(t *testing.T) {
|
|||||||
// compose lenses
|
// compose lenses
|
||||||
lens := F.Pipe1(
|
lens := F.Pipe1(
|
||||||
inner,
|
inner,
|
||||||
ComposeOption[Outer, *Inner, int](defaultInner)(value),
|
ComposeOption[Outer, int](defaultInner)(value),
|
||||||
)
|
)
|
||||||
outer1 := Outer{inner: &Inner{Value: 1, Foo: "a"}}
|
outer1 := Outer{inner: &Inner{Value: 1, Foo: "a"}}
|
||||||
// the checks
|
// the checks
|
||||||
@@ -235,7 +235,7 @@ func TestComposeOptions(t *testing.T) {
|
|||||||
// compose lenses
|
// compose lenses
|
||||||
lens := F.Pipe1(
|
lens := F.Pipe1(
|
||||||
inner,
|
inner,
|
||||||
ComposeOptions[OuterOpt, *InnerOpt, *int](defaultInner)(value),
|
ComposeOptions[OuterOpt, *int](defaultInner)(value),
|
||||||
)
|
)
|
||||||
// additional settings
|
// additional settings
|
||||||
defaultValue2 := 2
|
defaultValue2 := 2
|
||||||
|
|||||||
@@ -24,7 +24,7 @@ import (
|
|||||||
)
|
)
|
||||||
|
|
||||||
// AtRecord returns a lens that focusses on a value in a record
|
// AtRecord returns a lens that focusses on a value in a record
|
||||||
func AtRecord[M ~map[K]V, K comparable, V any](key K) L.Lens[M, O.Option[V]] {
|
func AtRecord[M ~map[K]V, V any, K comparable](key K) L.Lens[M, O.Option[V]] {
|
||||||
addKey := F.Bind1of2(RR.UpsertAt[M, K, V])(key)
|
addKey := F.Bind1of2(RR.UpsertAt[M, K, V])(key)
|
||||||
delKey := F.Bind1of1(RR.DeleteAt[M, K, V])(key)
|
delKey := F.Bind1of1(RR.DeleteAt[M, K, V])(key)
|
||||||
fold := O.Fold(
|
fold := O.Fold(
|
||||||
@@ -44,6 +44,6 @@ func AtRecord[M ~map[K]V, K comparable, V any](key K) L.Lens[M, O.Option[V]] {
|
|||||||
}
|
}
|
||||||
|
|
||||||
// AtKey returns a `Lens` focused on a required key of a `ReadonlyRecord`
|
// AtKey returns a `Lens` focused on a required key of a `ReadonlyRecord`
|
||||||
func AtKey[M ~map[K]V, S any, K comparable, V any](key K) func(sa L.Lens[S, M]) L.Lens[S, O.Option[V]] {
|
func AtKey[M ~map[K]V, S any, V any, K comparable](key K) func(sa L.Lens[S, M]) L.Lens[S, O.Option[V]] {
|
||||||
return L.Compose[S](AtRecord[M](key))
|
return L.Compose[S](AtRecord[M](key))
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -22,11 +22,11 @@ import (
|
|||||||
)
|
)
|
||||||
|
|
||||||
// AtRecord returns a lens that focusses on a value in a record
|
// AtRecord returns a lens that focusses on a value in a record
|
||||||
func AtRecord[K comparable, V any](key K) L.Lens[map[K]V, O.Option[V]] {
|
func AtRecord[V any, K comparable](key K) L.Lens[map[K]V, O.Option[V]] {
|
||||||
return G.AtRecord[map[K]V](key)
|
return G.AtRecord[map[K]V](key)
|
||||||
}
|
}
|
||||||
|
|
||||||
// AtKey returns a `Lens` focused on a required key of a `ReadonlyRecord`
|
// AtKey returns a `Lens` focused on a required key of a `ReadonlyRecord`
|
||||||
func AtKey[S any, K comparable, V any](key K) func(sa L.Lens[S, map[K]V]) L.Lens[S, O.Option[V]] {
|
func AtKey[S any, V any, K comparable](key K) func(sa L.Lens[S, map[K]V]) L.Lens[S, O.Option[V]] {
|
||||||
return G.AtKey[map[K]V, S](key)
|
return G.AtKey[map[K]V, S](key)
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -31,7 +31,7 @@ type (
|
|||||||
func TestAtKey(t *testing.T) {
|
func TestAtKey(t *testing.T) {
|
||||||
sa := F.Pipe1(
|
sa := F.Pipe1(
|
||||||
L.Id[S](),
|
L.Id[S](),
|
||||||
AtKey[S, string, int]("a"),
|
AtKey[S, int]("a"),
|
||||||
)
|
)
|
||||||
|
|
||||||
assert.Equal(t, O.Some(1), sa.Get(S{"a": 1}))
|
assert.Equal(t, O.Some(1), sa.Get(S{"a": 1}))
|
||||||
|
|||||||
@@ -198,7 +198,7 @@ func TestOuterLensLaws(t *testing.T) {
|
|||||||
eqValue := EQT.Eq[int]()
|
eqValue := EQT.Eq[int]()
|
||||||
eqOptValue := O.Eq(eqValue)
|
eqOptValue := O.Eq(eqValue)
|
||||||
// lens to access a value from outer
|
// lens to access a value from outer
|
||||||
valueFromOuter := L.ComposeOption[*Outer, *Inner, int](&defaultInner)(valueLens)(outerLens)
|
valueFromOuter := L.ComposeOption[*Outer, int](&defaultInner)(valueLens)(outerLens)
|
||||||
// try to access the value, this should get an option
|
// try to access the value, this should get an option
|
||||||
assert.True(t, eqOptValue.Equals(valueFromOuter.Get(&emptyOuter), O.None[int]()))
|
assert.True(t, eqOptValue.Equals(valueFromOuter.Get(&emptyOuter), O.None[int]()))
|
||||||
// update the object
|
// update the object
|
||||||
@@ -234,7 +234,7 @@ func TestOuterOptLensLaws(t *testing.T) {
|
|||||||
valueFromOuter := F.Pipe3(
|
valueFromOuter := F.Pipe3(
|
||||||
valueOptLens,
|
valueOptLens,
|
||||||
LI.Compose[*InnerOpt](intIso),
|
LI.Compose[*InnerOpt](intIso),
|
||||||
L.ComposeOptions[*OuterOpt, *InnerOpt, int](&defaultInnerOpt),
|
L.ComposeOptions[*OuterOpt, int](&defaultInnerOpt),
|
||||||
I.Ap[L.Lens[*OuterOpt, O.Option[int]]](outerOptLens),
|
I.Ap[L.Lens[*OuterOpt, O.Option[int]]](outerOptLens),
|
||||||
)
|
)
|
||||||
|
|
||||||
|
|||||||
@@ -36,6 +36,22 @@ func TraverseArray[A, B any](f func(A) Option[B]) func([]A) Option[[]B] {
|
|||||||
return TraverseArrayG[[]A, []B](f)
|
return TraverseArrayG[[]A, []B](f)
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// TraverseArrayWithIndexG transforms an array
|
||||||
|
func TraverseArrayWithIndexG[GA ~[]A, GB ~[]B, A, B any](f func(int, A) Option[B]) func(GA) Option[GB] {
|
||||||
|
return RA.TraverseWithIndex[GA](
|
||||||
|
Of[GB],
|
||||||
|
Map[GB, func(B) GB],
|
||||||
|
Ap[GB, B],
|
||||||
|
|
||||||
|
f,
|
||||||
|
)
|
||||||
|
}
|
||||||
|
|
||||||
|
// TraverseArrayWithIndex transforms an array
|
||||||
|
func TraverseArrayWithIndex[A, B any](f func(int, A) Option[B]) func([]A) Option[[]B] {
|
||||||
|
return TraverseArrayWithIndexG[[]A, []B](f)
|
||||||
|
}
|
||||||
|
|
||||||
func SequenceArrayG[GA ~[]A, GOA ~[]Option[A], A any](ma GOA) Option[GA] {
|
func SequenceArrayG[GA ~[]A, GOA ~[]Option[A], A any](ma GOA) Option[GA] {
|
||||||
return TraverseArrayG[GOA, GA](F.Identity[Option[A]])(ma)
|
return TraverseArrayG[GOA, GA](F.Identity[Option[A]])(ma)
|
||||||
}
|
}
|
||||||
@@ -44,3 +60,15 @@ func SequenceArrayG[GA ~[]A, GOA ~[]Option[A], A any](ma GOA) Option[GA] {
|
|||||||
func SequenceArray[A any](ma []Option[A]) Option[[]A] {
|
func SequenceArray[A any](ma []Option[A]) Option[[]A] {
|
||||||
return SequenceArrayG[[]A](ma)
|
return SequenceArrayG[[]A](ma)
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// CompactArrayG discards the none values and keeps the some values
|
||||||
|
func CompactArrayG[A1 ~[]Option[A], A2 ~[]A, A any](fa A1) A2 {
|
||||||
|
return RA.Reduce(fa, func(out A2, value Option[A]) A2 {
|
||||||
|
return MonadFold(value, F.Constant(out), F.Bind1st(RA.Append[A2, A], out))
|
||||||
|
}, make(A2, len(fa)))
|
||||||
|
}
|
||||||
|
|
||||||
|
// CompactArray discards the none values and keeps the some values
|
||||||
|
func CompactArray[A any](fa []Option[A]) []A {
|
||||||
|
return CompactArrayG[[]Option[A], []A](fa)
|
||||||
|
}
|
||||||
|
|||||||
@@ -13,6 +13,7 @@
|
|||||||
// See the License for the specific language governing permissions and
|
// See the License for the specific language governing permissions and
|
||||||
// limitations under the License.
|
// limitations under the License.
|
||||||
|
|
||||||
|
// Package option defines the [Option] datastructure and its monadic operations
|
||||||
package option
|
package option
|
||||||
|
|
||||||
//go:generate go run .. option --count 10 --filename gen.go
|
//go:generate go run .. option --count 10 --filename gen.go
|
||||||
|
|||||||
55
option/examples_create_test.go
Normal file
55
option/examples_create_test.go
Normal file
@@ -0,0 +1,55 @@
|
|||||||
|
// 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 option
|
||||||
|
|
||||||
|
import "fmt"
|
||||||
|
|
||||||
|
func ExampleOption_creation() {
|
||||||
|
|
||||||
|
// Build an Option
|
||||||
|
none1 := None[int]()
|
||||||
|
some1 := Some("value")
|
||||||
|
|
||||||
|
// Build from a value
|
||||||
|
fromNillable := FromNillable[string]
|
||||||
|
nonFromNil := fromNillable(nil) // None[*string]
|
||||||
|
value := "value"
|
||||||
|
someFromPointer := fromNillable(&value) // Some[*string](xxx)
|
||||||
|
|
||||||
|
// some predicate
|
||||||
|
isEven := func(num int) bool {
|
||||||
|
return num%2 == 0
|
||||||
|
}
|
||||||
|
|
||||||
|
fromEven := FromPredicate(isEven)
|
||||||
|
noneFromPred := fromEven(3) // None[int]
|
||||||
|
someFromPred := fromEven(4) // Some[int](4)
|
||||||
|
|
||||||
|
fmt.Println(none1)
|
||||||
|
fmt.Println(some1)
|
||||||
|
fmt.Println(nonFromNil)
|
||||||
|
fmt.Println(IsSome(someFromPointer))
|
||||||
|
fmt.Println(noneFromPred)
|
||||||
|
fmt.Println(someFromPred)
|
||||||
|
|
||||||
|
// Output:
|
||||||
|
// None[int]
|
||||||
|
// Some[string](value)
|
||||||
|
// None[*string]
|
||||||
|
// true
|
||||||
|
// None[int]
|
||||||
|
// Some[int](4)
|
||||||
|
}
|
||||||
73
option/examples_extract_test.go
Normal file
73
option/examples_extract_test.go
Normal file
@@ -0,0 +1,73 @@
|
|||||||
|
// 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 option
|
||||||
|
|
||||||
|
import (
|
||||||
|
"fmt"
|
||||||
|
|
||||||
|
F "github.com/IBM/fp-go/function"
|
||||||
|
N "github.com/IBM/fp-go/number"
|
||||||
|
)
|
||||||
|
|
||||||
|
func ExampleOption_extraction() {
|
||||||
|
|
||||||
|
noneValue := None[int]()
|
||||||
|
someValue := Of(42)
|
||||||
|
|
||||||
|
// Convert Option[T] to T
|
||||||
|
fromNone, okFromNone := Unwrap(noneValue) // 0, false
|
||||||
|
fromSome, okFromSome := Unwrap(someValue) // 42, true
|
||||||
|
|
||||||
|
// Convert Option[T] with a default value
|
||||||
|
noneWithDefault := GetOrElse(F.Constant(0))(noneValue) // 0
|
||||||
|
someWithDefault := GetOrElse(F.Constant(0))(someValue) // 42
|
||||||
|
|
||||||
|
// Apply a different function on None/Some(...)
|
||||||
|
doubleOrZero := Fold(
|
||||||
|
F.Constant(0), // none case
|
||||||
|
N.Mul(2), // some case
|
||||||
|
) // func(ma Option[int]) int
|
||||||
|
|
||||||
|
doubleFromNone := doubleOrZero(noneValue) // 0
|
||||||
|
doubleFromSome := doubleOrZero(someValue) // 84
|
||||||
|
|
||||||
|
// Pro-tip: Fold is short for the following:
|
||||||
|
doubleOfZeroBis := F.Flow2(
|
||||||
|
Map(N.Mul(2)), // some case
|
||||||
|
GetOrElse(F.Constant(0)), // none case
|
||||||
|
)
|
||||||
|
doubleFromNoneBis := doubleOfZeroBis(noneValue) // 0
|
||||||
|
doubleFromSomeBis := doubleOfZeroBis(someValue) // 84
|
||||||
|
|
||||||
|
fmt.Printf("%d, %t\n", fromNone, okFromNone)
|
||||||
|
fmt.Printf("%d, %t\n", fromSome, okFromSome)
|
||||||
|
fmt.Println(noneWithDefault)
|
||||||
|
fmt.Println(someWithDefault)
|
||||||
|
fmt.Println(doubleFromNone)
|
||||||
|
fmt.Println(doubleFromSome)
|
||||||
|
fmt.Println(doubleFromNoneBis)
|
||||||
|
fmt.Println(doubleFromSomeBis)
|
||||||
|
|
||||||
|
// Output:
|
||||||
|
// 0, false
|
||||||
|
// 42, true
|
||||||
|
// 0
|
||||||
|
// 42
|
||||||
|
// 0
|
||||||
|
// 84
|
||||||
|
// 0
|
||||||
|
// 84
|
||||||
|
}
|
||||||
950
option/gen.go
950
option/gen.go
File diff suppressed because it is too large
Load Diff
38
option/ord.go
Normal file
38
option/ord.go
Normal file
@@ -0,0 +1,38 @@
|
|||||||
|
// 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 option
|
||||||
|
|
||||||
|
import (
|
||||||
|
C "github.com/IBM/fp-go/constraints"
|
||||||
|
F "github.com/IBM/fp-go/function"
|
||||||
|
"github.com/IBM/fp-go/ord"
|
||||||
|
)
|
||||||
|
|
||||||
|
// Constructs an order for [Option]
|
||||||
|
func Ord[A any](a ord.Ord[A]) ord.Ord[Option[A]] {
|
||||||
|
// some convenient shortcuts
|
||||||
|
fld := Fold(
|
||||||
|
F.Constant(Fold(F.Constant(0), F.Constant1[A](-1))),
|
||||||
|
F.Flow2(F.Curry2(a.Compare), F.Bind1st(Fold[A, int], F.Constant(1))),
|
||||||
|
)
|
||||||
|
// convert to an ordering predicate
|
||||||
|
return ord.MakeOrd(F.Uncurry2(fld), Eq(ord.ToEq(a)).Equals)
|
||||||
|
}
|
||||||
|
|
||||||
|
// FromStrictCompare constructs an [Ord] from the canonical comparison function
|
||||||
|
func FromStrictCompare[A C.Ordered]() ord.Ord[Option[A]] {
|
||||||
|
return Ord(ord.FromStrictCompare[A]())
|
||||||
|
}
|
||||||
46
option/ord_test.go
Normal file
46
option/ord_test.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 option
|
||||||
|
|
||||||
|
import (
|
||||||
|
"testing"
|
||||||
|
|
||||||
|
S "github.com/IBM/fp-go/string"
|
||||||
|
"github.com/stretchr/testify/assert"
|
||||||
|
)
|
||||||
|
|
||||||
|
// it('getOrd', () => {
|
||||||
|
// const OS = _.getOrd(S.Ord)
|
||||||
|
// U.deepStrictEqual(OS.compare(_.none, _.none), 0)
|
||||||
|
// U.deepStrictEqual(OS.compare(_.some('a'), _.none), 1)
|
||||||
|
// U.deepStrictEqual(OS.compare(_.none, _.some('a')), -1)
|
||||||
|
// U.deepStrictEqual(OS.compare(_.some('a'), _.some('a')), 0)
|
||||||
|
// U.deepStrictEqual(OS.compare(_.some('a'), _.some('b')), -1)
|
||||||
|
// U.deepStrictEqual(OS.compare(_.some('b'), _.some('a')), 1)
|
||||||
|
// })
|
||||||
|
|
||||||
|
func TestOrd(t *testing.T) {
|
||||||
|
|
||||||
|
os := Ord(S.Ord)
|
||||||
|
|
||||||
|
assert.Equal(t, 0, os.Compare(None[string](), None[string]()))
|
||||||
|
assert.Equal(t, 1, os.Compare(Some("a"), None[string]()))
|
||||||
|
assert.Equal(t, -1, os.Compare(None[string](), Some("a")))
|
||||||
|
assert.Equal(t, 0, os.Compare(Some("a"), Some("a")))
|
||||||
|
assert.Equal(t, -1, os.Compare(Some("a"), Some("b")))
|
||||||
|
assert.Equal(t, 1, os.Compare(Some("b"), Some("a")))
|
||||||
|
|
||||||
|
}
|
||||||
@@ -20,7 +20,7 @@ import (
|
|||||||
RR "github.com/IBM/fp-go/internal/record"
|
RR "github.com/IBM/fp-go/internal/record"
|
||||||
)
|
)
|
||||||
|
|
||||||
// TraverseRecord transforms a record of options into an option of a record
|
// TraverseRecordG transforms a record of options into an option of a record
|
||||||
func TraverseRecordG[GA ~map[K]A, GB ~map[K]B, K comparable, A, B any](f func(A) Option[B]) func(GA) Option[GB] {
|
func TraverseRecordG[GA ~map[K]A, GB ~map[K]B, K comparable, A, B any](f func(A) Option[B]) func(GA) Option[GB] {
|
||||||
return RR.Traverse[GA](
|
return RR.Traverse[GA](
|
||||||
Of[GB],
|
Of[GB],
|
||||||
@@ -36,6 +36,22 @@ func TraverseRecord[K comparable, A, B any](f func(A) Option[B]) func(map[K]A) O
|
|||||||
return TraverseRecordG[map[K]A, map[K]B](f)
|
return TraverseRecordG[map[K]A, map[K]B](f)
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// TraverseRecordWithIndexG transforms a record of options into an option of a record
|
||||||
|
func TraverseRecordWithIndexG[GA ~map[K]A, GB ~map[K]B, K comparable, A, B any](f func(K, A) Option[B]) func(GA) Option[GB] {
|
||||||
|
return RR.TraverseWithIndex[GA](
|
||||||
|
Of[GB],
|
||||||
|
Map[GB, func(B) GB],
|
||||||
|
Ap[GB, B],
|
||||||
|
|
||||||
|
f,
|
||||||
|
)
|
||||||
|
}
|
||||||
|
|
||||||
|
// TraverseRecordWithIndex transforms a record of options into an option of a record
|
||||||
|
func TraverseRecordWithIndex[K comparable, A, B any](f func(K, A) Option[B]) func(map[K]A) Option[map[K]B] {
|
||||||
|
return TraverseRecordWithIndexG[map[K]A, map[K]B](f)
|
||||||
|
}
|
||||||
|
|
||||||
func SequenceRecordG[GA ~map[K]A, GOA ~map[K]Option[A], K comparable, A any](ma GOA) Option[GA] {
|
func SequenceRecordG[GA ~map[K]A, GOA ~map[K]Option[A], K comparable, A any](ma GOA) Option[GA] {
|
||||||
return TraverseRecordG[GOA, GA](F.Identity[Option[A]])(ma)
|
return TraverseRecordG[GOA, GA](F.Identity[Option[A]])(ma)
|
||||||
}
|
}
|
||||||
@@ -44,3 +60,21 @@ func SequenceRecordG[GA ~map[K]A, GOA ~map[K]Option[A], K comparable, A any](ma
|
|||||||
func SequenceRecord[K comparable, A any](ma map[K]Option[A]) Option[map[K]A] {
|
func SequenceRecord[K comparable, A any](ma map[K]Option[A]) Option[map[K]A] {
|
||||||
return SequenceRecordG[map[K]A](ma)
|
return SequenceRecordG[map[K]A](ma)
|
||||||
}
|
}
|
||||||
|
|
||||||
|
func upsertAtReadWrite[M ~map[K]V, K comparable, V any](r M, k K, v V) M {
|
||||||
|
r[k] = v
|
||||||
|
return r
|
||||||
|
}
|
||||||
|
|
||||||
|
// CompactRecordG discards the noe values and keeps the some values
|
||||||
|
func CompactRecordG[M1 ~map[K]Option[A], M2 ~map[K]A, K comparable, A any](m M1) M2 {
|
||||||
|
bnd := F.Bind12of3(upsertAtReadWrite[M2])
|
||||||
|
return RR.ReduceWithIndex(m, func(key K, m M2, value Option[A]) M2 {
|
||||||
|
return MonadFold(value, F.Constant(m), bnd(m, key))
|
||||||
|
}, make(M2))
|
||||||
|
}
|
||||||
|
|
||||||
|
// CompactRecord discards the noe values and keeps the some values
|
||||||
|
func CompactRecord[K comparable, A any](m map[K]Option[A]) map[K]A {
|
||||||
|
return CompactRecordG[map[K]Option[A], map[K]A](m)
|
||||||
|
}
|
||||||
|
|||||||
@@ -30,3 +30,18 @@ func TestSequenceRecord(t *testing.T) {
|
|||||||
"b": Of("B"),
|
"b": Of("B"),
|
||||||
}))
|
}))
|
||||||
}
|
}
|
||||||
|
|
||||||
|
func TestCompactRecord(t *testing.T) {
|
||||||
|
// make the map
|
||||||
|
m := make(map[string]Option[int])
|
||||||
|
m["foo"] = None[int]()
|
||||||
|
m["bar"] = Some(1)
|
||||||
|
// compact it
|
||||||
|
m1 := CompactRecord(m)
|
||||||
|
// check expected
|
||||||
|
exp := map[string]int{
|
||||||
|
"bar": 1,
|
||||||
|
}
|
||||||
|
|
||||||
|
assert.Equal(t, exp, m1)
|
||||||
|
}
|
||||||
|
|||||||
@@ -19,13 +19,22 @@ import (
|
|||||||
F "github.com/IBM/fp-go/function"
|
F "github.com/IBM/fp-go/function"
|
||||||
)
|
)
|
||||||
|
|
||||||
// HKTA = HKT<A>
|
// Sequence converts an [Option] of some higher kinded type into the higher kinded type of an [Option]
|
||||||
// HKTOA = HKT<Option<A>>
|
|
||||||
//
|
|
||||||
// Sequence converts an option of some higher kinded type into the higher kinded type of an option
|
|
||||||
func Sequence[A, HKTA, HKTOA any](
|
func Sequence[A, HKTA, HKTOA any](
|
||||||
_of func(Option[A]) HKTOA,
|
mof func(Option[A]) HKTOA,
|
||||||
_map func(HKTA, func(A) Option[A]) HKTOA,
|
mmap func(func(A) Option[A]) func(HKTA) HKTOA,
|
||||||
) func(Option[HKTA]) HKTOA {
|
) func(Option[HKTA]) HKTOA {
|
||||||
return Fold(F.Nullary2(None[A], _of), F.Bind2nd(_map, Some[A]))
|
return Fold(F.Nullary2(None[A], mof), mmap(Some[A]))
|
||||||
|
}
|
||||||
|
|
||||||
|
// Traverse converts an [Option] of some higher kinded type into the higher kinded type of an [Option]
|
||||||
|
func Traverse[A, B, HKTB, HKTOB any](
|
||||||
|
mof func(Option[B]) HKTOB,
|
||||||
|
mmap func(func(B) Option[B]) func(HKTB) HKTOB,
|
||||||
|
) func(func(A) HKTB) func(Option[A]) HKTOB {
|
||||||
|
onNone := F.Nullary2(None[B], mof)
|
||||||
|
onSome := mmap(Some[B])
|
||||||
|
return func(f func(A) HKTB) func(Option[A]) HKTOB {
|
||||||
|
return Fold(onNone, F.Flow2(f, onSome))
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -23,7 +23,7 @@ import (
|
|||||||
O "github.com/IBM/fp-go/option"
|
O "github.com/IBM/fp-go/option"
|
||||||
)
|
)
|
||||||
|
|
||||||
// AssertLaws asserts the apply monad laws for the `Either` monad
|
// AssertLaws asserts the apply monad laws for the [Option] monad
|
||||||
func AssertLaws[A, B, C any](t *testing.T,
|
func AssertLaws[A, B, C any](t *testing.T,
|
||||||
eqa EQ.Eq[A],
|
eqa EQ.Eq[A],
|
||||||
eqb EQ.Eq[B],
|
eqb EQ.Eq[B],
|
||||||
|
|||||||
19
ord/ord.go
19
ord/ord.go
@@ -40,6 +40,11 @@ func (self ord[T]) Compare(x, y T) int {
|
|||||||
return self.c(x, y)
|
return self.c(x, y)
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// ToEq converts an [Ord] to [E.Eq]
|
||||||
|
func ToEq[T any](o Ord[T]) E.Eq[T] {
|
||||||
|
return o
|
||||||
|
}
|
||||||
|
|
||||||
// MakeOrd creates an instance of an Ord
|
// MakeOrd creates an instance of an Ord
|
||||||
func MakeOrd[T any](c func(x, y T) int, e func(x, y T) bool) Ord[T] {
|
func MakeOrd[T any](c func(x, y T) int, e func(x, y T) bool) Ord[T] {
|
||||||
return ord[T]{c: c, e: e}
|
return ord[T]{c: c, e: e}
|
||||||
@@ -126,9 +131,7 @@ func FromStrictCompare[A C.Ordered]() Ord[A] {
|
|||||||
return MakeOrd(strictCompare[A], strictEq[A])
|
return MakeOrd(strictCompare[A], strictEq[A])
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
// Lt tests whether one value is strictly less than another
|
||||||
* Test whether one value is _strictly less than_ another
|
|
||||||
*/
|
|
||||||
func Lt[A any](O Ord[A]) func(A) func(A) bool {
|
func Lt[A any](O Ord[A]) func(A) func(A) bool {
|
||||||
return func(second A) func(A) bool {
|
return func(second A) func(A) bool {
|
||||||
return func(first A) bool {
|
return func(first A) bool {
|
||||||
@@ -137,9 +140,7 @@ func Lt[A any](O Ord[A]) func(A) func(A) bool {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
// Leq Tests whether one value is less or equal than another
|
||||||
* Test whether one value is less or equal than_ another
|
|
||||||
*/
|
|
||||||
func Leq[A any](O Ord[A]) func(A) func(A) bool {
|
func Leq[A any](O Ord[A]) func(A) func(A) bool {
|
||||||
return func(second A) func(A) bool {
|
return func(second A) func(A) bool {
|
||||||
return func(first A) bool {
|
return func(first A) bool {
|
||||||
@@ -149,7 +150,7 @@ func Leq[A any](O Ord[A]) func(A) func(A) bool {
|
|||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Test whether one value is _strictly greater than_ another
|
* Test whether one value is strictly greater than another
|
||||||
*/
|
*/
|
||||||
func Gt[A any](O Ord[A]) func(A) func(A) bool {
|
func Gt[A any](O Ord[A]) func(A) func(A) bool {
|
||||||
return func(second A) func(A) bool {
|
return func(second A) func(A) bool {
|
||||||
@@ -159,9 +160,7 @@ func Gt[A any](O Ord[A]) func(A) func(A) bool {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
// Geq tests whether one value is greater or equal than another
|
||||||
* Test whether one value is greater or equal than_ another
|
|
||||||
*/
|
|
||||||
func Geq[A any](O Ord[A]) func(A) func(A) bool {
|
func Geq[A any](O Ord[A]) func(A) func(A) bool {
|
||||||
return func(second A) func(A) bool {
|
return func(second A) func(A) bool {
|
||||||
return func(first A) bool {
|
return func(first A) bool {
|
||||||
|
|||||||
@@ -24,6 +24,11 @@ func TraverseArray[R, A, B any](f func(A) Reader[R, B]) func([]A) Reader[R, []B]
|
|||||||
return G.TraverseArray[Reader[R, B], Reader[R, []B], []A](f)
|
return G.TraverseArray[Reader[R, B], Reader[R, []B], []A](f)
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// TraverseArrayWithIndex transforms an array
|
||||||
|
func TraverseArrayWithIndex[R, A, B any](f func(int, A) Reader[R, B]) func([]A) Reader[R, []B] {
|
||||||
|
return G.TraverseArrayWithIndex[Reader[R, B], Reader[R, []B], []A](f)
|
||||||
|
}
|
||||||
|
|
||||||
// SequenceArray converts a homogeneous sequence of either into an either of sequence
|
// SequenceArray converts a homogeneous sequence of either into an either of sequence
|
||||||
func SequenceArray[R, A any](ma []Reader[R, A]) Reader[R, []A] {
|
func SequenceArray[R, A any](ma []Reader[R, A]) Reader[R, []A] {
|
||||||
return G.SequenceArray[Reader[R, A], Reader[R, []A]](ma)
|
return G.SequenceArray[Reader[R, A], Reader[R, []A]](ma)
|
||||||
|
|||||||
@@ -1,76 +1,75 @@
|
|||||||
// Code generated by go generate; DO NOT EDIT.
|
// Code generated by go generate; DO NOT EDIT.
|
||||||
// This file was generated by robots at
|
// This file was generated by robots at
|
||||||
// 2023-08-11 11:38:23.1396887 +0200 CEST m=+0.020805301
|
// 2023-08-17 22:59:18.4448291 +0200 CEST m=+0.161369001
|
||||||
|
|
||||||
package reader
|
package reader
|
||||||
|
|
||||||
|
|
||||||
import (
|
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]]
|
// 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
|
// 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] {
|
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]]
|
// 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
|
// 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] {
|
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]]
|
// 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
|
// 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] {
|
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]]
|
// 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
|
// 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] {
|
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]]
|
// 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
|
// 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] {
|
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]]
|
// 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
|
// 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] {
|
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]]
|
// 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
|
// 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] {
|
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]]
|
// 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
|
// 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] {
|
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]]
|
// 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
|
// 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] {
|
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]]
|
// 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
|
// 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] {
|
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]]
|
// 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
|
// 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] {
|
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)
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -40,6 +40,16 @@ func TraverseArray[GB ~func(R) B, GBS ~func(R) BBS, AAS ~[]A, BBS ~[]B, R, A, B
|
|||||||
)
|
)
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// TraverseArrayWithIndex transforms an array
|
||||||
|
func TraverseArrayWithIndex[GB ~func(R) B, GBS ~func(R) BBS, AAS ~[]A, BBS ~[]B, R, A, B any](f func(int, A) GB) func(AAS) GBS {
|
||||||
|
return RA.TraverseWithIndex[AAS](
|
||||||
|
Of[GBS, R, BBS],
|
||||||
|
Map[GBS, func(R) func(B) BBS, R, BBS, func(B) BBS],
|
||||||
|
Ap[GB, GBS, func(R) func(B) BBS, R, B, BBS],
|
||||||
|
f,
|
||||||
|
)
|
||||||
|
}
|
||||||
|
|
||||||
// SequenceArray converts a homogeneous sequence of either into an either of sequence
|
// SequenceArray converts a homogeneous sequence of either into an either of sequence
|
||||||
func SequenceArray[GA ~func(R) A, GAS ~func(R) AAS, AAS ~[]A, GAAS ~[]GA, R, A any](ma GAAS) GAS {
|
func SequenceArray[GA ~func(R) A, GAS ~func(R) AAS, AAS ~[]A, GAAS ~[]GA, R, A any](ma GAAS) GAS {
|
||||||
return MonadTraverseArray[GA, GAS](ma, F.Identity[GA])
|
return MonadTraverseArray[GA, GAS](ma, F.Identity[GA])
|
||||||
|
|||||||
@@ -1,115 +1,114 @@
|
|||||||
// Code generated by go generate; DO NOT EDIT.
|
// Code generated by go generate; DO NOT EDIT.
|
||||||
// This file was generated by robots at
|
// This file was generated by robots at
|
||||||
// 2023-08-11 11:38:23.1402159 +0200 CEST m=+0.021332501
|
// 2023-08-17 22:59:18.5047315 +0200 CEST m=+0.221271401
|
||||||
package generic
|
package generic
|
||||||
|
|
||||||
|
|
||||||
// From0 converts a function with 1 parameters returning a [R] into a function with 0 parameters returning a [GRA]
|
// 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].
|
// 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 {
|
func From0[GRA ~func(C) R, F ~func(C) R, C, R any](f F) func() GRA {
|
||||||
return func() GRA {
|
return func() GRA {
|
||||||
return MakeReader[GRA](func(r C) R {
|
return MakeReader[GRA](func(r C) R {
|
||||||
return f(r)
|
return f(r)
|
||||||
})
|
})
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
// From1 converts a function with 2 parameters returning a [R] into a function with 1 parameters returning a [GRA]
|
// 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].
|
// 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 {
|
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 func(t0 T0) GRA {
|
||||||
return MakeReader[GRA](func(r C) R {
|
return MakeReader[GRA](func(r C) R {
|
||||||
return f(r, t0)
|
return f(r, t0)
|
||||||
})
|
})
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
// From2 converts a function with 3 parameters returning a [R] into a function with 2 parameters returning a [GRA]
|
// 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].
|
// 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 {
|
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 func(t0 T0, t1 T1) GRA {
|
||||||
return MakeReader[GRA](func(r C) R {
|
return MakeReader[GRA](func(r C) R {
|
||||||
return f(r, t0, t1)
|
return f(r, t0, t1)
|
||||||
})
|
})
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
// From3 converts a function with 4 parameters returning a [R] into a function with 3 parameters returning a [GRA]
|
// 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].
|
// 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 {
|
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 func(t0 T0, t1 T1, t2 T2) GRA {
|
||||||
return MakeReader[GRA](func(r C) R {
|
return MakeReader[GRA](func(r C) R {
|
||||||
return f(r, t0, t1, t2)
|
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]
|
// 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].
|
// 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 {
|
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 func(t0 T0, t1 T1, t2 T2, t3 T3) GRA {
|
||||||
return MakeReader[GRA](func(r C) R {
|
return MakeReader[GRA](func(r C) R {
|
||||||
return f(r, t0, t1, t2, t3)
|
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]
|
// 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].
|
// 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 {
|
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 func(t0 T0, t1 T1, t2 T2, t3 T3, t4 T4) GRA {
|
||||||
return MakeReader[GRA](func(r C) R {
|
return MakeReader[GRA](func(r C) R {
|
||||||
return f(r, t0, t1, t2, t3, t4)
|
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]
|
// 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].
|
// 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 {
|
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 func(t0 T0, t1 T1, t2 T2, t3 T3, t4 T4, t5 T5) GRA {
|
||||||
return MakeReader[GRA](func(r C) R {
|
return MakeReader[GRA](func(r C) R {
|
||||||
return f(r, t0, t1, t2, t3, t4, t5)
|
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]
|
// 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].
|
// 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 {
|
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 func(t0 T0, t1 T1, t2 T2, t3 T3, t4 T4, t5 T5, t6 T6) GRA {
|
||||||
return MakeReader[GRA](func(r C) R {
|
return MakeReader[GRA](func(r C) R {
|
||||||
return f(r, t0, t1, t2, t3, t4, t5, t6)
|
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]
|
// 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].
|
// 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 {
|
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 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 MakeReader[GRA](func(r C) R {
|
||||||
return f(r, t0, t1, t2, t3, t4, t5, t6, t7)
|
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]
|
// 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].
|
// 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 {
|
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 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 MakeReader[GRA](func(r C) R {
|
||||||
return f(r, t0, t1, t2, t3, t4, t5, t6, t7, t8)
|
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]
|
// 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].
|
// 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 {
|
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 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 MakeReader[GRA](func(r C) R {
|
||||||
return f(r, t0, t1, t2, t3, t4, t5, t6, t7, t8, t9)
|
return f(r, t0, t1, t2, t3, t4, t5, t6, t7, t8, t9)
|
||||||
})
|
})
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -24,6 +24,11 @@ func TraverseArray[E, L, A, B any](f func(A) ReaderEither[E, L, B]) func([]A) Re
|
|||||||
return G.TraverseArray[ReaderEither[E, L, B], ReaderEither[E, L, []B], []A](f)
|
return G.TraverseArray[ReaderEither[E, L, B], ReaderEither[E, L, []B], []A](f)
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// TraverseArrayWithIndex transforms an array
|
||||||
|
func TraverseArrayWithIndex[E, L, A, B any](f func(int, A) ReaderEither[E, L, B]) func([]A) ReaderEither[E, L, []B] {
|
||||||
|
return G.TraverseArrayWithIndex[ReaderEither[E, L, B], ReaderEither[E, L, []B], []A](f)
|
||||||
|
}
|
||||||
|
|
||||||
// SequenceArray converts a homogeneous sequence of either into an either of sequence
|
// SequenceArray converts a homogeneous sequence of either into an either of sequence
|
||||||
func SequenceArray[E, L, A any](ma []ReaderEither[E, L, A]) ReaderEither[E, L, []A] {
|
func SequenceArray[E, L, A any](ma []ReaderEither[E, L, A]) ReaderEither[E, L, []A] {
|
||||||
return G.SequenceArray[ReaderEither[E, L, A], ReaderEither[E, L, []A]](ma)
|
return G.SequenceArray[ReaderEither[E, L, A], ReaderEither[E, L, []A]](ma)
|
||||||
|
|||||||
@@ -43,6 +43,17 @@ func TraverseArray[GB ~func(E) ET.Either[L, B], GBS ~func(E) ET.Either[L, BBS],
|
|||||||
)
|
)
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// TraverseArrayWithIndex transforms an array
|
||||||
|
func TraverseArrayWithIndex[GB ~func(E) ET.Either[L, B], GBS ~func(E) ET.Either[L, BBS], AAS ~[]A, BBS ~[]B, L, E, A, B any](f func(int, A) GB) func(AAS) GBS {
|
||||||
|
return RA.TraverseWithIndex[AAS](
|
||||||
|
Of[GBS, L, E, BBS],
|
||||||
|
Map[GBS, func(E) ET.Either[L, func(B) BBS], L, E, BBS, func(B) BBS],
|
||||||
|
Ap[GB, GBS, func(E) ET.Either[L, func(B) BBS], L, E, B, BBS],
|
||||||
|
|
||||||
|
f,
|
||||||
|
)
|
||||||
|
}
|
||||||
|
|
||||||
// SequenceArray converts a homogeneous sequence of either into an either of sequence
|
// SequenceArray converts a homogeneous sequence of either into an either of sequence
|
||||||
func SequenceArray[GA ~func(E) ET.Either[L, A], GAS ~func(E) ET.Either[L, AAS], AAS ~[]A, GAAS ~[]GA, L, E, A any](ma GAAS) GAS {
|
func SequenceArray[GA ~func(E) ET.Either[L, A], GAS ~func(E) ET.Either[L, AAS], AAS ~[]A, GAAS ~[]GA, L, E, A any](ma GAAS) GAS {
|
||||||
return MonadTraverseArray[GA, GAS](ma, F.Identity[GA])
|
return MonadTraverseArray[GA, GAS](ma, F.Identity[GA])
|
||||||
|
|||||||
@@ -32,7 +32,7 @@ func FromEither[E, L, A any](e ET.Either[L, A]) ReaderEither[E, L, A] {
|
|||||||
return G.FromEither[ReaderEither[E, L, A]](e)
|
return G.FromEither[ReaderEither[E, L, A]](e)
|
||||||
}
|
}
|
||||||
|
|
||||||
func RightReader[E, L, A any](r R.Reader[E, A]) ReaderEither[E, L, A] {
|
func RightReader[L, E, A any](r R.Reader[E, A]) ReaderEither[E, L, A] {
|
||||||
return G.RightReader[R.Reader[E, A], ReaderEither[E, L, A]](r)
|
return G.RightReader[R.Reader[E, A], ReaderEither[E, L, A]](r)
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -76,7 +76,7 @@ func MonadAp[E, L, A, B any](fab ReaderEither[E, L, func(A) B], fa ReaderEither[
|
|||||||
return G.MonadAp[ReaderEither[E, L, A], ReaderEither[E, L, B], ReaderEither[E, L, func(A) B]](fab, fa)
|
return G.MonadAp[ReaderEither[E, L, A], ReaderEither[E, L, B], ReaderEither[E, L, func(A) B]](fab, fa)
|
||||||
}
|
}
|
||||||
|
|
||||||
func Ap[E, L, A, B any](fa ReaderEither[E, L, A]) func(ReaderEither[E, L, func(A) B]) ReaderEither[E, L, B] {
|
func Ap[B, E, L, A any](fa ReaderEither[E, L, A]) func(ReaderEither[E, L, func(A) B]) ReaderEither[E, L, B] {
|
||||||
return G.Ap[ReaderEither[E, L, A], ReaderEither[E, L, B], ReaderEither[E, L, func(A) B]](fa)
|
return G.Ap[ReaderEither[E, L, A], ReaderEither[E, L, B], ReaderEither[E, L, func(A) B]](fa)
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -96,7 +96,7 @@ func OrElse[E, L1, A, L2 any](onLeft func(L1) ReaderEither[E, L2, A]) func(Reade
|
|||||||
return G.OrElse[ReaderEither[E, L1, A]](onLeft)
|
return G.OrElse[ReaderEither[E, L1, A]](onLeft)
|
||||||
}
|
}
|
||||||
|
|
||||||
func OrLeft[L1, E, L2, A any](onLeft func(L1) R.Reader[E, L2]) func(ReaderEither[E, L1, A]) ReaderEither[E, L2, A] {
|
func OrLeft[A, L1, E, L2 any](onLeft func(L1) R.Reader[E, L2]) func(ReaderEither[E, L1, A]) ReaderEither[E, L2, A] {
|
||||||
return G.OrLeft[ReaderEither[E, L1, A], ReaderEither[E, L2, A]](onLeft)
|
return G.OrLeft[ReaderEither[E, L1, A], ReaderEither[E, L2, A]](onLeft)
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -104,19 +104,19 @@ func Ask[E, L any]() ReaderEither[E, L, E] {
|
|||||||
return G.Ask[ReaderEither[E, L, E]]()
|
return G.Ask[ReaderEither[E, L, E]]()
|
||||||
}
|
}
|
||||||
|
|
||||||
func Asks[E, L, A any](r R.Reader[E, A]) ReaderEither[E, L, A] {
|
func Asks[L, E, A any](r R.Reader[E, A]) ReaderEither[E, L, A] {
|
||||||
return G.Asks[R.Reader[E, A], ReaderEither[E, L, A]](r)
|
return G.Asks[R.Reader[E, A], ReaderEither[E, L, A]](r)
|
||||||
}
|
}
|
||||||
|
|
||||||
func MonadChainEitherK[E, L, A, B any](ma ReaderEither[E, L, A], f func(A) ET.Either[L, B]) ReaderEither[E, L, B] {
|
func MonadChainEitherK[A, B, L, E any](ma ReaderEither[E, L, A], f func(A) ET.Either[L, B]) ReaderEither[E, L, B] {
|
||||||
return G.MonadChainEitherK[ReaderEither[E, L, A], ReaderEither[E, L, B]](ma, f)
|
return G.MonadChainEitherK[ReaderEither[E, L, A], ReaderEither[E, L, B]](ma, f)
|
||||||
}
|
}
|
||||||
|
|
||||||
func ChainEitherK[E, L, A, B any](f func(A) ET.Either[L, B]) func(ma ReaderEither[E, L, A]) ReaderEither[E, L, B] {
|
func ChainEitherK[A, B, L, E any](f func(A) ET.Either[L, B]) func(ma ReaderEither[E, L, A]) ReaderEither[E, L, B] {
|
||||||
return G.ChainEitherK[ReaderEither[E, L, A], ReaderEither[E, L, B]](f)
|
return G.ChainEitherK[ReaderEither[E, L, A], ReaderEither[E, L, B]](f)
|
||||||
}
|
}
|
||||||
|
|
||||||
func ChainOptionK[E, L, A, B any](onNone func() L) func(func(A) O.Option[B]) func(ReaderEither[E, L, A]) ReaderEither[E, L, B] {
|
func ChainOptionK[E, A, B, L any](onNone func() L) func(func(A) O.Option[B]) func(ReaderEither[E, L, A]) ReaderEither[E, L, B] {
|
||||||
return G.ChainOptionK[ReaderEither[E, L, A], ReaderEither[E, L, B]](onNone)
|
return G.ChainOptionK[ReaderEither[E, L, A], ReaderEither[E, L, B]](onNone)
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -135,11 +135,11 @@ func BiMap[E, E1, E2, A, B any](f func(E1) E2, g func(A) B) func(ReaderEither[E,
|
|||||||
|
|
||||||
// Local changes the value of the local context during the execution of the action `ma` (similar to `Contravariant`'s
|
// Local changes the value of the local context during the execution of the action `ma` (similar to `Contravariant`'s
|
||||||
// `contramap`).
|
// `contramap`).
|
||||||
func Local[R2, R1, E, A any](f func(R2) R1) func(ReaderEither[R1, E, A]) ReaderEither[R2, E, A] {
|
func Local[E, A, R2, R1 any](f func(R2) R1) func(ReaderEither[R1, E, A]) ReaderEither[R2, E, A] {
|
||||||
return G.Local[ReaderEither[R1, E, A], ReaderEither[R2, E, A]](f)
|
return G.Local[ReaderEither[R1, E, A], ReaderEither[R2, E, A]](f)
|
||||||
}
|
}
|
||||||
|
|
||||||
// Read applies a context to a reader to obtain its value
|
// Read applies a context to a reader to obtain its value
|
||||||
func Read[E, E1, A any](e E) func(ReaderEither[E, E1, A]) ET.Either[E1, A] {
|
func Read[E1, A, E any](e E) func(ReaderEither[E, E1, A]) ET.Either[E1, A] {
|
||||||
return G.Read[ReaderEither[E, E1, A]](e)
|
return G.Read[ReaderEither[E, E1, A]](e)
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -42,7 +42,7 @@ func TestMap(t *testing.T) {
|
|||||||
func TestAp(t *testing.T) {
|
func TestAp(t *testing.T) {
|
||||||
g := F.Pipe1(
|
g := F.Pipe1(
|
||||||
Of[MyContext, error](utils.Double),
|
Of[MyContext, error](utils.Double),
|
||||||
Ap[MyContext, error, int, int](Of[MyContext, error](1)),
|
Ap[int](Of[MyContext, error](1)),
|
||||||
)
|
)
|
||||||
assert.Equal(t, ET.Of[error](2), g(defaultContext))
|
assert.Equal(t, ET.Of[error](2), g(defaultContext))
|
||||||
|
|
||||||
|
|||||||
Some files were not shown because too many files have changed in this diff Show More
Reference in New Issue
Block a user