Skip to content

Commit 3808d09

Browse files
authored
More overloads for collectors (#3539)
1 parent 63b162f commit 3808d09

File tree

4 files changed

+114
-0
lines changed

4 files changed

+114
-0
lines changed

arrow-libs/fx/arrow-collectors/api/arrow-collectors.api

+8
Original file line numberDiff line numberDiff line change
@@ -42,9 +42,13 @@ public abstract interface class arrow/collectors/CollectorI {
4242
}
4343

4444
public final class arrow/collectors/CollectorI$Companion {
45+
public final fun nonSuspendOf (Lkotlin/jvm/functions/Function0;Lkotlin/jvm/functions/Function2;Ljava/util/Set;)Larrow/collectors/NonSuspendCollectorI;
4546
public final fun nonSuspendOf (Lkotlin/jvm/functions/Function0;Lkotlin/jvm/functions/Function2;Lkotlin/jvm/functions/Function1;Ljava/util/Set;)Larrow/collectors/NonSuspendCollectorI;
47+
public static synthetic fun nonSuspendOf$default (Larrow/collectors/CollectorI$Companion;Lkotlin/jvm/functions/Function0;Lkotlin/jvm/functions/Function2;Ljava/util/Set;ILjava/lang/Object;)Larrow/collectors/NonSuspendCollectorI;
4648
public static synthetic fun nonSuspendOf$default (Larrow/collectors/CollectorI$Companion;Lkotlin/jvm/functions/Function0;Lkotlin/jvm/functions/Function2;Lkotlin/jvm/functions/Function1;Ljava/util/Set;ILjava/lang/Object;)Larrow/collectors/NonSuspendCollectorI;
49+
public final fun of (Lkotlin/jvm/functions/Function1;Lkotlin/jvm/functions/Function3;Ljava/util/Set;)Larrow/collectors/CollectorI;
4750
public final fun of (Lkotlin/jvm/functions/Function1;Lkotlin/jvm/functions/Function3;Lkotlin/jvm/functions/Function2;Ljava/util/Set;)Larrow/collectors/CollectorI;
51+
public static synthetic fun of$default (Larrow/collectors/CollectorI$Companion;Lkotlin/jvm/functions/Function1;Lkotlin/jvm/functions/Function3;Ljava/util/Set;ILjava/lang/Object;)Larrow/collectors/CollectorI;
4852
public static synthetic fun of$default (Larrow/collectors/CollectorI$Companion;Lkotlin/jvm/functions/Function1;Lkotlin/jvm/functions/Function3;Lkotlin/jvm/functions/Function2;Ljava/util/Set;ILjava/lang/Object;)Larrow/collectors/CollectorI;
4953
}
5054

@@ -111,8 +115,12 @@ public final class arrow/collectors/NonSuspendCollectorI$DefaultImpls {
111115
}
112116

113117
public final class arrow/collectors/ZipKt {
118+
public static final fun zip (Larrow/collectors/CollectorI;Larrow/collectors/CollectorI;Larrow/collectors/CollectorI;Larrow/collectors/CollectorI;Larrow/collectors/CollectorI;Lkotlin/jvm/functions/Function6;)Larrow/collectors/CollectorI;
119+
public static final fun zip (Larrow/collectors/CollectorI;Larrow/collectors/CollectorI;Larrow/collectors/CollectorI;Larrow/collectors/CollectorI;Lkotlin/jvm/functions/Function5;)Larrow/collectors/CollectorI;
114120
public static final fun zip (Larrow/collectors/CollectorI;Larrow/collectors/CollectorI;Larrow/collectors/CollectorI;Lkotlin/jvm/functions/Function4;)Larrow/collectors/CollectorI;
115121
public static final fun zip (Larrow/collectors/CollectorI;Larrow/collectors/CollectorI;Lkotlin/jvm/functions/Function3;)Larrow/collectors/CollectorI;
122+
public static final fun zip (Larrow/collectors/NonSuspendCollectorI;Larrow/collectors/NonSuspendCollectorI;Larrow/collectors/NonSuspendCollectorI;Larrow/collectors/NonSuspendCollectorI;Larrow/collectors/NonSuspendCollectorI;Lkotlin/jvm/functions/Function5;)Larrow/collectors/NonSuspendCollectorI;
123+
public static final fun zip (Larrow/collectors/NonSuspendCollectorI;Larrow/collectors/NonSuspendCollectorI;Larrow/collectors/NonSuspendCollectorI;Larrow/collectors/NonSuspendCollectorI;Lkotlin/jvm/functions/Function4;)Larrow/collectors/NonSuspendCollectorI;
116124
public static final fun zip (Larrow/collectors/NonSuspendCollectorI;Larrow/collectors/NonSuspendCollectorI;Larrow/collectors/NonSuspendCollectorI;Lkotlin/jvm/functions/Function3;)Larrow/collectors/NonSuspendCollectorI;
117125
public static final fun zip (Larrow/collectors/NonSuspendCollectorI;Larrow/collectors/NonSuspendCollectorI;Lkotlin/jvm/functions/Function2;)Larrow/collectors/NonSuspendCollectorI;
118126
}

arrow-libs/fx/arrow-collectors/api/arrow-collectors.klib.api

+6
Original file line numberDiff line numberDiff line change
@@ -47,6 +47,8 @@ abstract interface <#A: kotlin/Any?, #B: in kotlin/Any?, #C: out kotlin/Any?> ar
4747
final object Companion { // arrow.collectors/CollectorI.Companion|null[0]
4848
final fun <#A2: kotlin/Any?, #B2: kotlin/Any?, #C2: kotlin/Any?> nonSuspendOf(kotlin/Function0<#A2>, kotlin/Function2<#A2, #B2, kotlin/Unit>, kotlin/Function1<#A2, #C2>, kotlin.collections/Set<arrow.collectors/Characteristics> = ...): arrow.collectors/NonSuspendCollectorI<*, #B2, #C2> // arrow.collectors/CollectorI.Companion.nonSuspendOf|nonSuspendOf(kotlin.Function0<0:0>;kotlin.Function2<0:0,0:1,kotlin.Unit>;kotlin.Function1<0:0,0:2>;kotlin.collections.Set<arrow.collectors.Characteristics>){0§<kotlin.Any?>;1§<kotlin.Any?>;2§<kotlin.Any?>}[0]
4949
final fun <#A2: kotlin/Any?, #B2: kotlin/Any?, #C2: kotlin/Any?> of(kotlin.coroutines/SuspendFunction0<#A2>, kotlin.coroutines/SuspendFunction2<#A2, #B2, kotlin/Unit>, kotlin.coroutines/SuspendFunction1<#A2, #C2>, kotlin.collections/Set<arrow.collectors/Characteristics> = ...): arrow.collectors/CollectorI<*, #B2, #C2> // arrow.collectors/CollectorI.Companion.of|of(kotlin.coroutines.SuspendFunction0<0:0>;kotlin.coroutines.SuspendFunction2<0:0,0:1,kotlin.Unit>;kotlin.coroutines.SuspendFunction1<0:0,0:2>;kotlin.collections.Set<arrow.collectors.Characteristics>){0§<kotlin.Any?>;1§<kotlin.Any?>;2§<kotlin.Any?>}[0]
50+
final fun <#A2: kotlin/Any?, #B2: kotlin/Any?> nonSuspendOf(kotlin/Function0<#B2>, kotlin/Function2<#B2, #A2, kotlin/Unit>, kotlin.collections/Set<arrow.collectors/Characteristics> = ...): arrow.collectors/NonSuspendCollectorI<*, #A2, #B2> // arrow.collectors/CollectorI.Companion.nonSuspendOf|nonSuspendOf(kotlin.Function0<0:1>;kotlin.Function2<0:1,0:0,kotlin.Unit>;kotlin.collections.Set<arrow.collectors.Characteristics>){0§<kotlin.Any?>;1§<kotlin.Any?>}[0]
51+
final fun <#A2: kotlin/Any?, #B2: kotlin/Any?> of(kotlin.coroutines/SuspendFunction0<#B2>, kotlin.coroutines/SuspendFunction2<#B2, #A2, kotlin/Unit>, kotlin.collections/Set<arrow.collectors/Characteristics> = ...): arrow.collectors/CollectorI<*, #A2, #B2> // arrow.collectors/CollectorI.Companion.of|of(kotlin.coroutines.SuspendFunction0<0:1>;kotlin.coroutines.SuspendFunction2<0:1,0:0,kotlin.Unit>;kotlin.collections.Set<arrow.collectors.Characteristics>){0§<kotlin.Any?>;1§<kotlin.Any?>}[0]
5052
}
5153
}
5254

@@ -79,6 +81,10 @@ final object arrow.collectors/Collectors { // arrow.collectors/Collectors|null[0
7981
final fun intReducer(kotlin/Function0<kotlin/Int>, kotlin/Function2<kotlin/Int, kotlin/Int, kotlin/Int>): arrow.collectors/NonSuspendCollectorI<*, kotlin/Int, kotlin/Int> // arrow.collectors/Collectors.intReducer|intReducer(kotlin.Function0<kotlin.Int>;kotlin.Function2<kotlin.Int,kotlin.Int,kotlin.Int>){}[0]
8082
}
8183

84+
final fun <#A: kotlin/Any?, #B: kotlin/Any?, #C: kotlin/Any?, #D: kotlin/Any?, #E: kotlin/Any?, #F: kotlin/Any?, #G: kotlin/Any?> arrow.collectors/zip(arrow.collectors/CollectorI<*, #A, #B>, arrow.collectors/CollectorI<*, #A, #C>, arrow.collectors/CollectorI<*, #A, #D>, arrow.collectors/CollectorI<*, #A, #E>, arrow.collectors/CollectorI<*, #A, #F>, kotlin.coroutines/SuspendFunction5<#B, #C, #D, #E, #F, #G>): arrow.collectors/CollectorI<*, #A, #G> // arrow.collectors/zip|zip(arrow.collectors.CollectorI<*,0:0,0:1>;arrow.collectors.CollectorI<*,0:0,0:2>;arrow.collectors.CollectorI<*,0:0,0:3>;arrow.collectors.CollectorI<*,0:0,0:4>;arrow.collectors.CollectorI<*,0:0,0:5>;kotlin.coroutines.SuspendFunction5<0:1,0:2,0:3,0:4,0:5,0:6>){0§<kotlin.Any?>;1§<kotlin.Any?>;2§<kotlin.Any?>;3§<kotlin.Any?>;4§<kotlin.Any?>;5§<kotlin.Any?>;6§<kotlin.Any?>}[0]
85+
final fun <#A: kotlin/Any?, #B: kotlin/Any?, #C: kotlin/Any?, #D: kotlin/Any?, #E: kotlin/Any?, #F: kotlin/Any?, #G: kotlin/Any?> arrow.collectors/zip(arrow.collectors/NonSuspendCollectorI<*, #A, #B>, arrow.collectors/NonSuspendCollectorI<*, #A, #C>, arrow.collectors/NonSuspendCollectorI<*, #A, #D>, arrow.collectors/NonSuspendCollectorI<*, #A, #E>, arrow.collectors/NonSuspendCollectorI<*, #A, #F>, kotlin/Function5<#B, #C, #D, #E, #F, #G>): arrow.collectors/NonSuspendCollectorI<*, #A, #G> // arrow.collectors/zip|zip(arrow.collectors.NonSuspendCollectorI<*,0:0,0:1>;arrow.collectors.NonSuspendCollectorI<*,0:0,0:2>;arrow.collectors.NonSuspendCollectorI<*,0:0,0:3>;arrow.collectors.NonSuspendCollectorI<*,0:0,0:4>;arrow.collectors.NonSuspendCollectorI<*,0:0,0:5>;kotlin.Function5<0:1,0:2,0:3,0:4,0:5,0:6>){0§<kotlin.Any?>;1§<kotlin.Any?>;2§<kotlin.Any?>;3§<kotlin.Any?>;4§<kotlin.Any?>;5§<kotlin.Any?>;6§<kotlin.Any?>}[0]
86+
final fun <#A: kotlin/Any?, #B: kotlin/Any?, #C: kotlin/Any?, #D: kotlin/Any?, #E: kotlin/Any?, #F: kotlin/Any?> arrow.collectors/zip(arrow.collectors/CollectorI<*, #A, #B>, arrow.collectors/CollectorI<*, #A, #C>, arrow.collectors/CollectorI<*, #A, #D>, arrow.collectors/CollectorI<*, #A, #E>, kotlin.coroutines/SuspendFunction4<#B, #C, #D, #E, #F>): arrow.collectors/CollectorI<*, #A, #F> // arrow.collectors/zip|zip(arrow.collectors.CollectorI<*,0:0,0:1>;arrow.collectors.CollectorI<*,0:0,0:2>;arrow.collectors.CollectorI<*,0:0,0:3>;arrow.collectors.CollectorI<*,0:0,0:4>;kotlin.coroutines.SuspendFunction4<0:1,0:2,0:3,0:4,0:5>){0§<kotlin.Any?>;1§<kotlin.Any?>;2§<kotlin.Any?>;3§<kotlin.Any?>;4§<kotlin.Any?>;5§<kotlin.Any?>}[0]
87+
final fun <#A: kotlin/Any?, #B: kotlin/Any?, #C: kotlin/Any?, #D: kotlin/Any?, #E: kotlin/Any?, #F: kotlin/Any?> arrow.collectors/zip(arrow.collectors/NonSuspendCollectorI<*, #A, #B>, arrow.collectors/NonSuspendCollectorI<*, #A, #C>, arrow.collectors/NonSuspendCollectorI<*, #A, #D>, arrow.collectors/NonSuspendCollectorI<*, #A, #E>, kotlin/Function4<#B, #C, #D, #E, #F>): arrow.collectors/NonSuspendCollectorI<*, #A, #F> // arrow.collectors/zip|zip(arrow.collectors.NonSuspendCollectorI<*,0:0,0:1>;arrow.collectors.NonSuspendCollectorI<*,0:0,0:2>;arrow.collectors.NonSuspendCollectorI<*,0:0,0:3>;arrow.collectors.NonSuspendCollectorI<*,0:0,0:4>;kotlin.Function4<0:1,0:2,0:3,0:4,0:5>){0§<kotlin.Any?>;1§<kotlin.Any?>;2§<kotlin.Any?>;3§<kotlin.Any?>;4§<kotlin.Any?>;5§<kotlin.Any?>}[0]
8288
final fun <#A: kotlin/Any?, #B: kotlin/Any?, #C: kotlin/Any?, #D: kotlin/Any?, #E: kotlin/Any?> arrow.collectors/zip(arrow.collectors/CollectorI<*, #A, #B>, arrow.collectors/CollectorI<*, #A, #C>, arrow.collectors/CollectorI<*, #A, #D>, kotlin.coroutines/SuspendFunction3<#B, #C, #D, #E>): arrow.collectors/CollectorI<*, #A, #E> // arrow.collectors/zip|zip(arrow.collectors.CollectorI<*,0:0,0:1>;arrow.collectors.CollectorI<*,0:0,0:2>;arrow.collectors.CollectorI<*,0:0,0:3>;kotlin.coroutines.SuspendFunction3<0:1,0:2,0:3,0:4>){0§<kotlin.Any?>;1§<kotlin.Any?>;2§<kotlin.Any?>;3§<kotlin.Any?>;4§<kotlin.Any?>}[0]
8389
final fun <#A: kotlin/Any?, #B: kotlin/Any?, #C: kotlin/Any?, #D: kotlin/Any?, #E: kotlin/Any?> arrow.collectors/zip(arrow.collectors/NonSuspendCollectorI<*, #A, #B>, arrow.collectors/NonSuspendCollectorI<*, #A, #C>, arrow.collectors/NonSuspendCollectorI<*, #A, #D>, kotlin/Function3<#B, #C, #D, #E>): arrow.collectors/NonSuspendCollectorI<*, #A, #E> // arrow.collectors/zip|zip(arrow.collectors.NonSuspendCollectorI<*,0:0,0:1>;arrow.collectors.NonSuspendCollectorI<*,0:0,0:2>;arrow.collectors.NonSuspendCollectorI<*,0:0,0:3>;kotlin.Function3<0:1,0:2,0:3,0:4>){0§<kotlin.Any?>;1§<kotlin.Any?>;2§<kotlin.Any?>;3§<kotlin.Any?>;4§<kotlin.Any?>}[0]
8490
final fun <#A: kotlin/Any?, #B: kotlin/Any?, #C: kotlin/Any?, #D: kotlin/Any?> arrow.collectors/zip(arrow.collectors/CollectorI<*, #A, #B>, arrow.collectors/CollectorI<*, #A, #C>, kotlin.coroutines/SuspendFunction2<#B, #C, #D>): arrow.collectors/CollectorI<*, #A, #D> // arrow.collectors/zip|zip(arrow.collectors.CollectorI<*,0:0,0:1>;arrow.collectors.CollectorI<*,0:0,0:2>;kotlin.coroutines.SuspendFunction2<0:1,0:2,0:3>){0§<kotlin.Any?>;1§<kotlin.Any?>;2§<kotlin.Any?>;3§<kotlin.Any?>}[0]

arrow-libs/fx/arrow-collectors/src/commonMain/kotlin/arrow/collectors/Collector.kt

+24
Original file line numberDiff line numberDiff line change
@@ -71,6 +71,18 @@ public interface CollectorI<InternalAccumulator, in Value, out Result> {
7171
override suspend fun finish(current: InternalAccumulator): Result = finish(current)
7272
}
7373

74+
/**
75+
* Constructs a new [Collector] from its components,
76+
* where the accumulated value is directly its result
77+
*/
78+
public fun <Value, Result> of(
79+
supply: suspend () -> Result,
80+
accumulate: suspend (current: Result, value: Value) -> Unit,
81+
characteristics: Set<Characteristics> = setOf(),
82+
): Collector<Value, Result> = of(
83+
supply, accumulate, { it }, characteristics + Characteristics.IDENTITY_FINISH
84+
)
85+
7486
/**
7587
* Constructs a new [Collector] from its components
7688
*/
@@ -88,6 +100,18 @@ public interface CollectorI<InternalAccumulator, in Value, out Result> {
88100

89101
override fun finishNonSuspend(current: InternalAccumulator): Result = finish(current)
90102
}
103+
104+
/**
105+
* Constructs a new [Collector] from its components,
106+
* where the accumulated value is directly its result
107+
*/
108+
public fun <Value, Result> nonSuspendOf(
109+
supply: () -> Result,
110+
accumulate: (current: Result, value: Value) -> Unit,
111+
characteristics: Set<Characteristics> = setOf(),
112+
): NonSuspendCollector<Value, Result> = nonSuspendOf(
113+
supply, accumulate, { it }, characteristics + Characteristics.IDENTITY_FINISH
114+
)
91115
}
92116

93117
/**

arrow-libs/fx/arrow-collectors/src/commonMain/kotlin/arrow/collectors/Zip.kt

+76
Original file line numberDiff line numberDiff line change
@@ -59,3 +59,79 @@ public fun <A, R, S, T, V> zip(
5959
z: NonSuspendCollector<A, T>,
6060
combine: (R, S, T) -> V,
6161
): NonSuspendCollector<A, V> = x.zip(y).zipNonSuspend(z) { (a, b), c -> combine(a, b, c) }
62+
63+
/**
64+
* Combines four [Collector]s by performing the phases
65+
* of each of them in parallel.
66+
*
67+
* @param c1 First [Collector]
68+
* @param c2 Second [Collector]
69+
* @param c3 Third [Collector]
70+
* @param c4 Fourth [Collector]
71+
* @param combine Function that combines the end results
72+
*/
73+
public fun <A, C1, C2, C3, C4, R> zip(
74+
c1: Collector<A, C1>,
75+
c2: Collector<A, C2>,
76+
c3: Collector<A, C3>,
77+
c4: Collector<A, C4>,
78+
combine: suspend (C1, C2, C3, C4) -> R,
79+
): Collector<A, R> = c1.zip(c2).zip(c3).zip(c4) { (ab, c), d -> combine(ab.first, ab.second, c, d) }
80+
81+
/**
82+
* Combines four [NonSuspendCollector]s by performing the phases
83+
* of each of them in parallel.
84+
*
85+
* @param c1 First [NonSuspendCollector]
86+
* @param c2 Second [NonSuspendCollector]
87+
* @param c3 Third [NonSuspendCollector]
88+
* @param c4 Fourth [NonSuspendCollector]
89+
* @param combine Function that combines the end results
90+
*/
91+
public fun <A, C1, C2, C3, C4, R> zip(
92+
c1: NonSuspendCollector<A, C1>,
93+
c2: NonSuspendCollector<A, C2>,
94+
c3: NonSuspendCollector<A, C3>,
95+
c4: NonSuspendCollector<A, C4>,
96+
combine: (C1, C2, C3, C4) -> R,
97+
): NonSuspendCollector<A, R> = c1.zip(c2).zip(c3).zipNonSuspend(c4) { (ab, c), d -> combine(ab.first, ab.second, c, d) }
98+
99+
/**
100+
* Combines five [Collector]s by performing the phases
101+
* of each of them in parallel.
102+
*
103+
* @param c1 First [Collector]
104+
* @param c2 Second [Collector]
105+
* @param c3 Third [Collector]
106+
* @param c4 Fourth [Collector]
107+
* @param c5 Fifth [Collector]
108+
* @param combine Function that combines the end results
109+
*/
110+
public fun <A, C1, C2, C3, C4, C5, R> zip(
111+
c1: Collector<A, C1>,
112+
c2: Collector<A, C2>,
113+
c3: Collector<A, C3>,
114+
c4: Collector<A, C4>,
115+
c5: Collector<A, C5>,
116+
combine: suspend (C1, C2, C3, C4, C5) -> R,
117+
): Collector<A, R> = c1.zip(c2).zip(c3).zip(c4).zip(c5) { (abc, d), e -> combine(abc.first.first, abc.first.second, abc.second, d, e) }
118+
119+
/**
120+
* Combines four [NonSuspendCollector]s by performing the phases
121+
* of each of them in parallel.
122+
*
123+
* @param c1 First [NonSuspendCollector]
124+
* @param c2 Second [NonSuspendCollector]
125+
* @param c3 Third [NonSuspendCollector]
126+
* @param c4 Fourth [NonSuspendCollector]
127+
* @param c5 Fifth [NonSuspendCollector]
128+
* @param combine Function that combines the end results
129+
*/
130+
public fun <A, C1, C2, C3, C4, C5, R> zip(
131+
c1: NonSuspendCollector<A, C1>,
132+
c2: NonSuspendCollector<A, C2>,
133+
c3: NonSuspendCollector<A, C3>,
134+
c4: NonSuspendCollector<A, C4>,
135+
c5: NonSuspendCollector<A, C5>,
136+
combine: (C1, C2, C3, C4, C5) -> R,
137+
): NonSuspendCollector<A, R> = c1.zip(c2).zip(c3).zip(c4).zipNonSuspend(c5) { (abc, d), e -> combine(abc.first.first, abc.first.second, abc.second, d, e) }

0 commit comments

Comments
 (0)