ClassCastException при использовании понимания списка arrow-kt - PullRequest
0 голосов
/ 05 июня 2018

Я пытаюсь использовать списочное понимание с охранником в Котлине.Когда я запускаю следующий код, я получаю ClassCastException, где ни один из них не кажется релевантным.

data class CharWrapper(val value: Char)

@Test
fun `isolate bug`() {
    val wrappedChars = listOf(CharWrapper('Y'), CharWrapper('K'))
    val chars = listOf('Y')

    val result: List<Pair<Char, CharWrapper>> = ListK.monadFilter().bindingFilter {
        val wrappedChar = wrappedChars.k().bind()
        val char = chars.k().bindWithFilter { it == wrappedChar.value }
        char to wrappedChar
    }.fix().list

    assertThat(result, hasItem('Y' to CharWrapper('Y')))
}

Это трассировка стека:

java.lang.ClassCastException: ArrowTest$CharWrapper cannot be cast to arrow.mtl.typeclasses.MonadFilterContinuation

at ArrowTest$isolate bug$result$1.doResume(ArrowTest.kt:20)
at kotlin.coroutines.experimental.jvm.internal.CoroutineImpl.resume(CoroutineImpl.kt:54)
at arrow.typeclasses.MonadContinuation$bind$$inlined$suspendCoroutineOrReturn$lambda$1.invoke(MonadContinuations.kt:59)
at arrow.typeclasses.MonadContinuation$bind$$inlined$suspendCoroutineOrReturn$lambda$1.invoke(MonadContinuations.kt:14)

Строка 20 - это та, которая начинаетсяval result.

Как заставить это понимание работать?

Я использую Kotlin 1.2.41 и Arrow-Kt 0.7.2 на Java 1.8.0_131.

1 Ответ

0 голосов
/ 07 июня 2018

Согласно pacoito , это известная проблема со стрелкой, которая должна быть решена с помощью стрелки 0.7.4:

ClassCastException при использовании преобразователя состояния с ListK # 834

Обновление: это было исправлено в версии 0.7.3.

...