Type in expressions to have them evaluated. Type :help for more information. scala> scala> import language.experimental.macros import language.experimental.macros scala> import scala.reflect.macros.{Context => Ctx} import scala.reflect.macros.{Context=>Ctx} scala> scala> object Impls { def foo(c: Ctx)(x: c.Expr[Int]) = { import c.universe._ val body = Apply(Select(x.tree, newTermName("$plus")), List(Literal(Constant(1)))) c.Expr[Int](body) } def bar(c: Ctx)(x: c.Expr[Int]) = { import c.universe._ val body = Apply(Select(x.tree, newTermName("$plus")), List(Literal(Constant(2)))) c.Expr[Int](body) } def quux(c: Ctx)(x: c.Expr[Int]) = { import c.universe._ val body = Apply(Select(x.tree, newTermName("$plus")), List(Literal(Constant(3)))) c.Expr[Int](body) } } defined module Impls scala> object Macros { object Shmacros { def foo(x: Int): Int = macro Impls.foo } def bar(x: Int): Int = macro Impls.bar }; class Macros { def quux(x: Int): Int = macro Impls.quux } defined module Macros defined class Macros scala> scala> import Macros.Shmacros._ import Macros.Shmacros._ scala> println(foo(2) + Macros.bar(2) * new Macros().quux(4)) 31 scala>