Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/kotlin/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Validation Kotlin arrow kt在ValidatedNel和ValidatedNel上缺少平面图_Validation_Kotlin_Arrow Kt - Fatal编程技术网

Validation Kotlin arrow kt在ValidatedNel和ValidatedNel上缺少平面图

Validation Kotlin arrow kt在ValidatedNel和ValidatedNel上缺少平面图,validation,kotlin,arrow-kt,Validation,Kotlin,Arrow Kt,我对经过验证的arrow库类型非常熟悉 我不明白的是:为什么在使用Validated时没有flatMap或flatte 我来自“任何一个世界”,在那里这根本不是问题。但是我需要组合多个错误,因此我的核心验证类型最终是ValidatedNel 在我的代码示例中,我有一个函数,该函数生成一个或-我使用这些低级步骤来创建我需要的元素或一个错误 但要对所有累积的错误进行正确的验证,我迟早需要ValidatedNel类型 fun readData(): Either<Error, DataA>

我对经过验证的arrow库类型非常熟悉

我不明白的是:为什么在使用Validated时没有
flatMap
flatte

我来自“任何一个世界”,在那里这根本不是问题。但是我需要组合多个错误,因此我的核心验证类型最终是
ValidatedNel

在我的代码示例中,我有一个函数,该函数生成一个或-我使用这些低级步骤来创建我需要的元素或一个错误

但要对所有累积的错误进行正确的验证,我迟早需要
ValidatedNel
类型

fun readData(): Either<Error, DataA> = ...
fun DataA.validate(): ValidatedNel<Error, DataB> = ...

[...]
// here I need to fold to get my one Error to a Nel and to process the data to another type - this looks so ugly!
val validated = readData().fold( { it.invalidNel() }, DataA::validate)
fun readData():要么=。。。
fun DataA.validate():ValidatedNel=。。。
[...]
//在这里,我需要将我的一个错误折叠到一个Nel,并将数据处理到另一个类型-这看起来太难看了!
val validated=readData().fold({it.invalidNel()},DataA::validate)
相反,我想要的是:

fun readData(): ValidatedNel<Error, DataA> = ...

// ...
val validated = readData.flatMap(DataA::validate)
fun readData():ValidatedNel=。。。
// ...
val validated=readData.flatMap(DataA::validate)
我只是不明白为什么验证类型不支持像flatMap这样的简单操作


有人知道怎么做吗?

验证只需要
Applicative
Monoid
;它不需要
Monad
。或者,简单地说:验证数据的事情可以以任何顺序发生(
Applicative
),多个验证通常通过串联错误列表(
Monoid
)累积错误。验证通常不相互依赖,也不需要特定的计算序列(
Monad

依赖验证可能更好地表示为
链,然后在链完成后转换为
验证

Scala Cats库在这里有一个很好的解释: