Skip to content

Commit f92ec27

Browse files
authored
Merge pull request #4803 from typelevel/oscar/20251220-add_unordered_traverse_law
2 parents be5dd58 + 741de41 commit f92ec27

File tree

2 files changed

+8
-2
lines changed

2 files changed

+8
-2
lines changed

laws/src/main/scala/cats/laws/UnorderedTraverseLaws.scala

Lines changed: 4 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -22,7 +22,8 @@
2222
package cats
2323
package laws
2424

25-
import cats.data.Nested
25+
import cats.data.{Const, Nested}
26+
import cats.kernel.CommutativeMonoid
2627

2728
trait UnorderedTraverseLaws[F[_]] extends UnorderedFoldableLaws[F] {
2829
implicit def F: UnorderedTraverse[F]
@@ -71,6 +72,8 @@ trait UnorderedTraverseLaws[F[_]] extends UnorderedFoldableLaws[F] {
7172
def unorderedSequenceConsistent[A, G[_]: CommutativeApplicative](fga: F[G[A]]): IsEq[G[F[A]]] =
7273
F.unorderedTraverse(fga)(identity) <-> F.unorderedSequence(fga)
7374

75+
def unorderedTraverseConsistentUnorderedFoldMap[A, B: CommutativeMonoid](fa: F[A], fn: A => B): IsEq[B] =
76+
F.unorderedTraverse(fa)(a => Const[B, B](fn(a))).getConst <-> F.unorderedFoldMap(fa)(fn)
7477
}
7578

7679
object UnorderedTraverseLaws {

laws/src/main/scala/cats/laws/discipline/UnorderedTraverseTests.scala

Lines changed: 4 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -58,7 +58,10 @@ trait UnorderedTraverseTests[F[_]] extends UnorderedFoldableTests[F] {
5858
laws.unorderedTraverseSequentialComposition[A, B, C, X, Y] _
5959
),
6060
"unordered traverse parallel composition" -> forAll(laws.unorderedTraverseParallelComposition[A, B, X, Y] _),
61-
"unordered traverse consistent with sequence" -> forAll(laws.unorderedSequenceConsistent[B, X] _)
61+
"unordered traverse consistent with sequence" -> forAll(laws.unorderedSequenceConsistent[B, X] _),
62+
"unordered traverse consistent with unorderedFoldMap" -> forAll(
63+
laws.unorderedTraverseConsistentUnorderedFoldMap[A, B](_, _)
64+
)
6265
)
6366
}
6467

0 commit comments

Comments
 (0)