私は次のように書こうとしています:
import scala.reflect.runtime.universe._
val value: Tree = /* some AST */
val tpe = typeOf(value) // This should be the result type of the AST.
// This is pseudocode. What should
// actually go on this line?
q"""
type U = $tpe
val v: U = $value
"""
value
ASTで表される値の型をキャプチャして、tpe
に割り当てる必要がありU
ます。どうやってこれを行うのですか?
編集:型注釈を付けvalue
て準引用符で照合することは、ここではオプションではありません。ユースケースは、 のような複雑な型を持つ Shapeless の拡張可能なレコードです。また、AST はプログラムによって生成され、リテラルではありません。String with labelled.KeyTag[1, String] :: Long with labelled.KeyTag[three, Long] :: HNil
val ls = (1 ->> "two") :: ("three" ->> 4L) :: HNil
value