Skip to content

Commit 0440384

Browse files
author
Odomontois
authored
Merge pull request #462 from catostrophe/zio-fix-withrun
Fix instances for layered ZIO
2 parents f7218f1 + d8a847b commit 0440384

File tree

5 files changed

+30
-12
lines changed

5 files changed

+30
-12
lines changed

build.sbt

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -400,5 +400,5 @@ lazy val publishSettings = Seq(
400400
)
401401
)
402402

403-
addCommandAlias("fmt", "all scalafmtSbt scalafmt test:scalafmt")
404-
addCommandAlias("checkfmt", "all scalafmtSbtCheck scalafmtCheck test:scalafmtCheck")
403+
addCommandAlias("fmt", "all tofu/scalafmtSbt tofu/scalafmtAll")
404+
addCommandAlias("checkfmt", "all tofu/scalafmtSbtCheck tofu/scalafmtCheckAll")

zio/core/src/main/scala/tofu/zioInstances/ZioInstances.scala

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -61,7 +61,7 @@ private[zioInstances] class ZioInstances {
6161
final def zioTofuWithRunInstance[R, E]: ZioTofuWithRunInstance[R, E] =
6262
zioTofuWithRunInstanceAny.asInstanceOf[ZioTofuWithRunInstance[R, E]]
6363

64-
final def zioTofuUnliftHasInstance[R <: Has[_], E, C: Tag]: ZioTofuUnliftHasInstance[R, E, C] =
64+
final def zioTofuUnliftHasInstance[R <: Has[_], E, C: Tag]: ZioTofuUnliftHasInstance[R, R with Has[C], E, C] =
6565
new ZioTofuUnliftHasInstance
6666

6767
/** a shortcut for simplifying WithLocal instance definition,

zio/core/src/main/scala/tofu/zioInstances/ZioTofuInstance.scala

Lines changed: 9 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -140,19 +140,21 @@ class RioTofuUnsafeExecFutureInstance[R] extends UnsafeExecFuture[RIO[R, *]] {
140140
def unlift: RIO[R, RIO[R, *] ~> Future] = RIO.runtime[R].map(r => funK(r.unsafeRunToFuture(_)))
141141
}
142142

143-
final class ZioTofuUnliftHasInstance[R <: Has[_], E, C: Tag]
144-
extends WithRun[ZIO[R with Has[C], E, *], ZIO[R, E, *], C] {
145-
override def functor: Functor[ZIO[R with Has[C], E, *]] = zio.interop.catz.monadErrorInstance
143+
final class ZioTofuUnliftHasInstance[R <: Has[_], R1 <: Has[_], E, C: Tag](implicit
144+
ev1: R1 <:< R with Has[C],
145+
ev2: R with Has[C] <:< R1
146+
) extends WithRun[ZIO[R1, E, *], ZIO[R, E, *], C] {
147+
override def functor: Functor[ZIO[R1, E, *]] = zio.interop.catz.monadErrorInstance
146148

147-
override def runContext[A](fa: ZIO[R with Has[C], E, A])(ctx: C): ZIO[R, E, A] =
149+
override def runContext[A](fa: ZIO[R1, E, A])(ctx: C): ZIO[R, E, A] =
148150
fa.provideSome((_: R) add ctx)
149151

150-
override def context: ZIO[R with Has[C], E, C] = ZIO.access(_.get[C])
152+
override def context: ZIO[R1, E, C] = ZIO.access(_.get[C])
151153

152-
override def local[A](fa: ZIO[R with Has[C], E, A])(project: C => C): ZIO[R with Has[C], E, A] =
154+
override def local[A](fa: ZIO[R1, E, A])(project: C => C): ZIO[R1, E, A] =
153155
fa.provideSome(r => r add project(r.get[C]))
154156

155-
override def lift[A](fa: ZIO[R, E, A]): ZIO[R with Has[C], E, A] = fa
157+
override def lift[A](fa: ZIO[R, E, A]): ZIO[R1, E, A] = fa.provideSome(ev1)
156158
}
157159

158160
class ZioTofuBlockingInstance[R <: Blocking, E] extends BlockExec[ZIO[R, E, *]] {

zio/core/src/main/scala/tofu/zioInstances/implicits.scala

Lines changed: 5 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -47,6 +47,9 @@ private[zioInstances] trait ZioTofuImplicits2 extends ZioTofuImplicits3 {
4747
}
4848

4949
private[zioInstances] trait ZioTofuImplicits3 {
50-
@inline final implicit def zioTofuUnliftHasImplicit[R <: Has[_], E, C: Tag]: ZioTofuUnliftHasInstance[R, E, C] =
51-
zioTofuUnliftHasInstance
50+
@inline final implicit def zioTofuUnliftHasImplicit[R <: Has[_], R1 <: Has[_], E, C: Tag](implicit
51+
ev1: R1 <:< R with Has[C],
52+
ev2: R with Has[C] <:< R1
53+
): ZioTofuUnliftHasInstance[R, R1, E, C] =
54+
new ZioTofuUnliftHasInstance
5255
}

zio/core/src/test/scala/tofu/zioInstances/ZioInstancesSuite.scala

Lines changed: 13 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -6,6 +6,8 @@ import tofu.zioInstances.implicits._
66
import tofu._
77
import zio._
88

9+
import scala.annotation.nowarn
10+
911
object ZioInstancesSuite {
1012

1113
def summonZioInstances[E1, E2: * Extract E1, R1, R2: * Contains R1](): Unit = {
@@ -40,6 +42,17 @@ object ZioInstancesSuite {
4042
()
4143
}
4244

45+
@nowarn("cat=unused-locals")
46+
def summonZioInstances[E, Ctx: Tag](): Unit = {
47+
type ZContext = Has[Ctx]
48+
49+
implicitly[WithRun[ZIO[ZEnv with ZContext, E, *], ZIO[ZEnv, E, *], Ctx]]
50+
implicitly[WithRun[ZIO[ZContext with ZEnv, E, *], ZIO[ZEnv, E, *], Ctx]]
51+
implicitly[WithLocal[ZIO[ZEnv with ZContext, E, *], Ctx]]
52+
implicitly[WithLocal[ZIO[ZContext with ZEnv, E, *], Ctx]]
53+
()
54+
}
55+
4356
def taskAmbiguity: Any = {
4457
import cats.effect.Sync
4558
import tofu.Raise

0 commit comments

Comments
 (0)