首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >怎么把它变成单曲?

怎么把它变成单曲?
EN

Stack Overflow用户
提问于 2017-04-04 15:47:18
回答 1查看 90关注 0票数 1

我试图按顺序验证字符串列表,并定义验证结果类型如下:

代码语言:javascript
复制
import cats._, cats.data._, cats.implicits._

case class ValidationError(msg: String)
type ValidationResult[A] =  Either[NonEmptyList[ValidationError], A]
type ListValidationResult[A] = ValidationResult[List[A]] // not a monad :(

我想把ListValidationResult变成单曲。我应该手动实现flatMappure,还是有更简单的方法?

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2017-04-04 16:53:28

我建议你采取一种完全不同的方法,利用cats Validated

代码语言:javascript
复制
import cats.data.Validated.{ invalidNel, valid }

val stringList: List[String] = ???

def evaluateString(s: String): ValidatedNel[ValidationError, String] =
  if (???) valid(s) else invalidNel(ValidationError(s"invalid $s"))

val validationResult: ListValidationResult[String] = 
  stringList.map(evaluateString).sequenceU.toEither

根据您的示例,可以将其改编为泛型类型T

备注:

@Michael指出,您也可以使用traverseU而不是mapsequenceU

代码语言:javascript
复制
val validationResult: ListValidationResult[String] = 
  stringList.traverseU(evaluateString).toEither
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/43211940

复制
相关文章

相似问题

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