Skip to content

Commit c6dc38f

Browse files
committed
Add derivation of LiftIO from LiftValue
1 parent 083a635 commit c6dc38f

File tree

2 files changed

+26
-1
lines changed

2 files changed

+26
-1
lines changed

core/shared/src/main/scala/cats/effect/LiftIO.scala

Lines changed: 9 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -19,12 +19,13 @@ package cats.effect
1919
import cats.{~>, Applicative, FlatMap, Functor}
2020
import cats.data.{ContT, EitherT, IorT, Kleisli, OptionT, ReaderWriterStateT, StateT, WriterT}
2121
import cats.kernel.Monoid
22+
import cats.mtl.LiftValue
2223

2324
trait LiftIO[F[_]] {
2425
def liftIO[A](ioa: IO[A]): F[A]
2526
}
2627

27-
object LiftIO {
28+
object LiftIO extends LiftIOInstances0 {
2829

2930
def apply[F[_]](implicit F: LiftIO[F]): F.type = F
3031

@@ -155,3 +156,10 @@ object LiftIO {
155156
Resource.eval(F0.liftIO(ioa))
156157
}
157158
}
159+
160+
private[effect] sealed trait LiftIOInstances0 {
161+
implicit def catsEffectLiftIOFromLiftValue[F[_]](implicit lift: LiftValue[IO, F]): LiftIO[F] =
162+
new LiftIO[F] {
163+
override def liftIO[A](ioa: IO[A]): F[A] = lift(ioa)
164+
}
165+
}
Lines changed: 17 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,17 @@
1+
package cats.effect
2+
3+
import cats.Applicative
4+
import cats.data.IdT
5+
import cats.mtl.LiftValue
6+
7+
class LiftIOSuite extends BaseSuite {
8+
ticked("LiftIO from LiftValue") { implicit ticker =>
9+
implicit val lift: LiftValue[IO, IdT[IO, *]] =
10+
new LiftValue[IO, IdT[IO, *]] {
11+
def applicativeF: Applicative[IO] = implicitly
12+
def applicativeG: Applicative[IdT[IO, *]] = implicitly
13+
def apply[A](fa: IO[A]): IdT[IO, A] = IdT(fa)
14+
}
15+
assertCompleteAs(IO.pure(42).to[IdT[IO, *]].value, 42)
16+
}
17+
}

0 commit comments

Comments
 (0)