Skip to content

Commit

Permalink
Add Commutative{Monad, FlatMap} instances for IdT (#2104)
Browse files Browse the repository at this point in the history
  • Loading branch information
ceedubs authored and kailuowang committed Dec 14, 2017
1 parent cf36426 commit d9c3c5b
Show file tree
Hide file tree
Showing 2 changed files with 18 additions and 1 deletion.
12 changes: 11 additions & 1 deletion core/src/main/scala/cats/data/IdT.scala
Original file line number Diff line number Diff line change
Expand Up @@ -135,7 +135,17 @@ private[data] sealed trait IdTNonEmptyTraverse[F[_]] extends IdTTraverse[F] with
fa.reduceRightTo(f)(g)
}

private[data] sealed abstract class IdTInstances6 {
private[data] sealed abstract class IdTInstances8 {
implicit def catsDataCommutativeFlatMapForIdT[F[_]](implicit F: CommutativeFlatMap[F]): CommutativeFlatMap[IdT[F, ?]] =
new IdTFlatMap[F] with CommutativeFlatMap[IdT[F, ?]] { implicit val F0: CommutativeFlatMap[F] = F }
}

private[data] sealed abstract class IdTInstances7 extends IdTInstances8{
implicit def catsDataCommutativeMonadForIdT[F[_]](implicit F: CommutativeMonad[F]): CommutativeMonad[IdT[F, ?]] =
new IdTMonad[F] with CommutativeMonad[IdT[F, ?]] { implicit val F0: CommutativeMonad[F] = F }
}

private[data] sealed abstract class IdTInstances6 extends IdTInstances7 {
implicit def catsDataContravariantMonoidalForIdT[F[_]](implicit F: ContravariantMonoidal[F]): ContravariantMonoidal[IdT[F, ?]] =
new IdTContravariantMonoidal[F] { implicit val F0: ContravariantMonoidal[F] = F }
}
Expand Down
7 changes: 7 additions & 0 deletions tests/src/test/scala/cats/tests/IdTSuite.scala
Original file line number Diff line number Diff line change
Expand Up @@ -5,11 +5,18 @@ import cats.data.{Const, IdT, NonEmptyList}
import cats.kernel.laws.discipline.{OrderTests, EqTests}
import cats.laws.discipline._
import cats.laws.discipline.arbitrary._
import Helpers.CSemi

class IdTSuite extends CatsSuite {

implicit val iso = SemigroupalTests.Isomorphisms.invariant[IdT[ListWrapper, ?]](IdT.catsDataFunctorForIdT(ListWrapper.functor))

checkAll("IdT[(CSemi, ?), Int]", CommutativeFlatMapTests[IdT[(CSemi, ?), ?]].commutativeFlatMap[Int, Int, Int])
checkAll("CommutativeFlatMap[IdT[(CSemi, ?), ?]]", SerializableTests.serializable(CommutativeFlatMap[IdT[(CSemi, ?), ?]]))

checkAll("IdT[Option, Int]", CommutativeMonadTests[IdT[Option, ?]].commutativeMonad[Int, Int, Int])
checkAll("CommutativeMonad[IdT[Option, ?]]", SerializableTests.serializable(CommutativeMonad[IdT[Option, ?]]))

{
implicit val F = ListWrapper.eqv[Option[Int]]

Expand Down

0 comments on commit d9c3c5b

Please sign in to comment.