В scala, почему компилятор не объясняет сообщение об ошибке «расходящееся неявное раскрытие», даже если используется «-Xlog-implits»? - PullRequest
1 голос
/ 17 июня 2020

У меня есть класс типа, который имеет только одну реализацию:

class ConstDomain[N1, N2](
    val a1: Const[N1],
    val a2: Const[N2]
) {

  ...
}

object ConstDomain {

  implicit def summon[N1, N2](
      implicit
      a1: Const[N1],
      a2: Const[N2]
  ): ConstDomain[N1, N2] = new ConstDomain[N1, N2](a1, a2)
}

Затем функция summon проверяется в довольно простом случае:

          val c1 = implicitly[Const[a.SS + b.SS]] // works properly
          val c2 = implicitly[Const[c.SS]] // works properly

          ConstDomain.summon[a.SS + b.SS, c.SS]
// throws the following error:
Op2Spec.scala:105: diverging implicit expansion for type edu.umontreal.kotlingrad.shapesafe.macro.arity.Proof.Const[a.SS + b.SS]
starting with value a
one error found

this Кажется, что ошибка указывает на то, что существует несколько неявных реализаций, которые могут быть вызваны для выполнения параметра a1, но не сообщает, где именно находятся эти реализации. Итак, как мне попросить компилятор объяснить это? Мой проект скомпилирован с использованием gradle kts, с уже включенной опцией '-Xlog-implits' и подтвержденной работоспособностью:

    tasks {
        val jvmTarget = JavaVersion.VERSION_1_8.toString()

        withType<ScalaCompile> {

            scalaCompileOptions.loggingLevel = "info"

            scalaCompileOptions.additionalParameters = arrayListOf(
                    "-encoding", "utf8",
                    "-unchecked",
                    "-deprecation",
                    "-feature",
                    "-Xfatal-warnings",
                    "-Xlog-implicits"
            )

            println(this.name)
            println(scalaCompileOptions.additionalParameters)
        }
...
...