Skip to content

Regression in armanbilge/schrodinger for implicit search #20344

Closed
@WojciechMazur

Description

@WojciechMazur

Based on OpenCB failure in armanbilge/schrodinger - builds logs

Compiler version

Last good release: 3.5.0-RC1-bin-20240429-e2c456f-NIGHTLY
First bad release: 3.5.0-RC1-bin-20240501-e6bc130-NIGHTLY
Bisect points to 0890e7a

Minimized code

trait Monad[F[_]] extends Invariant[F]

trait Invariant[F[_]]
object Invariant:
  implicit def catsInstancesForList: Monad[List] = ???
  implicit def catsInstancesForVector: Monad[Vector] = ???
  
trait Shrink[T]
object Shrink extends ShrinkLowPriorityImplicits:
  trait Buildable[T,C] 
  implicit def shrinkContainer[C[_],T](implicit v: C[T] => Traversable[T], s: Shrink[T], b: Buildable[T,C[T]]): Shrink[C[T]] = ???
trait ShrinkLowPriorityImplicits:
  implicit def shrinkAny[T]: Shrink[T] = ???
  
trait Distribution[F[_], -P, X] extends (P => F[X])
type GenBeta[A, B, X] = [F[_]] =>> Distribution[F, Beta.Params[A, B], X]
type Beta[R] = [F[_]] =>> GenBeta[R, R, R][F]

object Beta:
  trait Params[+A, +B]
trait BetaInstances:
  given schrodingerRandomBetaForDouble[F[_]: Monad]: Beta[Double][F] = ???

object all extends BetaInstances

@main def Test = 
  import all.given
  summon[Shrink[Beta.Params[Double, Double]]]

Output

[error] No best given instance of type Shrink[Beta.Params[Double, Double]] was found for parameter x of method summon in object Predef.
[error] I found:
[error] 
[error]     Shrink.shrinkContainer[[B] =>> Beta.Params[Double, B], Double](
[error]       all.schrodingerRandomBetaForDouble[F](
[error]         /* ambiguous: both method catsInstancesForList in object Invariant and method catsInstancesForVector in object Invariant match type Monad[F] */
[error]           summon[Monad[F]]
[error]       ),
[error]     Shrink.shrinkAny[Double],
[error]       /* missing */summon[Shrink.Buildable[Double, Beta.Params[Double, Double]]])
[error] 
[error] But both method catsInstancesForList in object Invariant and method catsInstancesForVector in object Invariant match type Monad[F].
[error]   summon[Shrink[Beta.Params[Double, Double]]]
[error]                                              ^
Error compiling project (Scala 3.5.0-RC1-bin-20240502-05354ba-NIGHTLY, JVM (17))

Expectation

Should compile

Metadata

Metadata

Assignees

No one assigned

    Labels

    area:implicitsrelated to implicitsitype:bugregressionThis worked in a previous version but doesn't anymore

    Type

    No type

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions