diff --git a/core/shared/src/test/scala/cats/effect/ImplicitPriorityPlayground.scala b/core/shared/src/test/scala/cats/effect/ImplicitPriorityPlayground.scala new file mode 100644 index 0000000000..9f475e1846 --- /dev/null +++ b/core/shared/src/test/scala/cats/effect/ImplicitPriorityPlayground.scala @@ -0,0 +1,31 @@ +/* + * Copyright 2020-2025 Typelevel + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +package cats.effect.std + +import cats.data._ +import cats.effect._ + +import java.util.UUID + +object ImplicitPriorityPlayground { + + def foo[F[_]: UUIDGen]: F[UUID] = UUIDGen[F].randomUUID + + SecureRandom.javaSecuritySecureRandom[IO].flatMap { implicit random => + foo[Kleisli[IO, String, *]].run("hello world") + } +} diff --git a/std/js-native/src/main/scala/cats/effect/std/UUIDGenCompanionPlatform.scala b/std/js-native/src/main/scala/cats/effect/std/UUIDGenCompanionPlatform.scala index 6bc607c87b..569428bd3b 100644 --- a/std/js-native/src/main/scala/cats/effect/std/UUIDGenCompanionPlatform.scala +++ b/std/js-native/src/main/scala/cats/effect/std/UUIDGenCompanionPlatform.scala @@ -30,7 +30,7 @@ package cats.effect.std import cats.effect.kernel.Sync -private[std] trait UUIDGenCompanionPlatform extends UUIDGenCompanionPlatformLowPriority +private[std] trait UUIDGenCompanionPlatform extends UUIDGenCompanionPlatformMediumPriority private[std] trait UUIDGenCompanionPlatformLowPriority { diff --git a/std/jvm/src/main/scala/cats/effect/std/UUIDGenCompanionPlatform.scala b/std/jvm/src/main/scala/cats/effect/std/UUIDGenCompanionPlatform.scala index 0b513d7e7c..28c26d60e6 100644 --- a/std/jvm/src/main/scala/cats/effect/std/UUIDGenCompanionPlatform.scala +++ b/std/jvm/src/main/scala/cats/effect/std/UUIDGenCompanionPlatform.scala @@ -20,7 +20,7 @@ import cats.effect.kernel.Sync import java.util.UUID -private[std] trait UUIDGenCompanionPlatform extends UUIDGenCompanionPlatformLowPriority +private[std] trait UUIDGenCompanionPlatform extends UUIDGenCompanionPlatformMediumPriority private[std] trait UUIDGenCompanionPlatformLowPriority { diff --git a/std/shared/src/main/scala/cats/effect/std/UUIDGen.scala b/std/shared/src/main/scala/cats/effect/std/UUIDGen.scala index 0bf66f156e..bf806479a2 100644 --- a/std/shared/src/main/scala/cats/effect/std/UUIDGen.scala +++ b/std/shared/src/main/scala/cats/effect/std/UUIDGen.scala @@ -26,7 +26,7 @@ import cats.data.{ OptionT, WriterT } -import cats.implicits._ +import cats.syntax.all._ import java.util.UUID @@ -118,6 +118,16 @@ object UUIDGen extends UUIDGenCompanionPlatform { ]: UUIDGen[IndexedReaderWriterStateT[F, E, L, S, S, *]] = UUIDGen[F].mapK(IndexedReaderWriterStateT.liftK) + private[std] final class TranslatedUUIDGen[F[_], G[_]](self: UUIDGen[F])(f: F ~> G) + extends UUIDGen[G] { + override def randomUUID: G[UUID] = + f(self.randomUUID) + + } +} + +private[std] trait UUIDGenCompanionPlatformMediumPriority + extends UUIDGenCompanionPlatformLowPriority { implicit def fromSecureRandom[F[_]: Functor: SecureRandom]: UUIDGen[F] = new UUIDGen[F] { override final val randomUUID: F[UUID] = @@ -137,11 +147,4 @@ object UUIDGen extends UUIDGenCompanionPlatform { new UUID(msb, lsb) } } - - private[std] final class TranslatedUUIDGen[F[_], G[_]](self: UUIDGen[F])(f: F ~> G) - extends UUIDGen[G] { - override def randomUUID: G[UUID] = - f(self.randomUUID) - - } }