From 5e2b37f7e85b74da849ab74c07110f12b37edf11 Mon Sep 17 00:00:00 2001 From: peterneyens Date: Sat, 13 May 2017 12:33:51 +0100 Subject: [PATCH] Rebase and make instances explicit --- core/src/main/scala/cats/data/Kleisli.scala | 16 +++++++++------- 1 file changed, 9 insertions(+), 7 deletions(-) diff --git a/core/src/main/scala/cats/data/Kleisli.scala b/core/src/main/scala/cats/data/Kleisli.scala index b878fb380e..ac674f42e4 100644 --- a/core/src/main/scala/cats/data/Kleisli.scala +++ b/core/src/main/scala/cats/data/Kleisli.scala @@ -63,7 +63,7 @@ final case class Kleisli[F[_], A, B](run: A => F[B]) { self => def apply(a: A): F[B] = run(a) } -object Kleisli extends KleisliInstances with KleisliFunctions +object Kleisli extends KleisliInstances with KleisliFunctions with KleisliExplicitInstances private[data] sealed trait KleisliFunctions { @@ -80,6 +80,14 @@ private[data] sealed trait KleisliFunctions { Kleisli(f andThen fa.run) } +private[data] sealed trait KleisliExplicitInstances { + def catsDataSemigroupKForKleisliAB[F[_], A](implicit S: SemigroupK[F]): SemigroupK[Kleisli[F, A, ?]] = + new KleisliABSemigroupK[F, A] { def F: SemigroupK[F] = S } + + def catsDataMonoidKForKleisliAB[F[_], A](implicit M: MonoidK[F]): MonoidK[Kleisli[F, A, ?]] = + new KleisliABMonoidK[F, A] { def F: MonoidK[F] = M } +} + private[data] sealed abstract class KleisliInstances extends KleisliInstances0 { implicit def catsDataMonoidForKleisli[F[_], A, B](implicit FB0: Monoid[F[B]]): Monoid[Kleisli[F, A, B]] = @@ -91,9 +99,6 @@ private[data] sealed abstract class KleisliInstances extends KleisliInstances0 { implicit val catsDataMonoidKForKleisliId: MonoidK[λ[α => Kleisli[Id, α, α]]] = catsDataMonoidKForKleisli[Id] - implicit def catsDataMonoidKForKleisliAB[F[_], A](implicit M: MonoidK[F]): MonoidK[Kleisli[F, A, ?]] = - new KleisliABMonoidK[F, A] { def F: MonoidK[F] = M } - implicit def catsDataArrowForKleisli[F[_]](implicit M: Monad[F]): Arrow[Kleisli[F, ?, ?]] = new KleisliArrow[F] { def F: Monad[F] = M } @@ -151,9 +156,6 @@ private[data] sealed abstract class KleisliInstances2 extends KleisliInstances3 implicit def catsDataSemigroupKForKleisli[F[_]](implicit FM: FlatMap[F]): SemigroupK[λ[α => Kleisli[F, α, α]]] = Compose[Kleisli[F, ?, ?]].algebraK - - implicit def catsDataSemigroupKForKleisliAB[F[_], A](implicit S: SemigroupK[F]): SemigroupK[Kleisli[F, A, ?]] = - new KleisliABSemigroupK[F, A] { def F: SemigroupK[F] = S } } private[data] sealed abstract class KleisliInstances3 extends KleisliInstances4 {