箭头 kotlin 验证 zip 类型不匹配或找不到正确的方法重载



我有两个验证方法:

fun a(s:String): Validated<Error, SomeEnum> {
}
fun b(s:String): Validated<Error, OtherEnum> {
}

我想压缩这两个验证方法并做这样的事情:

a(s1).zip(b(s2) { (r1, r2) -> Pair(r1, r2) }

但是Kotlin在zip参数列表中抱怨类型不匹配:

要求:Semigroup

发现:Validated<Error,>

对于传递的lambda有这样的错误信息:

Required: Validated<TypeVariable(E),>

发现:ERROR ->TypeVariable (_L)

然而,当我将Validated更改为ValidatedNel时,我有关于多个实现匹配传递的参数的错误。当我检查编译器无法选择的实现时,我有以下这些:

zip(ValidatedNel<E,B>, (A,B) -> Z)
zip(Semigroup<E>, ValidatedNel<E, B>)

然而,当我使用下面的实现Kotlin没有抱怨,但返回' Validated '没有错误列表。

a(s1).zip(nonEmptyList(), b(s2))

结果是我必须去掉lambda中的括号所以我的zip应该是这样的:

a(s1).zip(b(s2)) { r1, r2 -> Pair(r1, r2) }

最新更新