diff --git a/arrow-libs/core/arrow-core/api/arrow-core.api b/arrow-libs/core/arrow-core/api/arrow-core.api
index 7a8703c351f..3ac149f6121 100644
--- a/arrow-libs/core/arrow-core/api/arrow-core.api
+++ b/arrow-libs/core/arrow-core/api/arrow-core.api
@@ -2943,6 +2943,8 @@ public abstract interface class arrow/typeclasses/Monoid : arrow/typeclasses/Sem
public static fun either (Larrow/typeclasses/Monoid;Larrow/typeclasses/Monoid;)Larrow/typeclasses/Monoid;
public abstract fun empty ()Ljava/lang/Object;
public static fun endo ()Larrow/typeclasses/Monoid;
+ public abstract fun fold (Ljava/util/Collection;)Ljava/lang/Object;
+ public abstract fun fold (Ljava/util/List;)Ljava/lang/Object;
public static fun list ()Larrow/typeclasses/Monoid;
public static fun map (Larrow/typeclasses/Semigroup;)Larrow/typeclasses/Monoid;
public static fun option (Larrow/typeclasses/Semigroup;)Larrow/typeclasses/Monoid;
@@ -2973,6 +2975,8 @@ public final class arrow/typeclasses/Monoid$Companion {
public final class arrow/typeclasses/Monoid$DefaultImpls {
public static fun combineAll (Larrow/typeclasses/Monoid;Ljava/util/Collection;)Ljava/lang/Object;
public static fun combineAll (Larrow/typeclasses/Monoid;Ljava/util/List;)Ljava/lang/Object;
+ public static fun fold (Larrow/typeclasses/Monoid;Ljava/util/Collection;)Ljava/lang/Object;
+ public static fun fold (Larrow/typeclasses/Monoid;Ljava/util/List;)Ljava/lang/Object;
public static fun maybeCombine (Larrow/typeclasses/Monoid;Ljava/lang/Object;Ljava/lang/Object;)Ljava/lang/Object;
public static fun plus (Larrow/typeclasses/Monoid;Ljava/lang/Object;Ljava/lang/Object;)Ljava/lang/Object;
}
diff --git a/arrow-libs/core/arrow-core/src/commonMain/kotlin/arrow/core/Either.kt b/arrow-libs/core/arrow-core/src/commonMain/kotlin/arrow/core/Either.kt
index dac3abec320..e888a363187 100644
--- a/arrow-libs/core/arrow-core/src/commonMain/kotlin/arrow/core/Either.kt
+++ b/arrow-libs/core/arrow-core/src/commonMain/kotlin/arrow/core/Either.kt
@@ -1496,10 +1496,9 @@ public fun Either.combine(SGA: Semigroup, SGB: Semigroup, b:
}
}
+@Deprecated("use fold instead", ReplaceWith("fold(Monoid.either(MA, MB))", "arrow.core.fold", "arrow.typeclasses.Monoid"))
public fun Iterable>.combineAll(MA: Monoid, MB: Monoid): Either =
- fold(Right(MB.empty()) as Either) { acc, e ->
- acc.combine(MA, MB, e)
- }
+ fold(Monoid.either(MA, MB))
/**
* Given [B] is a sub type of [C], re-type this value from Either to Either
diff --git a/arrow-libs/core/arrow-core/src/commonMain/kotlin/arrow/core/Ior.kt b/arrow-libs/core/arrow-core/src/commonMain/kotlin/arrow/core/Ior.kt
index 0ae4fa187fb..93be4b2909a 100644
--- a/arrow-libs/core/arrow-core/src/commonMain/kotlin/arrow/core/Ior.kt
+++ b/arrow-libs/core/arrow-core/src/commonMain/kotlin/arrow/core/Ior.kt
@@ -657,7 +657,7 @@ public fun Ior.replicate(SA: Semigroup, n: Int): Ior>
is Ior.Right -> Ior.Right(List(n) { value })
is Ior.Left -> this
is Ior.Both -> bimap(
- { List(n - 1) { leftValue }.fold(leftValue, { acc, a -> SA.run { acc + a } }) },
+ { List(n - 1) { leftValue }.fold(leftValue) { acc, a -> SA.run { acc + a } } },
{ List(n) { rightValue } }
)
}
@@ -665,11 +665,11 @@ public fun Ior.replicate(SA: Semigroup, n: Int): Ior>
public fun Ior.replicate(SA: Semigroup, n: Int, MB: Monoid): Ior =
if (n <= 0) Ior.Right(MB.empty())
else when (this) {
- is Ior.Right -> Ior.Right(MB.run { List(n) { value }.combineAll() })
+ is Ior.Right -> Ior.Right(MB.run { List(n) { value }.fold() })
is Ior.Left -> this
is Ior.Both -> bimap(
{ List(n - 1) { leftValue }.fold(leftValue, { acc, a -> SA.run { acc + a } }) },
- { MB.run { List(n) { rightValue }.combineAll() } }
+ { MB.run { List(n) { rightValue }.fold() } }
)
}
diff --git a/arrow-libs/core/arrow-core/src/commonMain/kotlin/arrow/core/Iterable.kt b/arrow-libs/core/arrow-core/src/commonMain/kotlin/arrow/core/Iterable.kt
index 38c07e7320b..1ec37dfbc8b 100644
--- a/arrow-libs/core/arrow-core/src/commonMain/kotlin/arrow/core/Iterable.kt
+++ b/arrow-libs/core/arrow-core/src/commonMain/kotlin/arrow/core/Iterable.kt
@@ -704,11 +704,9 @@ public fun Iterable>.unalign(): Pair, List> =
public inline fun Iterable.unalign(fa: (C) -> Ior): Pair, List> =
map(fa).unalign()
-public fun Iterable.combineAll(MA: Monoid): A = MA.run {
- this@combineAll.fold(empty()) { acc, a ->
- acc.combine(a)
- }
-}
+@Deprecated("use fold instead", ReplaceWith("fold(MA)", "arrow.core.fold"))
+public fun Iterable.combineAll(MA: Monoid): A =
+ fold(MA)
/**
* Returns the first element as [Some(element)][Some], or [None] if the iterable is empty.
diff --git a/arrow-libs/core/arrow-core/src/commonMain/kotlin/arrow/core/Option.kt b/arrow-libs/core/arrow-core/src/commonMain/kotlin/arrow/core/Option.kt
index fccf9c097a6..9892b527740 100644
--- a/arrow-libs/core/arrow-core/src/commonMain/kotlin/arrow/core/Option.kt
+++ b/arrow-libs/core/arrow-core/src/commonMain/kotlin/arrow/core/Option.kt
@@ -904,14 +904,13 @@ public fun A.some(): Option = Some(this)
public fun none(): Option = None
+@Deprecated("use fold instead", ReplaceWith("fold(Monoid.option(MA))", "arrow.core.fold", "arrow.typeclasses.Monoid"))
public fun Iterable