Skip to content

Commit 6dd9ca3

Browse files
committed
Use helper constructor for Band and (Bounded)Semilattice instances
1 parent 28f3487 commit 6dd9ca3

File tree

12 files changed

+18
-46
lines changed

12 files changed

+18
-46
lines changed

algebra-core/src/main/scala/algebra/lattice/BoundedJoinSemilattice.scala

Lines changed: 2 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -24,15 +24,12 @@ package lattice
2424

2525
import scala.{specialized => sp}
2626

27-
trait BoundedJoinSemilattice[@sp(Int, Long, Float, Double) A] extends Any with JoinSemilattice[A] { self =>
27+
trait BoundedJoinSemilattice[@sp(Int, Long, Float, Double) A] extends Any with JoinSemilattice[A] {
2828
def zero: A
2929
def isZero(a: A)(implicit ev: Eq[A]): Boolean = ev.eqv(a, zero)
3030

3131
override def joinSemilattice: BoundedSemilattice[A] =
32-
new BoundedSemilattice[A] {
33-
def empty: A = self.zero
34-
def combine(x: A, y: A): A = join(x, y)
35-
}
32+
BoundedSemilattice.instance(zero, join)
3633
}
3734

3835
trait BoundedJoinSemilatticeFunctions[B[A] <: BoundedJoinSemilattice[A]] extends JoinSemilatticeFunctions[B] {

algebra-core/src/main/scala/algebra/lattice/BoundedMeetSemilattice.scala

Lines changed: 2 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -24,15 +24,12 @@ package lattice
2424

2525
import scala.{specialized => sp}
2626

27-
trait BoundedMeetSemilattice[@sp(Int, Long, Float, Double) A] extends Any with MeetSemilattice[A] { self =>
27+
trait BoundedMeetSemilattice[@sp(Int, Long, Float, Double) A] extends Any with MeetSemilattice[A] {
2828
def one: A
2929
def isOne(a: A)(implicit ev: Eq[A]): Boolean = ev.eqv(a, one)
3030

3131
override def meetSemilattice: BoundedSemilattice[A] =
32-
new BoundedSemilattice[A] {
33-
def empty: A = self.one
34-
def combine(x: A, y: A): A = meet(x, y)
35-
}
32+
BoundedSemilattice.instance(one, meet)
3633
}
3734

3835
trait BoundedMeetSemilatticeFunctions[B[A] <: BoundedMeetSemilattice[A]] extends MeetSemilatticeFunctions[B] {

algebra-core/src/main/scala/algebra/lattice/JoinSemilattice.scala

Lines changed: 2 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -29,13 +29,11 @@ import scala.{specialized => sp}
2929
* operation is called "join", and which can be thought of as a least
3030
* upper bound.
3131
*/
32-
trait JoinSemilattice[@sp(Int, Long, Float, Double) A] extends Any with Serializable { self =>
32+
trait JoinSemilattice[@sp(Int, Long, Float, Double) A] extends Any with Serializable {
3333
def join(lhs: A, rhs: A): A
3434

3535
def joinSemilattice: Semilattice[A] =
36-
new Semilattice[A] {
37-
def combine(x: A, y: A): A = self.join(x, y)
38-
}
36+
Semilattice.instance(join)
3937

4038
def joinPartialOrder(implicit ev: Eq[A]): PartialOrder[A] =
4139
joinSemilattice.asJoinPartialOrder

algebra-core/src/main/scala/algebra/lattice/MeetSemilattice.scala

Lines changed: 2 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -29,13 +29,11 @@ import scala.{specialized => sp}
2929
* operation is called "meet", and which can be thought of as a
3030
* greatest lower bound.
3131
*/
32-
trait MeetSemilattice[@sp(Int, Long, Float, Double) A] extends Any with Serializable { self =>
32+
trait MeetSemilattice[@sp(Int, Long, Float, Double) A] extends Any with Serializable {
3333
def meet(lhs: A, rhs: A): A
3434

3535
def meetSemilattice: Semilattice[A] =
36-
new Semilattice[A] {
37-
def combine(x: A, y: A): A = self.meet(x, y)
38-
}
36+
Semilattice.instance(meet)
3937

4038
def meetPartialOrder(implicit ev: Eq[A]): PartialOrder[A] =
4139
meetSemilattice.asMeetPartialOrder

core/src/main/scala/cats/data/NonEmptyMapImpl.scala

Lines changed: 1 addition & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -369,9 +369,7 @@ sealed abstract private[data] class NonEmptyMapInstances extends NonEmptyMapInst
369369

370370
@deprecated("Use catsDataSemigroupForNonEmptyMap", "2.5.0")
371371
def catsDataBandForNonEmptyMap[K, A]: Band[NonEmptyMap[K, A]] =
372-
new Band[NonEmptyMap[K, A]] {
373-
def combine(x: NonEmptyMap[K, A], y: NonEmptyMap[K, A]): NonEmptyMap[K, A] = x ++ y
374-
}
372+
Band.instance(_ ++ _)
375373

376374
implicit def catsDataSemigroupForNonEmptyMap[K, A: Semigroup]: Semigroup[NonEmptyMap[K, A]] =
377375
Semigroup.instance { (x, y) =>

core/src/main/scala/cats/data/NonEmptySet.scala

Lines changed: 1 addition & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -430,9 +430,7 @@ sealed abstract private[data] class NonEmptySetInstances extends NonEmptySetInst
430430
Show.show[NonEmptySet[A]](_.show)
431431

432432
implicit def catsDataSemilatticeForNonEmptySet[A]: Semilattice[NonEmptySet[A]] =
433-
new Semilattice[NonEmptySet[A]] {
434-
def combine(x: NonEmptySet[A], y: NonEmptySet[A]): NonEmptySet[A] = x | y
435-
}
433+
Semilattice.instance(_ | _)
436434
}
437435

438436
sealed abstract private[data] class NonEmptySetInstances0 extends NonEmptySetInstances1 {

kernel-laws/shared/src/test/scala/cats/kernel/laws/LawTests.scala

Lines changed: 1 addition & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -424,9 +424,7 @@ class Tests extends TestsConfig with DisciplineSuite {
424424
// esoteric machinery follows...
425425

426426
implicit lazy val band: Band[(Int, Int)] =
427-
new Band[(Int, Int)] {
428-
def combine(a: (Int, Int), b: (Int, Int)) = (a._1, b._2)
429-
}
427+
Band.instance((a, b) => (a._1, b._2))
430428

431429
{
432430
// In order to check the monoid laws for `Order[N]`, we need

kernel/src/main/scala/cats/kernel/Band.scala

Lines changed: 2 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -42,8 +42,6 @@ object Band extends SemigroupFunctions[Band] {
4242
/**
4343
* Create a `Band` instance from the given function.
4444
*/
45-
@inline def instance[A](cmb: (A, A) => A): Band[A] =
46-
new Band[A] {
47-
override def combine(x: A, y: A): A = cmb(x, y)
48-
}
45+
@inline def instance[@sp(Int, Long, Float, Double) A](cmb: (A, A) => A): Band[A] =
46+
cmb(_, _)
4947
}

kernel/src/main/scala/cats/kernel/BoundedSemilattice.scala

Lines changed: 1 addition & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -41,10 +41,9 @@ object BoundedSemilattice extends SemilatticeFunctions[BoundedSemilattice] {
4141
/**
4242
* Create a `BoundedSemilattice` instance from the given function and empty value.
4343
*/
44-
@inline def instance[A](emptyValue: A, cmb: (A, A) => A): BoundedSemilattice[A] =
44+
@inline def instance[@sp(Int, Long, Float, Double) A](emptyValue: A, cmb: (A, A) => A): BoundedSemilattice[A] =
4545
new BoundedSemilattice[A] {
4646
override val empty: A = emptyValue
47-
4847
override def combine(x: A, y: A): A = cmb(x, y)
4948
}
5049
}

kernel/src/main/scala/cats/kernel/Semilattice.scala

Lines changed: 2 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -89,8 +89,6 @@ object Semilattice extends SemilatticeFunctions[Semilattice] {
8989
/**
9090
* Create a `Semilattice` instance from the given function.
9191
*/
92-
@inline def instance[A](cmb: (A, A) => A): Semilattice[A] =
93-
new Semilattice[A] {
94-
override def combine(x: A, y: A): A = cmb(x, y)
95-
}
92+
@inline def instance[@sp(Int, Long, Float, Double) A](cmb: (A, A) => A): Semilattice[A] =
93+
cmb(_, _)
9694
}

0 commit comments

Comments
 (0)