Skip to content

Commit

Permalink
Add 'FunctionK' instance for converting TaskR to cats.IO #791
Browse files Browse the repository at this point in the history
  • Loading branch information
VladKopanev committed Apr 26, 2019
1 parent 1a49bef commit 37d17db
Showing 1 changed file with 8 additions and 2 deletions.
10 changes: 8 additions & 2 deletions interop-cats/jvm/src/main/scala/scalaz/zio/interop/catsjvm.scala
Original file line number Diff line number Diff line change
Expand Up @@ -17,6 +17,7 @@
package scalaz.zio
package interop

import cats.arrow.FunctionK
import cats.effect.{ Concurrent, ContextShift, ExitCase }
import cats.{ effect, _ }
import scalaz.zio.{ App, clock => zioClock, ZIO }
Expand Down Expand Up @@ -73,8 +74,8 @@ abstract class CatsInstances extends CatsInstances1 {

implicit def taskEffectInstances[R](
implicit runtime: Runtime[R]
): effect.ConcurrentEffect[TaskR[R, ?]] with SemigroupK[TaskR[R, ?]] =
new CatsConcurrentEffect[R](runtime)
): effect.ConcurrentEffect[TaskR[R, ?]] with SemigroupK[TaskR[R, ?]] with FunctionK[TaskR[R, ?], effect.IO] =
new CatsConcurrentEffect[R](runtime) with CatsFunctionK[R]

}

Expand Down Expand Up @@ -313,3 +314,8 @@ private class CatsParApplicative[R, E] extends Applicative[ParIO[R, E, ?]] {
final override def unit: ParIO[R, E, Unit] =
Par(ZIO.unit)
}

private trait CatsFunctionK[R] extends FunctionK[TaskR[R, ?], effect.IO] {
this: effect.ConcurrentEffect[TaskR[R, ?]] =>
override def apply[A](fa: TaskR[R, A]): effect.IO[A] = toIO(fa)
}

0 comments on commit 37d17db

Please sign in to comment.