From c0ed6864b5ffd86f6811547d96b5282c0badce29 Mon Sep 17 00:00:00 2001 From: Phil Davies Date: Wed, 23 Oct 2024 11:36:53 +0100 Subject: [PATCH 1/3] refactor: add mapValuesOrAccumulate and deprecate mapOrAccumulate --- arrow-libs/core/arrow-core/api/arrow-core.api | 4 +++ .../core/arrow-core/api/arrow-core.klib.api | 4 +++ .../src/commonMain/kotlin/arrow/core/map.kt | 24 +++++++++++++++--- .../arrow/core/raise/RaiseAccumulate.kt | 25 +++++++++++++++++-- .../commonTest/kotlin/arrow/core/MapKTest.kt | 16 ++++++------ 5 files changed, 60 insertions(+), 13 deletions(-) diff --git a/arrow-libs/core/arrow-core/api/arrow-core.api b/arrow-libs/core/arrow-core/api/arrow-core.api index e8c75137883..b35e3f9d810 100644 --- a/arrow-libs/core/arrow-core/api/arrow-core.api +++ b/arrow-libs/core/arrow-core/api/arrow-core.api @@ -315,6 +315,8 @@ public final class arrow/core/MapKt { public static final fun mapNotNull (Ljava/util/Map;Lkotlin/jvm/functions/Function1;)Ljava/util/Map; public static final fun mapOrAccumulate (Ljava/util/Map;Lkotlin/jvm/functions/Function2;)Larrow/core/Either; public static final fun mapOrAccumulate (Ljava/util/Map;Lkotlin/jvm/functions/Function2;Lkotlin/jvm/functions/Function2;)Larrow/core/Either; + public static final fun mapValuesOrAccumulate (Ljava/util/Map;Lkotlin/jvm/functions/Function2;)Larrow/core/Either; + public static final fun mapValuesOrAccumulate (Ljava/util/Map;Lkotlin/jvm/functions/Function2;Lkotlin/jvm/functions/Function2;)Larrow/core/Either; public static final fun padZip (Ljava/util/Map;Ljava/util/Map;)Ljava/util/Map; public static final fun padZip (Ljava/util/Map;Ljava/util/Map;Lkotlin/jvm/functions/Function2;Lkotlin/jvm/functions/Function2;Lkotlin/jvm/functions/Function3;)Ljava/util/Map; public static final fun padZip (Ljava/util/Map;Ljava/util/Map;Lkotlin/jvm/functions/Function3;)Ljava/util/Map; @@ -1049,6 +1051,8 @@ public final class arrow/core/raise/RaiseKt { public static final fun mapOrAccumulate (Larrow/core/raise/Raise;Lkotlin/sequences/Sequence;Lkotlin/jvm/functions/Function2;Lkotlin/jvm/functions/Function2;)Ljava/util/List; public static final fun mapOrAccumulate--YW8gn4 (Larrow/core/raise/Raise;Ljava/util/Set;Lkotlin/jvm/functions/Function2;)Ljava/util/Set; public static final fun mapOrAccumulate-l8IBlHg (Larrow/core/raise/Raise;Ljava/util/List;Lkotlin/jvm/functions/Function2;)Ljava/util/List; + public static final fun mapValuesOrAccumulate (Larrow/core/raise/Raise;Ljava/util/Map;Lkotlin/jvm/functions/Function2;)Ljava/util/Map; + public static final fun mapValuesOrAccumulate (Larrow/core/raise/Raise;Ljava/util/Map;Lkotlin/jvm/functions/Function2;Lkotlin/jvm/functions/Function2;)Ljava/util/Map; public static final fun merge (Lkotlin/jvm/functions/Function1;)Ljava/lang/Object; public static final fun merge (Lkotlin/jvm/functions/Function2;Lkotlin/coroutines/Continuation;)Ljava/lang/Object; public static final fun nullable (Lkotlin/jvm/functions/Function1;)Ljava/lang/Object; diff --git a/arrow-libs/core/arrow-core/api/arrow-core.klib.api b/arrow-libs/core/arrow-core/api/arrow-core.klib.api index 4fdc4eff68f..6653a4198d8 100644 --- a/arrow-libs/core/arrow-core/api/arrow-core.klib.api +++ b/arrow-libs/core/arrow-core/api/arrow-core.klib.api @@ -900,13 +900,17 @@ final inline fun <#A: kotlin/Any?, #B: kotlin/Any?, #C: kotlin/Any?, #D: kotlin/ final inline fun <#A: kotlin/Any?, #B: kotlin/Any?, #C: kotlin/Any?, #D: kotlin/Any?, #E: kotlin/Any?> (kotlin.collections/Map<#A, #B>).arrow.core/zip(kotlin.collections/Map<#A, #C>, kotlin.collections/Map<#A, #D>, kotlin/Function4<#A, #B, #C, #D, #E>): kotlin.collections/Map<#A, #E> // arrow.core/zip|zip@kotlin.collections.Map<0:0,0:1>(kotlin.collections.Map<0:0,0:2>;kotlin.collections.Map<0:0,0:3>;kotlin.Function4<0:0,0:1,0:2,0:3,0:4>){0§;1§;2§;3§;4§}[0] final inline fun <#A: kotlin/Any?, #B: kotlin/Any?, #C: kotlin/Any?, #D: kotlin/Any?> (arrow.core.raise/Raise<#A>).arrow.core.raise/zipOrAccumulate(kotlin/Function2<#A, #A, #A>, kotlin/Function1, #B>, kotlin/Function1, #C>, kotlin/Function2<#B, #C, #D>): #D // arrow.core.raise/zipOrAccumulate|zipOrAccumulate@arrow.core.raise.Raise<0:0>(kotlin.Function2<0:0,0:0,0:0>;kotlin.Function1,0:1>;kotlin.Function1,0:2>;kotlin.Function2<0:1,0:2,0:3>){0§;1§;2§;3§}[0] final inline fun <#A: kotlin/Any?, #B: kotlin/Any?, #C: kotlin/Any?, #D: kotlin/Any?> (arrow.core.raise/Raise<#B>).arrow.core.raise/mapOrAccumulate(kotlin.collections/Map<#A, #C>, kotlin/Function2<#B, #B, #B>, kotlin/Function2, kotlin.collections/Map.Entry<#A, #C>, #D>): kotlin.collections/Map<#A, #D> // arrow.core.raise/mapOrAccumulate|mapOrAccumulate@arrow.core.raise.Raise<0:1>(kotlin.collections.Map<0:0,0:2>;kotlin.Function2<0:1,0:1,0:1>;kotlin.Function2,kotlin.collections.Map.Entry<0:0,0:2>,0:3>){0§;1§;2§;3§}[0] +final inline fun <#A: kotlin/Any?, #B: kotlin/Any?, #C: kotlin/Any?, #D: kotlin/Any?> (arrow.core.raise/Raise<#B>).arrow.core.raise/mapValuesOrAccumulate(kotlin.collections/Map<#A, #C>, kotlin/Function2<#B, #B, #B>, kotlin/Function2, kotlin.collections/Map.Entry<#A, #C>, #D>): kotlin.collections/Map<#A, #D> // arrow.core.raise/mapValuesOrAccumulate|mapValuesOrAccumulate@arrow.core.raise.Raise<0:1>(kotlin.collections.Map<0:0,0:2>;kotlin.Function2<0:1,0:1,0:1>;kotlin.Function2,kotlin.collections.Map.Entry<0:0,0:2>,0:3>){0§;1§;2§;3§}[0] final inline fun <#A: kotlin/Any?, #B: kotlin/Any?, #C: kotlin/Any?, #D: kotlin/Any?> (arrow.core.raise/Raise>).arrow.core.raise/zipOrAccumulate(kotlin/Function1, #B>, kotlin/Function1, #C>, kotlin/Function2<#B, #C, #D>): #D // arrow.core.raise/zipOrAccumulate|zipOrAccumulate@arrow.core.raise.Raise>(kotlin.Function1,0:1>;kotlin.Function1,0:2>;kotlin.Function2<0:1,0:2,0:3>){0§;1§;2§;3§}[0] final inline fun <#A: kotlin/Any?, #B: kotlin/Any?, #C: kotlin/Any?, #D: kotlin/Any?> (arrow.core.raise/Raise>).arrow.core.raise/mapOrAccumulate(kotlin.collections/Map<#A, #C>, kotlin/Function2, kotlin.collections/Map.Entry<#A, #C>, #D>): kotlin.collections/Map<#A, #D> // arrow.core.raise/mapOrAccumulate|mapOrAccumulate@arrow.core.raise.Raise>(kotlin.collections.Map<0:0,0:2>;kotlin.Function2,kotlin.collections.Map.Entry<0:0,0:2>,0:3>){0§;1§;2§;3§}[0] +final inline fun <#A: kotlin/Any?, #B: kotlin/Any?, #C: kotlin/Any?, #D: kotlin/Any?> (arrow.core.raise/Raise>).arrow.core.raise/mapValuesOrAccumulate(kotlin.collections/Map<#A, #C>, kotlin/Function2, kotlin.collections/Map.Entry<#A, #C>, #D>): kotlin.collections/Map<#A, #D> // arrow.core.raise/mapValuesOrAccumulate|mapValuesOrAccumulate@arrow.core.raise.Raise>(kotlin.collections.Map<0:0,0:2>;kotlin.Function2,kotlin.collections.Map.Entry<0:0,0:2>,0:3>){0§;1§;2§;3§}[0] final inline fun <#A: kotlin/Any?, #B: kotlin/Any?, #C: kotlin/Any?, #D: kotlin/Any?> (kotlin.collections/Iterable<#A>).arrow.core/zip(kotlin.collections/Iterable<#B>, kotlin.collections/Iterable<#C>, kotlin/Function3<#A, #B, #C, #D>): kotlin.collections/List<#D> // arrow.core/zip|zip@kotlin.collections.Iterable<0:0>(kotlin.collections.Iterable<0:1>;kotlin.collections.Iterable<0:2>;kotlin.Function3<0:0,0:1,0:2,0:3>){0§;1§;2§;3§}[0] final inline fun <#A: kotlin/Any?, #B: kotlin/Any?, #C: kotlin/Any?, #D: kotlin/Any?> (kotlin.collections/Map<#A, #B>).arrow.core/padZip(kotlin.collections/Map<#A, #C>, kotlin/Function2<#A, #B, #D>, kotlin/Function2<#A, #C, #D>, kotlin/Function3<#A, #B, #C, #D>): kotlin.collections/Map<#A, #D> // arrow.core/padZip|padZip@kotlin.collections.Map<0:0,0:1>(kotlin.collections.Map<0:0,0:2>;kotlin.Function2<0:0,0:1,0:3>;kotlin.Function2<0:0,0:2,0:3>;kotlin.Function3<0:0,0:1,0:2,0:3>){0§;1§;2§;3§}[0] final inline fun <#A: kotlin/Any?, #B: kotlin/Any?, #C: kotlin/Any?, #D: kotlin/Any?> (kotlin.collections/Map<#A, #B>).arrow.core/zip(kotlin.collections/Map<#A, #C>, kotlin/Function3<#A, #B, #C, #D>): kotlin.collections/Map<#A, #D> // arrow.core/zip|zip@kotlin.collections.Map<0:0,0:1>(kotlin.collections.Map<0:0,0:2>;kotlin.Function3<0:0,0:1,0:2,0:3>){0§;1§;2§;3§}[0] final inline fun <#A: kotlin/Any?, #B: kotlin/Any?, #C: kotlin/Any?, #D: kotlin/Any?> (kotlin.collections/Map<#A, #C>).arrow.core/mapOrAccumulate(kotlin/Function2<#B, #B, #B>, kotlin/Function2, kotlin.collections/Map.Entry<#A, #C>, #D>): arrow.core/Either<#B, kotlin.collections/Map<#A, #D>> // arrow.core/mapOrAccumulate|mapOrAccumulate@kotlin.collections.Map<0:0,0:2>(kotlin.Function2<0:1,0:1,0:1>;kotlin.Function2,kotlin.collections.Map.Entry<0:0,0:2>,0:3>){0§;1§;2§;3§}[0] final inline fun <#A: kotlin/Any?, #B: kotlin/Any?, #C: kotlin/Any?, #D: kotlin/Any?> (kotlin.collections/Map<#A, #C>).arrow.core/mapOrAccumulate(kotlin/Function2, kotlin.collections/Map.Entry<#A, #C>, #D>): arrow.core/Either, kotlin.collections/Map<#A, #D>> // arrow.core/mapOrAccumulate|mapOrAccumulate@kotlin.collections.Map<0:0,0:2>(kotlin.Function2,kotlin.collections.Map.Entry<0:0,0:2>,0:3>){0§;1§;2§;3§}[0] +final inline fun <#A: kotlin/Any?, #B: kotlin/Any?, #C: kotlin/Any?, #D: kotlin/Any?> (kotlin.collections/Map<#A, #C>).arrow.core/mapValuesOrAccumulate(kotlin/Function2<#B, #B, #B>, kotlin/Function2, kotlin.collections/Map.Entry<#A, #C>, #D>): arrow.core/Either<#B, kotlin.collections/Map<#A, #D>> // arrow.core/mapValuesOrAccumulate|mapValuesOrAccumulate@kotlin.collections.Map<0:0,0:2>(kotlin.Function2<0:1,0:1,0:1>;kotlin.Function2,kotlin.collections.Map.Entry<0:0,0:2>,0:3>){0§;1§;2§;3§}[0] +final inline fun <#A: kotlin/Any?, #B: kotlin/Any?, #C: kotlin/Any?, #D: kotlin/Any?> (kotlin.collections/Map<#A, #C>).arrow.core/mapValuesOrAccumulate(kotlin/Function2, kotlin.collections/Map.Entry<#A, #C>, #D>): arrow.core/Either, kotlin.collections/Map<#A, #D>> // arrow.core/mapValuesOrAccumulate|mapValuesOrAccumulate@kotlin.collections.Map<0:0,0:2>(kotlin.Function2,kotlin.collections.Map.Entry<0:0,0:2>,0:3>){0§;1§;2§;3§}[0] final inline fun <#A: kotlin/Any?, #B: kotlin/Any?, #C: kotlin/Any?, #D: kotlin/Any?> (kotlin.collections/Map<#A, #D>).arrow.core/unalign(kotlin/Function1, arrow.core/Ior<#B, #C>>): kotlin/Pair, kotlin.collections/Map<#A, #C>> // arrow.core/unalign|unalign@kotlin.collections.Map<0:0,0:3>(kotlin.Function1,arrow.core.Ior<0:1,0:2>>){0§;1§;2§;3§}[0] final inline fun <#A: kotlin/Any?, #B: kotlin/Any?, #C: kotlin/Any?, #D: kotlin/Any?> (kotlin.collections/Map<#A, #D>).arrow.core/unzip(kotlin/Function1, kotlin/Pair<#B, #C>>): kotlin/Pair, kotlin.collections/Map<#A, #C>> // arrow.core/unzip|unzip@kotlin.collections.Map<0:0,0:3>(kotlin.Function1,kotlin.Pair<0:1,0:2>>){0§;1§;2§;3§}[0] final inline fun <#A: kotlin/Any?, #B: kotlin/Any?, #C: kotlin/Any?> (arrow.core.raise/Raise<#A>).arrow.core.raise/mapOrAccumulate(kotlin.collections/Iterable<#B>, kotlin/Function2<#A, #A, #A>, kotlin/Function2, #B, #C>): kotlin.collections/List<#C> // arrow.core.raise/mapOrAccumulate|mapOrAccumulate@arrow.core.raise.Raise<0:0>(kotlin.collections.Iterable<0:1>;kotlin.Function2<0:0,0:0,0:0>;kotlin.Function2,0:1,0:2>){0§;1§;2§}[0] diff --git a/arrow-libs/core/arrow-core/src/commonMain/kotlin/arrow/core/map.kt b/arrow-libs/core/arrow-core/src/commonMain/kotlin/arrow/core/map.kt index 2ce773040f0..9f3c2f13b86 100644 --- a/arrow-libs/core/arrow-core/src/commonMain/kotlin/arrow/core/map.kt +++ b/arrow-libs/core/arrow-core/src/commonMain/kotlin/arrow/core/map.kt @@ -5,6 +5,7 @@ package arrow.core import arrow.core.raise.either import arrow.core.raise.mapOrAccumulate import arrow.core.raise.RaiseAccumulate +import arrow.core.raise.mapValuesOrAccumulate import kotlin.experimental.ExperimentalTypeInference /** @@ -254,17 +255,34 @@ public fun Map.flatMap(f: (Map.Entry) -> Map): Map Map.mapOrAccumulate( combine: (E, E) -> E, @BuilderInference transform: RaiseAccumulate.(Map.Entry) -> B +): Either> = mapValuesOrAccumulate(combine, transform) + +@Deprecated( + message = "Deprecated to allow for future alignment with stdlib Map#map returning List", + replaceWith = ReplaceWith("mapValuesOrAccumulate(transform)"), +) +public inline fun Map.mapOrAccumulate( + @BuilderInference transform: RaiseAccumulate.(Map.Entry) -> B +): Either, Map> = mapValuesOrAccumulate(transform) + +public inline fun Map.mapValuesOrAccumulate( + combine: (E, E) -> E, + @BuilderInference transform: RaiseAccumulate.(Map.Entry) -> B ): Either> = either { - mapOrAccumulate(this@mapOrAccumulate, combine, transform) + mapValuesOrAccumulate(this@mapValuesOrAccumulate, combine, transform) } -public inline fun Map.mapOrAccumulate( +public inline fun Map.mapValuesOrAccumulate( @BuilderInference transform: RaiseAccumulate.(Map.Entry) -> B ): Either, Map> = either { - mapOrAccumulate(this@mapOrAccumulate, transform) + mapValuesOrAccumulate(this@mapValuesOrAccumulate, transform) } public fun Map.mapNotNull(transform: (Map.Entry) -> B?): Map = diff --git a/arrow-libs/core/arrow-core/src/commonMain/kotlin/arrow/core/raise/RaiseAccumulate.kt b/arrow-libs/core/arrow-core/src/commonMain/kotlin/arrow/core/raise/RaiseAccumulate.kt index b798f7e36f3..e7d0fcb1872 100644 --- a/arrow-libs/core/arrow-core/src/commonMain/kotlin/arrow/core/raise/RaiseAccumulate.kt +++ b/arrow-libs/core/arrow-core/src/commonMain/kotlin/arrow/core/raise/RaiseAccumulate.kt @@ -651,10 +651,31 @@ public inline fun Raise>.mapOrAccumulate( }.toNonEmptySetOrNull()!! @RaiseDSL +@Deprecated( + message = "Deprecated to allow for future alignment with stdlib Map#map returning List", + replaceWith = ReplaceWith("mapValuesOrAccumulate(map, combine, transform)"), +) public inline fun Raise.mapOrAccumulate( map: Map, combine: (Error, Error) -> Error, @BuilderInference transform: RaiseAccumulate.(Map.Entry) -> B +): Map = mapValuesOrAccumulate(map, combine, transform) + +@RaiseDSL +@Deprecated( + message = "Deprecated to allow for future alignment with stdlib Map#map returning List", + replaceWith = ReplaceWith("mapValuesOrAccumulate(map, transform)") +) +public inline fun Raise>.mapOrAccumulate( + map: Map, + @BuilderInference transform: RaiseAccumulate.(Map.Entry) -> B +): Map = mapValuesOrAccumulate(map, transform) + +@RaiseDSL +public inline fun Raise.mapValuesOrAccumulate( + map: Map, + combine: (Error, Error) -> Error, + @BuilderInference transform: RaiseAccumulate.(Map.Entry) -> B ): Map = buildMap(map.size) { forEachAccumulatingImpl(map.entries.iterator(), combine) { item, hasErrors -> transform(item).also { if (!hasErrors) put(item.key, it) } @@ -662,7 +683,7 @@ public inline fun Raise.mapOrAccumulate( } @RaiseDSL -public inline fun Raise>.mapOrAccumulate( +public inline fun Raise>.mapValuesOrAccumulate( map: Map, @BuilderInference transform: RaiseAccumulate.(Map.Entry) -> B ): Map = buildMap(map.size) { @@ -712,7 +733,7 @@ public open class RaiseAccumulate( raise.raise((errors + r).toNonEmptyListOrNull()!!) public override fun Map>.bindAll(): Map = - raise.mapOrAccumulate(this) { it.value.bind() } + raise.mapValuesOrAccumulate(this) { it.value.bind() } @RaiseDSL public inline fun Iterable.mapOrAccumulate( diff --git a/arrow-libs/core/arrow-core/src/commonTest/kotlin/arrow/core/MapKTest.kt b/arrow-libs/core/arrow-core/src/commonTest/kotlin/arrow/core/MapKTest.kt index e6ba1a9d7e1..8fe01cdb392 100644 --- a/arrow-libs/core/arrow-core/src/commonTest/kotlin/arrow/core/MapKTest.kt +++ b/arrow-libs/core/arrow-core/src/commonTest/kotlin/arrow/core/MapKTest.kt @@ -690,8 +690,8 @@ class MapKTest { } } - @Test fun mapOrAccumulateEmpty() = runTest { - val result: Either, Map> = emptyMap().mapOrAccumulate { + @Test fun mapValuesOrAccumulateEmpty() = runTest { + val result: Either, Map> = emptyMap().mapValuesOrAccumulate { it.value.toString() } @@ -699,12 +699,12 @@ class MapKTest { .value.shouldBeEmpty() } - @Test fun mapOrAccumulateMaps() = runTest { + @Test fun mapValuesOrAccumulateMaps() = runTest { checkAll( Arb.map(Arb.int(), Arb.int(), maxSize = 30) ) { xs -> - val result: Either, Map> = xs.mapOrAccumulate { + val result: Either, Map> = xs.mapValuesOrAccumulate { it.value.toString() } @@ -714,13 +714,13 @@ class MapKTest { } } - @Test fun mapOrAccumulateAccumulates() = runTest { + @Test fun mapValuesOrAccumulateAccumulates() = runTest { checkAll( Arb.map(Arb.int(), Arb.int(), minSize = 1, maxSize = 30) ) { xs -> - xs.mapOrAccumulate { - raise(it.value) - }.shouldBeInstanceOf>>() + xs.mapValuesOrAccumulate { + raise(it.value) + }.shouldBeInstanceOf>>() .value.all.shouldContainAll(xs.values) } } From d9c42e4299080455a21fa912846f7b649a8309c2 Mon Sep 17 00:00:00 2001 From: Phil Davies Date: Wed, 23 Oct 2024 11:38:27 +0100 Subject: [PATCH 2/3] feat: add missing RaiseDSL for Map.mapOrAccumulate and Map.mapValuesOrAccumulate --- arrow-libs/core/arrow-core/api/arrow-core.api | 2 ++ arrow-libs/core/arrow-core/api/arrow-core.klib.api | 2 ++ .../kotlin/arrow/core/raise/RaiseAccumulate.kt | 10 ++++++++++ 3 files changed, 14 insertions(+) diff --git a/arrow-libs/core/arrow-core/api/arrow-core.api b/arrow-libs/core/arrow-core/api/arrow-core.api index b35e3f9d810..1a87cff4069 100644 --- a/arrow-libs/core/arrow-core/api/arrow-core.api +++ b/arrow-libs/core/arrow-core/api/arrow-core.api @@ -974,8 +974,10 @@ public class arrow/core/raise/RaiseAccumulate : arrow/core/raise/Raise { public fun invoke (Lkotlin/jvm/functions/Function1;)Ljava/lang/Object; public fun invoke (Lkotlin/jvm/functions/Function2;Lkotlin/coroutines/Continuation;)Ljava/lang/Object; public final fun mapOrAccumulate (Ljava/lang/Iterable;Lkotlin/jvm/functions/Function2;)Ljava/util/List; + public final fun mapOrAccumulate (Ljava/util/Map;Lkotlin/jvm/functions/Function2;)Ljava/util/List; public final fun mapOrAccumulate-FrVv2gs (Ljava/util/List;Lkotlin/jvm/functions/Function2;)Ljava/util/List; public final fun mapOrAccumulate-nfMsDo0 (Ljava/util/Set;Lkotlin/jvm/functions/Function2;)Ljava/util/Set; + public final fun mapValuesOrAccumulate (Ljava/util/Map;Lkotlin/jvm/functions/Function2;)Ljava/util/Map; public fun raise (Ljava/lang/Object;)Ljava/lang/Void; public final fun raiseErrors ()Ljava/lang/Void; public final fun withNel (Lkotlin/jvm/functions/Function1;)Ljava/lang/Object; diff --git a/arrow-libs/core/arrow-core/api/arrow-core.klib.api b/arrow-libs/core/arrow-core/api/arrow-core.klib.api index 6653a4198d8..c5013539dbb 100644 --- a/arrow-libs/core/arrow-core/api/arrow-core.klib.api +++ b/arrow-libs/core/arrow-core/api/arrow-core.klib.api @@ -471,6 +471,8 @@ open class <#A: kotlin/Any?> arrow.core.raise/RaiseAccumulate : arrow.core.raise final fun ensureOrAccumulate(kotlin/Boolean, kotlin/Function0<#A>) // arrow.core.raise/RaiseAccumulate.ensureOrAccumulate|ensureOrAccumulate(kotlin.Boolean;kotlin.Function0<1:0>){}[0] final fun hasErrors(): kotlin/Boolean // arrow.core.raise/RaiseAccumulate.hasErrors|hasErrors(){}[0] final fun raiseErrors(): kotlin/Nothing // arrow.core.raise/RaiseAccumulate.raiseErrors|raiseErrors(){}[0] + final inline fun <#A1: kotlin/Any?, #B1: kotlin/Any?, #C1: kotlin/Any?> (kotlin.collections/Map<#A1, #B1>).mapOrAccumulate(kotlin/Function2, kotlin.collections/Map.Entry<#A1, #B1>, #C1>): kotlin.collections/List<#C1> // arrow.core.raise/RaiseAccumulate.mapOrAccumulate|mapOrAccumulate@kotlin.collections.Map<0:0,0:1>(kotlin.Function2,kotlin.collections.Map.Entry<0:0,0:1>,0:2>){0§;1§;2§}[0] + final inline fun <#A1: kotlin/Any?, #B1: kotlin/Any?, #C1: kotlin/Any?> (kotlin.collections/Map<#A1, #B1>).mapValuesOrAccumulate(kotlin/Function2, kotlin.collections/Map.Entry<#A1, #B1>, #C1>): kotlin.collections/Map<#A1, #C1> // arrow.core.raise/RaiseAccumulate.mapValuesOrAccumulate|mapValuesOrAccumulate@kotlin.collections.Map<0:0,0:1>(kotlin.Function2,kotlin.collections.Map.Entry<0:0,0:1>,0:2>){0§;1§;2§}[0] final inline fun <#A1: kotlin/Any?, #B1: kotlin/Any?> (arrow.core/NonEmptyList<#A1>).mapOrAccumulate(kotlin/Function2, #A1, #B1>): arrow.core/NonEmptyList<#B1> // arrow.core.raise/RaiseAccumulate.mapOrAccumulate|mapOrAccumulate@arrow.core.NonEmptyList<0:0>(kotlin.Function2,0:0,0:1>){0§;1§}[0] final inline fun <#A1: kotlin/Any?, #B1: kotlin/Any?> (arrow.core/NonEmptySet<#A1>).mapOrAccumulate(kotlin/Function2, #A1, #B1>): arrow.core/NonEmptySet<#B1> // arrow.core.raise/RaiseAccumulate.mapOrAccumulate|mapOrAccumulate@arrow.core.NonEmptySet<0:0>(kotlin.Function2,0:0,0:1>){0§;1§}[0] final inline fun <#A1: kotlin/Any?, #B1: kotlin/Any?> (kotlin.collections/Iterable<#A1>).mapOrAccumulate(kotlin/Function2, #A1, #B1>): kotlin.collections/List<#B1> // arrow.core.raise/RaiseAccumulate.mapOrAccumulate|mapOrAccumulate@kotlin.collections.Iterable<0:0>(kotlin.Function2,0:0,0:1>){0§;1§}[0] diff --git a/arrow-libs/core/arrow-core/src/commonMain/kotlin/arrow/core/raise/RaiseAccumulate.kt b/arrow-libs/core/arrow-core/src/commonMain/kotlin/arrow/core/raise/RaiseAccumulate.kt index e7d0fcb1872..95c14cf00cc 100644 --- a/arrow-libs/core/arrow-core/src/commonMain/kotlin/arrow/core/raise/RaiseAccumulate.kt +++ b/arrow-libs/core/arrow-core/src/commonMain/kotlin/arrow/core/raise/RaiseAccumulate.kt @@ -750,6 +750,16 @@ public open class RaiseAccumulate( transform: RaiseAccumulate.(A) -> B ): NonEmptySet = raise.mapOrAccumulate(this, transform) + @RaiseDSL + public inline fun Map.mapOrAccumulate( + transform: RaiseAccumulate.(Map.Entry) -> B + ): List = raise.mapOrAccumulate(entries, transform) + + @RaiseDSL + public inline fun Map.mapValuesOrAccumulate( + transform: RaiseAccumulate.(Map.Entry) -> B + ): Map = raise.mapValuesOrAccumulate(this, transform) + @RaiseDSL @JvmName("_mapOrAccumulate") public inline fun mapOrAccumulate( From aa2dd22d3c7d64ec20479a741bd5f5f5be5f8790 Mon Sep 17 00:00:00 2001 From: Phil Davies Date: Tue, 29 Oct 2024 09:50:49 +0000 Subject: [PATCH 3/3] chore: re-dump api --- arrow-libs/core/arrow-core/api/arrow-core.api | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/arrow-libs/core/arrow-core/api/arrow-core.api b/arrow-libs/core/arrow-core/api/arrow-core.api index 898805acb2e..7bd1af56b99 100644 --- a/arrow-libs/core/arrow-core/api/arrow-core.api +++ b/arrow-libs/core/arrow-core/api/arrow-core.api @@ -314,7 +314,7 @@ public final class arrow/core/MapKt { public static final fun getOrNone (Ljava/util/Map;Ljava/lang/Object;)Larrow/core/Option; public static final fun mapOrAccumulate (Ljava/util/Map;Lkotlin/jvm/functions/Function2;)Larrow/core/Either; public static final fun mapOrAccumulate (Ljava/util/Map;Lkotlin/jvm/functions/Function2;Lkotlin/jvm/functions/Function2;)Larrow/core/Either; - public static final fun mapValuesNotNull (Ljava/util/Map;Lkotlin/jvm/functions/Function1;)Ljava/util/Map; + public static final fun mapValuesNotNull (Ljava/util/Map;Lkotlin/jvm/functions/Function1;)Ljava/util/Map; public static final fun mapValuesOrAccumulate (Ljava/util/Map;Lkotlin/jvm/functions/Function2;)Larrow/core/Either; public static final fun mapValuesOrAccumulate (Ljava/util/Map;Lkotlin/jvm/functions/Function2;Lkotlin/jvm/functions/Function2;)Larrow/core/Either; public static final fun padZip (Ljava/util/Map;Ljava/util/Map;)Ljava/util/Map;