diff --git a/kernel/src/main/scala/cats/kernel/instances/option/package.scala b/kernel/src/main/scala/cats/kernel/instances/option/package.scala index e00c5ddccba..31f0a09101f 100644 --- a/kernel/src/main/scala/cats/kernel/instances/option/package.scala +++ b/kernel/src/main/scala/cats/kernel/instances/option/package.scala @@ -6,13 +6,15 @@ package object option extends OptionInstances trait OptionInstances extends OptionInstances0 { implicit def catsKernelStdOrderForOption[A: Order]: Order[Option[A]] = new OptionOrder[A] - implicit def catsKernelStdMonoidForOption[A: Semigroup]: Monoid[Option[A]] = - new OptionMonoid[A] + implicit def catsKernelStdCommutativeMonoidForOption[A: CommutativeSemigroup]: CommutativeMonoid[Option[A]] = + new OptionCommutativeMonoid[A] } trait OptionInstances0 extends OptionInstances1 { implicit def catsKernelStdPartialOrderForOption[A: PartialOrder]: PartialOrder[Option[A]] = new OptionPartialOrder[A] + implicit def catsKernelStdMonoidForOption[A: Semigroup]: Monoid[Option[A]] = + new OptionMonoid[A] } trait OptionInstances1 extends OptionInstances2 { @@ -70,6 +72,10 @@ class OptionEq[A](implicit A: Eq[A]) extends Eq[Option[A]] { } } +class OptionCommutativeMonoid[A](implicit A: CommutativeSemigroup[A]) + extends OptionMonoid[A]()(A) + with CommutativeMonoid[Option[A]] + class OptionMonoid[A](implicit A: Semigroup[A]) extends Monoid[Option[A]] { def empty: Option[A] = None def combine(x: Option[A], y: Option[A]): Option[A] =