Skip to content

Commit

Permalink
Add Semigroupal instance for Monoid
Browse files Browse the repository at this point in the history
  • Loading branch information
Luka Jacobowitz committed Oct 17, 2017
1 parent 60aa276 commit 64cd30d
Show file tree
Hide file tree
Showing 4 changed files with 12 additions and 5 deletions.
9 changes: 8 additions & 1 deletion core/src/main/scala/cats/Semigroupal.scala
Original file line number Diff line number Diff line change
Expand Up @@ -16,4 +16,11 @@ import simulacrum.typeclass
def product[A, B](fa: F[A], fb: F[B]): F[(A, B)]
}

object Semigroupal extends SemigroupalArityFunctions
object Semigroupal extends SemigroupalArityFunctions {
implicit def catsSemigroupalForMonoid: Semigroupal[Monoid] = new Semigroupal[Monoid] {
def product[A, B](fa: Monoid[A], fb: Monoid[B]): Monoid[(A, B)] = new Monoid[(A, B)] {
val empty = fa.empty -> fb.empty
def combine(x: (A, B), y: (A, B)): (A, B) = fa.combine(x._1, y._1) -> fb.combine(x._2, y._2)
}
}
}
3 changes: 0 additions & 3 deletions core/src/main/scala/cats/instances/invariant.scala
Original file line number Diff line number Diff line change
Expand Up @@ -45,7 +45,4 @@ trait InvariantMonoidalInstances {
}
}




}
3 changes: 2 additions & 1 deletion tests/src/test/scala/cats/tests/AlgebraInvariantTests.scala
Original file line number Diff line number Diff line change
Expand Up @@ -4,7 +4,7 @@ package tests
import cats.Invariant
import cats.kernel._
import cats.kernel.laws.discipline.{SemigroupTests => SemigroupLawTests, MonoidTests => MonoidLawTests, GroupTests => GroupLawTests, _}
import cats.laws.discipline.{InvariantMonoidalTests, InvariantTests, SerializableTests}
import cats.laws.discipline.{InvariantMonoidalTests, InvariantTests, SerializableTests, SemigroupalTests}
import cats.laws.discipline.eq._
import org.scalacheck.{Arbitrary, Gen}

Expand Down Expand Up @@ -64,6 +64,7 @@ class AlgebraInvariantTests extends CatsSuite {
checkAll("InvariantMonoidal[Semigroup]", SemigroupLawTests[Int](InvariantMonoidal[Semigroup].pure(0)).semigroup)
checkAll("InvariantMonoidal[CommutativeSemigroup]", CommutativeSemigroupTests[Int](InvariantMonoidal[CommutativeSemigroup].pure(0)).commutativeSemigroup)

checkAll("Semigroupal[Monoid]", SemigroupalTests[Monoid].semigroupal[Int, Int, Int])


{
Expand Down
2 changes: 2 additions & 0 deletions tests/src/test/scala/cats/tests/MonoidTests.scala
Original file line number Diff line number Diff line change
Expand Up @@ -6,6 +6,7 @@ package tests
class MonoidTests extends CatsSuite {
{
Invariant[Monoid]
Semigroupal[Monoid]
}

test("companion object syntax") {
Expand All @@ -18,6 +19,7 @@ class MonoidTests extends CatsSuite {
object MonoidTests {
def summonInstance(): Unit = {
Invariant[Monoid]
Semigroupal[Monoid]
()
}

Expand Down

0 comments on commit 64cd30d

Please sign in to comment.