首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何使用cats将` `NonEmptyList[Either[Error,User]]`转换为`Either[Error,NonEmptyList[User]]`?

如何使用cats将` `NonEmptyList[Either[Error,User]]`转换为`Either[Error,NonEmptyList[User]]`?
EN

Stack Overflow用户
提问于 2018-01-14 22:05:59
回答 1查看 211关注 0票数 5

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

代码语言:javascript
复制
val data = NonEmptyList[Either[Error, User]]

代码语言:javascript
复制
val target: Either[Error, NonEmptyList[User]] = howToConvert(data)
EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2018-01-14 22:34:23

通常,当您想要将类型构造函数颠倒过来时,您可能正在寻找sequence。如果你在Scala >= 2.11.9中启用了-Ypartial-unification,你可以让编译器来推断一切:

代码语言:javascript
复制
data.sequence

否则:

代码语言:javascript
复制
type EitherError[A] = Either[Error, A]
data.sequence[EitherError, User]

或者如果你有type lambda plugin

代码语言:javascript
复制
data.sequence[Either[Error, ?], User]

或者如果你没有插件,但是你不喜欢类型别名:

代码语言:javascript
复制
data.sequence[({type L[A] = Either[Error, A]})#L, User]

它将执行预期的操作:要么返回第一个错误,要么返回所有用户(如果没有错误)。如果我们假设用户是int,错误是字符串:

代码语言:javascript
复制
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)
票数 5
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/48250365

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档