Я разрабатываю аннотацию макроса scala, которая обогащает объекты различными определениями (см. макрос формы воспроизведения). Среди прочего я хочу, чтобы объект содержал псевдоним типа
type WFS = FS[_, _, _, _]
для различного количества подстановочных аргументов.
Я уже пытался извлечь значение одного типа подстановочного знака с помощью
q"type WFS = FS[_]" match { q"type WFS = FS[$t]" => t }
и надеялся использовать извлеченное значение в списке параметров типа (например, q"type WFS = FS[..$tplist]"). Тем не менее, приведенное выше утверждение приводит к ошибке:
scala> q"type WFS = FS[_]" match { case q"type WFS = FS[$t]" => t }
scala.MatchError: type WFS = FS[_$1] forSome {
<synthetic> type _$1 >: _root_.scala.Nothing <: _root_.scala.Any
} (of class scala.reflect.internal.Trees$TypeDef)
at .<init>(<console>:15)
at .<clinit>(<console>)
at .<init>(<console>:7)
at .<clinit>(<console>)
at $print(<console>)
at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:57)
at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43
Есть ли другой, может быть, более простой способ построения нужного дерева?