Kotlin arrow проверенный список ошибок - PullRequest
0 голосов
/ 06 июля 2019

Я хочу проверить несколько полей Person и вернуть проверенный объект со всеми связанными ошибками.Я использую kotlin версии 1.3.41 и стрелку 0.8.2.

У меня есть следующие классы:

class Person(id: Long, name: String)

sealed class PersonError {
    data class InvalidId(val field: String) : PersonError()
    data class InvalidName(val field: String) : PersonError()
}

Итак, когда я делаю свою проверку, я хочу вернуть следующий тип результата:

 Validated<List<PersonError>, Person>

Документация библиотеки стрелок на самом деле не помогла, так как я новичок в функциональном программировании.Пример в видео не компилируется с последней версией стрелки, он ожидает полугруппу:

    Validated.applicative<PersonError>(**SEMIGROUP**).map(vId, vName, { id, name
        Person(id, name)
    }).ev()

Другое использование, реализация Эммануэля Нхана, также не компилируется с последней версией kotlin: https://github.com/enhan/validation-case/blob/master/src/main/kotlin/eu/enhan/validation/kotlin/sample.kt

1 Ответ

0 голосов
/ 06 июля 2019

Решение от Эммауэля Нана, читайте его блог: https://www.enhan.eu/how-to-in-fp/

ValidatedNel.applicative<Nel<PersonError>>(Nel.semigroup<PersonError>())
        .map(id, name){
            val id = it.a
            val name = it.b
            Person(id, name)
        }.fix()

Выше результатов: Validated<Nel<PersonError>, Person>

...