Поскольку недавно был выпущен Kotlin 2.0.0-RC1, я решил подготовить свою кодовую базу к обновлению до 2.0 и столкнулся с неожиданной проблемой компиляции в местах, где использовались «приемники контекста».
Рассмотрим следующий простой код, использующий функцию «приемники контекста»:
interface User
object UserNotFound
context(Raise<UserNotFound>)
fun findUser(): User = raise(UserNotFound)
fun main() {
either {
findUser()
}.onLeft {
println("Uh-oh, $it")
}
}
Получатели контекста должны быть явно включены, поэтому моя конфигурация сборки:
import org.jetbrains.kotlin.gradle.tasks.KotlinCompile
plugins {
kotlin("jvm") version "2.0.0-Beta2"
}
repositories {
mavenCentral()
}
dependencies {
implementation(platform("io.arrow-kt:arrow-stack:1.2.4"))
implementation("io.arrow-kt:arrow-core")
}
tasks.withType<KotlinCompile>().configureEach {
compilerOptions {
freeCompilerArgs.add("-Xcontext-receivers") // <--- enabling context receivers explicitly
}
}
Как только я обновляюсь с Kotlin 2.0.0-Beta2
до 2.0.0-Beta3
, сборка завершается со следующей ошибкой:
e: .../src/main/kotlin/org/example/Library.kt:13:5 Недостаточно информации, чтобы определить аргумент типа для «Ошибки».
Могу ли я что-нибудь изменить в своей конфигурации, чтобы исправить компиляцию, или это какая-то проблема совместимости на стороне Kotlin или Arrow?
Это была ошибка KT-67699. Должно быть исправлено в версии 2.0.0-RC3.