Skip to content

Commit

Permalink
backported #2834 added CommutativeMonoid[Option[A]] instance, in bina…
Browse files Browse the repository at this point in the history
…ry compatible way (#3334)
  • Loading branch information
gagandeepkalra authored Mar 11, 2020
1 parent f82cd0d commit 3d5a5c2
Show file tree
Hide file tree
Showing 6 changed files with 19 additions and 5 deletions.
1 change: 1 addition & 0 deletions core/src/main/scala/cats/instances/all.scala
Original file line number Diff line number Diff line change
Expand Up @@ -69,6 +69,7 @@ trait AllInstancesBinCompat7
with VectorInstancesBinCompat1
with EitherInstancesBinCompat0
with StreamInstancesBinCompat1
with OptionInstancesBinCompat1
with QueueInstancesBinCompat0
with TailRecInstances
with SortedSetInstancesBinCompat2
4 changes: 4 additions & 0 deletions core/src/main/scala/cats/instances/option.scala
Original file line number Diff line number Diff line change
@@ -1,6 +1,8 @@
package cats
package instances

import cats.kernel.instances.OptionInstances3

import scala.annotation.tailrec
import cats.data.Ior

Expand Down Expand Up @@ -172,3 +174,5 @@ private[instances] trait OptionInstancesBinCompat0 {

}
}

private[instances] trait OptionInstancesBinCompat1 extends OptionInstances3
2 changes: 1 addition & 1 deletion core/src/main/scala/cats/instances/package.scala
Original file line number Diff line number Diff line change
Expand Up @@ -21,7 +21,7 @@ package object instances {
object invariant extends InvariantMonoidalInstances
object list extends ListInstances with ListInstancesBinCompat0 with ListInstancesBinCompat1
object long extends LongInstances
object option extends OptionInstances with OptionInstancesBinCompat0
object option extends OptionInstances with OptionInstancesBinCompat0 with OptionInstancesBinCompat1
object map extends MapInstances with MapInstancesBinCompat0 with MapInstancesBinCompat1
object order extends OrderInstances
object ordering extends OrderingInstances
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -227,10 +227,8 @@ class Tests extends AnyFunSuiteLike with Discipline {

checkAll("Monoid[String]", MonoidTests[String].monoid)
checkAll("Monoid[String]", SerializableTests.serializable(Monoid[String]))
checkAll("Monoid[Option[Int]]", MonoidTests[Option[Int]].monoid)
checkAll("Monoid[Option[Int]]", SerializableTests.serializable(Monoid[String]))
checkAll("Monoid[Option[String]]", MonoidTests[Option[String]].monoid)
checkAll("Monoid[Option[String]]", SerializableTests.serializable(Monoid[String]))
checkAll("Monoid[Option[String]]", SerializableTests.serializable(Monoid[Option[String]]))
checkAll("Monoid[List[Int]]", MonoidTests[List[Int]].monoid)
checkAll("Monoid[List[Int]]", SerializableTests.serializable(Monoid[List[Int]]))
checkAll("Monoid[Vector[Int]]", MonoidTests[Vector[Int]].monoid)
Expand All @@ -246,6 +244,8 @@ class Tests extends AnyFunSuiteLike with Discipline {
checkAll("Monoid[Queue[Int]]", MonoidTests[Queue[Int]].monoid)
checkAll("Monoid[Queue[Int]]", SerializableTests.serializable(Monoid[Queue[Int]]))

checkAll("CommutativeMonoid[Option[Int]]", CommutativeMonoidTests[Option[Int]].commutativeMonoid)
checkAll("CommutativeMonoid[Option[Int]]", SerializableTests.serializable(CommutativeMonoid[Option[Int]]))
checkAll("CommutativeMonoid[Map[String, Int]]", CommutativeMonoidTests[Map[String, Int]].commutativeMonoid)
checkAll("CommutativeMonoid[Map[String, Int]]", SerializableTests.serializable(CommutativeMonoid[Map[String, Int]]))
checkAll("CommutativeMonoid[SortedMap[String, Int]]",
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -37,4 +37,4 @@ private[instances] trait AllInstancesBinCompat0 extends FiniteDurationInstances

private[instances] trait AllInstancesBinCompat1 extends SortedMapInstances with SortedSetInstances

private[instances] trait AllInstancesBinCompat2 extends SortedSetInstances2
private[instances] trait AllInstancesBinCompat2 extends OptionInstances3 with SortedSetInstances2
Original file line number Diff line number Diff line change
Expand Up @@ -23,6 +23,11 @@ private[instances] trait OptionInstances2 {
new OptionEq[A]
}

trait OptionInstances3 {
implicit def catsKernelStdCommutativeMonoidForOption[A: CommutativeSemigroup]: CommutativeMonoid[Option[A]] =
new OptionCommutativeMonoid[A]
}

class OptionOrder[A](implicit A: Order[A]) extends Order[Option[A]] {
def compare(x: Option[A], y: Option[A]): Int =
x match {
Expand Down Expand Up @@ -80,3 +85,7 @@ class OptionMonoid[A](implicit A: Semigroup[A]) extends Monoid[Option[A]] {
}
}
}

private class OptionCommutativeMonoid[A](implicit A: CommutativeSemigroup[A])
extends OptionMonoid[A]()(A)
with CommutativeMonoid[Option[A]]

0 comments on commit 3d5a5c2

Please sign in to comment.