Kotlin箭头验证的错误列表

时间:2019-07-06 18:08:57

标签: kotlin kotlin-coroutines arrow-kt

我想验证一个人的多个字段,并返回一个带有所有相关错误的Validated对象。我使用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()

另一种用法是Emmanuel Nhan的实现,也无法使用最新的kotlin版本:https://github.com/enhan/validation-case/blob/master/src/main/kotlin/eu/enhan/validation/kotlin/sample.kt

进行编译。

1 个答案:

答案 0 :(得分:0)

该解决方案来自Emmauel Nhan,请阅读他的博客: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>