gpt4 book ai didi

scala - 找不到用于排序的 Traverse Seq[ValidationNel[String, MyCaseClass]] => ValidationNel[String, Seq[MyCaseClass]]

转载 作者:行者123 更新时间:2023-12-02 01:43:28 25 4
gpt4 key购买 nike

我有一些代码如下:

import scalaz._
import Scalaz._

case class Foo(i: Int)
type ValidatedNel[A] = ValidationNel[String, A]

val foos: Seq[ValidatedNel[Foo]] = Seq(Success(Foo(1)), Success(Foo(2)), Failure(NonEmptyList("3 failed")), Failure(NonEmptyList("4 failed")))

val validated: ValidatedNel[Seq[Foo]] = foos.sequence[ValidatedNel, Foo]

这在编译期间失败并出现此错误:

Error:(51, 50) could not find implicit value for parameter F0: scalaz.Traverse[Seq] val validated: ValidatedNel[Seq[Foo]] = foos.sequence[ValidatedNel, Foo]

Error:(51, 50) not enough arguments for method ToTraverseOps: (implicit F0: scalaz.Traverse[Seq])scalaz.syntax.TraverseOps[Seq,scalaz.package.ValidationNel[String,Foo]]. Unspecified value parameter F0. val validated: ValidatedNel[Seq[Foo]] = foos.sequence[ValidatedNel, Foo]

我想在我给出的示例中得到这样的最终结果:

val validated = Failure(NonEmptyList("3 failed", "4 failed"))

如果 foos 只有 Success 而没有 Failure,我希望看到它们的简单顺序:Success( Foo(1), Foo(2)).

为什么会出现我提到的编译失败?据我了解,这应该基于类型。

这是否与类型别名解包有关 A[B[C[D], E]] => B[C[D, A[E]] 而不是 A[B[C]] => B[A[C]]?

最佳答案

据我所知,scalaz 中没有 Traverse[Seq] 的实例。您可以将 Seq 替换为 List 或对其进行转换,或者实现 Traverse[Seq] (implicit val seqInstance: Traverse[Seq ] = ???).

import scalaz._
import Scalaz._

case class Foo(i: Int)
type ValidatedNel[A] = ValidationNel[String, A]

val foos: List[ValidatedNel[Foo]] = List(Success(Foo(1)), Success(Foo(2)), Failure(NonEmptyList("3 failed")), Failure(NonEmptyList("4 failed")))

val validated: ValidatedNel[List[Foo]] = foos.sequence[ValidatedNel, Foo]

关于scala - 找不到用于排序的 Traverse Seq[ValidationNel[String, MyCaseClass]] => ValidationNel[String, Seq[MyCaseClass]],我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/27113717/

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