mirror of
https://github.com/IBM/fp-go.git
synced 2025-08-10 22:31:32 +02:00
fix: add assertions
Signed-off-by: Dr. Carsten Leue <carsten.leue@de.ibm.com>
This commit is contained in:
109
assert/assert_test.go
Normal file
109
assert/assert_test.go
Normal file
@@ -0,0 +1,109 @@
|
||||
// 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 assert
|
||||
|
||||
import (
|
||||
"fmt"
|
||||
"testing"
|
||||
|
||||
E "github.com/IBM/fp-go/either"
|
||||
EQ "github.com/IBM/fp-go/eq"
|
||||
"github.com/stretchr/testify/assert"
|
||||
)
|
||||
|
||||
var (
|
||||
errTest = fmt.Errorf("test failure")
|
||||
|
||||
// Eq is the equal predicate checking if objects are equal
|
||||
Eq = EQ.FromEquals(assert.ObjectsAreEqual)
|
||||
)
|
||||
|
||||
func wrap1[T any](wrapped func(t assert.TestingT, expected, actual any, msgAndArgs ...any) bool, t *testing.T, expected T) func(actual T) E.Either[error, T] {
|
||||
return func(actual T) E.Either[error, T] {
|
||||
ok := wrapped(t, expected, actual)
|
||||
if ok {
|
||||
return E.Of[error](actual)
|
||||
}
|
||||
return E.Left[T](errTest)
|
||||
}
|
||||
}
|
||||
|
||||
// NotEqual tests if the expected and the actual values are not equal
|
||||
func NotEqual[T any](t *testing.T, expected T) func(actual T) E.Either[error, T] {
|
||||
return wrap1(assert.NotEqual, t, expected)
|
||||
}
|
||||
|
||||
// Equal tests if the expected and the actual values are equal
|
||||
func Equal[T any](t *testing.T, expected T) func(actual T) E.Either[error, T] {
|
||||
return wrap1(assert.Equal, t, expected)
|
||||
}
|
||||
|
||||
// Length tests if an array has the expected length
|
||||
func Length[T any](t *testing.T, expected int) func(actual []T) E.Either[error, []T] {
|
||||
return func(actual []T) E.Either[error, []T] {
|
||||
ok := assert.Len(t, actual, expected)
|
||||
if ok {
|
||||
return E.Of[error](actual)
|
||||
}
|
||||
return E.Left[[]T](errTest)
|
||||
}
|
||||
}
|
||||
|
||||
// NoError validates that there is no error
|
||||
func NoError[T any](t *testing.T) func(actual E.Either[error, T]) E.Either[error, T] {
|
||||
return func(actual E.Either[error, T]) E.Either[error, T] {
|
||||
return E.MonadFold(actual, func(e error) E.Either[error, T] {
|
||||
assert.NoError(t, e)
|
||||
return E.Left[T](e)
|
||||
}, func(value T) E.Either[error, T] {
|
||||
assert.NoError(t, nil)
|
||||
return E.Right[error](value)
|
||||
})
|
||||
}
|
||||
}
|
||||
|
||||
// ArrayContains tests if a value is contained in an array
|
||||
func ArrayContains[T any](t *testing.T, expected T) func(actual []T) E.Either[error, []T] {
|
||||
return func(actual []T) E.Either[error, []T] {
|
||||
ok := assert.Contains(t, actual, expected)
|
||||
if ok {
|
||||
return E.Of[error](actual)
|
||||
}
|
||||
return E.Left[[]T](errTest)
|
||||
}
|
||||
}
|
||||
|
||||
// ContainsKey tests if a key is contained in a map
|
||||
func ContainsKey[T any, K comparable](t *testing.T, expected K) func(actual map[K]T) E.Either[error, map[K]T] {
|
||||
return func(actual map[K]T) E.Either[error, map[K]T] {
|
||||
ok := assert.Contains(t, actual, expected)
|
||||
if ok {
|
||||
return E.Of[error](actual)
|
||||
}
|
||||
return E.Left[map[K]T](errTest)
|
||||
}
|
||||
}
|
||||
|
||||
// NotContainsKey tests if a key is not contained in a map
|
||||
func NotContainsKey[T any, K comparable](t *testing.T, expected K) func(actual map[K]T) E.Either[error, map[K]T] {
|
||||
return func(actual map[K]T) E.Either[error, map[K]T] {
|
||||
ok := assert.NotContains(t, actual, expected)
|
||||
if ok {
|
||||
return E.Of[error](actual)
|
||||
}
|
||||
return E.Left[map[K]T](errTest)
|
||||
}
|
||||
}
|
@@ -4,7 +4,6 @@ package readerioeither
|
||||
// This file was generated by robots at
|
||||
// 2023-10-23 08:30:39.012572 +0200 CEST m=+0.008846101
|
||||
|
||||
|
||||
import (
|
||||
"context"
|
||||
|
||||
|
@@ -4,13 +4,12 @@ package generic
|
||||
// This file was generated by robots at
|
||||
// 2023-10-23 08:30:39.012572 +0200 CEST m=+0.008846101
|
||||
|
||||
|
||||
import (
|
||||
"context"
|
||||
|
||||
E "github.com/IBM/fp-go/either"
|
||||
RE "github.com/IBM/fp-go/readerioeither/generic"
|
||||
A "github.com/IBM/fp-go/internal/apply"
|
||||
RE "github.com/IBM/fp-go/readerioeither/generic"
|
||||
T "github.com/IBM/fp-go/tuple"
|
||||
)
|
||||
|
||||
|
@@ -4,7 +4,6 @@
|
||||
|
||||
package either
|
||||
|
||||
|
||||
import (
|
||||
A "github.com/IBM/fp-go/internal/apply"
|
||||
T "github.com/IBM/fp-go/tuple"
|
||||
@@ -59,7 +58,7 @@ func SequenceTuple1[E, T1 any](t T.Tuple1[Either[E, T1]]) Either[E, T.Tuple1[T1]
|
||||
}
|
||||
|
||||
// TraverseTuple1 converts a [Tuple1] of [A] via transformation functions transforming [A] to [Either[E, A]] into a [Either[E, Tuple1]].
|
||||
func TraverseTuple1[F1 ~func(A1) Either[E, T1], E, A1, T1 any](f1 F1) func (T.Tuple1[A1]) Either[E, T.Tuple1[T1]] {
|
||||
func TraverseTuple1[F1 ~func(A1) Either[E, T1], E, A1, T1 any](f1 F1) func(T.Tuple1[A1]) Either[E, T.Tuple1[T1]] {
|
||||
return func(t T.Tuple1[A1]) Either[E, T.Tuple1[T1]] {
|
||||
return A.TraverseTuple1(
|
||||
Map[E, T1, T.Tuple1[T1]],
|
||||
@@ -105,7 +104,7 @@ func SequenceTuple2[E, T1, T2 any](t T.Tuple2[Either[E, T1], Either[E, T2]]) Eit
|
||||
}
|
||||
|
||||
// TraverseTuple2 converts a [Tuple2] of [A] via transformation functions transforming [A] to [Either[E, A]] into a [Either[E, Tuple2]].
|
||||
func TraverseTuple2[F1 ~func(A1) Either[E, T1], F2 ~func(A2) Either[E, T2], E, A1, T1, A2, T2 any](f1 F1, f2 F2) func (T.Tuple2[A1, A2]) Either[E, T.Tuple2[T1, T2]] {
|
||||
func TraverseTuple2[F1 ~func(A1) Either[E, T1], F2 ~func(A2) Either[E, T2], E, A1, T1, A2, T2 any](f1 F1, f2 F2) func(T.Tuple2[A1, A2]) Either[E, T.Tuple2[T1, T2]] {
|
||||
return func(t T.Tuple2[A1, A2]) Either[E, T.Tuple2[T1, T2]] {
|
||||
return A.TraverseTuple2(
|
||||
Map[E, T1, func(T2) T.Tuple2[T1, T2]],
|
||||
@@ -156,7 +155,7 @@ func SequenceTuple3[E, T1, T2, T3 any](t T.Tuple3[Either[E, T1], Either[E, T2],
|
||||
}
|
||||
|
||||
// TraverseTuple3 converts a [Tuple3] of [A] via transformation functions transforming [A] to [Either[E, A]] into a [Either[E, Tuple3]].
|
||||
func TraverseTuple3[F1 ~func(A1) Either[E, T1], F2 ~func(A2) Either[E, T2], F3 ~func(A3) Either[E, T3], E, A1, T1, A2, T2, A3, T3 any](f1 F1, f2 F2, f3 F3) func (T.Tuple3[A1, A2, A3]) Either[E, T.Tuple3[T1, T2, T3]] {
|
||||
func TraverseTuple3[F1 ~func(A1) Either[E, T1], F2 ~func(A2) Either[E, T2], F3 ~func(A3) Either[E, T3], E, A1, T1, A2, T2, A3, T3 any](f1 F1, f2 F2, f3 F3) func(T.Tuple3[A1, A2, A3]) Either[E, T.Tuple3[T1, T2, T3]] {
|
||||
return func(t T.Tuple3[A1, A2, A3]) Either[E, T.Tuple3[T1, T2, T3]] {
|
||||
return A.TraverseTuple3(
|
||||
Map[E, T1, func(T2) func(T3) T.Tuple3[T1, T2, T3]],
|
||||
@@ -212,7 +211,7 @@ func SequenceTuple4[E, T1, T2, T3, T4 any](t T.Tuple4[Either[E, T1], Either[E, T
|
||||
}
|
||||
|
||||
// TraverseTuple4 converts a [Tuple4] of [A] via transformation functions transforming [A] to [Either[E, A]] into a [Either[E, Tuple4]].
|
||||
func TraverseTuple4[F1 ~func(A1) Either[E, T1], F2 ~func(A2) Either[E, T2], F3 ~func(A3) Either[E, T3], F4 ~func(A4) Either[E, T4], E, A1, T1, A2, T2, A3, T3, A4, T4 any](f1 F1, f2 F2, f3 F3, f4 F4) func (T.Tuple4[A1, A2, A3, A4]) Either[E, T.Tuple4[T1, T2, T3, T4]] {
|
||||
func TraverseTuple4[F1 ~func(A1) Either[E, T1], F2 ~func(A2) Either[E, T2], F3 ~func(A3) Either[E, T3], F4 ~func(A4) Either[E, T4], E, A1, T1, A2, T2, A3, T3, A4, T4 any](f1 F1, f2 F2, f3 F3, f4 F4) func(T.Tuple4[A1, A2, A3, A4]) Either[E, T.Tuple4[T1, T2, T3, T4]] {
|
||||
return func(t T.Tuple4[A1, A2, A3, A4]) Either[E, T.Tuple4[T1, T2, T3, T4]] {
|
||||
return A.TraverseTuple4(
|
||||
Map[E, T1, func(T2) func(T3) func(T4) T.Tuple4[T1, T2, T3, T4]],
|
||||
@@ -273,7 +272,7 @@ func SequenceTuple5[E, T1, T2, T3, T4, T5 any](t T.Tuple5[Either[E, T1], Either[
|
||||
}
|
||||
|
||||
// TraverseTuple5 converts a [Tuple5] of [A] via transformation functions transforming [A] to [Either[E, A]] into a [Either[E, Tuple5]].
|
||||
func TraverseTuple5[F1 ~func(A1) Either[E, T1], F2 ~func(A2) Either[E, T2], F3 ~func(A3) Either[E, T3], F4 ~func(A4) Either[E, T4], F5 ~func(A5) Either[E, T5], E, 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]) Either[E, T.Tuple5[T1, T2, T3, T4, T5]] {
|
||||
func TraverseTuple5[F1 ~func(A1) Either[E, T1], F2 ~func(A2) Either[E, T2], F3 ~func(A3) Either[E, T3], F4 ~func(A4) Either[E, T4], F5 ~func(A5) Either[E, T5], E, 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]) Either[E, T.Tuple5[T1, T2, T3, T4, T5]] {
|
||||
return func(t T.Tuple5[A1, A2, A3, A4, A5]) Either[E, T.Tuple5[T1, T2, T3, T4, T5]] {
|
||||
return A.TraverseTuple5(
|
||||
Map[E, T1, func(T2) func(T3) func(T4) func(T5) T.Tuple5[T1, T2, T3, T4, T5]],
|
||||
@@ -339,7 +338,7 @@ func SequenceTuple6[E, T1, T2, T3, T4, T5, T6 any](t T.Tuple6[Either[E, T1], Eit
|
||||
}
|
||||
|
||||
// TraverseTuple6 converts a [Tuple6] of [A] via transformation functions transforming [A] to [Either[E, A]] into a [Either[E, Tuple6]].
|
||||
func TraverseTuple6[F1 ~func(A1) Either[E, T1], F2 ~func(A2) Either[E, T2], F3 ~func(A3) Either[E, T3], F4 ~func(A4) Either[E, T4], F5 ~func(A5) Either[E, T5], F6 ~func(A6) Either[E, T6], E, 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]) Either[E, T.Tuple6[T1, T2, T3, T4, T5, T6]] {
|
||||
func TraverseTuple6[F1 ~func(A1) Either[E, T1], F2 ~func(A2) Either[E, T2], F3 ~func(A3) Either[E, T3], F4 ~func(A4) Either[E, T4], F5 ~func(A5) Either[E, T5], F6 ~func(A6) Either[E, T6], E, 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]) Either[E, T.Tuple6[T1, T2, T3, T4, T5, T6]] {
|
||||
return func(t T.Tuple6[A1, A2, A3, A4, A5, A6]) Either[E, T.Tuple6[T1, T2, T3, T4, T5, T6]] {
|
||||
return A.TraverseTuple6(
|
||||
Map[E, T1, func(T2) func(T3) func(T4) func(T5) func(T6) T.Tuple6[T1, T2, T3, T4, T5, T6]],
|
||||
@@ -410,7 +409,7 @@ func SequenceTuple7[E, T1, T2, T3, T4, T5, T6, T7 any](t T.Tuple7[Either[E, T1],
|
||||
}
|
||||
|
||||
// TraverseTuple7 converts a [Tuple7] of [A] via transformation functions transforming [A] to [Either[E, A]] into a [Either[E, Tuple7]].
|
||||
func TraverseTuple7[F1 ~func(A1) Either[E, T1], F2 ~func(A2) Either[E, T2], F3 ~func(A3) Either[E, T3], F4 ~func(A4) Either[E, T4], F5 ~func(A5) Either[E, T5], F6 ~func(A6) Either[E, T6], F7 ~func(A7) Either[E, T7], E, 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]) Either[E, T.Tuple7[T1, T2, T3, T4, T5, T6, T7]] {
|
||||
func TraverseTuple7[F1 ~func(A1) Either[E, T1], F2 ~func(A2) Either[E, T2], F3 ~func(A3) Either[E, T3], F4 ~func(A4) Either[E, T4], F5 ~func(A5) Either[E, T5], F6 ~func(A6) Either[E, T6], F7 ~func(A7) Either[E, T7], E, 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]) Either[E, T.Tuple7[T1, T2, T3, T4, T5, T6, T7]] {
|
||||
return func(t T.Tuple7[A1, A2, A3, A4, A5, A6, A7]) Either[E, T.Tuple7[T1, T2, T3, T4, T5, T6, T7]] {
|
||||
return A.TraverseTuple7(
|
||||
Map[E, T1, func(T2) func(T3) func(T4) func(T5) func(T6) func(T7) T.Tuple7[T1, T2, T3, T4, T5, T6, T7]],
|
||||
@@ -486,7 +485,7 @@ func SequenceTuple8[E, T1, T2, T3, T4, T5, T6, T7, T8 any](t T.Tuple8[Either[E,
|
||||
}
|
||||
|
||||
// TraverseTuple8 converts a [Tuple8] of [A] via transformation functions transforming [A] to [Either[E, A]] into a [Either[E, Tuple8]].
|
||||
func TraverseTuple8[F1 ~func(A1) Either[E, T1], F2 ~func(A2) Either[E, T2], F3 ~func(A3) Either[E, T3], F4 ~func(A4) Either[E, T4], F5 ~func(A5) Either[E, T5], F6 ~func(A6) Either[E, T6], F7 ~func(A7) Either[E, T7], F8 ~func(A8) Either[E, T8], E, 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]) Either[E, T.Tuple8[T1, T2, T3, T4, T5, T6, T7, T8]] {
|
||||
func TraverseTuple8[F1 ~func(A1) Either[E, T1], F2 ~func(A2) Either[E, T2], F3 ~func(A3) Either[E, T3], F4 ~func(A4) Either[E, T4], F5 ~func(A5) Either[E, T5], F6 ~func(A6) Either[E, T6], F7 ~func(A7) Either[E, T7], F8 ~func(A8) Either[E, T8], E, 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]) Either[E, T.Tuple8[T1, T2, T3, T4, T5, T6, T7, T8]] {
|
||||
return func(t T.Tuple8[A1, A2, A3, A4, A5, A6, A7, A8]) Either[E, T.Tuple8[T1, T2, T3, T4, T5, T6, T7, T8]] {
|
||||
return A.TraverseTuple8(
|
||||
Map[E, T1, func(T2) func(T3) func(T4) func(T5) func(T6) func(T7) func(T8) T.Tuple8[T1, T2, T3, T4, T5, T6, T7, T8]],
|
||||
@@ -567,7 +566,7 @@ func SequenceTuple9[E, T1, T2, T3, T4, T5, T6, T7, T8, T9 any](t T.Tuple9[Either
|
||||
}
|
||||
|
||||
// TraverseTuple9 converts a [Tuple9] of [A] via transformation functions transforming [A] to [Either[E, A]] into a [Either[E, Tuple9]].
|
||||
func TraverseTuple9[F1 ~func(A1) Either[E, T1], F2 ~func(A2) Either[E, T2], F3 ~func(A3) Either[E, T3], F4 ~func(A4) Either[E, T4], F5 ~func(A5) Either[E, T5], F6 ~func(A6) Either[E, T6], F7 ~func(A7) Either[E, T7], F8 ~func(A8) Either[E, T8], F9 ~func(A9) Either[E, T9], E, 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]) Either[E, T.Tuple9[T1, T2, T3, T4, T5, T6, T7, T8, T9]] {
|
||||
func TraverseTuple9[F1 ~func(A1) Either[E, T1], F2 ~func(A2) Either[E, T2], F3 ~func(A3) Either[E, T3], F4 ~func(A4) Either[E, T4], F5 ~func(A5) Either[E, T5], F6 ~func(A6) Either[E, T6], F7 ~func(A7) Either[E, T7], F8 ~func(A8) Either[E, T8], F9 ~func(A9) Either[E, T9], E, 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]) Either[E, 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]) Either[E, T.Tuple9[T1, T2, T3, T4, T5, T6, T7, T8, T9]] {
|
||||
return A.TraverseTuple9(
|
||||
Map[E, T1, func(T2) func(T3) func(T4) func(T5) func(T6) func(T7) func(T8) func(T9) T.Tuple9[T1, T2, T3, T4, T5, T6, T7, T8, T9]],
|
||||
@@ -653,7 +652,7 @@ func SequenceTuple10[E, T1, T2, T3, T4, T5, T6, T7, T8, T9, T10 any](t T.Tuple10
|
||||
}
|
||||
|
||||
// TraverseTuple10 converts a [Tuple10] of [A] via transformation functions transforming [A] to [Either[E, A]] into a [Either[E, Tuple10]].
|
||||
func TraverseTuple10[F1 ~func(A1) Either[E, T1], F2 ~func(A2) Either[E, T2], F3 ~func(A3) Either[E, T3], F4 ~func(A4) Either[E, T4], F5 ~func(A5) Either[E, T5], F6 ~func(A6) Either[E, T6], F7 ~func(A7) Either[E, T7], F8 ~func(A8) Either[E, T8], F9 ~func(A9) Either[E, T9], F10 ~func(A10) Either[E, T10], E, 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]) Either[E, T.Tuple10[T1, T2, T3, T4, T5, T6, T7, T8, T9, T10]] {
|
||||
func TraverseTuple10[F1 ~func(A1) Either[E, T1], F2 ~func(A2) Either[E, T2], F3 ~func(A3) Either[E, T3], F4 ~func(A4) Either[E, T4], F5 ~func(A5) Either[E, T5], F6 ~func(A6) Either[E, T6], F7 ~func(A7) Either[E, T7], F8 ~func(A8) Either[E, T8], F9 ~func(A9) Either[E, T9], F10 ~func(A10) Either[E, T10], E, 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]) Either[E, 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]) Either[E, T.Tuple10[T1, T2, T3, T4, T5, T6, T7, T8, T9, T10]] {
|
||||
return A.TraverseTuple10(
|
||||
Map[E, T1, func(T2) func(T3) func(T4) func(T5) func(T6) func(T7) func(T8) func(T9) func(T10) T.Tuple10[T1, T2, T3, T4, T5, T6, T7, T8, T9, T10]],
|
||||
|
@@ -3,6 +3,7 @@
|
||||
// 2023-10-23 08:30:44.6474482 +0200 CEST m=+0.150851901
|
||||
|
||||
package function
|
||||
|
||||
// Combinations for a total of 1 arguments
|
||||
|
||||
// Bind1of1 takes a function with 1 parameters and returns a new function with 1 parameters that will bind these parameters to the positions [1] of the original function.
|
||||
@@ -21,6 +22,7 @@ func Ignore1of1[T1 any, F ~func() R, R any](f F) func(T1) R {
|
||||
return f()
|
||||
}
|
||||
}
|
||||
|
||||
// Combinations for a total of 2 arguments
|
||||
|
||||
// Bind1of2 takes a function with 2 parameters and returns a new function with 1 parameters that will bind these parameters to the positions [1] of the original function.
|
||||
@@ -73,6 +75,7 @@ func Ignore12of2[T1, T2 any, F ~func() R, R any](f F) func(T1, T2) R {
|
||||
return f()
|
||||
}
|
||||
}
|
||||
|
||||
// Combinations for a total of 3 arguments
|
||||
|
||||
// Bind1of3 takes a function with 3 parameters and returns a new function with 1 parameters that will bind these parameters to the positions [1] of the original function.
|
||||
@@ -193,6 +196,7 @@ func Ignore123of3[T1, T2, T3 any, F ~func() R, R any](f F) func(T1, T2, T3) R {
|
||||
return f()
|
||||
}
|
||||
}
|
||||
|
||||
// Combinations for a total of 4 arguments
|
||||
|
||||
// Bind1of4 takes a function with 4 parameters and returns a new function with 1 parameters that will bind these parameters to the positions [1] of the original function.
|
||||
|
@@ -4,7 +4,6 @@
|
||||
|
||||
package identity
|
||||
|
||||
|
||||
import (
|
||||
A "github.com/IBM/fp-go/internal/apply"
|
||||
T "github.com/IBM/fp-go/tuple"
|
||||
@@ -27,7 +26,7 @@ func SequenceTuple1[T1 any](t T.Tuple1[T1]) T.Tuple1[T1] {
|
||||
}
|
||||
|
||||
// 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 A.TraverseTuple1(
|
||||
Map[T1, T.Tuple1[T1]],
|
||||
@@ -57,7 +56,7 @@ func SequenceTuple2[T1, T2 any](t T.Tuple2[T1, T2]) T.Tuple2[T1, T2] {
|
||||
}
|
||||
|
||||
// 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 A.TraverseTuple2(
|
||||
Map[T1, func(T2) T.Tuple2[T1, T2]],
|
||||
@@ -92,7 +91,7 @@ func SequenceTuple3[T1, T2, T3 any](t T.Tuple3[T1, T2, T3]) T.Tuple3[T1, T2, T3]
|
||||
}
|
||||
|
||||
// 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 A.TraverseTuple3(
|
||||
Map[T1, func(T2) func(T3) T.Tuple3[T1, T2, T3]],
|
||||
@@ -132,7 +131,7 @@ func SequenceTuple4[T1, T2, T3, T4 any](t T.Tuple4[T1, T2, T3, T4]) T.Tuple4[T1,
|
||||
}
|
||||
|
||||
// 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 A.TraverseTuple4(
|
||||
Map[T1, func(T2) func(T3) func(T4) T.Tuple4[T1, T2, T3, T4]],
|
||||
@@ -177,7 +176,7 @@ func SequenceTuple5[T1, T2, T3, T4, T5 any](t T.Tuple5[T1, T2, T3, T4, T5]) T.Tu
|
||||
}
|
||||
|
||||
// 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 A.TraverseTuple5(
|
||||
Map[T1, func(T2) func(T3) func(T4) func(T5) T.Tuple5[T1, T2, T3, T4, T5]],
|
||||
@@ -227,7 +226,7 @@ func SequenceTuple6[T1, T2, T3, T4, T5, T6 any](t T.Tuple6[T1, T2, T3, T4, T5, T
|
||||
}
|
||||
|
||||
// TraverseTuple6 converts a [Tuple6] of [A] via transformation functions transforming [A] to [A] into a [Tuple6].
|
||||
func TraverseTuple6[F1 ~func(A1) T1, F2 ~func(A2) T2, F3 ~func(A3) T3, F4 ~func(A4) T4, F5 ~func(A5) T5, F6 ~func(A6) T6, A1, T1, A2, T2, A3, T3, A4, T4, A5, T5, A6, T6 any](f1 F1, f2 F2, f3 F3, f4 F4, f5 F5, f6 F6) func (T.Tuple6[A1, A2, A3, A4, A5, A6]) T.Tuple6[T1, T2, T3, T4, T5, T6] {
|
||||
func TraverseTuple6[F1 ~func(A1) T1, F2 ~func(A2) T2, F3 ~func(A3) T3, F4 ~func(A4) T4, F5 ~func(A5) T5, F6 ~func(A6) T6, A1, T1, A2, T2, A3, T3, A4, T4, A5, T5, A6, T6 any](f1 F1, f2 F2, f3 F3, f4 F4, f5 F5, f6 F6) func(T.Tuple6[A1, A2, A3, A4, A5, A6]) T.Tuple6[T1, T2, T3, T4, T5, T6] {
|
||||
return func(t T.Tuple6[A1, A2, A3, A4, A5, A6]) T.Tuple6[T1, T2, T3, T4, T5, T6] {
|
||||
return A.TraverseTuple6(
|
||||
Map[T1, func(T2) func(T3) func(T4) func(T5) func(T6) T.Tuple6[T1, T2, T3, T4, T5, T6]],
|
||||
@@ -282,7 +281,7 @@ func SequenceTuple7[T1, T2, T3, T4, T5, T6, T7 any](t T.Tuple7[T1, T2, T3, T4, T
|
||||
}
|
||||
|
||||
// TraverseTuple7 converts a [Tuple7] of [A] via transformation functions transforming [A] to [A] into a [Tuple7].
|
||||
func TraverseTuple7[F1 ~func(A1) T1, F2 ~func(A2) T2, F3 ~func(A3) T3, F4 ~func(A4) T4, F5 ~func(A5) T5, F6 ~func(A6) T6, F7 ~func(A7) T7, A1, T1, A2, T2, A3, T3, A4, T4, A5, T5, A6, T6, A7, T7 any](f1 F1, f2 F2, f3 F3, f4 F4, f5 F5, f6 F6, f7 F7) func (T.Tuple7[A1, A2, A3, A4, A5, A6, A7]) T.Tuple7[T1, T2, T3, T4, T5, T6, T7] {
|
||||
func TraverseTuple7[F1 ~func(A1) T1, F2 ~func(A2) T2, F3 ~func(A3) T3, F4 ~func(A4) T4, F5 ~func(A5) T5, F6 ~func(A6) T6, F7 ~func(A7) T7, A1, T1, A2, T2, A3, T3, A4, T4, A5, T5, A6, T6, A7, T7 any](f1 F1, f2 F2, f3 F3, f4 F4, f5 F5, f6 F6, f7 F7) func(T.Tuple7[A1, A2, A3, A4, A5, A6, A7]) T.Tuple7[T1, T2, T3, T4, T5, T6, T7] {
|
||||
return func(t T.Tuple7[A1, A2, A3, A4, A5, A6, A7]) T.Tuple7[T1, T2, T3, T4, T5, T6, T7] {
|
||||
return A.TraverseTuple7(
|
||||
Map[T1, func(T2) func(T3) func(T4) func(T5) func(T6) func(T7) T.Tuple7[T1, T2, T3, T4, T5, T6, T7]],
|
||||
@@ -342,7 +341,7 @@ func SequenceTuple8[T1, T2, T3, T4, T5, T6, T7, T8 any](t T.Tuple8[T1, T2, T3, T
|
||||
}
|
||||
|
||||
// TraverseTuple8 converts a [Tuple8] of [A] via transformation functions transforming [A] to [A] into a [Tuple8].
|
||||
func TraverseTuple8[F1 ~func(A1) T1, F2 ~func(A2) T2, F3 ~func(A3) T3, F4 ~func(A4) T4, F5 ~func(A5) T5, F6 ~func(A6) T6, F7 ~func(A7) T7, F8 ~func(A8) T8, A1, T1, A2, T2, A3, T3, A4, T4, A5, T5, A6, T6, A7, T7, A8, T8 any](f1 F1, f2 F2, f3 F3, f4 F4, f5 F5, f6 F6, f7 F7, f8 F8) func (T.Tuple8[A1, A2, A3, A4, A5, A6, A7, A8]) T.Tuple8[T1, T2, T3, T4, T5, T6, T7, T8] {
|
||||
func TraverseTuple8[F1 ~func(A1) T1, F2 ~func(A2) T2, F3 ~func(A3) T3, F4 ~func(A4) T4, F5 ~func(A5) T5, F6 ~func(A6) T6, F7 ~func(A7) T7, F8 ~func(A8) T8, A1, T1, A2, T2, A3, T3, A4, T4, A5, T5, A6, T6, A7, T7, A8, T8 any](f1 F1, f2 F2, f3 F3, f4 F4, f5 F5, f6 F6, f7 F7, f8 F8) func(T.Tuple8[A1, A2, A3, A4, A5, A6, A7, A8]) T.Tuple8[T1, T2, T3, T4, T5, T6, T7, T8] {
|
||||
return func(t T.Tuple8[A1, A2, A3, A4, A5, A6, A7, A8]) T.Tuple8[T1, T2, T3, T4, T5, T6, T7, T8] {
|
||||
return A.TraverseTuple8(
|
||||
Map[T1, func(T2) func(T3) func(T4) func(T5) func(T6) func(T7) func(T8) T.Tuple8[T1, T2, T3, T4, T5, T6, T7, T8]],
|
||||
@@ -407,7 +406,7 @@ func SequenceTuple9[T1, T2, T3, T4, T5, T6, T7, T8, T9 any](t T.Tuple9[T1, T2, T
|
||||
}
|
||||
|
||||
// TraverseTuple9 converts a [Tuple9] of [A] via transformation functions transforming [A] to [A] into a [Tuple9].
|
||||
func TraverseTuple9[F1 ~func(A1) T1, F2 ~func(A2) T2, F3 ~func(A3) T3, F4 ~func(A4) T4, F5 ~func(A5) T5, F6 ~func(A6) T6, F7 ~func(A7) T7, F8 ~func(A8) T8, F9 ~func(A9) T9, A1, T1, A2, T2, A3, T3, A4, T4, A5, T5, A6, T6, A7, T7, A8, T8, A9, T9 any](f1 F1, f2 F2, f3 F3, f4 F4, f5 F5, f6 F6, f7 F7, f8 F8, f9 F9) func (T.Tuple9[A1, A2, A3, A4, A5, A6, A7, A8, A9]) T.Tuple9[T1, T2, T3, T4, T5, T6, T7, T8, T9] {
|
||||
func TraverseTuple9[F1 ~func(A1) T1, F2 ~func(A2) T2, F3 ~func(A3) T3, F4 ~func(A4) T4, F5 ~func(A5) T5, F6 ~func(A6) T6, F7 ~func(A7) T7, F8 ~func(A8) T8, F9 ~func(A9) T9, A1, T1, A2, T2, A3, T3, A4, T4, A5, T5, A6, T6, A7, T7, A8, T8, A9, T9 any](f1 F1, f2 F2, f3 F3, f4 F4, f5 F5, f6 F6, f7 F7, f8 F8, f9 F9) func(T.Tuple9[A1, A2, A3, A4, A5, A6, A7, A8, A9]) T.Tuple9[T1, T2, T3, T4, T5, T6, T7, T8, T9] {
|
||||
return func(t T.Tuple9[A1, A2, A3, A4, A5, A6, A7, A8, A9]) T.Tuple9[T1, T2, T3, T4, T5, T6, T7, T8, T9] {
|
||||
return A.TraverseTuple9(
|
||||
Map[T1, func(T2) func(T3) func(T4) func(T5) func(T6) func(T7) func(T8) func(T9) T.Tuple9[T1, T2, T3, T4, T5, T6, T7, T8, T9]],
|
||||
@@ -477,7 +476,7 @@ func SequenceTuple10[T1, T2, T3, T4, T5, T6, T7, T8, T9, T10 any](t T.Tuple10[T1
|
||||
}
|
||||
|
||||
// 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 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]],
|
||||
|
@@ -4,7 +4,6 @@
|
||||
|
||||
package apply
|
||||
|
||||
|
||||
import (
|
||||
F "github.com/IBM/fp-go/function"
|
||||
T "github.com/IBM/fp-go/tuple"
|
||||
@@ -29,7 +28,7 @@ func SequenceT1[
|
||||
return F.Pipe1(
|
||||
t1,
|
||||
fmap(tupleConstructor1[T1]()),
|
||||
)
|
||||
)
|
||||
}
|
||||
|
||||
// SequenceTuple1 is a utility function used to implement the sequence operation for higher kinded types based only on map and ap.
|
||||
@@ -46,7 +45,7 @@ func SequenceTuple1[
|
||||
return F.Pipe1(
|
||||
t.F1,
|
||||
fmap(tupleConstructor1[T1]()),
|
||||
)
|
||||
)
|
||||
}
|
||||
|
||||
// TraverseTuple1 is a utility function used to implement the sequence operation for higher kinded types based only on map and ap.
|
||||
@@ -65,7 +64,7 @@ func TraverseTuple1[
|
||||
return F.Pipe1(
|
||||
f1(t.F1),
|
||||
fmap(tupleConstructor1[T1]()),
|
||||
)
|
||||
)
|
||||
}
|
||||
|
||||
// tupleConstructor2 returns a curried version of [T.MakeTuple2]
|
||||
@@ -94,7 +93,7 @@ func SequenceT2[
|
||||
t1,
|
||||
fmap(tupleConstructor2[T1, T2]()),
|
||||
fap1(t2),
|
||||
)
|
||||
)
|
||||
}
|
||||
|
||||
// SequenceTuple2 is a utility function used to implement the sequence operation for higher kinded types based only on map and ap.
|
||||
@@ -117,7 +116,7 @@ func SequenceTuple2[
|
||||
t.F1,
|
||||
fmap(tupleConstructor2[T1, T2]()),
|
||||
fap1(t.F2),
|
||||
)
|
||||
)
|
||||
}
|
||||
|
||||
// TraverseTuple2 is a utility function used to implement the sequence operation for higher kinded types based only on map and ap.
|
||||
@@ -144,7 +143,7 @@ func TraverseTuple2[
|
||||
f1(t.F1),
|
||||
fmap(tupleConstructor2[T1, T2]()),
|
||||
fap1(f2(t.F2)),
|
||||
)
|
||||
)
|
||||
}
|
||||
|
||||
// tupleConstructor3 returns a curried version of [T.MakeTuple3]
|
||||
@@ -180,7 +179,7 @@ func SequenceT3[
|
||||
fmap(tupleConstructor3[T1, T2, T3]()),
|
||||
fap1(t2),
|
||||
fap2(t3),
|
||||
)
|
||||
)
|
||||
}
|
||||
|
||||
// SequenceTuple3 is a utility function used to implement the sequence operation for higher kinded types based only on map and ap.
|
||||
@@ -209,7 +208,7 @@ func SequenceTuple3[
|
||||
fmap(tupleConstructor3[T1, T2, T3]()),
|
||||
fap1(t.F2),
|
||||
fap2(t.F3),
|
||||
)
|
||||
)
|
||||
}
|
||||
|
||||
// TraverseTuple3 is a utility function used to implement the sequence operation for higher kinded types based only on map and ap.
|
||||
@@ -244,7 +243,7 @@ func TraverseTuple3[
|
||||
fmap(tupleConstructor3[T1, T2, T3]()),
|
||||
fap1(f2(t.F2)),
|
||||
fap2(f3(t.F3)),
|
||||
)
|
||||
)
|
||||
}
|
||||
|
||||
// tupleConstructor4 returns a curried version of [T.MakeTuple4]
|
||||
@@ -287,7 +286,7 @@ func SequenceT4[
|
||||
fap1(t2),
|
||||
fap2(t3),
|
||||
fap3(t4),
|
||||
)
|
||||
)
|
||||
}
|
||||
|
||||
// SequenceTuple4 is a utility function used to implement the sequence operation for higher kinded types based only on map and ap.
|
||||
@@ -322,7 +321,7 @@ func SequenceTuple4[
|
||||
fap1(t.F2),
|
||||
fap2(t.F3),
|
||||
fap3(t.F4),
|
||||
)
|
||||
)
|
||||
}
|
||||
|
||||
// TraverseTuple4 is a utility function used to implement the sequence operation for higher kinded types based only on map and ap.
|
||||
@@ -365,7 +364,7 @@ func TraverseTuple4[
|
||||
fap1(f2(t.F2)),
|
||||
fap2(f3(t.F3)),
|
||||
fap3(f4(t.F4)),
|
||||
)
|
||||
)
|
||||
}
|
||||
|
||||
// tupleConstructor5 returns a curried version of [T.MakeTuple5]
|
||||
@@ -415,7 +414,7 @@ func SequenceT5[
|
||||
fap2(t3),
|
||||
fap3(t4),
|
||||
fap4(t5),
|
||||
)
|
||||
)
|
||||
}
|
||||
|
||||
// SequenceTuple5 is a utility function used to implement the sequence operation for higher kinded types based only on map and ap.
|
||||
@@ -456,7 +455,7 @@ func SequenceTuple5[
|
||||
fap2(t.F3),
|
||||
fap3(t.F4),
|
||||
fap4(t.F5),
|
||||
)
|
||||
)
|
||||
}
|
||||
|
||||
// TraverseTuple5 is a utility function used to implement the sequence operation for higher kinded types based only on map and ap.
|
||||
@@ -507,7 +506,7 @@ func TraverseTuple5[
|
||||
fap2(f3(t.F3)),
|
||||
fap3(f4(t.F4)),
|
||||
fap4(f5(t.F5)),
|
||||
)
|
||||
)
|
||||
}
|
||||
|
||||
// tupleConstructor6 returns a curried version of [T.MakeTuple6]
|
||||
@@ -564,7 +563,7 @@ func SequenceT6[
|
||||
fap3(t4),
|
||||
fap4(t5),
|
||||
fap5(t6),
|
||||
)
|
||||
)
|
||||
}
|
||||
|
||||
// SequenceTuple6 is a utility function used to implement the sequence operation for higher kinded types based only on map and ap.
|
||||
@@ -611,7 +610,7 @@ func SequenceTuple6[
|
||||
fap3(t.F4),
|
||||
fap4(t.F5),
|
||||
fap5(t.F6),
|
||||
)
|
||||
)
|
||||
}
|
||||
|
||||
// TraverseTuple6 is a utility function used to implement the sequence operation for higher kinded types based only on map and ap.
|
||||
@@ -670,7 +669,7 @@ func TraverseTuple6[
|
||||
fap3(f4(t.F4)),
|
||||
fap4(f5(t.F5)),
|
||||
fap5(f6(t.F6)),
|
||||
)
|
||||
)
|
||||
}
|
||||
|
||||
// tupleConstructor7 returns a curried version of [T.MakeTuple7]
|
||||
@@ -734,7 +733,7 @@ func SequenceT7[
|
||||
fap4(t5),
|
||||
fap5(t6),
|
||||
fap6(t7),
|
||||
)
|
||||
)
|
||||
}
|
||||
|
||||
// SequenceTuple7 is a utility function used to implement the sequence operation for higher kinded types based only on map and ap.
|
||||
@@ -787,7 +786,7 @@ func SequenceTuple7[
|
||||
fap4(t.F5),
|
||||
fap5(t.F6),
|
||||
fap6(t.F7),
|
||||
)
|
||||
)
|
||||
}
|
||||
|
||||
// TraverseTuple7 is a utility function used to implement the sequence operation for higher kinded types based only on map and ap.
|
||||
@@ -854,7 +853,7 @@ func TraverseTuple7[
|
||||
fap4(f5(t.F5)),
|
||||
fap5(f6(t.F6)),
|
||||
fap6(f7(t.F7)),
|
||||
)
|
||||
)
|
||||
}
|
||||
|
||||
// tupleConstructor8 returns a curried version of [T.MakeTuple8]
|
||||
@@ -925,7 +924,7 @@ func SequenceT8[
|
||||
fap5(t6),
|
||||
fap6(t7),
|
||||
fap7(t8),
|
||||
)
|
||||
)
|
||||
}
|
||||
|
||||
// SequenceTuple8 is a utility function used to implement the sequence operation for higher kinded types based only on map and ap.
|
||||
@@ -984,7 +983,7 @@ func SequenceTuple8[
|
||||
fap5(t.F6),
|
||||
fap6(t.F7),
|
||||
fap7(t.F8),
|
||||
)
|
||||
)
|
||||
}
|
||||
|
||||
// TraverseTuple8 is a utility function used to implement the sequence operation for higher kinded types based only on map and ap.
|
||||
@@ -1059,7 +1058,7 @@ func TraverseTuple8[
|
||||
fap5(f6(t.F6)),
|
||||
fap6(f7(t.F7)),
|
||||
fap7(f8(t.F8)),
|
||||
)
|
||||
)
|
||||
}
|
||||
|
||||
// tupleConstructor9 returns a curried version of [T.MakeTuple9]
|
||||
@@ -1137,7 +1136,7 @@ func SequenceT9[
|
||||
fap6(t7),
|
||||
fap7(t8),
|
||||
fap8(t9),
|
||||
)
|
||||
)
|
||||
}
|
||||
|
||||
// SequenceTuple9 is a utility function used to implement the sequence operation for higher kinded types based only on map and ap.
|
||||
@@ -1202,7 +1201,7 @@ func SequenceTuple9[
|
||||
fap6(t.F7),
|
||||
fap7(t.F8),
|
||||
fap8(t.F9),
|
||||
)
|
||||
)
|
||||
}
|
||||
|
||||
// TraverseTuple9 is a utility function used to implement the sequence operation for higher kinded types based only on map and ap.
|
||||
@@ -1285,7 +1284,7 @@ func TraverseTuple9[
|
||||
fap6(f7(t.F7)),
|
||||
fap7(f8(t.F8)),
|
||||
fap8(f9(t.F9)),
|
||||
)
|
||||
)
|
||||
}
|
||||
|
||||
// tupleConstructor10 returns a curried version of [T.MakeTuple10]
|
||||
@@ -1370,7 +1369,7 @@ func SequenceT10[
|
||||
fap7(t8),
|
||||
fap8(t9),
|
||||
fap9(t10),
|
||||
)
|
||||
)
|
||||
}
|
||||
|
||||
// SequenceTuple10 is a utility function used to implement the sequence operation for higher kinded types based only on map and ap.
|
||||
@@ -1441,7 +1440,7 @@ func SequenceTuple10[
|
||||
fap7(t.F8),
|
||||
fap8(t.F9),
|
||||
fap9(t.F10),
|
||||
)
|
||||
)
|
||||
}
|
||||
|
||||
// TraverseTuple10 is a utility function used to implement the sequence operation for higher kinded types based only on map and ap.
|
||||
@@ -1532,5 +1531,5 @@ func TraverseTuple10[
|
||||
fap7(f8(t.F8)),
|
||||
fap8(f9(t.F9)),
|
||||
fap9(f10(t.F10)),
|
||||
)
|
||||
)
|
||||
}
|
||||
|
@@ -4,7 +4,6 @@
|
||||
|
||||
package io
|
||||
|
||||
|
||||
import (
|
||||
G "github.com/IBM/fp-go/io/generic"
|
||||
T "github.com/IBM/fp-go/tuple"
|
||||
|
@@ -3,10 +3,9 @@
|
||||
// 2023-10-23 08:30:56.7105551 +0200 CEST m=+0.011255201
|
||||
package generic
|
||||
|
||||
|
||||
import (
|
||||
T "github.com/IBM/fp-go/tuple"
|
||||
A "github.com/IBM/fp-go/internal/apply"
|
||||
T "github.com/IBM/fp-go/tuple"
|
||||
)
|
||||
|
||||
// SequenceT1 converts 1 [func() T] into a [func() T.Tuple1[T1]]
|
||||
|
@@ -4,7 +4,6 @@
|
||||
|
||||
package ioeither
|
||||
|
||||
|
||||
import (
|
||||
G "github.com/IBM/fp-go/ioeither/generic"
|
||||
T "github.com/IBM/fp-go/tuple"
|
||||
|
@@ -3,11 +3,10 @@
|
||||
// 2023-10-23 08:30:58.6556525 +0200 CEST m=+0.090214601
|
||||
package generic
|
||||
|
||||
|
||||
import (
|
||||
ET "github.com/IBM/fp-go/either"
|
||||
T "github.com/IBM/fp-go/tuple"
|
||||
A "github.com/IBM/fp-go/internal/apply"
|
||||
T "github.com/IBM/fp-go/tuple"
|
||||
)
|
||||
|
||||
// Eitherize0 converts a function with 0 parameters returning a tuple into a function with 0 parameters returning a [GIOA]
|
||||
@@ -16,7 +15,8 @@ func Eitherize0[GIOA ~func() ET.Either[error, R], F ~func() (R, error), R any](f
|
||||
return func() GIOA {
|
||||
return func() ET.Either[error, R] {
|
||||
return e()
|
||||
}}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
// Uneitherize0 converts a function with 0 parameters returning a tuple into a function with 0 parameters returning a [GIOA]
|
||||
@@ -32,7 +32,8 @@ func Eitherize1[GIOA ~func() ET.Either[error, R], F ~func(T1) (R, error), T1, R
|
||||
return func(t1 T1) GIOA {
|
||||
return func() ET.Either[error, R] {
|
||||
return e(t1)
|
||||
}}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
// Uneitherize1 converts a function with 1 parameters returning a tuple into a function with 1 parameters returning a [GIOA]
|
||||
@@ -85,7 +86,8 @@ func Eitherize2[GIOA ~func() ET.Either[error, R], F ~func(T1, T2) (R, error), T1
|
||||
return func(t1 T1, t2 T2) GIOA {
|
||||
return func() ET.Either[error, R] {
|
||||
return e(t1, t2)
|
||||
}}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
// Uneitherize2 converts a function with 2 parameters returning a tuple into a function with 2 parameters returning a [GIOA]
|
||||
@@ -148,7 +150,8 @@ func Eitherize3[GIOA ~func() ET.Either[error, R], F ~func(T1, T2, T3) (R, error)
|
||||
return func(t1 T1, t2 T2, t3 T3) GIOA {
|
||||
return func() ET.Either[error, R] {
|
||||
return e(t1, t2, t3)
|
||||
}}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
// Uneitherize3 converts a function with 3 parameters returning a tuple into a function with 3 parameters returning a [GIOA]
|
||||
@@ -221,7 +224,8 @@ func Eitherize4[GIOA ~func() ET.Either[error, R], F ~func(T1, T2, T3, T4) (R, er
|
||||
return func(t1 T1, t2 T2, t3 T3, t4 T4) GIOA {
|
||||
return func() ET.Either[error, R] {
|
||||
return e(t1, t2, t3, t4)
|
||||
}}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
// Uneitherize4 converts a function with 4 parameters returning a tuple into a function with 4 parameters returning a [GIOA]
|
||||
@@ -304,7 +308,8 @@ func Eitherize5[GIOA ~func() ET.Either[error, R], F ~func(T1, T2, T3, T4, T5) (R
|
||||
return func(t1 T1, t2 T2, t3 T3, t4 T4, t5 T5) GIOA {
|
||||
return func() ET.Either[error, R] {
|
||||
return e(t1, t2, t3, t4, t5)
|
||||
}}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
// Uneitherize5 converts a function with 5 parameters returning a tuple into a function with 5 parameters returning a [GIOA]
|
||||
@@ -397,7 +402,8 @@ func Eitherize6[GIOA ~func() ET.Either[error, R], F ~func(T1, T2, T3, T4, T5, T6
|
||||
return func(t1 T1, t2 T2, t3 T3, t4 T4, t5 T5, t6 T6) GIOA {
|
||||
return func() ET.Either[error, R] {
|
||||
return e(t1, t2, t3, t4, t5, t6)
|
||||
}}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
// Uneitherize6 converts a function with 6 parameters returning a tuple into a function with 6 parameters returning a [GIOA]
|
||||
@@ -500,7 +506,8 @@ func Eitherize7[GIOA ~func() ET.Either[error, R], F ~func(T1, T2, T3, T4, T5, T6
|
||||
return func(t1 T1, t2 T2, t3 T3, t4 T4, t5 T5, t6 T6, t7 T7) GIOA {
|
||||
return func() ET.Either[error, R] {
|
||||
return e(t1, t2, t3, t4, t5, t6, t7)
|
||||
}}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
// Uneitherize7 converts a function with 7 parameters returning a tuple into a function with 7 parameters returning a [GIOA]
|
||||
@@ -613,7 +620,8 @@ func Eitherize8[GIOA ~func() ET.Either[error, R], F ~func(T1, T2, T3, T4, T5, T6
|
||||
return func(t1 T1, t2 T2, t3 T3, t4 T4, t5 T5, t6 T6, t7 T7, t8 T8) GIOA {
|
||||
return func() ET.Either[error, R] {
|
||||
return e(t1, t2, t3, t4, t5, t6, t7, t8)
|
||||
}}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
// Uneitherize8 converts a function with 8 parameters returning a tuple into a function with 8 parameters returning a [GIOA]
|
||||
@@ -736,7 +744,8 @@ func Eitherize9[GIOA ~func() ET.Either[error, R], F ~func(T1, T2, T3, T4, T5, T6
|
||||
return func(t1 T1, t2 T2, t3 T3, t4 T4, t5 T5, t6 T6, t7 T7, t8 T8, t9 T9) GIOA {
|
||||
return func() ET.Either[error, R] {
|
||||
return e(t1, t2, t3, t4, t5, t6, t7, t8, t9)
|
||||
}}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
// Uneitherize9 converts a function with 9 parameters returning a tuple into a function with 9 parameters returning a [GIOA]
|
||||
@@ -869,7 +878,8 @@ func Eitherize10[GIOA ~func() ET.Either[error, R], F ~func(T1, T2, T3, T4, T5, T
|
||||
return func(t1 T1, t2 T2, t3 T3, t4 T4, t5 T5, t6 T6, t7 T7, t8 T8, t9 T9, t10 T10) GIOA {
|
||||
return func() ET.Either[error, R] {
|
||||
return e(t1, t2, t3, t4, t5, t6, t7, t8, t9, t10)
|
||||
}}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
// Uneitherize10 converts a function with 10 parameters returning a tuple into a function with 10 parameters returning a [GIOA]
|
||||
|
@@ -4,7 +4,6 @@
|
||||
|
||||
package iooption
|
||||
|
||||
|
||||
import (
|
||||
G "github.com/IBM/fp-go/iooption/generic"
|
||||
T "github.com/IBM/fp-go/tuple"
|
||||
|
@@ -3,11 +3,10 @@
|
||||
// 2023-10-23 08:31:01.9227118 +0200 CEST m=+0.009977901
|
||||
package generic
|
||||
|
||||
|
||||
import (
|
||||
T "github.com/IBM/fp-go/tuple"
|
||||
O "github.com/IBM/fp-go/option"
|
||||
A "github.com/IBM/fp-go/internal/apply"
|
||||
O "github.com/IBM/fp-go/option"
|
||||
T "github.com/IBM/fp-go/tuple"
|
||||
)
|
||||
|
||||
// SequenceT1 converts 1 [func() O.Option[T]] into a [func() O.Option[T.Tuple1[T1]]]
|
||||
|
@@ -4,11 +4,11 @@
|
||||
|
||||
package option
|
||||
|
||||
|
||||
import (
|
||||
A "github.com/IBM/fp-go/internal/apply"
|
||||
T "github.com/IBM/fp-go/tuple"
|
||||
)
|
||||
|
||||
// optionize converts a nullary function to an option
|
||||
func optionize[R any](f func() (R, bool)) Option[R] {
|
||||
if r, ok := f(); ok {
|
||||
@@ -66,7 +66,7 @@ func SequenceTuple1[T1 any](t T.Tuple1[Option[T1]]) Option[T.Tuple1[T1]] {
|
||||
}
|
||||
|
||||
// TraverseTuple1 converts a [Tuple1] of [A] via transformation functions transforming [A] to [Option[A]] into a [Option[Tuple1]].
|
||||
func TraverseTuple1[F1 ~func(A1) Option[T1], A1, T1 any](f1 F1) func (T.Tuple1[A1]) Option[T.Tuple1[T1]] {
|
||||
func TraverseTuple1[F1 ~func(A1) Option[T1], A1, T1 any](f1 F1) func(T.Tuple1[A1]) Option[T.Tuple1[T1]] {
|
||||
return func(t T.Tuple1[A1]) Option[T.Tuple1[T1]] {
|
||||
return A.TraverseTuple1(
|
||||
Map[T1, T.Tuple1[T1]],
|
||||
@@ -112,7 +112,7 @@ func SequenceTuple2[T1, T2 any](t T.Tuple2[Option[T1], Option[T2]]) Option[T.Tup
|
||||
}
|
||||
|
||||
// TraverseTuple2 converts a [Tuple2] of [A] via transformation functions transforming [A] to [Option[A]] into a [Option[Tuple2]].
|
||||
func TraverseTuple2[F1 ~func(A1) Option[T1], F2 ~func(A2) Option[T2], A1, T1, A2, T2 any](f1 F1, f2 F2) func (T.Tuple2[A1, A2]) Option[T.Tuple2[T1, T2]] {
|
||||
func TraverseTuple2[F1 ~func(A1) Option[T1], F2 ~func(A2) Option[T2], A1, T1, A2, T2 any](f1 F1, f2 F2) func(T.Tuple2[A1, A2]) Option[T.Tuple2[T1, T2]] {
|
||||
return func(t T.Tuple2[A1, A2]) Option[T.Tuple2[T1, T2]] {
|
||||
return A.TraverseTuple2(
|
||||
Map[T1, func(T2) T.Tuple2[T1, T2]],
|
||||
@@ -163,7 +163,7 @@ func SequenceTuple3[T1, T2, T3 any](t T.Tuple3[Option[T1], Option[T2], Option[T3
|
||||
}
|
||||
|
||||
// TraverseTuple3 converts a [Tuple3] of [A] via transformation functions transforming [A] to [Option[A]] into a [Option[Tuple3]].
|
||||
func TraverseTuple3[F1 ~func(A1) Option[T1], F2 ~func(A2) Option[T2], F3 ~func(A3) Option[T3], A1, T1, A2, T2, A3, T3 any](f1 F1, f2 F2, f3 F3) func (T.Tuple3[A1, A2, A3]) Option[T.Tuple3[T1, T2, T3]] {
|
||||
func TraverseTuple3[F1 ~func(A1) Option[T1], F2 ~func(A2) Option[T2], F3 ~func(A3) Option[T3], A1, T1, A2, T2, A3, T3 any](f1 F1, f2 F2, f3 F3) func(T.Tuple3[A1, A2, A3]) Option[T.Tuple3[T1, T2, T3]] {
|
||||
return func(t T.Tuple3[A1, A2, A3]) Option[T.Tuple3[T1, T2, T3]] {
|
||||
return A.TraverseTuple3(
|
||||
Map[T1, func(T2) func(T3) T.Tuple3[T1, T2, T3]],
|
||||
@@ -219,7 +219,7 @@ func SequenceTuple4[T1, T2, T3, T4 any](t T.Tuple4[Option[T1], Option[T2], Optio
|
||||
}
|
||||
|
||||
// TraverseTuple4 converts a [Tuple4] of [A] via transformation functions transforming [A] to [Option[A]] into a [Option[Tuple4]].
|
||||
func TraverseTuple4[F1 ~func(A1) Option[T1], F2 ~func(A2) Option[T2], F3 ~func(A3) Option[T3], F4 ~func(A4) Option[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]) Option[T.Tuple4[T1, T2, T3, T4]] {
|
||||
func TraverseTuple4[F1 ~func(A1) Option[T1], F2 ~func(A2) Option[T2], F3 ~func(A3) Option[T3], F4 ~func(A4) Option[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]) Option[T.Tuple4[T1, T2, T3, T4]] {
|
||||
return func(t T.Tuple4[A1, A2, A3, A4]) Option[T.Tuple4[T1, T2, T3, T4]] {
|
||||
return A.TraverseTuple4(
|
||||
Map[T1, func(T2) func(T3) func(T4) T.Tuple4[T1, T2, T3, T4]],
|
||||
@@ -280,7 +280,7 @@ func SequenceTuple5[T1, T2, T3, T4, T5 any](t T.Tuple5[Option[T1], Option[T2], O
|
||||
}
|
||||
|
||||
// TraverseTuple5 converts a [Tuple5] of [A] via transformation functions transforming [A] to [Option[A]] into a [Option[Tuple5]].
|
||||
func TraverseTuple5[F1 ~func(A1) Option[T1], F2 ~func(A2) Option[T2], F3 ~func(A3) Option[T3], F4 ~func(A4) Option[T4], F5 ~func(A5) Option[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]) Option[T.Tuple5[T1, T2, T3, T4, T5]] {
|
||||
func TraverseTuple5[F1 ~func(A1) Option[T1], F2 ~func(A2) Option[T2], F3 ~func(A3) Option[T3], F4 ~func(A4) Option[T4], F5 ~func(A5) Option[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]) Option[T.Tuple5[T1, T2, T3, T4, T5]] {
|
||||
return func(t T.Tuple5[A1, A2, A3, A4, A5]) Option[T.Tuple5[T1, T2, T3, T4, T5]] {
|
||||
return A.TraverseTuple5(
|
||||
Map[T1, func(T2) func(T3) func(T4) func(T5) T.Tuple5[T1, T2, T3, T4, T5]],
|
||||
@@ -346,7 +346,7 @@ func SequenceTuple6[T1, T2, T3, T4, T5, T6 any](t T.Tuple6[Option[T1], Option[T2
|
||||
}
|
||||
|
||||
// TraverseTuple6 converts a [Tuple6] of [A] via transformation functions transforming [A] to [Option[A]] into a [Option[Tuple6]].
|
||||
func TraverseTuple6[F1 ~func(A1) Option[T1], F2 ~func(A2) Option[T2], F3 ~func(A3) Option[T3], F4 ~func(A4) Option[T4], F5 ~func(A5) Option[T5], F6 ~func(A6) Option[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]) Option[T.Tuple6[T1, T2, T3, T4, T5, T6]] {
|
||||
func TraverseTuple6[F1 ~func(A1) Option[T1], F2 ~func(A2) Option[T2], F3 ~func(A3) Option[T3], F4 ~func(A4) Option[T4], F5 ~func(A5) Option[T5], F6 ~func(A6) Option[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]) Option[T.Tuple6[T1, T2, T3, T4, T5, T6]] {
|
||||
return func(t T.Tuple6[A1, A2, A3, A4, A5, A6]) Option[T.Tuple6[T1, T2, T3, T4, T5, T6]] {
|
||||
return A.TraverseTuple6(
|
||||
Map[T1, func(T2) func(T3) func(T4) func(T5) func(T6) T.Tuple6[T1, T2, T3, T4, T5, T6]],
|
||||
@@ -417,7 +417,7 @@ func SequenceTuple7[T1, T2, T3, T4, T5, T6, T7 any](t T.Tuple7[Option[T1], Optio
|
||||
}
|
||||
|
||||
// TraverseTuple7 converts a [Tuple7] of [A] via transformation functions transforming [A] to [Option[A]] into a [Option[Tuple7]].
|
||||
func TraverseTuple7[F1 ~func(A1) Option[T1], F2 ~func(A2) Option[T2], F3 ~func(A3) Option[T3], F4 ~func(A4) Option[T4], F5 ~func(A5) Option[T5], F6 ~func(A6) Option[T6], F7 ~func(A7) Option[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]) Option[T.Tuple7[T1, T2, T3, T4, T5, T6, T7]] {
|
||||
func TraverseTuple7[F1 ~func(A1) Option[T1], F2 ~func(A2) Option[T2], F3 ~func(A3) Option[T3], F4 ~func(A4) Option[T4], F5 ~func(A5) Option[T5], F6 ~func(A6) Option[T6], F7 ~func(A7) Option[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]) Option[T.Tuple7[T1, T2, T3, T4, T5, T6, T7]] {
|
||||
return func(t T.Tuple7[A1, A2, A3, A4, A5, A6, A7]) Option[T.Tuple7[T1, T2, T3, T4, T5, T6, T7]] {
|
||||
return A.TraverseTuple7(
|
||||
Map[T1, func(T2) func(T3) func(T4) func(T5) func(T6) func(T7) T.Tuple7[T1, T2, T3, T4, T5, T6, T7]],
|
||||
@@ -493,7 +493,7 @@ func SequenceTuple8[T1, T2, T3, T4, T5, T6, T7, T8 any](t T.Tuple8[Option[T1], O
|
||||
}
|
||||
|
||||
// TraverseTuple8 converts a [Tuple8] of [A] via transformation functions transforming [A] to [Option[A]] into a [Option[Tuple8]].
|
||||
func TraverseTuple8[F1 ~func(A1) Option[T1], F2 ~func(A2) Option[T2], F3 ~func(A3) Option[T3], F4 ~func(A4) Option[T4], F5 ~func(A5) Option[T5], F6 ~func(A6) Option[T6], F7 ~func(A7) Option[T7], F8 ~func(A8) Option[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]) Option[T.Tuple8[T1, T2, T3, T4, T5, T6, T7, T8]] {
|
||||
func TraverseTuple8[F1 ~func(A1) Option[T1], F2 ~func(A2) Option[T2], F3 ~func(A3) Option[T3], F4 ~func(A4) Option[T4], F5 ~func(A5) Option[T5], F6 ~func(A6) Option[T6], F7 ~func(A7) Option[T7], F8 ~func(A8) Option[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]) Option[T.Tuple8[T1, T2, T3, T4, T5, T6, T7, T8]] {
|
||||
return func(t T.Tuple8[A1, A2, A3, A4, A5, A6, A7, A8]) Option[T.Tuple8[T1, T2, T3, T4, T5, T6, T7, T8]] {
|
||||
return A.TraverseTuple8(
|
||||
Map[T1, func(T2) func(T3) func(T4) func(T5) func(T6) func(T7) func(T8) T.Tuple8[T1, T2, T3, T4, T5, T6, T7, T8]],
|
||||
@@ -574,7 +574,7 @@ func SequenceTuple9[T1, T2, T3, T4, T5, T6, T7, T8, T9 any](t T.Tuple9[Option[T1
|
||||
}
|
||||
|
||||
// TraverseTuple9 converts a [Tuple9] of [A] via transformation functions transforming [A] to [Option[A]] into a [Option[Tuple9]].
|
||||
func TraverseTuple9[F1 ~func(A1) Option[T1], F2 ~func(A2) Option[T2], F3 ~func(A3) Option[T3], F4 ~func(A4) Option[T4], F5 ~func(A5) Option[T5], F6 ~func(A6) Option[T6], F7 ~func(A7) Option[T7], F8 ~func(A8) Option[T8], F9 ~func(A9) Option[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]) Option[T.Tuple9[T1, T2, T3, T4, T5, T6, T7, T8, T9]] {
|
||||
func TraverseTuple9[F1 ~func(A1) Option[T1], F2 ~func(A2) Option[T2], F3 ~func(A3) Option[T3], F4 ~func(A4) Option[T4], F5 ~func(A5) Option[T5], F6 ~func(A6) Option[T6], F7 ~func(A7) Option[T7], F8 ~func(A8) Option[T8], F9 ~func(A9) Option[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]) Option[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]) Option[T.Tuple9[T1, T2, T3, T4, T5, T6, T7, T8, T9]] {
|
||||
return A.TraverseTuple9(
|
||||
Map[T1, func(T2) func(T3) func(T4) func(T5) func(T6) func(T7) func(T8) func(T9) T.Tuple9[T1, T2, T3, T4, T5, T6, T7, T8, T9]],
|
||||
@@ -660,7 +660,7 @@ func SequenceTuple10[T1, T2, T3, T4, T5, T6, T7, T8, T9, T10 any](t T.Tuple10[Op
|
||||
}
|
||||
|
||||
// TraverseTuple10 converts a [Tuple10] of [A] via transformation functions transforming [A] to [Option[A]] into a [Option[Tuple10]].
|
||||
func TraverseTuple10[F1 ~func(A1) Option[T1], F2 ~func(A2) Option[T2], F3 ~func(A3) Option[T3], F4 ~func(A4) Option[T4], F5 ~func(A5) Option[T5], F6 ~func(A6) Option[T6], F7 ~func(A7) Option[T7], F8 ~func(A8) Option[T8], F9 ~func(A9) Option[T9], F10 ~func(A10) Option[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]) Option[T.Tuple10[T1, T2, T3, T4, T5, T6, T7, T8, T9, T10]] {
|
||||
func TraverseTuple10[F1 ~func(A1) Option[T1], F2 ~func(A2) Option[T2], F3 ~func(A3) Option[T3], F4 ~func(A4) Option[T4], F5 ~func(A5) Option[T5], F6 ~func(A6) Option[T6], F7 ~func(A7) Option[T7], F8 ~func(A8) Option[T8], F9 ~func(A9) Option[T9], F10 ~func(A10) Option[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]) Option[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]) Option[T.Tuple10[T1, T2, T3, T4, T5, T6, T7, T8, T9, T10]] {
|
||||
return A.TraverseTuple10(
|
||||
Map[T1, func(T2) func(T3) func(T4) func(T5) func(T6) func(T7) func(T8) func(T9) func(T10) T.Tuple10[T1, T2, T3, T4, T5, T6, T7, T8, T9, T10]],
|
||||
|
@@ -4,7 +4,6 @@
|
||||
|
||||
package reader
|
||||
|
||||
|
||||
import (
|
||||
G "github.com/IBM/fp-go/reader/generic"
|
||||
)
|
||||
|
@@ -3,7 +3,6 @@
|
||||
// 2023-10-23 08:31:13.0131834 +0200 CEST m=+0.010996501
|
||||
package generic
|
||||
|
||||
|
||||
// From0 converts a function with 1 parameters returning a [R] into a function with 0 parameters returning a [GRA]
|
||||
// The first parameter is considered to be the context [C].
|
||||
func From0[GRA ~func(C) R, F ~func(C) R, C, R any](f F) func() GRA {
|
||||
|
@@ -4,7 +4,6 @@
|
||||
|
||||
package readerioeither
|
||||
|
||||
|
||||
import (
|
||||
G "github.com/IBM/fp-go/readerioeither/generic"
|
||||
)
|
||||
|
@@ -3,7 +3,6 @@
|
||||
// 2023-10-23 08:31:16.241979 +0200 CEST m=+0.013582401
|
||||
package generic
|
||||
|
||||
|
||||
import (
|
||||
E "github.com/IBM/fp-go/either"
|
||||
RD "github.com/IBM/fp-go/reader/generic"
|
||||
@@ -23,7 +22,8 @@ func Eitherize0[GRA ~func(C) GIOA, F ~func(C) (R, error), GIOA ~func() E.Either[
|
||||
return From0[GRA](func(r C) func() (R, error) {
|
||||
return func() (R, error) {
|
||||
return f(r)
|
||||
}})
|
||||
}
|
||||
})
|
||||
}
|
||||
|
||||
// From1 converts a function with 2 parameters returning a tuple into a function with 1 parameters returning a [GRA]
|
||||
@@ -40,7 +40,8 @@ func Eitherize1[GRA ~func(C) GIOA, F ~func(C, T0) (R, error), GIOA ~func() E.Eit
|
||||
return From1[GRA](func(r C, t0 T0) func() (R, error) {
|
||||
return func() (R, error) {
|
||||
return f(r, t0)
|
||||
}})
|
||||
}
|
||||
})
|
||||
}
|
||||
|
||||
// From2 converts a function with 3 parameters returning a tuple into a function with 2 parameters returning a [GRA]
|
||||
@@ -57,7 +58,8 @@ func Eitherize2[GRA ~func(C) GIOA, F ~func(C, T0, T1) (R, error), GIOA ~func() E
|
||||
return From2[GRA](func(r C, t0 T0, t1 T1) func() (R, error) {
|
||||
return func() (R, error) {
|
||||
return f(r, t0, t1)
|
||||
}})
|
||||
}
|
||||
})
|
||||
}
|
||||
|
||||
// From3 converts a function with 4 parameters returning a tuple into a function with 3 parameters returning a [GRA]
|
||||
@@ -74,7 +76,8 @@ func Eitherize3[GRA ~func(C) GIOA, F ~func(C, T0, T1, T2) (R, error), GIOA ~func
|
||||
return From3[GRA](func(r C, t0 T0, t1 T1, t2 T2) func() (R, error) {
|
||||
return func() (R, error) {
|
||||
return f(r, t0, t1, t2)
|
||||
}})
|
||||
}
|
||||
})
|
||||
}
|
||||
|
||||
// From4 converts a function with 5 parameters returning a tuple into a function with 4 parameters returning a [GRA]
|
||||
@@ -91,7 +94,8 @@ func Eitherize4[GRA ~func(C) GIOA, F ~func(C, T0, T1, T2, T3) (R, error), GIOA ~
|
||||
return From4[GRA](func(r C, t0 T0, t1 T1, t2 T2, t3 T3) func() (R, error) {
|
||||
return func() (R, error) {
|
||||
return f(r, t0, t1, t2, t3)
|
||||
}})
|
||||
}
|
||||
})
|
||||
}
|
||||
|
||||
// From5 converts a function with 6 parameters returning a tuple into a function with 5 parameters returning a [GRA]
|
||||
@@ -108,7 +112,8 @@ func Eitherize5[GRA ~func(C) GIOA, F ~func(C, T0, T1, T2, T3, T4) (R, error), GI
|
||||
return From5[GRA](func(r C, t0 T0, t1 T1, t2 T2, t3 T3, t4 T4) func() (R, error) {
|
||||
return func() (R, error) {
|
||||
return f(r, t0, t1, t2, t3, t4)
|
||||
}})
|
||||
}
|
||||
})
|
||||
}
|
||||
|
||||
// From6 converts a function with 7 parameters returning a tuple into a function with 6 parameters returning a [GRA]
|
||||
@@ -125,7 +130,8 @@ func Eitherize6[GRA ~func(C) GIOA, F ~func(C, T0, T1, T2, T3, T4, T5) (R, error)
|
||||
return From6[GRA](func(r C, t0 T0, t1 T1, t2 T2, t3 T3, t4 T4, t5 T5) func() (R, error) {
|
||||
return func() (R, error) {
|
||||
return f(r, t0, t1, t2, t3, t4, t5)
|
||||
}})
|
||||
}
|
||||
})
|
||||
}
|
||||
|
||||
// From7 converts a function with 8 parameters returning a tuple into a function with 7 parameters returning a [GRA]
|
||||
@@ -142,7 +148,8 @@ func Eitherize7[GRA ~func(C) GIOA, F ~func(C, T0, T1, T2, T3, T4, T5, T6) (R, er
|
||||
return From7[GRA](func(r C, t0 T0, t1 T1, t2 T2, t3 T3, t4 T4, t5 T5, t6 T6) func() (R, error) {
|
||||
return func() (R, error) {
|
||||
return f(r, t0, t1, t2, t3, t4, t5, t6)
|
||||
}})
|
||||
}
|
||||
})
|
||||
}
|
||||
|
||||
// From8 converts a function with 9 parameters returning a tuple into a function with 8 parameters returning a [GRA]
|
||||
@@ -159,7 +166,8 @@ func Eitherize8[GRA ~func(C) GIOA, F ~func(C, T0, T1, T2, T3, T4, T5, T6, T7) (R
|
||||
return From8[GRA](func(r C, t0 T0, t1 T1, t2 T2, t3 T3, t4 T4, t5 T5, t6 T6, t7 T7) func() (R, error) {
|
||||
return func() (R, error) {
|
||||
return f(r, t0, t1, t2, t3, t4, t5, t6, t7)
|
||||
}})
|
||||
}
|
||||
})
|
||||
}
|
||||
|
||||
// From9 converts a function with 10 parameters returning a tuple into a function with 9 parameters returning a [GRA]
|
||||
@@ -176,7 +184,8 @@ func Eitherize9[GRA ~func(C) GIOA, F ~func(C, T0, T1, T2, T3, T4, T5, T6, T7, T8
|
||||
return From9[GRA](func(r C, t0 T0, t1 T1, t2 T2, t3 T3, t4 T4, t5 T5, t6 T6, t7 T7, t8 T8) func() (R, error) {
|
||||
return func() (R, error) {
|
||||
return f(r, t0, t1, t2, t3, t4, t5, t6, t7, t8)
|
||||
}})
|
||||
}
|
||||
})
|
||||
}
|
||||
|
||||
// From10 converts a function with 11 parameters returning a tuple into a function with 10 parameters returning a [GRA]
|
||||
@@ -193,5 +202,6 @@ func Eitherize10[GRA ~func(C) GIOA, F ~func(C, T0, T1, T2, T3, T4, T5, T6, T7, T
|
||||
return From10[GRA](func(r C, t0 T0, t1 T1, t2 T2, t3 T3, t4 T4, t5 T5, t6 T6, t7 T7, t8 T8, t9 T9) func() (R, error) {
|
||||
return func() (R, error) {
|
||||
return f(r, t0, t1, t2, t3, t4, t5, t6, t7, t8, t9)
|
||||
}})
|
||||
}
|
||||
})
|
||||
}
|
||||
|
566
tuple/gen.go
566
tuple/gen.go
@@ -4,10 +4,9 @@
|
||||
|
||||
package tuple
|
||||
|
||||
|
||||
import (
|
||||
"fmt"
|
||||
"encoding/json"
|
||||
"fmt"
|
||||
M "github.com/IBM/fp-go/monoid"
|
||||
O "github.com/IBM/fp-go/ord"
|
||||
)
|
||||
@@ -130,7 +129,7 @@ func Untupled1[F ~func(Tuple1[T1]) R, T1, R any](f F) func(T1) R {
|
||||
|
||||
// Monoid1 creates a [Monoid] for a [Tuple1] based on 1 monoids for the contained types
|
||||
func Monoid1[T1 any](m1 M.Monoid[T1]) M.Monoid[Tuple1[T1]] {
|
||||
return M.MakeMonoid(func(l, r Tuple1[T1]) Tuple1[T1]{
|
||||
return M.MakeMonoid(func(l, r Tuple1[T1]) Tuple1[T1] {
|
||||
return MakeTuple1(m1.Concat(l.F1, r.F1))
|
||||
}, MakeTuple1(m1.Empty()))
|
||||
}
|
||||
@@ -138,7 +137,9 @@ func Monoid1[T1 any](m1 M.Monoid[T1]) M.Monoid[Tuple1[T1]] {
|
||||
// Ord1 creates n [Ord] for a [Tuple1] based on 1 [Ord]s for the contained types
|
||||
func Ord1[T1 any](o1 O.Ord[T1]) O.Ord[Tuple1[T1]] {
|
||||
return O.MakeOrd(func(l, r Tuple1[T1]) int {
|
||||
if c:= o1.Compare(l.F1, r.F1); c != 0 {return c}
|
||||
if c := o1.Compare(l.F1, r.F1); c != 0 {
|
||||
return c
|
||||
}
|
||||
return 0
|
||||
}, func(l, r Tuple1[T1]) bool {
|
||||
return o1.Equals(l.F1, r.F1)
|
||||
@@ -172,10 +173,14 @@ func (t Tuple1[T1]) MarshalJSON() ([]byte, error) {
|
||||
// UnmarshalJSON unmarshals a JSON array into a [Tuple1]
|
||||
func (t *Tuple1[T1]) UnmarshalJSON(data []byte) error {
|
||||
var tmp []json.RawMessage
|
||||
if err := json.Unmarshal(data, &tmp); err != nil {return err}
|
||||
if err := json.Unmarshal(data, &tmp); err != nil {
|
||||
return err
|
||||
}
|
||||
l := len(tmp)
|
||||
if l > 0 {
|
||||
if err := json.Unmarshal(tmp[0], &t.F1); err != nil {return err}
|
||||
if err := json.Unmarshal(tmp[0], &t.F1); err != nil {
|
||||
return err
|
||||
}
|
||||
}
|
||||
return nil
|
||||
}
|
||||
@@ -230,7 +235,7 @@ func Untupled2[F ~func(Tuple2[T1, T2]) R, T1, T2, R any](f F) func(T1, T2) R {
|
||||
|
||||
// Monoid2 creates a [Monoid] for a [Tuple2] based on 2 monoids for the contained types
|
||||
func Monoid2[T1, T2 any](m1 M.Monoid[T1], m2 M.Monoid[T2]) M.Monoid[Tuple2[T1, T2]] {
|
||||
return M.MakeMonoid(func(l, r Tuple2[T1, T2]) Tuple2[T1, T2]{
|
||||
return M.MakeMonoid(func(l, r Tuple2[T1, T2]) Tuple2[T1, T2] {
|
||||
return MakeTuple2(m1.Concat(l.F1, r.F1), m2.Concat(l.F2, r.F2))
|
||||
}, MakeTuple2(m1.Empty(), m2.Empty()))
|
||||
}
|
||||
@@ -238,8 +243,12 @@ func Monoid2[T1, T2 any](m1 M.Monoid[T1], m2 M.Monoid[T2]) M.Monoid[Tuple2[T1, T
|
||||
// Ord2 creates n [Ord] for a [Tuple2] based on 2 [Ord]s for the contained types
|
||||
func Ord2[T1, T2 any](o1 O.Ord[T1], o2 O.Ord[T2]) O.Ord[Tuple2[T1, T2]] {
|
||||
return O.MakeOrd(func(l, r Tuple2[T1, T2]) int {
|
||||
if c:= o1.Compare(l.F1, r.F1); c != 0 {return c}
|
||||
if c:= o2.Compare(l.F2, r.F2); c != 0 {return c}
|
||||
if c := o1.Compare(l.F1, r.F1); c != 0 {
|
||||
return c
|
||||
}
|
||||
if c := o2.Compare(l.F2, r.F2); c != 0 {
|
||||
return c
|
||||
}
|
||||
return 0
|
||||
}, func(l, r Tuple2[T1, T2]) bool {
|
||||
return o1.Equals(l.F1, r.F1) && o2.Equals(l.F2, r.F2)
|
||||
@@ -274,13 +283,20 @@ func (t Tuple2[T1, T2]) MarshalJSON() ([]byte, error) {
|
||||
// UnmarshalJSON unmarshals a JSON array into a [Tuple2]
|
||||
func (t *Tuple2[T1, T2]) UnmarshalJSON(data []byte) error {
|
||||
var tmp []json.RawMessage
|
||||
if err := json.Unmarshal(data, &tmp); err != nil {return err}
|
||||
if err := json.Unmarshal(data, &tmp); err != nil {
|
||||
return err
|
||||
}
|
||||
l := len(tmp)
|
||||
if l > 0 {
|
||||
if err := json.Unmarshal(tmp[0], &t.F1); err != nil {return err}
|
||||
if err := json.Unmarshal(tmp[0], &t.F1); err != nil {
|
||||
return err
|
||||
}
|
||||
if l > 1 {
|
||||
if err := json.Unmarshal(tmp[1], &t.F2); err != nil {return err}
|
||||
}}
|
||||
if err := json.Unmarshal(tmp[1], &t.F2); err != nil {
|
||||
return err
|
||||
}
|
||||
}
|
||||
}
|
||||
return nil
|
||||
}
|
||||
|
||||
@@ -336,7 +352,7 @@ func Untupled3[F ~func(Tuple3[T1, T2, T3]) R, T1, T2, T3, R any](f F) func(T1, T
|
||||
|
||||
// Monoid3 creates a [Monoid] for a [Tuple3] based on 3 monoids for the contained types
|
||||
func Monoid3[T1, T2, T3 any](m1 M.Monoid[T1], m2 M.Monoid[T2], m3 M.Monoid[T3]) M.Monoid[Tuple3[T1, T2, T3]] {
|
||||
return M.MakeMonoid(func(l, r Tuple3[T1, T2, T3]) Tuple3[T1, T2, T3]{
|
||||
return M.MakeMonoid(func(l, r Tuple3[T1, T2, T3]) Tuple3[T1, T2, T3] {
|
||||
return MakeTuple3(m1.Concat(l.F1, r.F1), m2.Concat(l.F2, r.F2), m3.Concat(l.F3, r.F3))
|
||||
}, MakeTuple3(m1.Empty(), m2.Empty(), m3.Empty()))
|
||||
}
|
||||
@@ -344,9 +360,15 @@ func Monoid3[T1, T2, T3 any](m1 M.Monoid[T1], m2 M.Monoid[T2], m3 M.Monoid[T3])
|
||||
// Ord3 creates n [Ord] for a [Tuple3] based on 3 [Ord]s for the contained types
|
||||
func Ord3[T1, T2, T3 any](o1 O.Ord[T1], o2 O.Ord[T2], o3 O.Ord[T3]) O.Ord[Tuple3[T1, T2, T3]] {
|
||||
return O.MakeOrd(func(l, r Tuple3[T1, T2, T3]) int {
|
||||
if c:= o1.Compare(l.F1, r.F1); c != 0 {return c}
|
||||
if c:= o2.Compare(l.F2, r.F2); c != 0 {return c}
|
||||
if c:= o3.Compare(l.F3, r.F3); c != 0 {return c}
|
||||
if c := o1.Compare(l.F1, r.F1); c != 0 {
|
||||
return c
|
||||
}
|
||||
if c := o2.Compare(l.F2, r.F2); c != 0 {
|
||||
return c
|
||||
}
|
||||
if c := o3.Compare(l.F3, r.F3); c != 0 {
|
||||
return c
|
||||
}
|
||||
return 0
|
||||
}, func(l, r Tuple3[T1, T2, T3]) bool {
|
||||
return o1.Equals(l.F1, r.F1) && o2.Equals(l.F2, r.F2) && o3.Equals(l.F3, r.F3)
|
||||
@@ -382,15 +404,25 @@ func (t Tuple3[T1, T2, T3]) MarshalJSON() ([]byte, error) {
|
||||
// UnmarshalJSON unmarshals a JSON array into a [Tuple3]
|
||||
func (t *Tuple3[T1, T2, T3]) UnmarshalJSON(data []byte) error {
|
||||
var tmp []json.RawMessage
|
||||
if err := json.Unmarshal(data, &tmp); err != nil {return err}
|
||||
if err := json.Unmarshal(data, &tmp); err != nil {
|
||||
return err
|
||||
}
|
||||
l := len(tmp)
|
||||
if l > 0 {
|
||||
if err := json.Unmarshal(tmp[0], &t.F1); err != nil {return err}
|
||||
if err := json.Unmarshal(tmp[0], &t.F1); err != nil {
|
||||
return err
|
||||
}
|
||||
if l > 1 {
|
||||
if err := json.Unmarshal(tmp[1], &t.F2); err != nil {return err}
|
||||
if err := json.Unmarshal(tmp[1], &t.F2); err != nil {
|
||||
return err
|
||||
}
|
||||
if l > 2 {
|
||||
if err := json.Unmarshal(tmp[2], &t.F3); err != nil {return err}
|
||||
}}}
|
||||
if err := json.Unmarshal(tmp[2], &t.F3); err != nil {
|
||||
return err
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
return nil
|
||||
}
|
||||
|
||||
@@ -448,7 +480,7 @@ func Untupled4[F ~func(Tuple4[T1, T2, T3, T4]) R, T1, T2, T3, T4, R any](f F) fu
|
||||
|
||||
// Monoid4 creates a [Monoid] for a [Tuple4] based on 4 monoids for the contained types
|
||||
func Monoid4[T1, T2, T3, T4 any](m1 M.Monoid[T1], m2 M.Monoid[T2], m3 M.Monoid[T3], m4 M.Monoid[T4]) M.Monoid[Tuple4[T1, T2, T3, T4]] {
|
||||
return M.MakeMonoid(func(l, r Tuple4[T1, T2, T3, T4]) Tuple4[T1, T2, T3, T4]{
|
||||
return M.MakeMonoid(func(l, r Tuple4[T1, T2, T3, T4]) Tuple4[T1, T2, T3, T4] {
|
||||
return MakeTuple4(m1.Concat(l.F1, r.F1), m2.Concat(l.F2, r.F2), m3.Concat(l.F3, r.F3), m4.Concat(l.F4, r.F4))
|
||||
}, MakeTuple4(m1.Empty(), m2.Empty(), m3.Empty(), m4.Empty()))
|
||||
}
|
||||
@@ -456,10 +488,18 @@ func Monoid4[T1, T2, T3, T4 any](m1 M.Monoid[T1], m2 M.Monoid[T2], m3 M.Monoid[T
|
||||
// Ord4 creates n [Ord] for a [Tuple4] based on 4 [Ord]s for the contained types
|
||||
func Ord4[T1, T2, T3, T4 any](o1 O.Ord[T1], o2 O.Ord[T2], o3 O.Ord[T3], o4 O.Ord[T4]) O.Ord[Tuple4[T1, T2, T3, T4]] {
|
||||
return O.MakeOrd(func(l, r Tuple4[T1, T2, T3, T4]) int {
|
||||
if c:= o1.Compare(l.F1, r.F1); c != 0 {return c}
|
||||
if c:= o2.Compare(l.F2, r.F2); c != 0 {return c}
|
||||
if c:= o3.Compare(l.F3, r.F3); c != 0 {return c}
|
||||
if c:= o4.Compare(l.F4, r.F4); c != 0 {return c}
|
||||
if c := o1.Compare(l.F1, r.F1); c != 0 {
|
||||
return c
|
||||
}
|
||||
if c := o2.Compare(l.F2, r.F2); c != 0 {
|
||||
return c
|
||||
}
|
||||
if c := o3.Compare(l.F3, r.F3); c != 0 {
|
||||
return c
|
||||
}
|
||||
if c := o4.Compare(l.F4, r.F4); c != 0 {
|
||||
return c
|
||||
}
|
||||
return 0
|
||||
}, func(l, r Tuple4[T1, T2, T3, T4]) bool {
|
||||
return o1.Equals(l.F1, r.F1) && o2.Equals(l.F2, r.F2) && o3.Equals(l.F3, r.F3) && o4.Equals(l.F4, r.F4)
|
||||
@@ -496,17 +536,30 @@ func (t Tuple4[T1, T2, T3, T4]) MarshalJSON() ([]byte, error) {
|
||||
// UnmarshalJSON unmarshals a JSON array into a [Tuple4]
|
||||
func (t *Tuple4[T1, T2, T3, T4]) UnmarshalJSON(data []byte) error {
|
||||
var tmp []json.RawMessage
|
||||
if err := json.Unmarshal(data, &tmp); err != nil {return err}
|
||||
if err := json.Unmarshal(data, &tmp); err != nil {
|
||||
return err
|
||||
}
|
||||
l := len(tmp)
|
||||
if l > 0 {
|
||||
if err := json.Unmarshal(tmp[0], &t.F1); err != nil {return err}
|
||||
if err := json.Unmarshal(tmp[0], &t.F1); err != nil {
|
||||
return err
|
||||
}
|
||||
if l > 1 {
|
||||
if err := json.Unmarshal(tmp[1], &t.F2); err != nil {return err}
|
||||
if err := json.Unmarshal(tmp[1], &t.F2); err != nil {
|
||||
return err
|
||||
}
|
||||
if l > 2 {
|
||||
if err := json.Unmarshal(tmp[2], &t.F3); err != nil {return err}
|
||||
if err := json.Unmarshal(tmp[2], &t.F3); err != nil {
|
||||
return err
|
||||
}
|
||||
if l > 3 {
|
||||
if err := json.Unmarshal(tmp[3], &t.F4); err != nil {return err}
|
||||
}}}}
|
||||
if err := json.Unmarshal(tmp[3], &t.F4); err != nil {
|
||||
return err
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
return nil
|
||||
}
|
||||
|
||||
@@ -566,7 +619,7 @@ func Untupled5[F ~func(Tuple5[T1, T2, T3, T4, T5]) R, T1, T2, T3, T4, T5, R any]
|
||||
|
||||
// Monoid5 creates a [Monoid] for a [Tuple5] based on 5 monoids for the contained types
|
||||
func Monoid5[T1, T2, T3, T4, T5 any](m1 M.Monoid[T1], m2 M.Monoid[T2], m3 M.Monoid[T3], m4 M.Monoid[T4], m5 M.Monoid[T5]) M.Monoid[Tuple5[T1, T2, T3, T4, T5]] {
|
||||
return M.MakeMonoid(func(l, r Tuple5[T1, T2, T3, T4, T5]) Tuple5[T1, T2, T3, T4, T5]{
|
||||
return M.MakeMonoid(func(l, r Tuple5[T1, T2, T3, T4, T5]) Tuple5[T1, T2, T3, T4, T5] {
|
||||
return MakeTuple5(m1.Concat(l.F1, r.F1), m2.Concat(l.F2, r.F2), m3.Concat(l.F3, r.F3), m4.Concat(l.F4, r.F4), m5.Concat(l.F5, r.F5))
|
||||
}, MakeTuple5(m1.Empty(), m2.Empty(), m3.Empty(), m4.Empty(), m5.Empty()))
|
||||
}
|
||||
@@ -574,11 +627,21 @@ func Monoid5[T1, T2, T3, T4, T5 any](m1 M.Monoid[T1], m2 M.Monoid[T2], m3 M.Mono
|
||||
// Ord5 creates n [Ord] for a [Tuple5] based on 5 [Ord]s for the contained types
|
||||
func Ord5[T1, T2, T3, T4, T5 any](o1 O.Ord[T1], o2 O.Ord[T2], o3 O.Ord[T3], o4 O.Ord[T4], o5 O.Ord[T5]) O.Ord[Tuple5[T1, T2, T3, T4, T5]] {
|
||||
return O.MakeOrd(func(l, r Tuple5[T1, T2, T3, T4, T5]) int {
|
||||
if c:= o1.Compare(l.F1, r.F1); c != 0 {return c}
|
||||
if c:= o2.Compare(l.F2, r.F2); c != 0 {return c}
|
||||
if c:= o3.Compare(l.F3, r.F3); c != 0 {return c}
|
||||
if c:= o4.Compare(l.F4, r.F4); c != 0 {return c}
|
||||
if c:= o5.Compare(l.F5, r.F5); c != 0 {return c}
|
||||
if c := o1.Compare(l.F1, r.F1); c != 0 {
|
||||
return c
|
||||
}
|
||||
if c := o2.Compare(l.F2, r.F2); c != 0 {
|
||||
return c
|
||||
}
|
||||
if c := o3.Compare(l.F3, r.F3); c != 0 {
|
||||
return c
|
||||
}
|
||||
if c := o4.Compare(l.F4, r.F4); c != 0 {
|
||||
return c
|
||||
}
|
||||
if c := o5.Compare(l.F5, r.F5); c != 0 {
|
||||
return c
|
||||
}
|
||||
return 0
|
||||
}, func(l, r Tuple5[T1, T2, T3, T4, T5]) bool {
|
||||
return o1.Equals(l.F1, r.F1) && o2.Equals(l.F2, r.F2) && o3.Equals(l.F3, r.F3) && o4.Equals(l.F4, r.F4) && o5.Equals(l.F5, r.F5)
|
||||
@@ -616,19 +679,35 @@ func (t Tuple5[T1, T2, T3, T4, T5]) MarshalJSON() ([]byte, error) {
|
||||
// UnmarshalJSON unmarshals a JSON array into a [Tuple5]
|
||||
func (t *Tuple5[T1, T2, T3, T4, T5]) UnmarshalJSON(data []byte) error {
|
||||
var tmp []json.RawMessage
|
||||
if err := json.Unmarshal(data, &tmp); err != nil {return err}
|
||||
if err := json.Unmarshal(data, &tmp); err != nil {
|
||||
return err
|
||||
}
|
||||
l := len(tmp)
|
||||
if l > 0 {
|
||||
if err := json.Unmarshal(tmp[0], &t.F1); err != nil {return err}
|
||||
if err := json.Unmarshal(tmp[0], &t.F1); err != nil {
|
||||
return err
|
||||
}
|
||||
if l > 1 {
|
||||
if err := json.Unmarshal(tmp[1], &t.F2); err != nil {return err}
|
||||
if err := json.Unmarshal(tmp[1], &t.F2); err != nil {
|
||||
return err
|
||||
}
|
||||
if l > 2 {
|
||||
if err := json.Unmarshal(tmp[2], &t.F3); err != nil {return err}
|
||||
if err := json.Unmarshal(tmp[2], &t.F3); err != nil {
|
||||
return err
|
||||
}
|
||||
if l > 3 {
|
||||
if err := json.Unmarshal(tmp[3], &t.F4); err != nil {return err}
|
||||
if err := json.Unmarshal(tmp[3], &t.F4); err != nil {
|
||||
return err
|
||||
}
|
||||
if l > 4 {
|
||||
if err := json.Unmarshal(tmp[4], &t.F5); err != nil {return err}
|
||||
}}}}}
|
||||
if err := json.Unmarshal(tmp[4], &t.F5); err != nil {
|
||||
return err
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
return nil
|
||||
}
|
||||
|
||||
@@ -690,7 +769,7 @@ func Untupled6[F ~func(Tuple6[T1, T2, T3, T4, T5, T6]) R, T1, T2, T3, T4, T5, T6
|
||||
|
||||
// Monoid6 creates a [Monoid] for a [Tuple6] based on 6 monoids for the contained types
|
||||
func Monoid6[T1, T2, T3, T4, T5, T6 any](m1 M.Monoid[T1], m2 M.Monoid[T2], m3 M.Monoid[T3], m4 M.Monoid[T4], m5 M.Monoid[T5], m6 M.Monoid[T6]) M.Monoid[Tuple6[T1, T2, T3, T4, T5, T6]] {
|
||||
return M.MakeMonoid(func(l, r Tuple6[T1, T2, T3, T4, T5, T6]) Tuple6[T1, T2, T3, T4, T5, T6]{
|
||||
return M.MakeMonoid(func(l, r Tuple6[T1, T2, T3, T4, T5, T6]) Tuple6[T1, T2, T3, T4, T5, T6] {
|
||||
return MakeTuple6(m1.Concat(l.F1, r.F1), m2.Concat(l.F2, r.F2), m3.Concat(l.F3, r.F3), m4.Concat(l.F4, r.F4), m5.Concat(l.F5, r.F5), m6.Concat(l.F6, r.F6))
|
||||
}, MakeTuple6(m1.Empty(), m2.Empty(), m3.Empty(), m4.Empty(), m5.Empty(), m6.Empty()))
|
||||
}
|
||||
@@ -698,12 +777,24 @@ func Monoid6[T1, T2, T3, T4, T5, T6 any](m1 M.Monoid[T1], m2 M.Monoid[T2], m3 M.
|
||||
// Ord6 creates n [Ord] for a [Tuple6] based on 6 [Ord]s for the contained types
|
||||
func Ord6[T1, T2, T3, T4, T5, T6 any](o1 O.Ord[T1], o2 O.Ord[T2], o3 O.Ord[T3], o4 O.Ord[T4], o5 O.Ord[T5], o6 O.Ord[T6]) O.Ord[Tuple6[T1, T2, T3, T4, T5, T6]] {
|
||||
return O.MakeOrd(func(l, r Tuple6[T1, T2, T3, T4, T5, T6]) int {
|
||||
if c:= o1.Compare(l.F1, r.F1); c != 0 {return c}
|
||||
if c:= o2.Compare(l.F2, r.F2); c != 0 {return c}
|
||||
if c:= o3.Compare(l.F3, r.F3); c != 0 {return c}
|
||||
if c:= o4.Compare(l.F4, r.F4); c != 0 {return c}
|
||||
if c:= o5.Compare(l.F5, r.F5); c != 0 {return c}
|
||||
if c:= o6.Compare(l.F6, r.F6); c != 0 {return c}
|
||||
if c := o1.Compare(l.F1, r.F1); c != 0 {
|
||||
return c
|
||||
}
|
||||
if c := o2.Compare(l.F2, r.F2); c != 0 {
|
||||
return c
|
||||
}
|
||||
if c := o3.Compare(l.F3, r.F3); c != 0 {
|
||||
return c
|
||||
}
|
||||
if c := o4.Compare(l.F4, r.F4); c != 0 {
|
||||
return c
|
||||
}
|
||||
if c := o5.Compare(l.F5, r.F5); c != 0 {
|
||||
return c
|
||||
}
|
||||
if c := o6.Compare(l.F6, r.F6); c != 0 {
|
||||
return c
|
||||
}
|
||||
return 0
|
||||
}, func(l, r Tuple6[T1, T2, T3, T4, T5, T6]) bool {
|
||||
return o1.Equals(l.F1, r.F1) && o2.Equals(l.F2, r.F2) && o3.Equals(l.F3, r.F3) && o4.Equals(l.F4, r.F4) && o5.Equals(l.F5, r.F5) && o6.Equals(l.F6, r.F6)
|
||||
@@ -742,21 +833,40 @@ func (t Tuple6[T1, T2, T3, T4, T5, T6]) MarshalJSON() ([]byte, error) {
|
||||
// UnmarshalJSON unmarshals a JSON array into a [Tuple6]
|
||||
func (t *Tuple6[T1, T2, T3, T4, T5, T6]) UnmarshalJSON(data []byte) error {
|
||||
var tmp []json.RawMessage
|
||||
if err := json.Unmarshal(data, &tmp); err != nil {return err}
|
||||
if err := json.Unmarshal(data, &tmp); err != nil {
|
||||
return err
|
||||
}
|
||||
l := len(tmp)
|
||||
if l > 0 {
|
||||
if err := json.Unmarshal(tmp[0], &t.F1); err != nil {return err}
|
||||
if err := json.Unmarshal(tmp[0], &t.F1); err != nil {
|
||||
return err
|
||||
}
|
||||
if l > 1 {
|
||||
if err := json.Unmarshal(tmp[1], &t.F2); err != nil {return err}
|
||||
if err := json.Unmarshal(tmp[1], &t.F2); err != nil {
|
||||
return err
|
||||
}
|
||||
if l > 2 {
|
||||
if err := json.Unmarshal(tmp[2], &t.F3); err != nil {return err}
|
||||
if err := json.Unmarshal(tmp[2], &t.F3); err != nil {
|
||||
return err
|
||||
}
|
||||
if l > 3 {
|
||||
if err := json.Unmarshal(tmp[3], &t.F4); err != nil {return err}
|
||||
if err := json.Unmarshal(tmp[3], &t.F4); err != nil {
|
||||
return err
|
||||
}
|
||||
if l > 4 {
|
||||
if err := json.Unmarshal(tmp[4], &t.F5); err != nil {return err}
|
||||
if err := json.Unmarshal(tmp[4], &t.F5); err != nil {
|
||||
return err
|
||||
}
|
||||
if l > 5 {
|
||||
if err := json.Unmarshal(tmp[5], &t.F6); err != nil {return err}
|
||||
}}}}}}
|
||||
if err := json.Unmarshal(tmp[5], &t.F6); err != nil {
|
||||
return err
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
return nil
|
||||
}
|
||||
|
||||
@@ -820,7 +930,7 @@ func Untupled7[F ~func(Tuple7[T1, T2, T3, T4, T5, T6, T7]) R, T1, T2, T3, T4, T5
|
||||
|
||||
// Monoid7 creates a [Monoid] for a [Tuple7] based on 7 monoids for the contained types
|
||||
func Monoid7[T1, T2, T3, T4, T5, T6, T7 any](m1 M.Monoid[T1], m2 M.Monoid[T2], m3 M.Monoid[T3], m4 M.Monoid[T4], m5 M.Monoid[T5], m6 M.Monoid[T6], m7 M.Monoid[T7]) M.Monoid[Tuple7[T1, T2, T3, T4, T5, T6, T7]] {
|
||||
return M.MakeMonoid(func(l, r Tuple7[T1, T2, T3, T4, T5, T6, T7]) Tuple7[T1, T2, T3, T4, T5, T6, T7]{
|
||||
return M.MakeMonoid(func(l, r Tuple7[T1, T2, T3, T4, T5, T6, T7]) Tuple7[T1, T2, T3, T4, T5, T6, T7] {
|
||||
return MakeTuple7(m1.Concat(l.F1, r.F1), m2.Concat(l.F2, r.F2), m3.Concat(l.F3, r.F3), m4.Concat(l.F4, r.F4), m5.Concat(l.F5, r.F5), m6.Concat(l.F6, r.F6), m7.Concat(l.F7, r.F7))
|
||||
}, MakeTuple7(m1.Empty(), m2.Empty(), m3.Empty(), m4.Empty(), m5.Empty(), m6.Empty(), m7.Empty()))
|
||||
}
|
||||
@@ -828,13 +938,27 @@ func Monoid7[T1, T2, T3, T4, T5, T6, T7 any](m1 M.Monoid[T1], m2 M.Monoid[T2], m
|
||||
// Ord7 creates n [Ord] for a [Tuple7] based on 7 [Ord]s for the contained types
|
||||
func Ord7[T1, T2, T3, T4, T5, T6, T7 any](o1 O.Ord[T1], o2 O.Ord[T2], o3 O.Ord[T3], o4 O.Ord[T4], o5 O.Ord[T5], o6 O.Ord[T6], o7 O.Ord[T7]) O.Ord[Tuple7[T1, T2, T3, T4, T5, T6, T7]] {
|
||||
return O.MakeOrd(func(l, r Tuple7[T1, T2, T3, T4, T5, T6, T7]) int {
|
||||
if c:= o1.Compare(l.F1, r.F1); c != 0 {return c}
|
||||
if c:= o2.Compare(l.F2, r.F2); c != 0 {return c}
|
||||
if c:= o3.Compare(l.F3, r.F3); c != 0 {return c}
|
||||
if c:= o4.Compare(l.F4, r.F4); c != 0 {return c}
|
||||
if c:= o5.Compare(l.F5, r.F5); c != 0 {return c}
|
||||
if c:= o6.Compare(l.F6, r.F6); c != 0 {return c}
|
||||
if c:= o7.Compare(l.F7, r.F7); c != 0 {return c}
|
||||
if c := o1.Compare(l.F1, r.F1); c != 0 {
|
||||
return c
|
||||
}
|
||||
if c := o2.Compare(l.F2, r.F2); c != 0 {
|
||||
return c
|
||||
}
|
||||
if c := o3.Compare(l.F3, r.F3); c != 0 {
|
||||
return c
|
||||
}
|
||||
if c := o4.Compare(l.F4, r.F4); c != 0 {
|
||||
return c
|
||||
}
|
||||
if c := o5.Compare(l.F5, r.F5); c != 0 {
|
||||
return c
|
||||
}
|
||||
if c := o6.Compare(l.F6, r.F6); c != 0 {
|
||||
return c
|
||||
}
|
||||
if c := o7.Compare(l.F7, r.F7); c != 0 {
|
||||
return c
|
||||
}
|
||||
return 0
|
||||
}, func(l, r Tuple7[T1, T2, T3, T4, T5, T6, T7]) bool {
|
||||
return o1.Equals(l.F1, r.F1) && o2.Equals(l.F2, r.F2) && o3.Equals(l.F3, r.F3) && o4.Equals(l.F4, r.F4) && o5.Equals(l.F5, r.F5) && o6.Equals(l.F6, r.F6) && o7.Equals(l.F7, r.F7)
|
||||
@@ -874,23 +998,45 @@ func (t Tuple7[T1, T2, T3, T4, T5, T6, T7]) MarshalJSON() ([]byte, error) {
|
||||
// UnmarshalJSON unmarshals a JSON array into a [Tuple7]
|
||||
func (t *Tuple7[T1, T2, T3, T4, T5, T6, T7]) UnmarshalJSON(data []byte) error {
|
||||
var tmp []json.RawMessage
|
||||
if err := json.Unmarshal(data, &tmp); err != nil {return err}
|
||||
if err := json.Unmarshal(data, &tmp); err != nil {
|
||||
return err
|
||||
}
|
||||
l := len(tmp)
|
||||
if l > 0 {
|
||||
if err := json.Unmarshal(tmp[0], &t.F1); err != nil {return err}
|
||||
if err := json.Unmarshal(tmp[0], &t.F1); err != nil {
|
||||
return err
|
||||
}
|
||||
if l > 1 {
|
||||
if err := json.Unmarshal(tmp[1], &t.F2); err != nil {return err}
|
||||
if err := json.Unmarshal(tmp[1], &t.F2); err != nil {
|
||||
return err
|
||||
}
|
||||
if l > 2 {
|
||||
if err := json.Unmarshal(tmp[2], &t.F3); err != nil {return err}
|
||||
if err := json.Unmarshal(tmp[2], &t.F3); err != nil {
|
||||
return err
|
||||
}
|
||||
if l > 3 {
|
||||
if err := json.Unmarshal(tmp[3], &t.F4); err != nil {return err}
|
||||
if err := json.Unmarshal(tmp[3], &t.F4); err != nil {
|
||||
return err
|
||||
}
|
||||
if l > 4 {
|
||||
if err := json.Unmarshal(tmp[4], &t.F5); err != nil {return err}
|
||||
if err := json.Unmarshal(tmp[4], &t.F5); err != nil {
|
||||
return err
|
||||
}
|
||||
if l > 5 {
|
||||
if err := json.Unmarshal(tmp[5], &t.F6); err != nil {return err}
|
||||
if err := json.Unmarshal(tmp[5], &t.F6); err != nil {
|
||||
return err
|
||||
}
|
||||
if l > 6 {
|
||||
if err := json.Unmarshal(tmp[6], &t.F7); err != nil {return err}
|
||||
}}}}}}}
|
||||
if err := json.Unmarshal(tmp[6], &t.F7); err != nil {
|
||||
return err
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
return nil
|
||||
}
|
||||
|
||||
@@ -956,7 +1102,7 @@ func Untupled8[F ~func(Tuple8[T1, T2, T3, T4, T5, T6, T7, T8]) R, T1, T2, T3, T4
|
||||
|
||||
// Monoid8 creates a [Monoid] for a [Tuple8] based on 8 monoids for the contained types
|
||||
func Monoid8[T1, T2, T3, T4, T5, T6, T7, T8 any](m1 M.Monoid[T1], m2 M.Monoid[T2], m3 M.Monoid[T3], m4 M.Monoid[T4], m5 M.Monoid[T5], m6 M.Monoid[T6], m7 M.Monoid[T7], m8 M.Monoid[T8]) M.Monoid[Tuple8[T1, T2, T3, T4, T5, T6, T7, T8]] {
|
||||
return M.MakeMonoid(func(l, r Tuple8[T1, T2, T3, T4, T5, T6, T7, T8]) Tuple8[T1, T2, T3, T4, T5, T6, T7, T8]{
|
||||
return M.MakeMonoid(func(l, r Tuple8[T1, T2, T3, T4, T5, T6, T7, T8]) Tuple8[T1, T2, T3, T4, T5, T6, T7, T8] {
|
||||
return MakeTuple8(m1.Concat(l.F1, r.F1), m2.Concat(l.F2, r.F2), m3.Concat(l.F3, r.F3), m4.Concat(l.F4, r.F4), m5.Concat(l.F5, r.F5), m6.Concat(l.F6, r.F6), m7.Concat(l.F7, r.F7), m8.Concat(l.F8, r.F8))
|
||||
}, MakeTuple8(m1.Empty(), m2.Empty(), m3.Empty(), m4.Empty(), m5.Empty(), m6.Empty(), m7.Empty(), m8.Empty()))
|
||||
}
|
||||
@@ -964,14 +1110,30 @@ func Monoid8[T1, T2, T3, T4, T5, T6, T7, T8 any](m1 M.Monoid[T1], m2 M.Monoid[T2
|
||||
// Ord8 creates n [Ord] for a [Tuple8] based on 8 [Ord]s for the contained types
|
||||
func Ord8[T1, T2, T3, T4, T5, T6, T7, T8 any](o1 O.Ord[T1], o2 O.Ord[T2], o3 O.Ord[T3], o4 O.Ord[T4], o5 O.Ord[T5], o6 O.Ord[T6], o7 O.Ord[T7], o8 O.Ord[T8]) O.Ord[Tuple8[T1, T2, T3, T4, T5, T6, T7, T8]] {
|
||||
return O.MakeOrd(func(l, r Tuple8[T1, T2, T3, T4, T5, T6, T7, T8]) int {
|
||||
if c:= o1.Compare(l.F1, r.F1); c != 0 {return c}
|
||||
if c:= o2.Compare(l.F2, r.F2); c != 0 {return c}
|
||||
if c:= o3.Compare(l.F3, r.F3); c != 0 {return c}
|
||||
if c:= o4.Compare(l.F4, r.F4); c != 0 {return c}
|
||||
if c:= o5.Compare(l.F5, r.F5); c != 0 {return c}
|
||||
if c:= o6.Compare(l.F6, r.F6); c != 0 {return c}
|
||||
if c:= o7.Compare(l.F7, r.F7); c != 0 {return c}
|
||||
if c:= o8.Compare(l.F8, r.F8); c != 0 {return c}
|
||||
if c := o1.Compare(l.F1, r.F1); c != 0 {
|
||||
return c
|
||||
}
|
||||
if c := o2.Compare(l.F2, r.F2); c != 0 {
|
||||
return c
|
||||
}
|
||||
if c := o3.Compare(l.F3, r.F3); c != 0 {
|
||||
return c
|
||||
}
|
||||
if c := o4.Compare(l.F4, r.F4); c != 0 {
|
||||
return c
|
||||
}
|
||||
if c := o5.Compare(l.F5, r.F5); c != 0 {
|
||||
return c
|
||||
}
|
||||
if c := o6.Compare(l.F6, r.F6); c != 0 {
|
||||
return c
|
||||
}
|
||||
if c := o7.Compare(l.F7, r.F7); c != 0 {
|
||||
return c
|
||||
}
|
||||
if c := o8.Compare(l.F8, r.F8); c != 0 {
|
||||
return c
|
||||
}
|
||||
return 0
|
||||
}, func(l, r Tuple8[T1, T2, T3, T4, T5, T6, T7, T8]) bool {
|
||||
return o1.Equals(l.F1, r.F1) && o2.Equals(l.F2, r.F2) && o3.Equals(l.F3, r.F3) && o4.Equals(l.F4, r.F4) && o5.Equals(l.F5, r.F5) && o6.Equals(l.F6, r.F6) && o7.Equals(l.F7, r.F7) && o8.Equals(l.F8, r.F8)
|
||||
@@ -1012,25 +1174,50 @@ func (t Tuple8[T1, T2, T3, T4, T5, T6, T7, T8]) MarshalJSON() ([]byte, error) {
|
||||
// UnmarshalJSON unmarshals a JSON array into a [Tuple8]
|
||||
func (t *Tuple8[T1, T2, T3, T4, T5, T6, T7, T8]) UnmarshalJSON(data []byte) error {
|
||||
var tmp []json.RawMessage
|
||||
if err := json.Unmarshal(data, &tmp); err != nil {return err}
|
||||
if err := json.Unmarshal(data, &tmp); err != nil {
|
||||
return err
|
||||
}
|
||||
l := len(tmp)
|
||||
if l > 0 {
|
||||
if err := json.Unmarshal(tmp[0], &t.F1); err != nil {return err}
|
||||
if err := json.Unmarshal(tmp[0], &t.F1); err != nil {
|
||||
return err
|
||||
}
|
||||
if l > 1 {
|
||||
if err := json.Unmarshal(tmp[1], &t.F2); err != nil {return err}
|
||||
if err := json.Unmarshal(tmp[1], &t.F2); err != nil {
|
||||
return err
|
||||
}
|
||||
if l > 2 {
|
||||
if err := json.Unmarshal(tmp[2], &t.F3); err != nil {return err}
|
||||
if err := json.Unmarshal(tmp[2], &t.F3); err != nil {
|
||||
return err
|
||||
}
|
||||
if l > 3 {
|
||||
if err := json.Unmarshal(tmp[3], &t.F4); err != nil {return err}
|
||||
if err := json.Unmarshal(tmp[3], &t.F4); err != nil {
|
||||
return err
|
||||
}
|
||||
if l > 4 {
|
||||
if err := json.Unmarshal(tmp[4], &t.F5); err != nil {return err}
|
||||
if err := json.Unmarshal(tmp[4], &t.F5); err != nil {
|
||||
return err
|
||||
}
|
||||
if l > 5 {
|
||||
if err := json.Unmarshal(tmp[5], &t.F6); err != nil {return err}
|
||||
if err := json.Unmarshal(tmp[5], &t.F6); err != nil {
|
||||
return err
|
||||
}
|
||||
if l > 6 {
|
||||
if err := json.Unmarshal(tmp[6], &t.F7); err != nil {return err}
|
||||
if err := json.Unmarshal(tmp[6], &t.F7); err != nil {
|
||||
return err
|
||||
}
|
||||
if l > 7 {
|
||||
if err := json.Unmarshal(tmp[7], &t.F8); err != nil {return err}
|
||||
}}}}}}}}
|
||||
if err := json.Unmarshal(tmp[7], &t.F8); err != nil {
|
||||
return err
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
return nil
|
||||
}
|
||||
|
||||
@@ -1098,7 +1285,7 @@ func Untupled9[F ~func(Tuple9[T1, T2, T3, T4, T5, T6, T7, T8, T9]) R, T1, T2, T3
|
||||
|
||||
// Monoid9 creates a [Monoid] for a [Tuple9] based on 9 monoids for the contained types
|
||||
func Monoid9[T1, T2, T3, T4, T5, T6, T7, T8, T9 any](m1 M.Monoid[T1], m2 M.Monoid[T2], m3 M.Monoid[T3], m4 M.Monoid[T4], m5 M.Monoid[T5], m6 M.Monoid[T6], m7 M.Monoid[T7], m8 M.Monoid[T8], m9 M.Monoid[T9]) M.Monoid[Tuple9[T1, T2, T3, T4, T5, T6, T7, T8, T9]] {
|
||||
return M.MakeMonoid(func(l, r Tuple9[T1, T2, T3, T4, T5, T6, T7, T8, T9]) Tuple9[T1, T2, T3, T4, T5, T6, T7, T8, T9]{
|
||||
return M.MakeMonoid(func(l, r Tuple9[T1, T2, T3, T4, T5, T6, T7, T8, T9]) Tuple9[T1, T2, T3, T4, T5, T6, T7, T8, T9] {
|
||||
return MakeTuple9(m1.Concat(l.F1, r.F1), m2.Concat(l.F2, r.F2), m3.Concat(l.F3, r.F3), m4.Concat(l.F4, r.F4), m5.Concat(l.F5, r.F5), m6.Concat(l.F6, r.F6), m7.Concat(l.F7, r.F7), m8.Concat(l.F8, r.F8), m9.Concat(l.F9, r.F9))
|
||||
}, MakeTuple9(m1.Empty(), m2.Empty(), m3.Empty(), m4.Empty(), m5.Empty(), m6.Empty(), m7.Empty(), m8.Empty(), m9.Empty()))
|
||||
}
|
||||
@@ -1106,15 +1293,33 @@ func Monoid9[T1, T2, T3, T4, T5, T6, T7, T8, T9 any](m1 M.Monoid[T1], m2 M.Monoi
|
||||
// Ord9 creates n [Ord] for a [Tuple9] based on 9 [Ord]s for the contained types
|
||||
func Ord9[T1, T2, T3, T4, T5, T6, T7, T8, T9 any](o1 O.Ord[T1], o2 O.Ord[T2], o3 O.Ord[T3], o4 O.Ord[T4], o5 O.Ord[T5], o6 O.Ord[T6], o7 O.Ord[T7], o8 O.Ord[T8], o9 O.Ord[T9]) O.Ord[Tuple9[T1, T2, T3, T4, T5, T6, T7, T8, T9]] {
|
||||
return O.MakeOrd(func(l, r Tuple9[T1, T2, T3, T4, T5, T6, T7, T8, T9]) int {
|
||||
if c:= o1.Compare(l.F1, r.F1); c != 0 {return c}
|
||||
if c:= o2.Compare(l.F2, r.F2); c != 0 {return c}
|
||||
if c:= o3.Compare(l.F3, r.F3); c != 0 {return c}
|
||||
if c:= o4.Compare(l.F4, r.F4); c != 0 {return c}
|
||||
if c:= o5.Compare(l.F5, r.F5); c != 0 {return c}
|
||||
if c:= o6.Compare(l.F6, r.F6); c != 0 {return c}
|
||||
if c:= o7.Compare(l.F7, r.F7); c != 0 {return c}
|
||||
if c:= o8.Compare(l.F8, r.F8); c != 0 {return c}
|
||||
if c:= o9.Compare(l.F9, r.F9); c != 0 {return c}
|
||||
if c := o1.Compare(l.F1, r.F1); c != 0 {
|
||||
return c
|
||||
}
|
||||
if c := o2.Compare(l.F2, r.F2); c != 0 {
|
||||
return c
|
||||
}
|
||||
if c := o3.Compare(l.F3, r.F3); c != 0 {
|
||||
return c
|
||||
}
|
||||
if c := o4.Compare(l.F4, r.F4); c != 0 {
|
||||
return c
|
||||
}
|
||||
if c := o5.Compare(l.F5, r.F5); c != 0 {
|
||||
return c
|
||||
}
|
||||
if c := o6.Compare(l.F6, r.F6); c != 0 {
|
||||
return c
|
||||
}
|
||||
if c := o7.Compare(l.F7, r.F7); c != 0 {
|
||||
return c
|
||||
}
|
||||
if c := o8.Compare(l.F8, r.F8); c != 0 {
|
||||
return c
|
||||
}
|
||||
if c := o9.Compare(l.F9, r.F9); c != 0 {
|
||||
return c
|
||||
}
|
||||
return 0
|
||||
}, func(l, r Tuple9[T1, T2, T3, T4, T5, T6, T7, T8, T9]) bool {
|
||||
return o1.Equals(l.F1, r.F1) && o2.Equals(l.F2, r.F2) && o3.Equals(l.F3, r.F3) && o4.Equals(l.F4, r.F4) && o5.Equals(l.F5, r.F5) && o6.Equals(l.F6, r.F6) && o7.Equals(l.F7, r.F7) && o8.Equals(l.F8, r.F8) && o9.Equals(l.F9, r.F9)
|
||||
@@ -1156,27 +1361,55 @@ func (t Tuple9[T1, T2, T3, T4, T5, T6, T7, T8, T9]) MarshalJSON() ([]byte, error
|
||||
// UnmarshalJSON unmarshals a JSON array into a [Tuple9]
|
||||
func (t *Tuple9[T1, T2, T3, T4, T5, T6, T7, T8, T9]) UnmarshalJSON(data []byte) error {
|
||||
var tmp []json.RawMessage
|
||||
if err := json.Unmarshal(data, &tmp); err != nil {return err}
|
||||
if err := json.Unmarshal(data, &tmp); err != nil {
|
||||
return err
|
||||
}
|
||||
l := len(tmp)
|
||||
if l > 0 {
|
||||
if err := json.Unmarshal(tmp[0], &t.F1); err != nil {return err}
|
||||
if err := json.Unmarshal(tmp[0], &t.F1); err != nil {
|
||||
return err
|
||||
}
|
||||
if l > 1 {
|
||||
if err := json.Unmarshal(tmp[1], &t.F2); err != nil {return err}
|
||||
if err := json.Unmarshal(tmp[1], &t.F2); err != nil {
|
||||
return err
|
||||
}
|
||||
if l > 2 {
|
||||
if err := json.Unmarshal(tmp[2], &t.F3); err != nil {return err}
|
||||
if err := json.Unmarshal(tmp[2], &t.F3); err != nil {
|
||||
return err
|
||||
}
|
||||
if l > 3 {
|
||||
if err := json.Unmarshal(tmp[3], &t.F4); err != nil {return err}
|
||||
if err := json.Unmarshal(tmp[3], &t.F4); err != nil {
|
||||
return err
|
||||
}
|
||||
if l > 4 {
|
||||
if err := json.Unmarshal(tmp[4], &t.F5); err != nil {return err}
|
||||
if err := json.Unmarshal(tmp[4], &t.F5); err != nil {
|
||||
return err
|
||||
}
|
||||
if l > 5 {
|
||||
if err := json.Unmarshal(tmp[5], &t.F6); err != nil {return err}
|
||||
if err := json.Unmarshal(tmp[5], &t.F6); err != nil {
|
||||
return err
|
||||
}
|
||||
if l > 6 {
|
||||
if err := json.Unmarshal(tmp[6], &t.F7); err != nil {return err}
|
||||
if err := json.Unmarshal(tmp[6], &t.F7); err != nil {
|
||||
return err
|
||||
}
|
||||
if l > 7 {
|
||||
if err := json.Unmarshal(tmp[7], &t.F8); err != nil {return err}
|
||||
if err := json.Unmarshal(tmp[7], &t.F8); err != nil {
|
||||
return err
|
||||
}
|
||||
if l > 8 {
|
||||
if err := json.Unmarshal(tmp[8], &t.F9); err != nil {return err}
|
||||
}}}}}}}}}
|
||||
if err := json.Unmarshal(tmp[8], &t.F9); err != nil {
|
||||
return err
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
return nil
|
||||
}
|
||||
|
||||
@@ -1246,7 +1479,7 @@ func Untupled10[F ~func(Tuple10[T1, T2, T3, T4, T5, T6, T7, T8, T9, T10]) R, T1,
|
||||
|
||||
// Monoid10 creates a [Monoid] for a [Tuple10] based on 10 monoids for the contained types
|
||||
func Monoid10[T1, T2, T3, T4, T5, T6, T7, T8, T9, T10 any](m1 M.Monoid[T1], m2 M.Monoid[T2], m3 M.Monoid[T3], m4 M.Monoid[T4], m5 M.Monoid[T5], m6 M.Monoid[T6], m7 M.Monoid[T7], m8 M.Monoid[T8], m9 M.Monoid[T9], m10 M.Monoid[T10]) M.Monoid[Tuple10[T1, T2, T3, T4, T5, T6, T7, T8, T9, T10]] {
|
||||
return M.MakeMonoid(func(l, r Tuple10[T1, T2, T3, T4, T5, T6, T7, T8, T9, T10]) Tuple10[T1, T2, T3, T4, T5, T6, T7, T8, T9, T10]{
|
||||
return M.MakeMonoid(func(l, r Tuple10[T1, T2, T3, T4, T5, T6, T7, T8, T9, T10]) Tuple10[T1, T2, T3, T4, T5, T6, T7, T8, T9, T10] {
|
||||
return MakeTuple10(m1.Concat(l.F1, r.F1), m2.Concat(l.F2, r.F2), m3.Concat(l.F3, r.F3), m4.Concat(l.F4, r.F4), m5.Concat(l.F5, r.F5), m6.Concat(l.F6, r.F6), m7.Concat(l.F7, r.F7), m8.Concat(l.F8, r.F8), m9.Concat(l.F9, r.F9), m10.Concat(l.F10, r.F10))
|
||||
}, MakeTuple10(m1.Empty(), m2.Empty(), m3.Empty(), m4.Empty(), m5.Empty(), m6.Empty(), m7.Empty(), m8.Empty(), m9.Empty(), m10.Empty()))
|
||||
}
|
||||
@@ -1254,16 +1487,36 @@ func Monoid10[T1, T2, T3, T4, T5, T6, T7, T8, T9, T10 any](m1 M.Monoid[T1], m2 M
|
||||
// Ord10 creates n [Ord] for a [Tuple10] based on 10 [Ord]s for the contained types
|
||||
func Ord10[T1, T2, T3, T4, T5, T6, T7, T8, T9, T10 any](o1 O.Ord[T1], o2 O.Ord[T2], o3 O.Ord[T3], o4 O.Ord[T4], o5 O.Ord[T5], o6 O.Ord[T6], o7 O.Ord[T7], o8 O.Ord[T8], o9 O.Ord[T9], o10 O.Ord[T10]) O.Ord[Tuple10[T1, T2, T3, T4, T5, T6, T7, T8, T9, T10]] {
|
||||
return O.MakeOrd(func(l, r Tuple10[T1, T2, T3, T4, T5, T6, T7, T8, T9, T10]) int {
|
||||
if c:= o1.Compare(l.F1, r.F1); c != 0 {return c}
|
||||
if c:= o2.Compare(l.F2, r.F2); c != 0 {return c}
|
||||
if c:= o3.Compare(l.F3, r.F3); c != 0 {return c}
|
||||
if c:= o4.Compare(l.F4, r.F4); c != 0 {return c}
|
||||
if c:= o5.Compare(l.F5, r.F5); c != 0 {return c}
|
||||
if c:= o6.Compare(l.F6, r.F6); c != 0 {return c}
|
||||
if c:= o7.Compare(l.F7, r.F7); c != 0 {return c}
|
||||
if c:= o8.Compare(l.F8, r.F8); c != 0 {return c}
|
||||
if c:= o9.Compare(l.F9, r.F9); c != 0 {return c}
|
||||
if c:= o10.Compare(l.F10, r.F10); c != 0 {return c}
|
||||
if c := o1.Compare(l.F1, r.F1); c != 0 {
|
||||
return c
|
||||
}
|
||||
if c := o2.Compare(l.F2, r.F2); c != 0 {
|
||||
return c
|
||||
}
|
||||
if c := o3.Compare(l.F3, r.F3); c != 0 {
|
||||
return c
|
||||
}
|
||||
if c := o4.Compare(l.F4, r.F4); c != 0 {
|
||||
return c
|
||||
}
|
||||
if c := o5.Compare(l.F5, r.F5); c != 0 {
|
||||
return c
|
||||
}
|
||||
if c := o6.Compare(l.F6, r.F6); c != 0 {
|
||||
return c
|
||||
}
|
||||
if c := o7.Compare(l.F7, r.F7); c != 0 {
|
||||
return c
|
||||
}
|
||||
if c := o8.Compare(l.F8, r.F8); c != 0 {
|
||||
return c
|
||||
}
|
||||
if c := o9.Compare(l.F9, r.F9); c != 0 {
|
||||
return c
|
||||
}
|
||||
if c := o10.Compare(l.F10, r.F10); c != 0 {
|
||||
return c
|
||||
}
|
||||
return 0
|
||||
}, func(l, r Tuple10[T1, T2, T3, T4, T5, T6, T7, T8, T9, T10]) bool {
|
||||
return o1.Equals(l.F1, r.F1) && o2.Equals(l.F2, r.F2) && o3.Equals(l.F3, r.F3) && o4.Equals(l.F4, r.F4) && o5.Equals(l.F5, r.F5) && o6.Equals(l.F6, r.F6) && o7.Equals(l.F7, r.F7) && o8.Equals(l.F8, r.F8) && o9.Equals(l.F9, r.F9) && o10.Equals(l.F10, r.F10)
|
||||
@@ -1306,29 +1559,60 @@ func (t Tuple10[T1, T2, T3, T4, T5, T6, T7, T8, T9, T10]) MarshalJSON() ([]byte,
|
||||
// UnmarshalJSON unmarshals a JSON array into a [Tuple10]
|
||||
func (t *Tuple10[T1, T2, T3, T4, T5, T6, T7, T8, T9, T10]) UnmarshalJSON(data []byte) error {
|
||||
var tmp []json.RawMessage
|
||||
if err := json.Unmarshal(data, &tmp); err != nil {return err}
|
||||
if err := json.Unmarshal(data, &tmp); err != nil {
|
||||
return err
|
||||
}
|
||||
l := len(tmp)
|
||||
if l > 0 {
|
||||
if err := json.Unmarshal(tmp[0], &t.F1); err != nil {return err}
|
||||
if err := json.Unmarshal(tmp[0], &t.F1); err != nil {
|
||||
return err
|
||||
}
|
||||
if l > 1 {
|
||||
if err := json.Unmarshal(tmp[1], &t.F2); err != nil {return err}
|
||||
if err := json.Unmarshal(tmp[1], &t.F2); err != nil {
|
||||
return err
|
||||
}
|
||||
if l > 2 {
|
||||
if err := json.Unmarshal(tmp[2], &t.F3); err != nil {return err}
|
||||
if err := json.Unmarshal(tmp[2], &t.F3); err != nil {
|
||||
return err
|
||||
}
|
||||
if l > 3 {
|
||||
if err := json.Unmarshal(tmp[3], &t.F4); err != nil {return err}
|
||||
if err := json.Unmarshal(tmp[3], &t.F4); err != nil {
|
||||
return err
|
||||
}
|
||||
if l > 4 {
|
||||
if err := json.Unmarshal(tmp[4], &t.F5); err != nil {return err}
|
||||
if err := json.Unmarshal(tmp[4], &t.F5); err != nil {
|
||||
return err
|
||||
}
|
||||
if l > 5 {
|
||||
if err := json.Unmarshal(tmp[5], &t.F6); err != nil {return err}
|
||||
if err := json.Unmarshal(tmp[5], &t.F6); err != nil {
|
||||
return err
|
||||
}
|
||||
if l > 6 {
|
||||
if err := json.Unmarshal(tmp[6], &t.F7); err != nil {return err}
|
||||
if err := json.Unmarshal(tmp[6], &t.F7); err != nil {
|
||||
return err
|
||||
}
|
||||
if l > 7 {
|
||||
if err := json.Unmarshal(tmp[7], &t.F8); err != nil {return err}
|
||||
if err := json.Unmarshal(tmp[7], &t.F8); err != nil {
|
||||
return err
|
||||
}
|
||||
if l > 8 {
|
||||
if err := json.Unmarshal(tmp[8], &t.F9); err != nil {return err}
|
||||
if err := json.Unmarshal(tmp[8], &t.F9); err != nil {
|
||||
return err
|
||||
}
|
||||
if l > 9 {
|
||||
if err := json.Unmarshal(tmp[9], &t.F10); err != nil {return err}
|
||||
}}}}}}}}}}
|
||||
if err := json.Unmarshal(tmp[9], &t.F10); err != nil {
|
||||
return err
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
return nil
|
||||
}
|
||||
|
||||
|
Reference in New Issue
Block a user