(簡略化された)特性のインスタンスを具体化しようとしています
trait TC[F[_]] {
def apply[A](fa: F[A]): F[A]
}
Scala マクロの使用。したがって、マクロのシグネチャは次のとおりです。
def materialize[F[_]](c: Context)(
implicit fT: c.WeakTypeTag[F[_]]): c.Expr[TC[F]]
次の 2 つの理由から、型コンストラクターF[_]を型パラメーターに適用する必要があります。A
apply上記の署名を特定のFもの ( などFoo[A])に書き込むにはFoo[A]興味深い本体を指定するために型のメンバーを検査するにはapply
Aで使用できるメソッド型パラメーターに対応する型を作成する方法はありますappliedTypeか? applyメソッドとその型パラメーターAもツリーとして生成されているだけなので、私には難しいようです。
マクロ呼び出しへの追加引数として取得しようとしWeakTypeTag[TC[F]]ましたが、パラメーターの型を受け取りました
val paramT = wfg.tpe.member("apply": TermName).tpe.typeParams.head.tpe
しかし、paramTinを使用するとq"... def apply[$paramT] ..."、
java.lang.IllegalArgumentException: can't splice "A" as type parameter
したがって、これも解決策ではないようです。