Как сделать настраиваемые типы поднимаемыми в квазицитатах scala.meta
У меня есть следующий код, где x - это экземпляр настраиваемого типа. Код - это минимальный код, вырезанный из более крупного проекта.
import scala.meta._
object Testing {
def main(args: Array[String]): Unit = {
x = CustomInt(6, "Some extra data")
if (q"$x > 5") {
println("hello")
}
}
В другом файле у меня есть
import scala.reflect.runtime.universe._
case class CustomInt(val value: Int, val extra: String) {
... overloaded arithmetic operators
}
object CustomInt {
implicit def lift = Liftable[CustomInt] { i =>
q"_root_.customprimitives.CustomInt(${i.value}, ${i.extra})"
}
Scala дает мне следующую ошибку в статусе if:
type mismatch when unquoting;
found : customprimitives.CustomInt
required: scala.meta.Term
Я считаю, что проблема связана с использованием scala.meta.quasiquotes вместо scala.reflect. Если я попытаюсь использовать scala.meta в файле CustomInt, я получаю ошибки в функции подъема, так как у scala meta ее нет.
Как я могу сделать мой класс CustomInt поднимаемым в квазицитатах scala.meta?