gpt4 book ai didi

validation - 将验证与 scalaz 7 相结合

转载 作者:行者123 更新时间:2023-12-02 20:50:33 25 4
gpt4 key购买 nike

给定以下功能:

def foo( a: A ): ValidationNEL[String,Seq[B]] = ...

def bar( b: B ): ValidationNEL[String,C] = ...

我想将它们组合起来,例如构建一个函数,该函数调用 foo 然后最终在生成的 Seq 中的每个元素上调用 bar >,这样就可以得到 ValidationNEL[String,Seq[C]]:

def fooAndBar( a: A ): ValidationNEL[String,Seq[C]]

Scalaz 7 中的文档非常短,我找不到任何相关示例。

最佳答案

对 B 序列进行一次硬核遍历。请注意,我在这里使用了 List,因为 Scalaz 7 似乎没有 Seq 的类型类实例,但是如果确实需要,编写自己的实例应该不会太难。

import scalaz.{ValidationNEL, Traverse, NonEmptyList}
import scalaz.std.list.listInstance
case class A(a: Int)
case class B(b: Int)
case class C(c: Int)

def foo( a: A ): ValidationNEL[String,List[B]] = Validation.success(List(B(1), B(2)))
def bar( b: B ): ValidationNEL[String,C] = Validation.failure(NonEmptyList("error in " + b.b))//Validation.success(C(b.b * 2))

type ValNEL[A] = ValidationNEL[String, A]

def foobar(a: A): ValidationNEL[String, List[C]] =
foo(a) flatMap { bs =>
Traverse[List].traverse[ValNEL, B, C](bs)(bar)
}

val r: scalaz.ValidationNEL[String, List[C]] = foobar(A(3))

更新:另请参阅宝贵的 Haskellwiki Typeclassopedia

关于validation - 将验证与 scalaz 7 相结合,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11914126/

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