У меня есть класс типа, который имеет только одну реализацию:
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)
}
...