@@ -19,7 +19,7 @@ package effect
1919package kernel
2020
2121import cats .data .State
22- import cats .effect .kernel .Ref .TransformedRef
22+ import cats .effect .kernel .Ref .{ TransformedRef , TransformedRef2 }
2323import cats .syntax .all ._
2424
2525/**
@@ -186,8 +186,12 @@ abstract class Ref[F[_], A] extends RefSource[F, A] with RefSink[F, A] {
186186 /**
187187 * Modify the context `F` using transformation `f`.
188188 */
189- def mapK [G [_]](f : F ~> G )(implicit F : Functor [F ]): Ref [G , A ] =
190- new TransformedRef (this , f)
189+ def mapK [G [_]](f : F ~> G )(implicit G : Functor [G ], dummy : DummyImplicit ): Ref [G , A ] =
190+ new TransformedRef2 (this , f)
191+
192+ @ deprecated(" Use mapK with Functor[G] constraint" , " 3.6.0" )
193+ def mapK [G [_]](f : F ~> G , F : Functor [F ]): Ref [G , A ] =
194+ new TransformedRef (this , f)(F )
191195}
192196
193197object Ref {
@@ -361,6 +365,27 @@ object Ref {
361365 def empty [A : Monoid ]: F [Ref [F , A ]] = of(Monoid [A ].empty)
362366 }
363367
368+ final private [kernel] class TransformedRef2 [F [_], G [_], A ](
369+ underlying : Ref [F , A ],
370+ trans : F ~> G )(
371+ implicit G : Functor [G ]
372+ ) extends Ref [G , A ] {
373+ override def get : G [A ] = trans(underlying.get)
374+ override def set (a : A ): G [Unit ] = trans(underlying.set(a))
375+ override def getAndSet (a : A ): G [A ] = trans(underlying.getAndSet(a))
376+ override def tryUpdate (f : A => A ): G [Boolean ] = trans(underlying.tryUpdate(f))
377+ override def tryModify [B ](f : A => (A , B )): G [Option [B ]] = trans(underlying.tryModify(f))
378+ override def update (f : A => A ): G [Unit ] = trans(underlying.update(f))
379+ override def modify [B ](f : A => (A , B )): G [B ] = trans(underlying.modify(f))
380+ override def tryModifyState [B ](state : State [A , B ]): G [Option [B ]] =
381+ trans(underlying.tryModifyState(state))
382+ override def modifyState [B ](state : State [A , B ]): G [B ] = trans(underlying.modifyState(state))
383+
384+ override def access : G [(A , A => G [Boolean ])] =
385+ G .compose[(A , * )].compose[A => * ].map(trans(underlying.access))(trans(_))
386+ }
387+
388+ @ deprecated(" Use TransformedRef2 with Functor[G] constraint" , " 3.6.0" )
364389 final private [kernel] class TransformedRef [F [_], G [_], A ](
365390 underlying : Ref [F , A ],
366391 trans : F ~> G )(
0 commit comments