Scala 3 Macro: Create instance of a type

I have a macro function that takes a type T and should generate an instance of type T. So it looks something like this:

  def clientImpl[T: Type](using Quotes): Expr[T]

Now I would like to create a new object of type T. In scala 2 macros, I wrote this:

 new ${weakTypeTag.tpe.finalResultType} {

How could I do the same in scala 3 macros?
I have failed in creating the tree myself with TypeDef or ClassDef.

1 Like

Where you replace a with T should get you what you want.

Thank you, that is useful snippet! Though, I realize, my question might be a bit unclear.
The type I have is a trait and not a class - so there sadly is no primary constructor. I want to create an anonymous class, like:

new Trait {
  def foo = 1

Which could be translated to:

class Anon extends Trait {
  def foo = 1
new Anon

As far as I’m aware, extending or modifying classes/traits/etc through compile time reflection is currently unsupported in Scala 3. At least, that’s what I was told when I last inquired about it (about a month ago). I think there was a ticket on the dotty repo to add support for such though.

If I find a way, I’ll let you know, and I hope you find a way, cause it would be helpful for me.

Good hint with the issue! These seem to be relevant: and

I have answered there with the workaround I have tried in the current API.