【问题标题】:Kotlin arrow validated list of errorsKotlin 箭头验证的错误列表
【发布时间】:2019-07-06 18:08:57
【问题描述】:

我想验证一个 Person 的多个字段并返回一个包含所有相关错误的 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

【问题讨论】:

    标签: kotlin kotlin-coroutines arrow-kt


    【解决方案1】:

    解决方案来自 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&lt;Nel&lt;PersonError&gt;, Person&gt;

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2012-11-13
      • 1970-01-01
      • 1970-01-01
      • 2022-10-19
      • 1970-01-01
      • 2015-05-04
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多