blob: 627d20dd63fe1c4cee58c1313ddc73231597010b (
plain) (
blame)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
|
import scala.language.experimental.macros
import scala.reflect.macros.blackbox.Context
class MacroErasure {
def app(f: Any => Any, x: Any): Any = macro MacroErasure.appMacro
def app[A](f: A => Any, x: Any): Any = macro MacroErasure.appMacroA[A]
}
object MacroErasure {
def appMacro(c: Context)(
f: c.Expr[Any => Any], x: c.Expr[Any]): c.Expr[Any] = {
import c.universe._
c.Expr(q"$f($x)")
}
def appMacroA[A](c: Context)(f: c.Expr[A => Any], x: c.Expr[Any])(
implicit tt: c.WeakTypeTag[A]): c.Expr[Any] = {
import c.universe._
c.Expr(q"$f[${tt.tpe}]($x)")
}
}
|