2023-07-13 22:24:04 +02:00
// Code generated by go generate; DO NOT EDIT.
// This file was generated by robots at
2023-07-21 10:55:03 +02:00
// 2023-07-21 10:22:55.7987979 +0200 CEST m=+0.076670601
2023-07-13 22:24:04 +02:00
package apply
import (
2023-07-18 15:57:54 +02:00
F "github.com/IBM/fp-go/function"
T "github.com/IBM/fp-go/tuple"
2023-07-13 22:24:04 +02:00
)
// tupleConstructor1 returns a curried version of [T.MakeTuple1]
func tupleConstructor1 [ T1 any ] ( ) func ( T1 ) T . Tuple1 [ T1 ] {
2023-07-23 21:45:32 +02:00
return F . Curry1 ( T . MakeTuple1 [ T1 ] )
2023-07-13 22:24:04 +02:00
}
// SequenceT1 is a utility function used to implement the sequence operation for higher kinded types based only on map and ap.
// The function takes 1 higher higher kinded types and returns a higher kinded type of a [Tuple1] with the resolved values.
func SequenceT1 [
2023-07-23 21:45:32 +02:00
MAP ~ func ( func ( T1 ) T . Tuple1 [ T1 ] ) func ( HKT_T1 ) HKT_TUPLE1 ,
T1 ,
HKT_T1 , // HKT[T1]
HKT_TUPLE1 any , // HKT[Tuple1[T1]]
2023-07-17 13:55:35 +02:00
] (
2023-07-23 21:45:32 +02:00
fmap MAP ,
t1 HKT_T1 ,
2023-07-17 13:55:35 +02:00
) HKT_TUPLE1 {
2023-07-23 21:45:32 +02:00
return F . Pipe1 (
t1 ,
fmap ( tupleConstructor1 [ T1 ] ( ) ) ,
)
2023-07-17 13:55:35 +02:00
}
// SequenceTuple1 is a utility function used to implement the sequence operation for higher kinded types based only on map and ap.
// The function takes a [Tuple1] of higher higher kinded types and returns a higher kinded type of a [Tuple1] with the resolved values.
func SequenceTuple1 [
2023-07-23 21:45:32 +02:00
MAP ~ func ( func ( T1 ) T . Tuple1 [ T1 ] ) func ( HKT_T1 ) HKT_TUPLE1 ,
T1 ,
HKT_T1 , // HKT[T1]
HKT_TUPLE1 any , // HKT[Tuple1[T1]]
2023-07-17 13:55:35 +02:00
] (
2023-07-23 21:45:32 +02:00
fmap MAP ,
t T . Tuple1 [ HKT_T1 ] ,
2023-07-17 13:55:35 +02:00
) HKT_TUPLE1 {
2023-07-23 21:45:32 +02:00
return F . Pipe1 (
t . F1 ,
fmap ( tupleConstructor1 [ T1 ] ( ) ) ,
)
2023-07-17 13:55:35 +02:00
}
// TraverseTuple1 is a utility function used to implement the sequence operation for higher kinded types based only on map and ap.
// The function takes a [Tuple1] of base types and 1 functions that transform these based types into higher higher kinded types. It returns a higher kinded type of a [Tuple1] with the resolved values.
func TraverseTuple1 [
2023-07-23 21:45:32 +02:00
MAP ~ func ( func ( T1 ) T . Tuple1 [ T1 ] ) func ( HKT_T1 ) HKT_TUPLE1 ,
F1 ~ func ( A1 ) HKT_T1 ,
A1 , T1 ,
HKT_T1 , // HKT[T1]
HKT_TUPLE1 any , // HKT[Tuple1[T1]]
2023-07-13 22:24:04 +02:00
] (
2023-07-23 21:45:32 +02:00
fmap MAP ,
f1 F1 ,
t T . Tuple1 [ A1 ] ,
2023-07-13 22:24:04 +02:00
) HKT_TUPLE1 {
2023-07-23 21:45:32 +02:00
return F . Pipe1 (
f1 ( t . F1 ) ,
fmap ( tupleConstructor1 [ T1 ] ( ) ) ,
)
2023-07-13 22:24:04 +02:00
}
// tupleConstructor2 returns a curried version of [T.MakeTuple2]
func tupleConstructor2 [ T1 , T2 any ] ( ) func ( T1 ) func ( T2 ) T . Tuple2 [ T1 , T2 ] {
2023-07-23 21:45:32 +02:00
return F . Curry2 ( T . MakeTuple2 [ T1 , T2 ] )
2023-07-13 22:24:04 +02:00
}
// SequenceT2 is a utility function used to implement the sequence operation for higher kinded types based only on map and ap.
// The function takes 2 higher higher kinded types and returns a higher kinded type of a [Tuple2] with the resolved values.
func SequenceT2 [
2023-07-23 21:45:32 +02:00
MAP ~ func ( func ( T1 ) func ( T2 ) T . Tuple2 [ T1 , T2 ] ) func ( HKT_T1 ) HKT_F_T2 ,
AP1 ~ func ( HKT_T2 ) func ( HKT_F_T2 ) HKT_TUPLE2 ,
T1 ,
T2 ,
HKT_T1 , // HKT[T1]
HKT_T2 , // HKT[T2]
HKT_F_T2 , // HKT[func(T2) T.Tuple2[T1, T2]]
HKT_TUPLE2 any , // HKT[Tuple2[T1, T2]]
2023-07-17 13:55:35 +02:00
] (
2023-07-23 21:45:32 +02:00
fmap MAP ,
fap1 AP1 ,
t1 HKT_T1 ,
t2 HKT_T2 ,
2023-07-17 13:55:35 +02:00
) HKT_TUPLE2 {
2023-07-23 21:45:32 +02:00
return F . Pipe2 (
t1 ,
fmap ( tupleConstructor2 [ T1 , T2 ] ( ) ) ,
fap1 ( t2 ) ,
)
2023-07-17 13:55:35 +02:00
}
// SequenceTuple2 is a utility function used to implement the sequence operation for higher kinded types based only on map and ap.
// The function takes a [Tuple2] of higher higher kinded types and returns a higher kinded type of a [Tuple2] with the resolved values.
func SequenceTuple2 [
2023-07-23 21:45:32 +02:00
MAP ~ func ( func ( T1 ) func ( T2 ) T . Tuple2 [ T1 , T2 ] ) func ( HKT_T1 ) HKT_F_T2 ,
AP1 ~ func ( HKT_T2 ) func ( HKT_F_T2 ) HKT_TUPLE2 ,
T1 ,
T2 ,
HKT_T1 , // HKT[T1]
HKT_T2 , // HKT[T2]
HKT_F_T2 , // HKT[func(T2) T.Tuple2[T1, T2]]
HKT_TUPLE2 any , // HKT[Tuple2[T1, T2]]
2023-07-17 13:55:35 +02:00
] (
2023-07-23 21:45:32 +02:00
fmap MAP ,
fap1 AP1 ,
t T . Tuple2 [ HKT_T1 , HKT_T2 ] ,
2023-07-17 13:55:35 +02:00
) HKT_TUPLE2 {
2023-07-23 21:45:32 +02:00
return F . Pipe2 (
t . F1 ,
fmap ( tupleConstructor2 [ T1 , T2 ] ( ) ) ,
fap1 ( t . F2 ) ,
)
2023-07-17 13:55:35 +02:00
}
// TraverseTuple2 is a utility function used to implement the sequence operation for higher kinded types based only on map and ap.
// The function takes a [Tuple2] of base types and 2 functions that transform these based types into higher higher kinded types. It returns a higher kinded type of a [Tuple2] with the resolved values.
func TraverseTuple2 [
2023-07-23 21:45:32 +02:00
MAP ~ func ( func ( T1 ) func ( T2 ) T . Tuple2 [ T1 , T2 ] ) func ( HKT_T1 ) HKT_F_T2 ,
AP1 ~ func ( HKT_T2 ) func ( HKT_F_T2 ) HKT_TUPLE2 ,
F1 ~ func ( A1 ) HKT_T1 ,
F2 ~ func ( A2 ) HKT_T2 ,
A1 , T1 ,
A2 , T2 ,
HKT_T1 , // HKT[T1]
HKT_T2 , // HKT[T2]
HKT_F_T2 , // HKT[func(T2) T.Tuple2[T1, T2]]
HKT_TUPLE2 any , // HKT[Tuple2[T1, T2]]
2023-07-13 22:24:04 +02:00
] (
2023-07-23 21:45:32 +02:00
fmap MAP ,
fap1 AP1 ,
f1 F1 ,
f2 F2 ,
t T . Tuple2 [ A1 , A2 ] ,
2023-07-13 22:24:04 +02:00
) HKT_TUPLE2 {
2023-07-23 21:45:32 +02:00
return F . Pipe2 (
f1 ( t . F1 ) ,
fmap ( tupleConstructor2 [ T1 , T2 ] ( ) ) ,
fap1 ( f2 ( t . F2 ) ) ,
)
2023-07-13 22:24:04 +02:00
}
// tupleConstructor3 returns a curried version of [T.MakeTuple3]
func tupleConstructor3 [ T1 , T2 , T3 any ] ( ) func ( T1 ) func ( T2 ) func ( T3 ) T . Tuple3 [ T1 , T2 , T3 ] {
2023-07-23 21:45:32 +02:00
return F . Curry3 ( T . MakeTuple3 [ T1 , T2 , T3 ] )
2023-07-13 22:24:04 +02:00
}
// SequenceT3 is a utility function used to implement the sequence operation for higher kinded types based only on map and ap.
// The function takes 3 higher higher kinded types and returns a higher kinded type of a [Tuple3] with the resolved values.
func SequenceT3 [
2023-07-23 21:45:32 +02:00
MAP ~ func ( func ( T1 ) func ( T2 ) func ( T3 ) T . Tuple3 [ T1 , T2 , T3 ] ) func ( HKT_T1 ) HKT_F_T2_T3 ,
AP1 ~ func ( HKT_T2 ) func ( HKT_F_T2_T3 ) HKT_F_T3 ,
AP2 ~ func ( HKT_T3 ) func ( HKT_F_T3 ) HKT_TUPLE3 ,
T1 ,
T2 ,
T3 ,
HKT_T1 , // HKT[T1]
HKT_T2 , // HKT[T2]
HKT_T3 , // HKT[T3]
HKT_F_T2_T3 , // HKT[func(T2) func(T3) T.Tuple3[T1, T2, T3]]
HKT_F_T3 , // HKT[func(T3) T.Tuple3[T1, T2, T3]]
HKT_TUPLE3 any , // HKT[Tuple3[T1, T2, T3]]
2023-07-17 13:55:35 +02:00
] (
2023-07-23 21:45:32 +02:00
fmap MAP ,
fap1 AP1 ,
fap2 AP2 ,
t1 HKT_T1 ,
t2 HKT_T2 ,
t3 HKT_T3 ,
2023-07-17 13:55:35 +02:00
) HKT_TUPLE3 {
2023-07-23 21:45:32 +02:00
return F . Pipe3 (
t1 ,
fmap ( tupleConstructor3 [ T1 , T2 , T3 ] ( ) ) ,
fap1 ( t2 ) ,
fap2 ( t3 ) ,
)
2023-07-17 13:55:35 +02:00
}
// SequenceTuple3 is a utility function used to implement the sequence operation for higher kinded types based only on map and ap.
// The function takes a [Tuple3] of higher higher kinded types and returns a higher kinded type of a [Tuple3] with the resolved values.
func SequenceTuple3 [
2023-07-23 21:45:32 +02:00
MAP ~ func ( func ( T1 ) func ( T2 ) func ( T3 ) T . Tuple3 [ T1 , T2 , T3 ] ) func ( HKT_T1 ) HKT_F_T2_T3 ,
AP1 ~ func ( HKT_T2 ) func ( HKT_F_T2_T3 ) HKT_F_T3 ,
AP2 ~ func ( HKT_T3 ) func ( HKT_F_T3 ) HKT_TUPLE3 ,
T1 ,
T2 ,
T3 ,
HKT_T1 , // HKT[T1]
HKT_T2 , // HKT[T2]
HKT_T3 , // HKT[T3]
HKT_F_T2_T3 , // HKT[func(T2) func(T3) T.Tuple3[T1, T2, T3]]
HKT_F_T3 , // HKT[func(T3) T.Tuple3[T1, T2, T3]]
HKT_TUPLE3 any , // HKT[Tuple3[T1, T2, T3]]
2023-07-13 22:24:04 +02:00
] (
2023-07-23 21:45:32 +02:00
fmap MAP ,
fap1 AP1 ,
fap2 AP2 ,
t T . Tuple3 [ HKT_T1 , HKT_T2 , HKT_T3 ] ,
2023-07-13 22:24:04 +02:00
) HKT_TUPLE3 {
2023-07-23 21:45:32 +02:00
return F . Pipe3 (
t . F1 ,
fmap ( tupleConstructor3 [ T1 , T2 , T3 ] ( ) ) ,
fap1 ( t . F2 ) ,
fap2 ( t . F3 ) ,
)
2023-07-17 13:55:35 +02:00
}
// TraverseTuple3 is a utility function used to implement the sequence operation for higher kinded types based only on map and ap.
// The function takes a [Tuple3] of base types and 3 functions that transform these based types into higher higher kinded types. It returns a higher kinded type of a [Tuple3] with the resolved values.
func TraverseTuple3 [
2023-07-23 21:45:32 +02:00
MAP ~ func ( func ( T1 ) func ( T2 ) func ( T3 ) T . Tuple3 [ T1 , T2 , T3 ] ) func ( HKT_T1 ) HKT_F_T2_T3 ,
AP1 ~ func ( HKT_T2 ) func ( HKT_F_T2_T3 ) HKT_F_T3 ,
AP2 ~ func ( HKT_T3 ) func ( HKT_F_T3 ) HKT_TUPLE3 ,
F1 ~ func ( A1 ) HKT_T1 ,
F2 ~ func ( A2 ) HKT_T2 ,
F3 ~ func ( A3 ) HKT_T3 ,
A1 , T1 ,
A2 , T2 ,
A3 , T3 ,
HKT_T1 , // HKT[T1]
HKT_T2 , // HKT[T2]
HKT_T3 , // HKT[T3]
HKT_F_T2_T3 , // HKT[func(T2) func(T3) T.Tuple3[T1, T2, T3]]
HKT_F_T3 , // HKT[func(T3) T.Tuple3[T1, T2, T3]]
HKT_TUPLE3 any , // HKT[Tuple3[T1, T2, T3]]
2023-07-17 13:55:35 +02:00
] (
2023-07-23 21:45:32 +02:00
fmap MAP ,
fap1 AP1 ,
fap2 AP2 ,
f1 F1 ,
f2 F2 ,
f3 F3 ,
t T . Tuple3 [ A1 , A2 , A3 ] ,
2023-07-17 13:55:35 +02:00
) HKT_TUPLE3 {
2023-07-23 21:45:32 +02:00
return F . Pipe3 (
f1 ( t . F1 ) ,
fmap ( tupleConstructor3 [ T1 , T2 , T3 ] ( ) ) ,
fap1 ( f2 ( t . F2 ) ) ,
fap2 ( f3 ( t . F3 ) ) ,
)
2023-07-13 22:24:04 +02:00
}
// tupleConstructor4 returns a curried version of [T.MakeTuple4]
func tupleConstructor4 [ T1 , T2 , T3 , T4 any ] ( ) func ( T1 ) func ( T2 ) func ( T3 ) func ( T4 ) T . Tuple4 [ T1 , T2 , T3 , T4 ] {
2023-07-23 21:45:32 +02:00
return F . Curry4 ( T . MakeTuple4 [ T1 , T2 , T3 , T4 ] )
2023-07-13 22:24:04 +02:00
}
// SequenceT4 is a utility function used to implement the sequence operation for higher kinded types based only on map and ap.
// The function takes 4 higher higher kinded types and returns a higher kinded type of a [Tuple4] with the resolved values.
func SequenceT4 [
2023-07-23 21:45:32 +02:00
MAP ~ func ( func ( T1 ) func ( T2 ) func ( T3 ) func ( T4 ) T . Tuple4 [ T1 , T2 , T3 , T4 ] ) func ( HKT_T1 ) HKT_F_T2_T3_T4 ,
AP1 ~ func ( HKT_T2 ) func ( HKT_F_T2_T3_T4 ) HKT_F_T3_T4 ,
AP2 ~ func ( HKT_T3 ) func ( HKT_F_T3_T4 ) HKT_F_T4 ,
AP3 ~ func ( HKT_T4 ) func ( HKT_F_T4 ) HKT_TUPLE4 ,
T1 ,
T2 ,
T3 ,
T4 ,
HKT_T1 , // HKT[T1]
HKT_T2 , // HKT[T2]
HKT_T3 , // HKT[T3]
HKT_T4 , // HKT[T4]
HKT_F_T2_T3_T4 , // HKT[func(T2) func(T3) func(T4) T.Tuple4[T1, T2, T3, T4]]
HKT_F_T3_T4 , // HKT[func(T3) func(T4) T.Tuple4[T1, T2, T3, T4]]
HKT_F_T4 , // HKT[func(T4) T.Tuple4[T1, T2, T3, T4]]
HKT_TUPLE4 any , // HKT[Tuple4[T1, T2, T3, T4]]
2023-07-17 13:55:35 +02:00
] (
2023-07-23 21:45:32 +02:00
fmap MAP ,
fap1 AP1 ,
fap2 AP2 ,
fap3 AP3 ,
t1 HKT_T1 ,
t2 HKT_T2 ,
t3 HKT_T3 ,
t4 HKT_T4 ,
2023-07-17 13:55:35 +02:00
) HKT_TUPLE4 {
2023-07-23 21:45:32 +02:00
return F . Pipe4 (
t1 ,
fmap ( tupleConstructor4 [ T1 , T2 , T3 , T4 ] ( ) ) ,
fap1 ( t2 ) ,
fap2 ( t3 ) ,
fap3 ( t4 ) ,
)
2023-07-17 13:55:35 +02:00
}
// SequenceTuple4 is a utility function used to implement the sequence operation for higher kinded types based only on map and ap.
// The function takes a [Tuple4] of higher higher kinded types and returns a higher kinded type of a [Tuple4] with the resolved values.
func SequenceTuple4 [
2023-07-23 21:45:32 +02:00
MAP ~ func ( func ( T1 ) func ( T2 ) func ( T3 ) func ( T4 ) T . Tuple4 [ T1 , T2 , T3 , T4 ] ) func ( HKT_T1 ) HKT_F_T2_T3_T4 ,
AP1 ~ func ( HKT_T2 ) func ( HKT_F_T2_T3_T4 ) HKT_F_T3_T4 ,
AP2 ~ func ( HKT_T3 ) func ( HKT_F_T3_T4 ) HKT_F_T4 ,
AP3 ~ func ( HKT_T4 ) func ( HKT_F_T4 ) HKT_TUPLE4 ,
T1 ,
T2 ,
T3 ,
T4 ,
HKT_T1 , // HKT[T1]
HKT_T2 , // HKT[T2]
HKT_T3 , // HKT[T3]
HKT_T4 , // HKT[T4]
HKT_F_T2_T3_T4 , // HKT[func(T2) func(T3) func(T4) T.Tuple4[T1, T2, T3, T4]]
HKT_F_T3_T4 , // HKT[func(T3) func(T4) T.Tuple4[T1, T2, T3, T4]]
HKT_F_T4 , // HKT[func(T4) T.Tuple4[T1, T2, T3, T4]]
HKT_TUPLE4 any , // HKT[Tuple4[T1, T2, T3, T4]]
2023-07-17 13:55:35 +02:00
] (
2023-07-23 21:45:32 +02:00
fmap MAP ,
fap1 AP1 ,
fap2 AP2 ,
fap3 AP3 ,
t T . Tuple4 [ HKT_T1 , HKT_T2 , HKT_T3 , HKT_T4 ] ,
2023-07-17 13:55:35 +02:00
) HKT_TUPLE4 {
2023-07-23 21:45:32 +02:00
return F . Pipe4 (
t . F1 ,
fmap ( tupleConstructor4 [ T1 , T2 , T3 , T4 ] ( ) ) ,
fap1 ( t . F2 ) ,
fap2 ( t . F3 ) ,
fap3 ( t . F4 ) ,
)
2023-07-17 13:55:35 +02:00
}
// TraverseTuple4 is a utility function used to implement the sequence operation for higher kinded types based only on map and ap.
// The function takes a [Tuple4] of base types and 4 functions that transform these based types into higher higher kinded types. It returns a higher kinded type of a [Tuple4] with the resolved values.
func TraverseTuple4 [
2023-07-23 21:45:32 +02:00
MAP ~ func ( func ( T1 ) func ( T2 ) func ( T3 ) func ( T4 ) T . Tuple4 [ T1 , T2 , T3 , T4 ] ) func ( HKT_T1 ) HKT_F_T2_T3_T4 ,
AP1 ~ func ( HKT_T2 ) func ( HKT_F_T2_T3_T4 ) HKT_F_T3_T4 ,
AP2 ~ func ( HKT_T3 ) func ( HKT_F_T3_T4 ) HKT_F_T4 ,
AP3 ~ func ( HKT_T4 ) func ( HKT_F_T4 ) HKT_TUPLE4 ,
F1 ~ func ( A1 ) HKT_T1 ,
F2 ~ func ( A2 ) HKT_T2 ,
F3 ~ func ( A3 ) HKT_T3 ,
F4 ~ func ( A4 ) HKT_T4 ,
A1 , T1 ,
A2 , T2 ,
A3 , T3 ,
A4 , T4 ,
HKT_T1 , // HKT[T1]
HKT_T2 , // HKT[T2]
HKT_T3 , // HKT[T3]
HKT_T4 , // HKT[T4]
HKT_F_T2_T3_T4 , // HKT[func(T2) func(T3) func(T4) T.Tuple4[T1, T2, T3, T4]]
HKT_F_T3_T4 , // HKT[func(T3) func(T4) T.Tuple4[T1, T2, T3, T4]]
HKT_F_T4 , // HKT[func(T4) T.Tuple4[T1, T2, T3, T4]]
HKT_TUPLE4 any , // HKT[Tuple4[T1, T2, T3, T4]]
2023-07-13 22:24:04 +02:00
] (
2023-07-23 21:45:32 +02:00
fmap MAP ,
fap1 AP1 ,
fap2 AP2 ,
fap3 AP3 ,
f1 F1 ,
f2 F2 ,
f3 F3 ,
f4 F4 ,
t T . Tuple4 [ A1 , A2 , A3 , A4 ] ,
2023-07-13 22:24:04 +02:00
) HKT_TUPLE4 {
2023-07-23 21:45:32 +02:00
return F . Pipe4 (
f1 ( t . F1 ) ,
fmap ( tupleConstructor4 [ T1 , T2 , T3 , T4 ] ( ) ) ,
fap1 ( f2 ( t . F2 ) ) ,
fap2 ( f3 ( t . F3 ) ) ,
fap3 ( f4 ( t . F4 ) ) ,
)
2023-07-13 22:24:04 +02:00
}
// tupleConstructor5 returns a curried version of [T.MakeTuple5]
func tupleConstructor5 [ T1 , T2 , T3 , T4 , T5 any ] ( ) func ( T1 ) func ( T2 ) func ( T3 ) func ( T4 ) func ( T5 ) T . Tuple5 [ T1 , T2 , T3 , T4 , T5 ] {
2023-07-23 21:45:32 +02:00
return F . Curry5 ( T . MakeTuple5 [ T1 , T2 , T3 , T4 , T5 ] )
2023-07-13 22:24:04 +02:00
}
// SequenceT5 is a utility function used to implement the sequence operation for higher kinded types based only on map and ap.
// The function takes 5 higher higher kinded types and returns a higher kinded type of a [Tuple5] with the resolved values.
func SequenceT5 [
2023-07-23 21:45:32 +02:00
MAP ~ func ( func ( T1 ) func ( T2 ) func ( T3 ) func ( T4 ) func ( T5 ) T . Tuple5 [ T1 , T2 , T3 , T4 , T5 ] ) func ( HKT_T1 ) HKT_F_T2_T3_T4_T5 ,
AP1 ~ func ( HKT_T2 ) func ( HKT_F_T2_T3_T4_T5 ) HKT_F_T3_T4_T5 ,
AP2 ~ func ( HKT_T3 ) func ( HKT_F_T3_T4_T5 ) HKT_F_T4_T5 ,
AP3 ~ func ( HKT_T4 ) func ( HKT_F_T4_T5 ) HKT_F_T5 ,
AP4 ~ func ( HKT_T5 ) func ( HKT_F_T5 ) HKT_TUPLE5 ,
T1 ,
T2 ,
T3 ,
T4 ,
T5 ,
HKT_T1 , // HKT[T1]
HKT_T2 , // HKT[T2]
HKT_T3 , // HKT[T3]
HKT_T4 , // HKT[T4]
HKT_T5 , // HKT[T5]
HKT_F_T2_T3_T4_T5 , // HKT[func(T2) func(T3) func(T4) func(T5) T.Tuple5[T1, T2, T3, T4, T5]]
HKT_F_T3_T4_T5 , // HKT[func(T3) func(T4) func(T5) T.Tuple5[T1, T2, T3, T4, T5]]
HKT_F_T4_T5 , // HKT[func(T4) func(T5) T.Tuple5[T1, T2, T3, T4, T5]]
HKT_F_T5 , // HKT[func(T5) T.Tuple5[T1, T2, T3, T4, T5]]
HKT_TUPLE5 any , // HKT[Tuple5[T1, T2, T3, T4, T5]]
2023-07-17 13:55:35 +02:00
] (
2023-07-23 21:45:32 +02:00
fmap MAP ,
fap1 AP1 ,
fap2 AP2 ,
fap3 AP3 ,
fap4 AP4 ,
t1 HKT_T1 ,
t2 HKT_T2 ,
t3 HKT_T3 ,
t4 HKT_T4 ,
t5 HKT_T5 ,
2023-07-17 13:55:35 +02:00
) HKT_TUPLE5 {
2023-07-23 21:45:32 +02:00
return F . Pipe5 (
t1 ,
fmap ( tupleConstructor5 [ T1 , T2 , T3 , T4 , T5 ] ( ) ) ,
fap1 ( t2 ) ,
fap2 ( t3 ) ,
fap3 ( t4 ) ,
fap4 ( t5 ) ,
)
2023-07-17 13:55:35 +02:00
}
// SequenceTuple5 is a utility function used to implement the sequence operation for higher kinded types based only on map and ap.
// The function takes a [Tuple5] of higher higher kinded types and returns a higher kinded type of a [Tuple5] with the resolved values.
func SequenceTuple5 [
2023-07-23 21:45:32 +02:00
MAP ~ func ( func ( T1 ) func ( T2 ) func ( T3 ) func ( T4 ) func ( T5 ) T . Tuple5 [ T1 , T2 , T3 , T4 , T5 ] ) func ( HKT_T1 ) HKT_F_T2_T3_T4_T5 ,
AP1 ~ func ( HKT_T2 ) func ( HKT_F_T2_T3_T4_T5 ) HKT_F_T3_T4_T5 ,
AP2 ~ func ( HKT_T3 ) func ( HKT_F_T3_T4_T5 ) HKT_F_T4_T5 ,
AP3 ~ func ( HKT_T4 ) func ( HKT_F_T4_T5 ) HKT_F_T5 ,
AP4 ~ func ( HKT_T5 ) func ( HKT_F_T5 ) HKT_TUPLE5 ,
T1 ,
T2 ,
T3 ,
T4 ,
T5 ,
HKT_T1 , // HKT[T1]
HKT_T2 , // HKT[T2]
HKT_T3 , // HKT[T3]
HKT_T4 , // HKT[T4]
HKT_T5 , // HKT[T5]
HKT_F_T2_T3_T4_T5 , // HKT[func(T2) func(T3) func(T4) func(T5) T.Tuple5[T1, T2, T3, T4, T5]]
HKT_F_T3_T4_T5 , // HKT[func(T3) func(T4) func(T5) T.Tuple5[T1, T2, T3, T4, T5]]
HKT_F_T4_T5 , // HKT[func(T4) func(T5) T.Tuple5[T1, T2, T3, T4, T5]]
HKT_F_T5 , // HKT[func(T5) T.Tuple5[T1, T2, T3, T4, T5]]
HKT_TUPLE5 any , // HKT[Tuple5[T1, T2, T3, T4, T5]]
2023-07-13 22:24:04 +02:00
] (
2023-07-23 21:45:32 +02:00
fmap MAP ,
fap1 AP1 ,
fap2 AP2 ,
fap3 AP3 ,
fap4 AP4 ,
t T . Tuple5 [ HKT_T1 , HKT_T2 , HKT_T3 , HKT_T4 , HKT_T5 ] ,
2023-07-13 22:24:04 +02:00
) HKT_TUPLE5 {
2023-07-23 21:45:32 +02:00
return F . Pipe5 (
t . F1 ,
fmap ( tupleConstructor5 [ T1 , T2 , T3 , T4 , T5 ] ( ) ) ,
fap1 ( t . F2 ) ,
fap2 ( t . F3 ) ,
fap3 ( t . F4 ) ,
fap4 ( t . F5 ) ,
)
2023-07-17 13:55:35 +02:00
}
// TraverseTuple5 is a utility function used to implement the sequence operation for higher kinded types based only on map and ap.
// The function takes a [Tuple5] of base types and 5 functions that transform these based types into higher higher kinded types. It returns a higher kinded type of a [Tuple5] with the resolved values.
func TraverseTuple5 [
2023-07-23 21:45:32 +02:00
MAP ~ func ( func ( T1 ) func ( T2 ) func ( T3 ) func ( T4 ) func ( T5 ) T . Tuple5 [ T1 , T2 , T3 , T4 , T5 ] ) func ( HKT_T1 ) HKT_F_T2_T3_T4_T5 ,
AP1 ~ func ( HKT_T2 ) func ( HKT_F_T2_T3_T4_T5 ) HKT_F_T3_T4_T5 ,
AP2 ~ func ( HKT_T3 ) func ( HKT_F_T3_T4_T5 ) HKT_F_T4_T5 ,
AP3 ~ func ( HKT_T4 ) func ( HKT_F_T4_T5 ) HKT_F_T5 ,
AP4 ~ func ( HKT_T5 ) func ( HKT_F_T5 ) HKT_TUPLE5 ,
F1 ~ func ( A1 ) HKT_T1 ,
F2 ~ func ( A2 ) HKT_T2 ,
F3 ~ func ( A3 ) HKT_T3 ,
F4 ~ func ( A4 ) HKT_T4 ,
F5 ~ func ( A5 ) HKT_T5 ,
A1 , T1 ,
A2 , T2 ,
A3 , T3 ,
A4 , T4 ,
A5 , T5 ,
HKT_T1 , // HKT[T1]
HKT_T2 , // HKT[T2]
HKT_T3 , // HKT[T3]
HKT_T4 , // HKT[T4]
HKT_T5 , // HKT[T5]
HKT_F_T2_T3_T4_T5 , // HKT[func(T2) func(T3) func(T4) func(T5) T.Tuple5[T1, T2, T3, T4, T5]]
HKT_F_T3_T4_T5 , // HKT[func(T3) func(T4) func(T5) T.Tuple5[T1, T2, T3, T4, T5]]
HKT_F_T4_T5 , // HKT[func(T4) func(T5) T.Tuple5[T1, T2, T3, T4, T5]]
HKT_F_T5 , // HKT[func(T5) T.Tuple5[T1, T2, T3, T4, T5]]
HKT_TUPLE5 any , // HKT[Tuple5[T1, T2, T3, T4, T5]]
2023-07-17 13:55:35 +02:00
] (
2023-07-23 21:45:32 +02:00
fmap MAP ,
fap1 AP1 ,
fap2 AP2 ,
fap3 AP3 ,
fap4 AP4 ,
f1 F1 ,
f2 F2 ,
f3 F3 ,
f4 F4 ,
f5 F5 ,
t T . Tuple5 [ A1 , A2 , A3 , A4 , A5 ] ,
2023-07-17 13:55:35 +02:00
) HKT_TUPLE5 {
2023-07-23 21:45:32 +02:00
return F . Pipe5 (
f1 ( t . F1 ) ,
fmap ( tupleConstructor5 [ T1 , T2 , T3 , T4 , T5 ] ( ) ) ,
fap1 ( f2 ( t . F2 ) ) ,
fap2 ( f3 ( t . F3 ) ) ,
fap3 ( f4 ( t . F4 ) ) ,
fap4 ( f5 ( t . F5 ) ) ,
)
2023-07-13 22:24:04 +02:00
}
// tupleConstructor6 returns a curried version of [T.MakeTuple6]
func tupleConstructor6 [ T1 , T2 , T3 , T4 , T5 , T6 any ] ( ) func ( T1 ) func ( T2 ) func ( T3 ) func ( T4 ) func ( T5 ) func ( T6 ) T . Tuple6 [ T1 , T2 , T3 , T4 , T5 , T6 ] {
2023-07-23 21:45:32 +02:00
return F . Curry6 ( T . MakeTuple6 [ T1 , T2 , T3 , T4 , T5 , T6 ] )
2023-07-13 22:24:04 +02:00
}
// SequenceT6 is a utility function used to implement the sequence operation for higher kinded types based only on map and ap.
// The function takes 6 higher higher kinded types and returns a higher kinded type of a [Tuple6] with the resolved values.
func SequenceT6 [
2023-07-23 21:45:32 +02:00
MAP ~ func ( func ( T1 ) func ( T2 ) func ( T3 ) func ( T4 ) func ( T5 ) func ( T6 ) T . Tuple6 [ T1 , T2 , T3 , T4 , T5 , T6 ] ) func ( HKT_T1 ) HKT_F_T2_T3_T4_T5_T6 ,
AP1 ~ func ( HKT_T2 ) func ( HKT_F_T2_T3_T4_T5_T6 ) HKT_F_T3_T4_T5_T6 ,
AP2 ~ func ( HKT_T3 ) func ( HKT_F_T3_T4_T5_T6 ) HKT_F_T4_T5_T6 ,
AP3 ~ func ( HKT_T4 ) func ( HKT_F_T4_T5_T6 ) HKT_F_T5_T6 ,
AP4 ~ func ( HKT_T5 ) func ( HKT_F_T5_T6 ) HKT_F_T6 ,
AP5 ~ func ( HKT_T6 ) func ( HKT_F_T6 ) HKT_TUPLE6 ,
T1 ,
T2 ,
T3 ,
T4 ,
T5 ,
T6 ,
HKT_T1 , // HKT[T1]
HKT_T2 , // HKT[T2]
HKT_T3 , // HKT[T3]
HKT_T4 , // HKT[T4]
HKT_T5 , // HKT[T5]
HKT_T6 , // HKT[T6]
HKT_F_T2_T3_T4_T5_T6 , // HKT[func(T2) func(T3) func(T4) func(T5) func(T6) T.Tuple6[T1, T2, T3, T4, T5, T6]]
HKT_F_T3_T4_T5_T6 , // HKT[func(T3) func(T4) func(T5) func(T6) T.Tuple6[T1, T2, T3, T4, T5, T6]]
HKT_F_T4_T5_T6 , // HKT[func(T4) func(T5) func(T6) T.Tuple6[T1, T2, T3, T4, T5, T6]]
HKT_F_T5_T6 , // HKT[func(T5) func(T6) T.Tuple6[T1, T2, T3, T4, T5, T6]]
HKT_F_T6 , // HKT[func(T6) T.Tuple6[T1, T2, T3, T4, T5, T6]]
HKT_TUPLE6 any , // HKT[Tuple6[T1, T2, T3, T4, T5, T6]]
2023-07-13 22:24:04 +02:00
] (
2023-07-23 21:45:32 +02:00
fmap MAP ,
fap1 AP1 ,
fap2 AP2 ,
fap3 AP3 ,
fap4 AP4 ,
fap5 AP5 ,
t1 HKT_T1 ,
t2 HKT_T2 ,
t3 HKT_T3 ,
t4 HKT_T4 ,
t5 HKT_T5 ,
t6 HKT_T6 ,
2023-07-13 22:24:04 +02:00
) HKT_TUPLE6 {
2023-07-23 21:45:32 +02:00
return F . Pipe6 (
t1 ,
fmap ( tupleConstructor6 [ T1 , T2 , T3 , T4 , T5 , T6 ] ( ) ) ,
fap1 ( t2 ) ,
fap2 ( t3 ) ,
fap3 ( t4 ) ,
fap4 ( t5 ) ,
fap5 ( t6 ) ,
)
2023-07-17 13:55:35 +02:00
}
// SequenceTuple6 is a utility function used to implement the sequence operation for higher kinded types based only on map and ap.
// The function takes a [Tuple6] of higher higher kinded types and returns a higher kinded type of a [Tuple6] with the resolved values.
func SequenceTuple6 [
2023-07-23 21:45:32 +02:00
MAP ~ func ( func ( T1 ) func ( T2 ) func ( T3 ) func ( T4 ) func ( T5 ) func ( T6 ) T . Tuple6 [ T1 , T2 , T3 , T4 , T5 , T6 ] ) func ( HKT_T1 ) HKT_F_T2_T3_T4_T5_T6 ,
AP1 ~ func ( HKT_T2 ) func ( HKT_F_T2_T3_T4_T5_T6 ) HKT_F_T3_T4_T5_T6 ,
AP2 ~ func ( HKT_T3 ) func ( HKT_F_T3_T4_T5_T6 ) HKT_F_T4_T5_T6 ,
AP3 ~ func ( HKT_T4 ) func ( HKT_F_T4_T5_T6 ) HKT_F_T5_T6 ,
AP4 ~ func ( HKT_T5 ) func ( HKT_F_T5_T6 ) HKT_F_T6 ,
AP5 ~ func ( HKT_T6 ) func ( HKT_F_T6 ) HKT_TUPLE6 ,
T1 ,
T2 ,
T3 ,
T4 ,
T5 ,
T6 ,
HKT_T1 , // HKT[T1]
HKT_T2 , // HKT[T2]
HKT_T3 , // HKT[T3]
HKT_T4 , // HKT[T4]
HKT_T5 , // HKT[T5]
HKT_T6 , // HKT[T6]
HKT_F_T2_T3_T4_T5_T6 , // HKT[func(T2) func(T3) func(T4) func(T5) func(T6) T.Tuple6[T1, T2, T3, T4, T5, T6]]
HKT_F_T3_T4_T5_T6 , // HKT[func(T3) func(T4) func(T5) func(T6) T.Tuple6[T1, T2, T3, T4, T5, T6]]
HKT_F_T4_T5_T6 , // HKT[func(T4) func(T5) func(T6) T.Tuple6[T1, T2, T3, T4, T5, T6]]
HKT_F_T5_T6 , // HKT[func(T5) func(T6) T.Tuple6[T1, T2, T3, T4, T5, T6]]
HKT_F_T6 , // HKT[func(T6) T.Tuple6[T1, T2, T3, T4, T5, T6]]
HKT_TUPLE6 any , // HKT[Tuple6[T1, T2, T3, T4, T5, T6]]
2023-07-17 13:55:35 +02:00
] (
2023-07-23 21:45:32 +02:00
fmap MAP ,
fap1 AP1 ,
fap2 AP2 ,
fap3 AP3 ,
fap4 AP4 ,
fap5 AP5 ,
t T . Tuple6 [ HKT_T1 , HKT_T2 , HKT_T3 , HKT_T4 , HKT_T5 , HKT_T6 ] ,
2023-07-17 13:55:35 +02:00
) HKT_TUPLE6 {
2023-07-23 21:45:32 +02:00
return F . Pipe6 (
t . F1 ,
fmap ( tupleConstructor6 [ T1 , T2 , T3 , T4 , T5 , T6 ] ( ) ) ,
fap1 ( t . F2 ) ,
fap2 ( t . F3 ) ,
fap3 ( t . F4 ) ,
fap4 ( t . F5 ) ,
fap5 ( t . F6 ) ,
)
2023-07-17 13:55:35 +02:00
}
// TraverseTuple6 is a utility function used to implement the sequence operation for higher kinded types based only on map and ap.
// The function takes a [Tuple6] of base types and 6 functions that transform these based types into higher higher kinded types. It returns a higher kinded type of a [Tuple6] with the resolved values.
func TraverseTuple6 [
2023-07-23 21:45:32 +02:00
MAP ~ func ( func ( T1 ) func ( T2 ) func ( T3 ) func ( T4 ) func ( T5 ) func ( T6 ) T . Tuple6 [ T1 , T2 , T3 , T4 , T5 , T6 ] ) func ( HKT_T1 ) HKT_F_T2_T3_T4_T5_T6 ,
AP1 ~ func ( HKT_T2 ) func ( HKT_F_T2_T3_T4_T5_T6 ) HKT_F_T3_T4_T5_T6 ,
AP2 ~ func ( HKT_T3 ) func ( HKT_F_T3_T4_T5_T6 ) HKT_F_T4_T5_T6 ,
AP3 ~ func ( HKT_T4 ) func ( HKT_F_T4_T5_T6 ) HKT_F_T5_T6 ,
AP4 ~ func ( HKT_T5 ) func ( HKT_F_T5_T6 ) HKT_F_T6 ,
AP5 ~ func ( HKT_T6 ) func ( HKT_F_T6 ) HKT_TUPLE6 ,
F1 ~ func ( A1 ) HKT_T1 ,
F2 ~ func ( A2 ) HKT_T2 ,
F3 ~ func ( A3 ) HKT_T3 ,
F4 ~ func ( A4 ) HKT_T4 ,
F5 ~ func ( A5 ) HKT_T5 ,
F6 ~ func ( A6 ) HKT_T6 ,
A1 , T1 ,
A2 , T2 ,
A3 , T3 ,
A4 , T4 ,
A5 , T5 ,
A6 , T6 ,
HKT_T1 , // HKT[T1]
HKT_T2 , // HKT[T2]
HKT_T3 , // HKT[T3]
HKT_T4 , // HKT[T4]
HKT_T5 , // HKT[T5]
HKT_T6 , // HKT[T6]
HKT_F_T2_T3_T4_T5_T6 , // HKT[func(T2) func(T3) func(T4) func(T5) func(T6) T.Tuple6[T1, T2, T3, T4, T5, T6]]
HKT_F_T3_T4_T5_T6 , // HKT[func(T3) func(T4) func(T5) func(T6) T.Tuple6[T1, T2, T3, T4, T5, T6]]
HKT_F_T4_T5_T6 , // HKT[func(T4) func(T5) func(T6) T.Tuple6[T1, T2, T3, T4, T5, T6]]
HKT_F_T5_T6 , // HKT[func(T5) func(T6) T.Tuple6[T1, T2, T3, T4, T5, T6]]
HKT_F_T6 , // HKT[func(T6) T.Tuple6[T1, T2, T3, T4, T5, T6]]
HKT_TUPLE6 any , // HKT[Tuple6[T1, T2, T3, T4, T5, T6]]
2023-07-17 13:55:35 +02:00
] (
2023-07-23 21:45:32 +02:00
fmap MAP ,
fap1 AP1 ,
fap2 AP2 ,
fap3 AP3 ,
fap4 AP4 ,
fap5 AP5 ,
f1 F1 ,
f2 F2 ,
f3 F3 ,
f4 F4 ,
f5 F5 ,
f6 F6 ,
t T . Tuple6 [ A1 , A2 , A3 , A4 , A5 , A6 ] ,
2023-07-17 13:55:35 +02:00
) HKT_TUPLE6 {
2023-07-23 21:45:32 +02:00
return F . Pipe6 (
f1 ( t . F1 ) ,
fmap ( tupleConstructor6 [ T1 , T2 , T3 , T4 , T5 , T6 ] ( ) ) ,
fap1 ( f2 ( t . F2 ) ) ,
fap2 ( f3 ( t . F3 ) ) ,
fap3 ( f4 ( t . F4 ) ) ,
fap4 ( f5 ( t . F5 ) ) ,
fap5 ( f6 ( t . F6 ) ) ,
)
2023-07-13 22:24:04 +02:00
}
// tupleConstructor7 returns a curried version of [T.MakeTuple7]
func tupleConstructor7 [ T1 , T2 , T3 , T4 , T5 , T6 , T7 any ] ( ) func ( T1 ) func ( T2 ) func ( T3 ) func ( T4 ) func ( T5 ) func ( T6 ) func ( T7 ) T . Tuple7 [ T1 , T2 , T3 , T4 , T5 , T6 , T7 ] {
2023-07-23 21:45:32 +02:00
return F . Curry7 ( T . MakeTuple7 [ T1 , T2 , T3 , T4 , T5 , T6 , T7 ] )
2023-07-13 22:24:04 +02:00
}
// SequenceT7 is a utility function used to implement the sequence operation for higher kinded types based only on map and ap.
// The function takes 7 higher higher kinded types and returns a higher kinded type of a [Tuple7] with the resolved values.
func SequenceT7 [
2023-07-23 21:45:32 +02:00
MAP ~ func ( func ( T1 ) func ( T2 ) func ( T3 ) func ( T4 ) func ( T5 ) func ( T6 ) func ( T7 ) T . Tuple7 [ T1 , T2 , T3 , T4 , T5 , T6 , T7 ] ) func ( HKT_T1 ) HKT_F_T2_T3_T4_T5_T6_T7 ,
AP1 ~ func ( HKT_T2 ) func ( HKT_F_T2_T3_T4_T5_T6_T7 ) HKT_F_T3_T4_T5_T6_T7 ,
AP2 ~ func ( HKT_T3 ) func ( HKT_F_T3_T4_T5_T6_T7 ) HKT_F_T4_T5_T6_T7 ,
AP3 ~ func ( HKT_T4 ) func ( HKT_F_T4_T5_T6_T7 ) HKT_F_T5_T6_T7 ,
AP4 ~ func ( HKT_T5 ) func ( HKT_F_T5_T6_T7 ) HKT_F_T6_T7 ,
AP5 ~ func ( HKT_T6 ) func ( HKT_F_T6_T7 ) HKT_F_T7 ,
AP6 ~ func ( HKT_T7 ) func ( HKT_F_T7 ) HKT_TUPLE7 ,
T1 ,
T2 ,
T3 ,
T4 ,
T5 ,
T6 ,
T7 ,
HKT_T1 , // HKT[T1]
HKT_T2 , // HKT[T2]
HKT_T3 , // HKT[T3]
HKT_T4 , // HKT[T4]
HKT_T5 , // HKT[T5]
HKT_T6 , // HKT[T6]
HKT_T7 , // HKT[T7]
HKT_F_T2_T3_T4_T5_T6_T7 , // HKT[func(T2) func(T3) func(T4) func(T5) func(T6) func(T7) T.Tuple7[T1, T2, T3, T4, T5, T6, T7]]
HKT_F_T3_T4_T5_T6_T7 , // HKT[func(T3) func(T4) func(T5) func(T6) func(T7) T.Tuple7[T1, T2, T3, T4, T5, T6, T7]]
HKT_F_T4_T5_T6_T7 , // HKT[func(T4) func(T5) func(T6) func(T7) T.Tuple7[T1, T2, T3, T4, T5, T6, T7]]
HKT_F_T5_T6_T7 , // HKT[func(T5) func(T6) func(T7) T.Tuple7[T1, T2, T3, T4, T5, T6, T7]]
HKT_F_T6_T7 , // HKT[func(T6) func(T7) T.Tuple7[T1, T2, T3, T4, T5, T6, T7]]
HKT_F_T7 , // HKT[func(T7) T.Tuple7[T1, T2, T3, T4, T5, T6, T7]]
HKT_TUPLE7 any , // HKT[Tuple7[T1, T2, T3, T4, T5, T6, T7]]
2023-07-17 13:55:35 +02:00
] (
2023-07-23 21:45:32 +02:00
fmap MAP ,
fap1 AP1 ,
fap2 AP2 ,
fap3 AP3 ,
fap4 AP4 ,
fap5 AP5 ,
fap6 AP6 ,
t1 HKT_T1 ,
t2 HKT_T2 ,
t3 HKT_T3 ,
t4 HKT_T4 ,
t5 HKT_T5 ,
t6 HKT_T6 ,
t7 HKT_T7 ,
2023-07-17 13:55:35 +02:00
) HKT_TUPLE7 {
2023-07-23 21:45:32 +02:00
return F . Pipe7 (
t1 ,
fmap ( tupleConstructor7 [ T1 , T2 , T3 , T4 , T5 , T6 , T7 ] ( ) ) ,
fap1 ( t2 ) ,
fap2 ( t3 ) ,
fap3 ( t4 ) ,
fap4 ( t5 ) ,
fap5 ( t6 ) ,
fap6 ( t7 ) ,
)
2023-07-17 13:55:35 +02:00
}
// SequenceTuple7 is a utility function used to implement the sequence operation for higher kinded types based only on map and ap.
// The function takes a [Tuple7] of higher higher kinded types and returns a higher kinded type of a [Tuple7] with the resolved values.
func SequenceTuple7 [
2023-07-23 21:45:32 +02:00
MAP ~ func ( func ( T1 ) func ( T2 ) func ( T3 ) func ( T4 ) func ( T5 ) func ( T6 ) func ( T7 ) T . Tuple7 [ T1 , T2 , T3 , T4 , T5 , T6 , T7 ] ) func ( HKT_T1 ) HKT_F_T2_T3_T4_T5_T6_T7 ,
AP1 ~ func ( HKT_T2 ) func ( HKT_F_T2_T3_T4_T5_T6_T7 ) HKT_F_T3_T4_T5_T6_T7 ,
AP2 ~ func ( HKT_T3 ) func ( HKT_F_T3_T4_T5_T6_T7 ) HKT_F_T4_T5_T6_T7 ,
AP3 ~ func ( HKT_T4 ) func ( HKT_F_T4_T5_T6_T7 ) HKT_F_T5_T6_T7 ,
AP4 ~ func ( HKT_T5 ) func ( HKT_F_T5_T6_T7 ) HKT_F_T6_T7 ,
AP5 ~ func ( HKT_T6 ) func ( HKT_F_T6_T7 ) HKT_F_T7 ,
AP6 ~ func ( HKT_T7 ) func ( HKT_F_T7 ) HKT_TUPLE7 ,
T1 ,
T2 ,
T3 ,
T4 ,
T5 ,
T6 ,
T7 ,
HKT_T1 , // HKT[T1]
HKT_T2 , // HKT[T2]
HKT_T3 , // HKT[T3]
HKT_T4 , // HKT[T4]
HKT_T5 , // HKT[T5]
HKT_T6 , // HKT[T6]
HKT_T7 , // HKT[T7]
HKT_F_T2_T3_T4_T5_T6_T7 , // HKT[func(T2) func(T3) func(T4) func(T5) func(T6) func(T7) T.Tuple7[T1, T2, T3, T4, T5, T6, T7]]
HKT_F_T3_T4_T5_T6_T7 , // HKT[func(T3) func(T4) func(T5) func(T6) func(T7) T.Tuple7[T1, T2, T3, T4, T5, T6, T7]]
HKT_F_T4_T5_T6_T7 , // HKT[func(T4) func(T5) func(T6) func(T7) T.Tuple7[T1, T2, T3, T4, T5, T6, T7]]
HKT_F_T5_T6_T7 , // HKT[func(T5) func(T6) func(T7) T.Tuple7[T1, T2, T3, T4, T5, T6, T7]]
HKT_F_T6_T7 , // HKT[func(T6) func(T7) T.Tuple7[T1, T2, T3, T4, T5, T6, T7]]
HKT_F_T7 , // HKT[func(T7) T.Tuple7[T1, T2, T3, T4, T5, T6, T7]]
HKT_TUPLE7 any , // HKT[Tuple7[T1, T2, T3, T4, T5, T6, T7]]
2023-07-17 13:55:35 +02:00
] (
2023-07-23 21:45:32 +02:00
fmap MAP ,
fap1 AP1 ,
fap2 AP2 ,
fap3 AP3 ,
fap4 AP4 ,
fap5 AP5 ,
fap6 AP6 ,
t T . Tuple7 [ HKT_T1 , HKT_T2 , HKT_T3 , HKT_T4 , HKT_T5 , HKT_T6 , HKT_T7 ] ,
2023-07-17 13:55:35 +02:00
) HKT_TUPLE7 {
2023-07-23 21:45:32 +02:00
return F . Pipe7 (
t . F1 ,
fmap ( tupleConstructor7 [ T1 , T2 , T3 , T4 , T5 , T6 , T7 ] ( ) ) ,
fap1 ( t . F2 ) ,
fap2 ( t . F3 ) ,
fap3 ( t . F4 ) ,
fap4 ( t . F5 ) ,
fap5 ( t . F6 ) ,
fap6 ( t . F7 ) ,
)
2023-07-17 13:55:35 +02:00
}
// TraverseTuple7 is a utility function used to implement the sequence operation for higher kinded types based only on map and ap.
// The function takes a [Tuple7] of base types and 7 functions that transform these based types into higher higher kinded types. It returns a higher kinded type of a [Tuple7] with the resolved values.
func TraverseTuple7 [
2023-07-23 21:45:32 +02:00
MAP ~ func ( func ( T1 ) func ( T2 ) func ( T3 ) func ( T4 ) func ( T5 ) func ( T6 ) func ( T7 ) T . Tuple7 [ T1 , T2 , T3 , T4 , T5 , T6 , T7 ] ) func ( HKT_T1 ) HKT_F_T2_T3_T4_T5_T6_T7 ,
AP1 ~ func ( HKT_T2 ) func ( HKT_F_T2_T3_T4_T5_T6_T7 ) HKT_F_T3_T4_T5_T6_T7 ,
AP2 ~ func ( HKT_T3 ) func ( HKT_F_T3_T4_T5_T6_T7 ) HKT_F_T4_T5_T6_T7 ,
AP3 ~ func ( HKT_T4 ) func ( HKT_F_T4_T5_T6_T7 ) HKT_F_T5_T6_T7 ,
AP4 ~ func ( HKT_T5 ) func ( HKT_F_T5_T6_T7 ) HKT_F_T6_T7 ,
AP5 ~ func ( HKT_T6 ) func ( HKT_F_T6_T7 ) HKT_F_T7 ,
AP6 ~ func ( HKT_T7 ) func ( HKT_F_T7 ) HKT_TUPLE7 ,
F1 ~ func ( A1 ) HKT_T1 ,
F2 ~ func ( A2 ) HKT_T2 ,
F3 ~ func ( A3 ) HKT_T3 ,
F4 ~ func ( A4 ) HKT_T4 ,
F5 ~ func ( A5 ) HKT_T5 ,
F6 ~ func ( A6 ) HKT_T6 ,
F7 ~ func ( A7 ) HKT_T7 ,
A1 , T1 ,
A2 , T2 ,
A3 , T3 ,
A4 , T4 ,
A5 , T5 ,
A6 , T6 ,
A7 , T7 ,
HKT_T1 , // HKT[T1]
HKT_T2 , // HKT[T2]
HKT_T3 , // HKT[T3]
HKT_T4 , // HKT[T4]
HKT_T5 , // HKT[T5]
HKT_T6 , // HKT[T6]
HKT_T7 , // HKT[T7]
HKT_F_T2_T3_T4_T5_T6_T7 , // HKT[func(T2) func(T3) func(T4) func(T5) func(T6) func(T7) T.Tuple7[T1, T2, T3, T4, T5, T6, T7]]
HKT_F_T3_T4_T5_T6_T7 , // HKT[func(T3) func(T4) func(T5) func(T6) func(T7) T.Tuple7[T1, T2, T3, T4, T5, T6, T7]]
HKT_F_T4_T5_T6_T7 , // HKT[func(T4) func(T5) func(T6) func(T7) T.Tuple7[T1, T2, T3, T4, T5, T6, T7]]
HKT_F_T5_T6_T7 , // HKT[func(T5) func(T6) func(T7) T.Tuple7[T1, T2, T3, T4, T5, T6, T7]]
HKT_F_T6_T7 , // HKT[func(T6) func(T7) T.Tuple7[T1, T2, T3, T4, T5, T6, T7]]
HKT_F_T7 , // HKT[func(T7) T.Tuple7[T1, T2, T3, T4, T5, T6, T7]]
HKT_TUPLE7 any , // HKT[Tuple7[T1, T2, T3, T4, T5, T6, T7]]
2023-07-13 22:24:04 +02:00
] (
2023-07-23 21:45:32 +02:00
fmap MAP ,
fap1 AP1 ,
fap2 AP2 ,
fap3 AP3 ,
fap4 AP4 ,
fap5 AP5 ,
fap6 AP6 ,
f1 F1 ,
f2 F2 ,
f3 F3 ,
f4 F4 ,
f5 F5 ,
f6 F6 ,
f7 F7 ,
t T . Tuple7 [ A1 , A2 , A3 , A4 , A5 , A6 , A7 ] ,
2023-07-13 22:24:04 +02:00
) HKT_TUPLE7 {
2023-07-23 21:45:32 +02:00
return F . Pipe7 (
f1 ( t . F1 ) ,
fmap ( tupleConstructor7 [ T1 , T2 , T3 , T4 , T5 , T6 , T7 ] ( ) ) ,
fap1 ( f2 ( t . F2 ) ) ,
fap2 ( f3 ( t . F3 ) ) ,
fap3 ( f4 ( t . F4 ) ) ,
fap4 ( f5 ( t . F5 ) ) ,
fap5 ( f6 ( t . F6 ) ) ,
fap6 ( f7 ( t . F7 ) ) ,
)
2023-07-13 22:24:04 +02:00
}
// tupleConstructor8 returns a curried version of [T.MakeTuple8]
func tupleConstructor8 [ T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 any ] ( ) func ( 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 ] {
2023-07-23 21:45:32 +02:00
return F . Curry8 ( T . MakeTuple8 [ T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 ] )
2023-07-13 22:24:04 +02:00
}
// SequenceT8 is a utility function used to implement the sequence operation for higher kinded types based only on map and ap.
// The function takes 8 higher higher kinded types and returns a higher kinded type of a [Tuple8] with the resolved values.
func SequenceT8 [
2023-07-23 21:45:32 +02:00
MAP ~ func ( func ( 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 ] ) func ( HKT_T1 ) HKT_F_T2_T3_T4_T5_T6_T7_T8 ,
AP1 ~ func ( HKT_T2 ) func ( HKT_F_T2_T3_T4_T5_T6_T7_T8 ) HKT_F_T3_T4_T5_T6_T7_T8 ,
AP2 ~ func ( HKT_T3 ) func ( HKT_F_T3_T4_T5_T6_T7_T8 ) HKT_F_T4_T5_T6_T7_T8 ,
AP3 ~ func ( HKT_T4 ) func ( HKT_F_T4_T5_T6_T7_T8 ) HKT_F_T5_T6_T7_T8 ,
AP4 ~ func ( HKT_T5 ) func ( HKT_F_T5_T6_T7_T8 ) HKT_F_T6_T7_T8 ,
AP5 ~ func ( HKT_T6 ) func ( HKT_F_T6_T7_T8 ) HKT_F_T7_T8 ,
AP6 ~ func ( HKT_T7 ) func ( HKT_F_T7_T8 ) HKT_F_T8 ,
AP7 ~ func ( HKT_T8 ) func ( HKT_F_T8 ) HKT_TUPLE8 ,
T1 ,
T2 ,
T3 ,
T4 ,
T5 ,
T6 ,
T7 ,
T8 ,
HKT_T1 , // HKT[T1]
HKT_T2 , // HKT[T2]
HKT_T3 , // HKT[T3]
HKT_T4 , // HKT[T4]
HKT_T5 , // HKT[T5]
HKT_T6 , // HKT[T6]
HKT_T7 , // HKT[T7]
HKT_T8 , // HKT[T8]
HKT_F_T2_T3_T4_T5_T6_T7_T8 , // HKT[func(T2) func(T3) func(T4) func(T5) func(T6) func(T7) func(T8) T.Tuple8[T1, T2, T3, T4, T5, T6, T7, T8]]
HKT_F_T3_T4_T5_T6_T7_T8 , // HKT[func(T3) func(T4) func(T5) func(T6) func(T7) func(T8) T.Tuple8[T1, T2, T3, T4, T5, T6, T7, T8]]
HKT_F_T4_T5_T6_T7_T8 , // HKT[func(T4) func(T5) func(T6) func(T7) func(T8) T.Tuple8[T1, T2, T3, T4, T5, T6, T7, T8]]
HKT_F_T5_T6_T7_T8 , // HKT[func(T5) func(T6) func(T7) func(T8) T.Tuple8[T1, T2, T3, T4, T5, T6, T7, T8]]
HKT_F_T6_T7_T8 , // HKT[func(T6) func(T7) func(T8) T.Tuple8[T1, T2, T3, T4, T5, T6, T7, T8]]
HKT_F_T7_T8 , // HKT[func(T7) func(T8) T.Tuple8[T1, T2, T3, T4, T5, T6, T7, T8]]
HKT_F_T8 , // HKT[func(T8) T.Tuple8[T1, T2, T3, T4, T5, T6, T7, T8]]
HKT_TUPLE8 any , // HKT[Tuple8[T1, T2, T3, T4, T5, T6, T7, T8]]
2023-07-13 22:24:04 +02:00
] (
2023-07-23 21:45:32 +02:00
fmap MAP ,
fap1 AP1 ,
fap2 AP2 ,
fap3 AP3 ,
fap4 AP4 ,
fap5 AP5 ,
fap6 AP6 ,
fap7 AP7 ,
t1 HKT_T1 ,
t2 HKT_T2 ,
t3 HKT_T3 ,
t4 HKT_T4 ,
t5 HKT_T5 ,
t6 HKT_T6 ,
t7 HKT_T7 ,
t8 HKT_T8 ,
2023-07-13 22:24:04 +02:00
) HKT_TUPLE8 {
2023-07-23 21:45:32 +02:00
return F . Pipe8 (
t1 ,
fmap ( tupleConstructor8 [ T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 ] ( ) ) ,
fap1 ( t2 ) ,
fap2 ( t3 ) ,
fap3 ( t4 ) ,
fap4 ( t5 ) ,
fap5 ( t6 ) ,
fap6 ( t7 ) ,
fap7 ( t8 ) ,
)
2023-07-17 13:55:35 +02:00
}
// SequenceTuple8 is a utility function used to implement the sequence operation for higher kinded types based only on map and ap.
// The function takes a [Tuple8] of higher higher kinded types and returns a higher kinded type of a [Tuple8] with the resolved values.
func SequenceTuple8 [
2023-07-23 21:45:32 +02:00
MAP ~ func ( func ( 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 ] ) func ( HKT_T1 ) HKT_F_T2_T3_T4_T5_T6_T7_T8 ,
AP1 ~ func ( HKT_T2 ) func ( HKT_F_T2_T3_T4_T5_T6_T7_T8 ) HKT_F_T3_T4_T5_T6_T7_T8 ,
AP2 ~ func ( HKT_T3 ) func ( HKT_F_T3_T4_T5_T6_T7_T8 ) HKT_F_T4_T5_T6_T7_T8 ,
AP3 ~ func ( HKT_T4 ) func ( HKT_F_T4_T5_T6_T7_T8 ) HKT_F_T5_T6_T7_T8 ,
AP4 ~ func ( HKT_T5 ) func ( HKT_F_T5_T6_T7_T8 ) HKT_F_T6_T7_T8 ,
AP5 ~ func ( HKT_T6 ) func ( HKT_F_T6_T7_T8 ) HKT_F_T7_T8 ,
AP6 ~ func ( HKT_T7 ) func ( HKT_F_T7_T8 ) HKT_F_T8 ,
AP7 ~ func ( HKT_T8 ) func ( HKT_F_T8 ) HKT_TUPLE8 ,
T1 ,
T2 ,
T3 ,
T4 ,
T5 ,
T6 ,
T7 ,
T8 ,
HKT_T1 , // HKT[T1]
HKT_T2 , // HKT[T2]
HKT_T3 , // HKT[T3]
HKT_T4 , // HKT[T4]
HKT_T5 , // HKT[T5]
HKT_T6 , // HKT[T6]
HKT_T7 , // HKT[T7]
HKT_T8 , // HKT[T8]
HKT_F_T2_T3_T4_T5_T6_T7_T8 , // HKT[func(T2) func(T3) func(T4) func(T5) func(T6) func(T7) func(T8) T.Tuple8[T1, T2, T3, T4, T5, T6, T7, T8]]
HKT_F_T3_T4_T5_T6_T7_T8 , // HKT[func(T3) func(T4) func(T5) func(T6) func(T7) func(T8) T.Tuple8[T1, T2, T3, T4, T5, T6, T7, T8]]
HKT_F_T4_T5_T6_T7_T8 , // HKT[func(T4) func(T5) func(T6) func(T7) func(T8) T.Tuple8[T1, T2, T3, T4, T5, T6, T7, T8]]
HKT_F_T5_T6_T7_T8 , // HKT[func(T5) func(T6) func(T7) func(T8) T.Tuple8[T1, T2, T3, T4, T5, T6, T7, T8]]
HKT_F_T6_T7_T8 , // HKT[func(T6) func(T7) func(T8) T.Tuple8[T1, T2, T3, T4, T5, T6, T7, T8]]
HKT_F_T7_T8 , // HKT[func(T7) func(T8) T.Tuple8[T1, T2, T3, T4, T5, T6, T7, T8]]
HKT_F_T8 , // HKT[func(T8) T.Tuple8[T1, T2, T3, T4, T5, T6, T7, T8]]
HKT_TUPLE8 any , // HKT[Tuple8[T1, T2, T3, T4, T5, T6, T7, T8]]
2023-07-17 13:55:35 +02:00
] (
2023-07-23 21:45:32 +02:00
fmap MAP ,
fap1 AP1 ,
fap2 AP2 ,
fap3 AP3 ,
fap4 AP4 ,
fap5 AP5 ,
fap6 AP6 ,
fap7 AP7 ,
t T . Tuple8 [ HKT_T1 , HKT_T2 , HKT_T3 , HKT_T4 , HKT_T5 , HKT_T6 , HKT_T7 , HKT_T8 ] ,
2023-07-17 13:55:35 +02:00
) HKT_TUPLE8 {
2023-07-23 21:45:32 +02:00
return F . Pipe8 (
t . F1 ,
fmap ( tupleConstructor8 [ T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 ] ( ) ) ,
fap1 ( t . F2 ) ,
fap2 ( t . F3 ) ,
fap3 ( t . F4 ) ,
fap4 ( t . F5 ) ,
fap5 ( t . F6 ) ,
fap6 ( t . F7 ) ,
fap7 ( t . F8 ) ,
)
2023-07-17 13:55:35 +02:00
}
// TraverseTuple8 is a utility function used to implement the sequence operation for higher kinded types based only on map and ap.
// The function takes a [Tuple8] of base types and 8 functions that transform these based types into higher higher kinded types. It returns a higher kinded type of a [Tuple8] with the resolved values.
func TraverseTuple8 [
2023-07-23 21:45:32 +02:00
MAP ~ func ( func ( 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 ] ) func ( HKT_T1 ) HKT_F_T2_T3_T4_T5_T6_T7_T8 ,
AP1 ~ func ( HKT_T2 ) func ( HKT_F_T2_T3_T4_T5_T6_T7_T8 ) HKT_F_T3_T4_T5_T6_T7_T8 ,
AP2 ~ func ( HKT_T3 ) func ( HKT_F_T3_T4_T5_T6_T7_T8 ) HKT_F_T4_T5_T6_T7_T8 ,
AP3 ~ func ( HKT_T4 ) func ( HKT_F_T4_T5_T6_T7_T8 ) HKT_F_T5_T6_T7_T8 ,
AP4 ~ func ( HKT_T5 ) func ( HKT_F_T5_T6_T7_T8 ) HKT_F_T6_T7_T8 ,
AP5 ~ func ( HKT_T6 ) func ( HKT_F_T6_T7_T8 ) HKT_F_T7_T8 ,
AP6 ~ func ( HKT_T7 ) func ( HKT_F_T7_T8 ) HKT_F_T8 ,
AP7 ~ func ( HKT_T8 ) func ( HKT_F_T8 ) HKT_TUPLE8 ,
F1 ~ func ( A1 ) HKT_T1 ,
F2 ~ func ( A2 ) HKT_T2 ,
F3 ~ func ( A3 ) HKT_T3 ,
F4 ~ func ( A4 ) HKT_T4 ,
F5 ~ func ( A5 ) HKT_T5 ,
F6 ~ func ( A6 ) HKT_T6 ,
F7 ~ func ( A7 ) HKT_T7 ,
F8 ~ func ( A8 ) HKT_T8 ,
A1 , T1 ,
A2 , T2 ,
A3 , T3 ,
A4 , T4 ,
A5 , T5 ,
A6 , T6 ,
A7 , T7 ,
A8 , T8 ,
HKT_T1 , // HKT[T1]
HKT_T2 , // HKT[T2]
HKT_T3 , // HKT[T3]
HKT_T4 , // HKT[T4]
HKT_T5 , // HKT[T5]
HKT_T6 , // HKT[T6]
HKT_T7 , // HKT[T7]
HKT_T8 , // HKT[T8]
HKT_F_T2_T3_T4_T5_T6_T7_T8 , // HKT[func(T2) func(T3) func(T4) func(T5) func(T6) func(T7) func(T8) T.Tuple8[T1, T2, T3, T4, T5, T6, T7, T8]]
HKT_F_T3_T4_T5_T6_T7_T8 , // HKT[func(T3) func(T4) func(T5) func(T6) func(T7) func(T8) T.Tuple8[T1, T2, T3, T4, T5, T6, T7, T8]]
HKT_F_T4_T5_T6_T7_T8 , // HKT[func(T4) func(T5) func(T6) func(T7) func(T8) T.Tuple8[T1, T2, T3, T4, T5, T6, T7, T8]]
HKT_F_T5_T6_T7_T8 , // HKT[func(T5) func(T6) func(T7) func(T8) T.Tuple8[T1, T2, T3, T4, T5, T6, T7, T8]]
HKT_F_T6_T7_T8 , // HKT[func(T6) func(T7) func(T8) T.Tuple8[T1, T2, T3, T4, T5, T6, T7, T8]]
HKT_F_T7_T8 , // HKT[func(T7) func(T8) T.Tuple8[T1, T2, T3, T4, T5, T6, T7, T8]]
HKT_F_T8 , // HKT[func(T8) T.Tuple8[T1, T2, T3, T4, T5, T6, T7, T8]]
HKT_TUPLE8 any , // HKT[Tuple8[T1, T2, T3, T4, T5, T6, T7, T8]]
2023-07-17 13:55:35 +02:00
] (
2023-07-23 21:45:32 +02:00
fmap MAP ,
fap1 AP1 ,
fap2 AP2 ,
fap3 AP3 ,
fap4 AP4 ,
fap5 AP5 ,
fap6 AP6 ,
fap7 AP7 ,
f1 F1 ,
f2 F2 ,
f3 F3 ,
f4 F4 ,
f5 F5 ,
f6 F6 ,
f7 F7 ,
f8 F8 ,
t T . Tuple8 [ A1 , A2 , A3 , A4 , A5 , A6 , A7 , A8 ] ,
2023-07-17 13:55:35 +02:00
) HKT_TUPLE8 {
2023-07-23 21:45:32 +02:00
return F . Pipe8 (
f1 ( t . F1 ) ,
fmap ( tupleConstructor8 [ T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 ] ( ) ) ,
fap1 ( f2 ( t . F2 ) ) ,
fap2 ( f3 ( t . F3 ) ) ,
fap3 ( f4 ( t . F4 ) ) ,
fap4 ( f5 ( t . F5 ) ) ,
fap5 ( f6 ( t . F6 ) ) ,
fap6 ( f7 ( t . F7 ) ) ,
fap7 ( f8 ( t . F8 ) ) ,
)
2023-07-13 22:24:04 +02:00
}
// tupleConstructor9 returns a curried version of [T.MakeTuple9]
func tupleConstructor9 [ T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 any ] ( ) func ( 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 ] {
2023-07-23 21:45:32 +02:00
return F . Curry9 ( T . MakeTuple9 [ T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 ] )
2023-07-13 22:24:04 +02:00
}
// SequenceT9 is a utility function used to implement the sequence operation for higher kinded types based only on map and ap.
// The function takes 9 higher higher kinded types and returns a higher kinded type of a [Tuple9] with the resolved values.
func SequenceT9 [
2023-07-23 21:45:32 +02:00
MAP ~ func ( func ( 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 ] ) func ( HKT_T1 ) HKT_F_T2_T3_T4_T5_T6_T7_T8_T9 ,
AP1 ~ func ( HKT_T2 ) func ( HKT_F_T2_T3_T4_T5_T6_T7_T8_T9 ) HKT_F_T3_T4_T5_T6_T7_T8_T9 ,
AP2 ~ func ( HKT_T3 ) func ( HKT_F_T3_T4_T5_T6_T7_T8_T9 ) HKT_F_T4_T5_T6_T7_T8_T9 ,
AP3 ~ func ( HKT_T4 ) func ( HKT_F_T4_T5_T6_T7_T8_T9 ) HKT_F_T5_T6_T7_T8_T9 ,
AP4 ~ func ( HKT_T5 ) func ( HKT_F_T5_T6_T7_T8_T9 ) HKT_F_T6_T7_T8_T9 ,
AP5 ~ func ( HKT_T6 ) func ( HKT_F_T6_T7_T8_T9 ) HKT_F_T7_T8_T9 ,
AP6 ~ func ( HKT_T7 ) func ( HKT_F_T7_T8_T9 ) HKT_F_T8_T9 ,
AP7 ~ func ( HKT_T8 ) func ( HKT_F_T8_T9 ) HKT_F_T9 ,
AP8 ~ func ( HKT_T9 ) func ( HKT_F_T9 ) HKT_TUPLE9 ,
T1 ,
T2 ,
T3 ,
T4 ,
T5 ,
T6 ,
T7 ,
T8 ,
T9 ,
HKT_T1 , // HKT[T1]
HKT_T2 , // HKT[T2]
HKT_T3 , // HKT[T3]
HKT_T4 , // HKT[T4]
HKT_T5 , // HKT[T5]
HKT_T6 , // HKT[T6]
HKT_T7 , // HKT[T7]
HKT_T8 , // HKT[T8]
HKT_T9 , // HKT[T9]
HKT_F_T2_T3_T4_T5_T6_T7_T8_T9 , // HKT[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]]
HKT_F_T3_T4_T5_T6_T7_T8_T9 , // HKT[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]]
HKT_F_T4_T5_T6_T7_T8_T9 , // HKT[func(T4) func(T5) func(T6) func(T7) func(T8) func(T9) T.Tuple9[T1, T2, T3, T4, T5, T6, T7, T8, T9]]
HKT_F_T5_T6_T7_T8_T9 , // HKT[func(T5) func(T6) func(T7) func(T8) func(T9) T.Tuple9[T1, T2, T3, T4, T5, T6, T7, T8, T9]]
HKT_F_T6_T7_T8_T9 , // HKT[func(T6) func(T7) func(T8) func(T9) T.Tuple9[T1, T2, T3, T4, T5, T6, T7, T8, T9]]
HKT_F_T7_T8_T9 , // HKT[func(T7) func(T8) func(T9) T.Tuple9[T1, T2, T3, T4, T5, T6, T7, T8, T9]]
HKT_F_T8_T9 , // HKT[func(T8) func(T9) T.Tuple9[T1, T2, T3, T4, T5, T6, T7, T8, T9]]
HKT_F_T9 , // HKT[func(T9) T.Tuple9[T1, T2, T3, T4, T5, T6, T7, T8, T9]]
HKT_TUPLE9 any , // HKT[Tuple9[T1, T2, T3, T4, T5, T6, T7, T8, T9]]
2023-07-17 13:55:35 +02:00
] (
2023-07-23 21:45:32 +02:00
fmap MAP ,
fap1 AP1 ,
fap2 AP2 ,
fap3 AP3 ,
fap4 AP4 ,
fap5 AP5 ,
fap6 AP6 ,
fap7 AP7 ,
fap8 AP8 ,
t1 HKT_T1 ,
t2 HKT_T2 ,
t3 HKT_T3 ,
t4 HKT_T4 ,
t5 HKT_T5 ,
t6 HKT_T6 ,
t7 HKT_T7 ,
t8 HKT_T8 ,
t9 HKT_T9 ,
2023-07-17 13:55:35 +02:00
) HKT_TUPLE9 {
2023-07-23 21:45:32 +02:00
return F . Pipe9 (
t1 ,
fmap ( tupleConstructor9 [ T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 ] ( ) ) ,
fap1 ( t2 ) ,
fap2 ( t3 ) ,
fap3 ( t4 ) ,
fap4 ( t5 ) ,
fap5 ( t6 ) ,
fap6 ( t7 ) ,
fap7 ( t8 ) ,
fap8 ( t9 ) ,
)
2023-07-17 13:55:35 +02:00
}
// SequenceTuple9 is a utility function used to implement the sequence operation for higher kinded types based only on map and ap.
// The function takes a [Tuple9] of higher higher kinded types and returns a higher kinded type of a [Tuple9] with the resolved values.
func SequenceTuple9 [
2023-07-23 21:45:32 +02:00
MAP ~ func ( func ( 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 ] ) func ( HKT_T1 ) HKT_F_T2_T3_T4_T5_T6_T7_T8_T9 ,
AP1 ~ func ( HKT_T2 ) func ( HKT_F_T2_T3_T4_T5_T6_T7_T8_T9 ) HKT_F_T3_T4_T5_T6_T7_T8_T9 ,
AP2 ~ func ( HKT_T3 ) func ( HKT_F_T3_T4_T5_T6_T7_T8_T9 ) HKT_F_T4_T5_T6_T7_T8_T9 ,
AP3 ~ func ( HKT_T4 ) func ( HKT_F_T4_T5_T6_T7_T8_T9 ) HKT_F_T5_T6_T7_T8_T9 ,
AP4 ~ func ( HKT_T5 ) func ( HKT_F_T5_T6_T7_T8_T9 ) HKT_F_T6_T7_T8_T9 ,
AP5 ~ func ( HKT_T6 ) func ( HKT_F_T6_T7_T8_T9 ) HKT_F_T7_T8_T9 ,
AP6 ~ func ( HKT_T7 ) func ( HKT_F_T7_T8_T9 ) HKT_F_T8_T9 ,
AP7 ~ func ( HKT_T8 ) func ( HKT_F_T8_T9 ) HKT_F_T9 ,
AP8 ~ func ( HKT_T9 ) func ( HKT_F_T9 ) HKT_TUPLE9 ,
T1 ,
T2 ,
T3 ,
T4 ,
T5 ,
T6 ,
T7 ,
T8 ,
T9 ,
HKT_T1 , // HKT[T1]
HKT_T2 , // HKT[T2]
HKT_T3 , // HKT[T3]
HKT_T4 , // HKT[T4]
HKT_T5 , // HKT[T5]
HKT_T6 , // HKT[T6]
HKT_T7 , // HKT[T7]
HKT_T8 , // HKT[T8]
HKT_T9 , // HKT[T9]
HKT_F_T2_T3_T4_T5_T6_T7_T8_T9 , // HKT[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]]
HKT_F_T3_T4_T5_T6_T7_T8_T9 , // HKT[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]]
HKT_F_T4_T5_T6_T7_T8_T9 , // HKT[func(T4) func(T5) func(T6) func(T7) func(T8) func(T9) T.Tuple9[T1, T2, T3, T4, T5, T6, T7, T8, T9]]
HKT_F_T5_T6_T7_T8_T9 , // HKT[func(T5) func(T6) func(T7) func(T8) func(T9) T.Tuple9[T1, T2, T3, T4, T5, T6, T7, T8, T9]]
HKT_F_T6_T7_T8_T9 , // HKT[func(T6) func(T7) func(T8) func(T9) T.Tuple9[T1, T2, T3, T4, T5, T6, T7, T8, T9]]
HKT_F_T7_T8_T9 , // HKT[func(T7) func(T8) func(T9) T.Tuple9[T1, T2, T3, T4, T5, T6, T7, T8, T9]]
HKT_F_T8_T9 , // HKT[func(T8) func(T9) T.Tuple9[T1, T2, T3, T4, T5, T6, T7, T8, T9]]
HKT_F_T9 , // HKT[func(T9) T.Tuple9[T1, T2, T3, T4, T5, T6, T7, T8, T9]]
HKT_TUPLE9 any , // HKT[Tuple9[T1, T2, T3, T4, T5, T6, T7, T8, T9]]
2023-07-13 22:24:04 +02:00
] (
2023-07-23 21:45:32 +02:00
fmap MAP ,
fap1 AP1 ,
fap2 AP2 ,
fap3 AP3 ,
fap4 AP4 ,
fap5 AP5 ,
fap6 AP6 ,
fap7 AP7 ,
fap8 AP8 ,
t T . Tuple9 [ HKT_T1 , HKT_T2 , HKT_T3 , HKT_T4 , HKT_T5 , HKT_T6 , HKT_T7 , HKT_T8 , HKT_T9 ] ,
2023-07-13 22:24:04 +02:00
) HKT_TUPLE9 {
2023-07-23 21:45:32 +02:00
return F . Pipe9 (
t . F1 ,
fmap ( tupleConstructor9 [ T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 ] ( ) ) ,
fap1 ( t . F2 ) ,
fap2 ( t . F3 ) ,
fap3 ( t . F4 ) ,
fap4 ( t . F5 ) ,
fap5 ( t . F6 ) ,
fap6 ( t . F7 ) ,
fap7 ( t . F8 ) ,
fap8 ( t . F9 ) ,
)
2023-07-17 13:55:35 +02:00
}
// TraverseTuple9 is a utility function used to implement the sequence operation for higher kinded types based only on map and ap.
// The function takes a [Tuple9] of base types and 9 functions that transform these based types into higher higher kinded types. It returns a higher kinded type of a [Tuple9] with the resolved values.
func TraverseTuple9 [
2023-07-23 21:45:32 +02:00
MAP ~ func ( func ( 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 ] ) func ( HKT_T1 ) HKT_F_T2_T3_T4_T5_T6_T7_T8_T9 ,
AP1 ~ func ( HKT_T2 ) func ( HKT_F_T2_T3_T4_T5_T6_T7_T8_T9 ) HKT_F_T3_T4_T5_T6_T7_T8_T9 ,
AP2 ~ func ( HKT_T3 ) func ( HKT_F_T3_T4_T5_T6_T7_T8_T9 ) HKT_F_T4_T5_T6_T7_T8_T9 ,
AP3 ~ func ( HKT_T4 ) func ( HKT_F_T4_T5_T6_T7_T8_T9 ) HKT_F_T5_T6_T7_T8_T9 ,
AP4 ~ func ( HKT_T5 ) func ( HKT_F_T5_T6_T7_T8_T9 ) HKT_F_T6_T7_T8_T9 ,
AP5 ~ func ( HKT_T6 ) func ( HKT_F_T6_T7_T8_T9 ) HKT_F_T7_T8_T9 ,
AP6 ~ func ( HKT_T7 ) func ( HKT_F_T7_T8_T9 ) HKT_F_T8_T9 ,
AP7 ~ func ( HKT_T8 ) func ( HKT_F_T8_T9 ) HKT_F_T9 ,
AP8 ~ func ( HKT_T9 ) func ( HKT_F_T9 ) HKT_TUPLE9 ,
F1 ~ func ( A1 ) HKT_T1 ,
F2 ~ func ( A2 ) HKT_T2 ,
F3 ~ func ( A3 ) HKT_T3 ,
F4 ~ func ( A4 ) HKT_T4 ,
F5 ~ func ( A5 ) HKT_T5 ,
F6 ~ func ( A6 ) HKT_T6 ,
F7 ~ func ( A7 ) HKT_T7 ,
F8 ~ func ( A8 ) HKT_T8 ,
F9 ~ func ( A9 ) HKT_T9 ,
A1 , T1 ,
A2 , T2 ,
A3 , T3 ,
A4 , T4 ,
A5 , T5 ,
A6 , T6 ,
A7 , T7 ,
A8 , T8 ,
A9 , T9 ,
HKT_T1 , // HKT[T1]
HKT_T2 , // HKT[T2]
HKT_T3 , // HKT[T3]
HKT_T4 , // HKT[T4]
HKT_T5 , // HKT[T5]
HKT_T6 , // HKT[T6]
HKT_T7 , // HKT[T7]
HKT_T8 , // HKT[T8]
HKT_T9 , // HKT[T9]
HKT_F_T2_T3_T4_T5_T6_T7_T8_T9 , // HKT[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]]
HKT_F_T3_T4_T5_T6_T7_T8_T9 , // HKT[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]]
HKT_F_T4_T5_T6_T7_T8_T9 , // HKT[func(T4) func(T5) func(T6) func(T7) func(T8) func(T9) T.Tuple9[T1, T2, T3, T4, T5, T6, T7, T8, T9]]
HKT_F_T5_T6_T7_T8_T9 , // HKT[func(T5) func(T6) func(T7) func(T8) func(T9) T.Tuple9[T1, T2, T3, T4, T5, T6, T7, T8, T9]]
HKT_F_T6_T7_T8_T9 , // HKT[func(T6) func(T7) func(T8) func(T9) T.Tuple9[T1, T2, T3, T4, T5, T6, T7, T8, T9]]
HKT_F_T7_T8_T9 , // HKT[func(T7) func(T8) func(T9) T.Tuple9[T1, T2, T3, T4, T5, T6, T7, T8, T9]]
HKT_F_T8_T9 , // HKT[func(T8) func(T9) T.Tuple9[T1, T2, T3, T4, T5, T6, T7, T8, T9]]
HKT_F_T9 , // HKT[func(T9) T.Tuple9[T1, T2, T3, T4, T5, T6, T7, T8, T9]]
HKT_TUPLE9 any , // HKT[Tuple9[T1, T2, T3, T4, T5, T6, T7, T8, T9]]
2023-07-17 13:55:35 +02:00
] (
2023-07-23 21:45:32 +02:00
fmap MAP ,
fap1 AP1 ,
fap2 AP2 ,
fap3 AP3 ,
fap4 AP4 ,
fap5 AP5 ,
fap6 AP6 ,
fap7 AP7 ,
fap8 AP8 ,
f1 F1 ,
f2 F2 ,
f3 F3 ,
f4 F4 ,
f5 F5 ,
f6 F6 ,
f7 F7 ,
f8 F8 ,
f9 F9 ,
t T . Tuple9 [ A1 , A2 , A3 , A4 , A5 , A6 , A7 , A8 , A9 ] ,
2023-07-17 13:55:35 +02:00
) HKT_TUPLE9 {
2023-07-23 21:45:32 +02:00
return F . Pipe9 (
f1 ( t . F1 ) ,
fmap ( tupleConstructor9 [ T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 ] ( ) ) ,
fap1 ( f2 ( t . F2 ) ) ,
fap2 ( f3 ( t . F3 ) ) ,
fap3 ( f4 ( t . F4 ) ) ,
fap4 ( f5 ( t . F5 ) ) ,
fap5 ( f6 ( t . F6 ) ) ,
fap6 ( f7 ( t . F7 ) ) ,
fap7 ( f8 ( t . F8 ) ) ,
fap8 ( f9 ( t . F9 ) ) ,
)
2023-07-13 22:24:04 +02:00
}
// tupleConstructor10 returns a curried version of [T.MakeTuple10]
func tupleConstructor10 [ T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 any ] ( ) func ( 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 ] {
2023-07-23 21:45:32 +02:00
return F . Curry10 ( T . MakeTuple10 [ T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 ] )
2023-07-13 22:24:04 +02:00
}
// SequenceT10 is a utility function used to implement the sequence operation for higher kinded types based only on map and ap.
// The function takes 10 higher higher kinded types and returns a higher kinded type of a [Tuple10] with the resolved values.
func SequenceT10 [
2023-07-23 21:45:32 +02:00
MAP ~ func ( func ( 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 ] ) func ( HKT_T1 ) HKT_F_T2_T3_T4_T5_T6_T7_T8_T9_T10 ,
AP1 ~ func ( HKT_T2 ) func ( HKT_F_T2_T3_T4_T5_T6_T7_T8_T9_T10 ) HKT_F_T3_T4_T5_T6_T7_T8_T9_T10 ,
AP2 ~ func ( HKT_T3 ) func ( HKT_F_T3_T4_T5_T6_T7_T8_T9_T10 ) HKT_F_T4_T5_T6_T7_T8_T9_T10 ,
AP3 ~ func ( HKT_T4 ) func ( HKT_F_T4_T5_T6_T7_T8_T9_T10 ) HKT_F_T5_T6_T7_T8_T9_T10 ,
AP4 ~ func ( HKT_T5 ) func ( HKT_F_T5_T6_T7_T8_T9_T10 ) HKT_F_T6_T7_T8_T9_T10 ,
AP5 ~ func ( HKT_T6 ) func ( HKT_F_T6_T7_T8_T9_T10 ) HKT_F_T7_T8_T9_T10 ,
AP6 ~ func ( HKT_T7 ) func ( HKT_F_T7_T8_T9_T10 ) HKT_F_T8_T9_T10 ,
AP7 ~ func ( HKT_T8 ) func ( HKT_F_T8_T9_T10 ) HKT_F_T9_T10 ,
AP8 ~ func ( HKT_T9 ) func ( HKT_F_T9_T10 ) HKT_F_T10 ,
AP9 ~ func ( HKT_T10 ) func ( HKT_F_T10 ) HKT_TUPLE10 ,
T1 ,
T2 ,
T3 ,
T4 ,
T5 ,
T6 ,
T7 ,
T8 ,
T9 ,
T10 ,
HKT_T1 , // HKT[T1]
HKT_T2 , // HKT[T2]
HKT_T3 , // HKT[T3]
HKT_T4 , // HKT[T4]
HKT_T5 , // HKT[T5]
HKT_T6 , // HKT[T6]
HKT_T7 , // HKT[T7]
HKT_T8 , // HKT[T8]
HKT_T9 , // HKT[T9]
HKT_T10 , // HKT[T10]
HKT_F_T2_T3_T4_T5_T6_T7_T8_T9_T10 , // HKT[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]]
HKT_F_T3_T4_T5_T6_T7_T8_T9_T10 , // HKT[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]]
HKT_F_T4_T5_T6_T7_T8_T9_T10 , // HKT[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]]
HKT_F_T5_T6_T7_T8_T9_T10 , // HKT[func(T5) func(T6) func(T7) func(T8) func(T9) func(T10) T.Tuple10[T1, T2, T3, T4, T5, T6, T7, T8, T9, T10]]
HKT_F_T6_T7_T8_T9_T10 , // HKT[func(T6) func(T7) func(T8) func(T9) func(T10) T.Tuple10[T1, T2, T3, T4, T5, T6, T7, T8, T9, T10]]
HKT_F_T7_T8_T9_T10 , // HKT[func(T7) func(T8) func(T9) func(T10) T.Tuple10[T1, T2, T3, T4, T5, T6, T7, T8, T9, T10]]
HKT_F_T8_T9_T10 , // HKT[func(T8) func(T9) func(T10) T.Tuple10[T1, T2, T3, T4, T5, T6, T7, T8, T9, T10]]
HKT_F_T9_T10 , // HKT[func(T9) func(T10) T.Tuple10[T1, T2, T3, T4, T5, T6, T7, T8, T9, T10]]
HKT_F_T10 , // HKT[func(T10) T.Tuple10[T1, T2, T3, T4, T5, T6, T7, T8, T9, T10]]
HKT_TUPLE10 any , // HKT[Tuple10[T1, T2, T3, T4, T5, T6, T7, T8, T9, T10]]
2023-07-17 13:55:35 +02:00
] (
2023-07-23 21:45:32 +02:00
fmap MAP ,
fap1 AP1 ,
fap2 AP2 ,
fap3 AP3 ,
fap4 AP4 ,
fap5 AP5 ,
fap6 AP6 ,
fap7 AP7 ,
fap8 AP8 ,
fap9 AP9 ,
t1 HKT_T1 ,
t2 HKT_T2 ,
t3 HKT_T3 ,
t4 HKT_T4 ,
t5 HKT_T5 ,
t6 HKT_T6 ,
t7 HKT_T7 ,
t8 HKT_T8 ,
t9 HKT_T9 ,
t10 HKT_T10 ,
2023-07-17 13:55:35 +02:00
) HKT_TUPLE10 {
2023-07-23 21:45:32 +02:00
return F . Pipe10 (
t1 ,
fmap ( tupleConstructor10 [ T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 ] ( ) ) ,
fap1 ( t2 ) ,
fap2 ( t3 ) ,
fap3 ( t4 ) ,
fap4 ( t5 ) ,
fap5 ( t6 ) ,
fap6 ( t7 ) ,
fap7 ( t8 ) ,
fap8 ( t9 ) ,
fap9 ( t10 ) ,
)
2023-07-17 13:55:35 +02:00
}
// SequenceTuple10 is a utility function used to implement the sequence operation for higher kinded types based only on map and ap.
// The function takes a [Tuple10] of higher higher kinded types and returns a higher kinded type of a [Tuple10] with the resolved values.
func SequenceTuple10 [
2023-07-23 21:45:32 +02:00
MAP ~ func ( func ( 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 ] ) func ( HKT_T1 ) HKT_F_T2_T3_T4_T5_T6_T7_T8_T9_T10 ,
AP1 ~ func ( HKT_T2 ) func ( HKT_F_T2_T3_T4_T5_T6_T7_T8_T9_T10 ) HKT_F_T3_T4_T5_T6_T7_T8_T9_T10 ,
AP2 ~ func ( HKT_T3 ) func ( HKT_F_T3_T4_T5_T6_T7_T8_T9_T10 ) HKT_F_T4_T5_T6_T7_T8_T9_T10 ,
AP3 ~ func ( HKT_T4 ) func ( HKT_F_T4_T5_T6_T7_T8_T9_T10 ) HKT_F_T5_T6_T7_T8_T9_T10 ,
AP4 ~ func ( HKT_T5 ) func ( HKT_F_T5_T6_T7_T8_T9_T10 ) HKT_F_T6_T7_T8_T9_T10 ,
AP5 ~ func ( HKT_T6 ) func ( HKT_F_T6_T7_T8_T9_T10 ) HKT_F_T7_T8_T9_T10 ,
AP6 ~ func ( HKT_T7 ) func ( HKT_F_T7_T8_T9_T10 ) HKT_F_T8_T9_T10 ,
AP7 ~ func ( HKT_T8 ) func ( HKT_F_T8_T9_T10 ) HKT_F_T9_T10 ,
AP8 ~ func ( HKT_T9 ) func ( HKT_F_T9_T10 ) HKT_F_T10 ,
AP9 ~ func ( HKT_T10 ) func ( HKT_F_T10 ) HKT_TUPLE10 ,
T1 ,
T2 ,
T3 ,
T4 ,
T5 ,
T6 ,
T7 ,
T8 ,
T9 ,
T10 ,
HKT_T1 , // HKT[T1]
HKT_T2 , // HKT[T2]
HKT_T3 , // HKT[T3]
HKT_T4 , // HKT[T4]
HKT_T5 , // HKT[T5]
HKT_T6 , // HKT[T6]
HKT_T7 , // HKT[T7]
HKT_T8 , // HKT[T8]
HKT_T9 , // HKT[T9]
HKT_T10 , // HKT[T10]
HKT_F_T2_T3_T4_T5_T6_T7_T8_T9_T10 , // HKT[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]]
HKT_F_T3_T4_T5_T6_T7_T8_T9_T10 , // HKT[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]]
HKT_F_T4_T5_T6_T7_T8_T9_T10 , // HKT[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]]
HKT_F_T5_T6_T7_T8_T9_T10 , // HKT[func(T5) func(T6) func(T7) func(T8) func(T9) func(T10) T.Tuple10[T1, T2, T3, T4, T5, T6, T7, T8, T9, T10]]
HKT_F_T6_T7_T8_T9_T10 , // HKT[func(T6) func(T7) func(T8) func(T9) func(T10) T.Tuple10[T1, T2, T3, T4, T5, T6, T7, T8, T9, T10]]
HKT_F_T7_T8_T9_T10 , // HKT[func(T7) func(T8) func(T9) func(T10) T.Tuple10[T1, T2, T3, T4, T5, T6, T7, T8, T9, T10]]
HKT_F_T8_T9_T10 , // HKT[func(T8) func(T9) func(T10) T.Tuple10[T1, T2, T3, T4, T5, T6, T7, T8, T9, T10]]
HKT_F_T9_T10 , // HKT[func(T9) func(T10) T.Tuple10[T1, T2, T3, T4, T5, T6, T7, T8, T9, T10]]
HKT_F_T10 , // HKT[func(T10) T.Tuple10[T1, T2, T3, T4, T5, T6, T7, T8, T9, T10]]
HKT_TUPLE10 any , // HKT[Tuple10[T1, T2, T3, T4, T5, T6, T7, T8, T9, T10]]
2023-07-13 22:24:04 +02:00
] (
2023-07-23 21:45:32 +02:00
fmap MAP ,
fap1 AP1 ,
fap2 AP2 ,
fap3 AP3 ,
fap4 AP4 ,
fap5 AP5 ,
fap6 AP6 ,
fap7 AP7 ,
fap8 AP8 ,
fap9 AP9 ,
t T . Tuple10 [ HKT_T1 , HKT_T2 , HKT_T3 , HKT_T4 , HKT_T5 , HKT_T6 , HKT_T7 , HKT_T8 , HKT_T9 , HKT_T10 ] ,
2023-07-13 22:24:04 +02:00
) HKT_TUPLE10 {
2023-07-23 21:45:32 +02:00
return F . Pipe10 (
t . F1 ,
fmap ( tupleConstructor10 [ T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 ] ( ) ) ,
fap1 ( t . F2 ) ,
fap2 ( t . F3 ) ,
fap3 ( t . F4 ) ,
fap4 ( t . F5 ) ,
fap5 ( t . F6 ) ,
fap6 ( t . F7 ) ,
fap7 ( t . F8 ) ,
fap8 ( t . F9 ) ,
fap9 ( t . F10 ) ,
)
2023-07-17 13:55:35 +02:00
}
// TraverseTuple10 is a utility function used to implement the sequence operation for higher kinded types based only on map and ap.
// The function takes a [Tuple10] of base types and 10 functions that transform these based types into higher higher kinded types. It returns a higher kinded type of a [Tuple10] with the resolved values.
func TraverseTuple10 [
2023-07-23 21:45:32 +02:00
MAP ~ func ( func ( 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 ] ) func ( HKT_T1 ) HKT_F_T2_T3_T4_T5_T6_T7_T8_T9_T10 ,
AP1 ~ func ( HKT_T2 ) func ( HKT_F_T2_T3_T4_T5_T6_T7_T8_T9_T10 ) HKT_F_T3_T4_T5_T6_T7_T8_T9_T10 ,
AP2 ~ func ( HKT_T3 ) func ( HKT_F_T3_T4_T5_T6_T7_T8_T9_T10 ) HKT_F_T4_T5_T6_T7_T8_T9_T10 ,
AP3 ~ func ( HKT_T4 ) func ( HKT_F_T4_T5_T6_T7_T8_T9_T10 ) HKT_F_T5_T6_T7_T8_T9_T10 ,
AP4 ~ func ( HKT_T5 ) func ( HKT_F_T5_T6_T7_T8_T9_T10 ) HKT_F_T6_T7_T8_T9_T10 ,
AP5 ~ func ( HKT_T6 ) func ( HKT_F_T6_T7_T8_T9_T10 ) HKT_F_T7_T8_T9_T10 ,
AP6 ~ func ( HKT_T7 ) func ( HKT_F_T7_T8_T9_T10 ) HKT_F_T8_T9_T10 ,
AP7 ~ func ( HKT_T8 ) func ( HKT_F_T8_T9_T10 ) HKT_F_T9_T10 ,
AP8 ~ func ( HKT_T9 ) func ( HKT_F_T9_T10 ) HKT_F_T10 ,
AP9 ~ func ( HKT_T10 ) func ( HKT_F_T10 ) HKT_TUPLE10 ,
F1 ~ func ( A1 ) HKT_T1 ,
F2 ~ func ( A2 ) HKT_T2 ,
F3 ~ func ( A3 ) HKT_T3 ,
F4 ~ func ( A4 ) HKT_T4 ,
F5 ~ func ( A5 ) HKT_T5 ,
F6 ~ func ( A6 ) HKT_T6 ,
F7 ~ func ( A7 ) HKT_T7 ,
F8 ~ func ( A8 ) HKT_T8 ,
F9 ~ func ( A9 ) HKT_T9 ,
F10 ~ func ( A10 ) HKT_T10 ,
A1 , T1 ,
A2 , T2 ,
A3 , T3 ,
A4 , T4 ,
A5 , T5 ,
A6 , T6 ,
A7 , T7 ,
A8 , T8 ,
A9 , T9 ,
A10 , T10 ,
HKT_T1 , // HKT[T1]
HKT_T2 , // HKT[T2]
HKT_T3 , // HKT[T3]
HKT_T4 , // HKT[T4]
HKT_T5 , // HKT[T5]
HKT_T6 , // HKT[T6]
HKT_T7 , // HKT[T7]
HKT_T8 , // HKT[T8]
HKT_T9 , // HKT[T9]
HKT_T10 , // HKT[T10]
HKT_F_T2_T3_T4_T5_T6_T7_T8_T9_T10 , // HKT[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]]
HKT_F_T3_T4_T5_T6_T7_T8_T9_T10 , // HKT[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]]
HKT_F_T4_T5_T6_T7_T8_T9_T10 , // HKT[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]]
HKT_F_T5_T6_T7_T8_T9_T10 , // HKT[func(T5) func(T6) func(T7) func(T8) func(T9) func(T10) T.Tuple10[T1, T2, T3, T4, T5, T6, T7, T8, T9, T10]]
HKT_F_T6_T7_T8_T9_T10 , // HKT[func(T6) func(T7) func(T8) func(T9) func(T10) T.Tuple10[T1, T2, T3, T4, T5, T6, T7, T8, T9, T10]]
HKT_F_T7_T8_T9_T10 , // HKT[func(T7) func(T8) func(T9) func(T10) T.Tuple10[T1, T2, T3, T4, T5, T6, T7, T8, T9, T10]]
HKT_F_T8_T9_T10 , // HKT[func(T8) func(T9) func(T10) T.Tuple10[T1, T2, T3, T4, T5, T6, T7, T8, T9, T10]]
HKT_F_T9_T10 , // HKT[func(T9) func(T10) T.Tuple10[T1, T2, T3, T4, T5, T6, T7, T8, T9, T10]]
HKT_F_T10 , // HKT[func(T10) T.Tuple10[T1, T2, T3, T4, T5, T6, T7, T8, T9, T10]]
HKT_TUPLE10 any , // HKT[Tuple10[T1, T2, T3, T4, T5, T6, T7, T8, T9, T10]]
2023-07-17 13:55:35 +02:00
] (
2023-07-23 21:45:32 +02:00
fmap MAP ,
fap1 AP1 ,
fap2 AP2 ,
fap3 AP3 ,
fap4 AP4 ,
fap5 AP5 ,
fap6 AP6 ,
fap7 AP7 ,
fap8 AP8 ,
fap9 AP9 ,
f1 F1 ,
f2 F2 ,
f3 F3 ,
f4 F4 ,
f5 F5 ,
f6 F6 ,
f7 F7 ,
f8 F8 ,
f9 F9 ,
f10 F10 ,
t T . Tuple10 [ A1 , A2 , A3 , A4 , A5 , A6 , A7 , A8 , A9 , A10 ] ,
2023-07-17 13:55:35 +02:00
) HKT_TUPLE10 {
2023-07-23 21:45:32 +02:00
return F . Pipe10 (
f1 ( t . F1 ) ,
fmap ( tupleConstructor10 [ T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 ] ( ) ) ,
fap1 ( f2 ( t . F2 ) ) ,
fap2 ( f3 ( t . F3 ) ) ,
fap3 ( f4 ( t . F4 ) ) ,
fap4 ( f5 ( t . F5 ) ) ,
fap5 ( f6 ( t . F6 ) ) ,
fap6 ( f7 ( t . F7 ) ) ,
fap7 ( f8 ( t . F8 ) ) ,
fap8 ( f9 ( t . F9 ) ) ,
fap9 ( f10 ( t . F10 ) ) ,
)
2023-07-13 22:24:04 +02:00
}