Usando anexos com macros no Scala 2.10

Atualizar: Eu suspeito que o que eu quero pode não ser possível, e eu escrevi um post no blog com o meu raciocínio (e algumas alternativas)Aqui. Eu ficaria muito feliz em saber que estou errado.

Suponha que eu queira criar uma instância de uma característica usando um método de fábrica com uma implementação de macro. Esse método terá como argumento um caminho para um recurso que a macro lerá e analisará (em tempo de compilação) em um mapa de strings para strings.

Essa parte é bastante simples. Agora, suponha que eu queira associar o mapa resultante à instância que estou criando para que eu possa usá-lo nas chamadas de macro subsequentes que envolvam essa instância.

Eu crucialmentenão deseja que o mapa seja um membro da instância ou exista em qualquer forma em tempo de execução. Eu também não quero analisar o mesmo recurso mais de uma vez. Aqui está um esboço do tipo de coisa que estou almejando:

import scala.language.experimental.macros
import scala.reflect.macros.Context

trait Foo {
  def lookup(key: String): String = macro Foo.lookup_impl
}

object Foo {
  def parseResource(path: String): Map[String, String] = ???

  def apply(path: String): Foo = macro apply_impl

  def apply_impl(c: Context)(path: c.Expr[String]): c.Expr[Foo] = {
    import c.universe._

    val m = path.tree match {
      case Literal(Constant(s: String)) => parseResource(s)
    }

    val tree = reify(new Foo {}).tree
    // Somehow associate the map with this tree here.
    c.Expr(tree)
  }

  def lookup_impl(c: Context)(key: c.Expr[String]): c.Expr[String] =
    /* Somehow read off the map and look up this key. */ ???
}

Este parece ser o tipo de coisa queanexos são projetados para ajudar (graças aEugene Burmako parao ponteiro), e eu tenho uma implementação baseada em anexo que me permite escrever o seguinte:

Foo("whatever.txt").lookup("x")

Ondeapply_impl anexa o mapa à árvore elookup_impl lê esse anexo na mesma árvore, que ele vê como seu prefixo. Infelizmente, isso é mais ou menos inútil, já que não funciona nofoo.lookup("x") caso, onde a árvore de prefixo é apenas a variávelfoo.

(Observe que no meu caso de uso realFoo estendeDynamic, e estou tentando dar uma implementação macro paraselectDynamic ao invés delookup, mas isso não deve ser relevante aqui - estou interessado no caso geral.)

Existe alguma maneira que eu possa usar anexos para conseguir o que eu quero? Existe alguma outra abordagem que seria mais apropriada?

questionAnswers(1)

yourAnswerToTheQuestion