Skip to content

Commit fd1a45b

Browse files
committed
Merge pull request #672 from mikejcurry/additional-profunctor-tests
Additional Profunctor tests covering lmap and rmap
2 parents 246512e + 1a6019e commit fd1a45b

3 files changed

Lines changed: 22 additions & 1 deletion

File tree

laws/src/main/scala/cats/laws/ProfunctorLaws.scala

Lines changed: 15 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -17,6 +17,21 @@ trait ProfunctorLaws[F[_, _]] {
1717
f2: A2 => A1, f1: A1 => A0,
1818
g1: B0 => B1, g2: B1 => B2): IsEq[F[A2, B2]] =
1919
fab.dimap(f1)(g1).dimap(f2)(g2) <-> fab.dimap(f1 compose f2)(g2 compose g1)
20+
21+
def profunctorLmapIdentity[A, B](fab: F[A, B]): IsEq[F[A, B]] =
22+
fab.lmap(identity[A]) <-> fab
23+
24+
def profunctorRmapIdentity[A, B](fab: F[A, B]): IsEq[F[A, B]] =
25+
fab.rmap(identity[B]) <-> fab
26+
27+
def profunctorLmapComposition[A2, A1, A0, B](fab: F[A0, B],
28+
f: A2 => A1, g: A1 => A0): IsEq[F[A2, B]] =
29+
fab.lmap(g).lmap(f) <-> fab.lmap(g compose f)
30+
31+
def profunctorRmapComposition[A, B2, B1, B0](fab: F[A, B0],
32+
f: B0 => B1, g: B1 => B2): IsEq[F[A, B2]] =
33+
fab.rmap(f).rmap(g) <-> fab.rmap(g compose f)
34+
2035
}
2136

2237
object ProfunctorLaws {

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

Lines changed: 6 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -15,13 +15,18 @@ trait ProfunctorTests[F[_, _]] extends Laws {
1515
ArbFAB: Arbitrary[F[A, B]],
1616
ArbFCD: Arbitrary[F[C, D]],
1717
EqFAB: Eq[F[A, B]],
18+
EqFAD: Eq[F[A, D]],
1819
EqFAG: Eq[F[A, G]]
1920
): RuleSet =
2021
new DefaultRuleSet(
2122
name = "profunctor",
2223
parent = None,
2324
"profunctor identity" -> forAll(laws.profunctorIdentity[A, B] _),
24-
"profunctor composition" -> forAll(laws.profunctorComposition[A, B, C, D, E, G] _))
25+
"profunctor composition" -> forAll(laws.profunctorComposition[A, B, C, D, E, G] _),
26+
"profunctor lmap identity" -> forAll(laws.profunctorLmapIdentity[A, B] _),
27+
"profunctor rmap identity" -> forAll(laws.profunctorRmapIdentity[A, B] _),
28+
"profunctor lmap composition" -> forAll(laws.profunctorLmapComposition[A, B, C, D] _),
29+
"profunctor rmap composition" -> forAll(laws.profunctorRmapComposition[A, D, C, B] _))
2530
}
2631

2732
object ProfunctorTests {

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

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -15,6 +15,7 @@ trait StrongTests[F[_, _]] extends ProfunctorTests[F] {
1515
ArbFBC: Arbitrary[F[B, C]],
1616
ArbFCD: Arbitrary[F[C, D]],
1717
EqFAB: Eq[F[A, B]],
18+
EqFAD: Eq[F[A, D]],
1819
EqFAG: Eq[F[A, G]],
1920
EqFAEDE: Eq[F[(A, E), (D, E)]],
2021
EqFEAED: Eq[F[(E, A), (E, D)]]

0 commit comments

Comments
 (0)