PS

Type macro風のmacro

型を返すmacroがボツになり、

type t = typeOf("hello")

と書けなくなったので替わりになるもののアイデアメモ。*1

その1

valを経由して

val t = typeOf("hello")
type t = t.unwrap

とする。

その2

Annotation macroを使って

@typeOf
val t = "hello"

としてtype t = Stringに変換する。 "hello"の部分が同じスコープ内のIdentの場合、型にアクセスできなかった。

気になる点

型のTreeと値のTreeを静的に区別できないらしく、

def impl(x: c.Tree): c.Tree = TypeTree(x.tpe)

のように型のTreeを返してもコンパイルできてしまう。 使ったらエラー。でも他のマクロには渡せる。

*1:この式はScalaのシンタックスとしてありえないので、ボツになるのも理解できる