Как найти неявную функцию (и) с помощью метапрограммирования Scala?
В языке scala неявная область видимости класса стирается во время выполнения, например, если определяется:
case class A(i: Int)
object A {
implicit def toInt(a: A) = a.i
}
Тогда для массива:
val arr = Array[Any](A(1), 2)
невозможно написать:
arr.map(_ + 3)
как тип A и его неявная область видимости удаляется после вставки в массив [Any].
Это делает невозможным применение некоторых шаблонов проектирования (например, поиск класса типов) во время выполнения (когда информация о типе все еще частично доступна). В моем случае я хотел бы написать вышеупомянутую программу без явного указания A в сопоставлении типов (так как в реальном случае количество классов, подобных A, может быть бесчисленным). Может ли какой-либо пакет метапрограммирования scala (предпочтительно scalameta) сделать это в одном проекте? Что я должен сделать, чтобы указать байт-коду времени выполнения Java "искать неявный класс выполнения, если он не найден, сделать что-то еще"?