Skip to content

Unsuccessful implicit search from tasty for existing Conversion to HK type.  #9296

Closed
@rssh

Description

@rssh

Minimized code

file M:

package a

import scala.quoted._
import scala.concurrent._

object M {

  inline def resolveInMacros[F[_],T](f: Future[T]):Conversion[Future[T],F[T]] =
     ${ resolveInMacrosImpl[F,T]('f) }
     
  def resolveInMacrosImpl[F[_]:Type,T:Type](f:Expr[Future[T]])(using qctx:QuoteContext):Expr[
                                                      Conversion[Future[T],F[T]]]={
     import qctx.tasty._                              
     val conversion = TypeIdent(Symbol.classSymbol("scala.Conversion")).tpe
     val inFuture = f.unseal.tpe.widen
     val tType = summon[quoted.Type[T]].unseal.tpe
     val fType = summon[quoted.Type[F]].unseal.tpe
     val inCB = AppliedType(fType,List(tType)).simplified
     val taConversion = AppliedType(conversion,List(inFuture, inCB))
     searchImplicit(taConversion) match
       case implSuccess: ImplicitSearchSuccess =>
               implSuccess.tree.seal.asInstanceOf[Expr[Conversion[Future[T],F[T]]]]
       case implFailure: ImplicitSearchFailure =>
               println(s"searchFailure: ${implFailure.explanation}")
               throw new RuntimeException("implicit search failed")
  }            
  
} 

file O.scala:

package a

import scala.language.implicitConversions
import scala.concurrent._

trait CB[T]

given myConversion[T] as Conversion[Future[T],CB[T]] = (ft => ???)

object O {

  def main(argvs: Array[String]): Unit = {
    val p = Promise[Int]()
    //val cbp = summon[Conversion[Future[Int],CB[Int]]] //works
    val cbp = M.resolveInMacros[CB,Int](p.future)
    val x = cbp(p.future)
  }

}

Output

[info] Compiling 2 Scala sources to /Users/rssh/tests/scala-misc/dotty/resolve-conversion/resolve-conversion/target/scala-0.26/classes ...
searchFailure: no implicit values were found that match type Conversion[scala.concurrent.Future[Int], a.CB[Int]]
[error] -- Error: /Users/rssh/tests/scala-misc/dotty/resolve-conversion/resolve-conversion/src/main/scala/a/O.scala:15:39 
[error] 15 |    val cbp = M.resolveInMacros[CB,Int](p.future)
[error]    |              ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
[error]    |              Exception occurred while executing macro expansion.
[error]    |              java.lang.RuntimeException: implicit search failed
[error]    |              	at a.M$.resolveInMacrosImpl(M.scala:26)
[error]    |
[error]    | This location contains code that was inlined from O.scala:15
[error] one error found
[error] (Compile / compileIncremental) Compilation failed

Expectation

It should compile. (sbt project is attached)
resolve-conversion.tar.gz

Metadata

Metadata

Assignees

No one assigned

    Labels

    Type

    No type

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions