Как сделать настраиваемые типы поднимаемыми в квазицитатах 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?

0 ответов

Другие вопросы по тегам