gpt4 book ai didi

scala - 如何用猫将 `NonEmptyList[Either[Error, User]]` 转换为 `Either[Error, NonEmptyList[User]]`?

转载 作者:行者123 更新时间:2023-12-04 18:57:44 25 4
gpt4 key购买 nike

我正在使用 cats ,想知道如何用它来转数据:

val data = NonEmptyList[Either[Error, User]]


val target: Either[Error, NonEmptyList[User]] = howToConvert(data)

最佳答案

通常,当您想将类型构造函数翻过来时,您可能正在寻找 sequence .如果您有 -Ypartial-unification在 Scala >= 2.11.9 中打开,您可以让编译器推断出所有内容:

data.sequence

除此以外:
type EitherError[A] = Either[Error, A]
data.sequence[EitherError, User]

或者,如果您有 type lambda plugin :
data.sequence[Either[Error, ?], User]

或者如果你没有插件,但你不喜欢类型别名:
data.sequence[({type L[A] = Either[Error, A]})#L, User]

它将执行预期的操作,要么返回第一个错误,要么返回所有用户(如果没有错误)。如果我们假设用户是整数而错误是字符串:
scala> import cats.data.NonEmptyList, cats.implicits._
import cats.data.NonEmptyList
import cats.implicits._

scala> val data: NonEmptyList[Either[Error, User]] = NonEmptyList.of(Right(2), Left("error1"), Right(4))
data: cats.data.NonEmptyList[Either[Error,User]] = NonEmptyList(Right(2), Left(error1), Right(4))

scala> data.sequence
res4: Either[Error,cats.data.NonEmptyList[User]] = Left(error1)

关于scala - 如何用猫将 `NonEmptyList[Either[Error, User]]` 转换为 `Either[Error, NonEmptyList[User]]`?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/48250365/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com