Реализуйте макрос в суперклассе и раскройте его в подклассах

Я хочу сделать что-то вроде этого:

trait Endo {
  def apply[T](x: T): T
}

trait SuperType {
  def endoMap(f: Endo): SuperType = macro SuperTypeMacro.endoMapImpl
}

case class Foo(x: Int) extends SuperType {
  // endoMapImpl expands to
  // Foo(f(x))
}

case class Bar(x: Int, y: Boolean) extends SuperType {
  // endoMapImpl expands to
  // Bar(f(x), f(y))
}

В идеале единственное, что мне нужно написать, это extends SuperType, Является ли это возможным? Если нет, то я считаю, что макроаннотации должны позволять это; я прав?

1 ответ

Решение

Я думаю, что вы ищете c.prefix, который содержит получатель текущего вызова метода макроса. Как только вы овладеете им, вы можете перейти на его тип.

Другие вопросы по тегам