Closed
Description
Compiler version
3.2.1
Minimized code
macros.scala
//> using scala "3.2.1"
import scala.quoted._
import scala.annotation.experimental
object macros {
trait Suspend[A[_[_]]] {
def sus[F[_]](fa: F[A[F]]): A[F]
}
inline def mkSuspend[Alg[_[_]]]: Suspend[Alg] = ${ mkSuspendImpl[Alg] }
@experimental
def mkSuspendImpl[Alg[_[_]]: Type](using Quotes): Expr[Suspend[Alg]] = {
import quotes.reflect._
def instance[F[_]: Type](fExpr: Expr[F[Alg[F]]]): Expr[Alg[F]] = {
val cl = Symbol.newClass(
Symbol.spliceOwner,
"$anon",
parents = List(
TypeRepr.of[Object],
TypeRepr.of[Alg].appliedTo(TypeRepr.of[F]),
),
decls = _ => Nil,
selfType = None,
)
val tree = New(
TypeTree.of[Alg]
)
Block(
List(
ClassDef(cl, Nil, Nil)
),
New(
TypeTree.ref(cl)
),
).asExprOf[Alg[F]]
}
'{
new Suspend[Alg] {
def sus[F[_]](fa: F[Alg[F]]): Alg[F] = ${ instance('fa) }
}
}
}
}
main.scala
//> using scala "3.2.1"
import macros.Suspend
object demo extends App {
trait MyAlg[F[_]] {
def hello(s: String): F[Int] = ???
}
macros.mkSuspend[MyAlg]
}
Output (click arrow to expand)
Error: Unexpected New(... with ... {...}/TypeTree[TypeRef(NoPrefix,class demo$$anon$2)]) reached GenBCode.
Call was genLoad(New(TypeTree[TypeRef(NoPrefix,class demo$$anon$2)]),Ldemo$MyAlg;)
Error compiling project (Scala 3.2.1, JVM)
Error: Unexpected error when compiling project_f0e8bc45bf: 'Unexpected New(... with ... {...}/TypeTree[TypeRef(NoPrefix,class demo$$anon$2)]) reached GenBCode.
Call was genLoad(New(TypeTree[TypeRef(NoPrefix,class demo$$anon$2)]),Ldemo$MyAlg;)'
Compilation failed