将列表[ValidationNEL [String,Unit]]转换为ValidationNEL [String,Unit]

时间:2012-10-03 15:28:21

标签: scala scalaz

是否有标准方法将左侧展平为单个列表?

谢谢!

2 个答案:

答案 0 :(得分:3)

我不确定你要做的是什么,但是Monoid实例应该可以做到这一点:

scala> List(
     |   println("test").successNel[String],
     |   "a".failNel[Unit],
     |   "b".failNel[Unit]
     | ).suml == Failure(NonEmptyList("a", "b"))
test
res0: Boolean = true

其中suml是一种方法,它会对任何带有Monoid实例的内容进行任意处理。

答案 1 :(得分:1)

好的,这里有一些代码可以解决这个问题:

scala> type MyValidationNEL[A] = ValidationNEL[String, A]
defined type alias MyValidationNEL

scala> val x: List[MyValidationNEL[Unit]] = 
     | List("a".failNel, "b".failNel)
x: List[MyValidationNEL[Unit]] = List(Failure(NonEmptyList(a)), Failure(NonEmptyList(b)))

scala> x.sequence
res57: MyValidationNEL[List[Unit]] = Failure(NonEmptyList(a, b))

scala> 

我参加了此演示文稿中的部分示例: http://www.scribd.com/doc/93526802/Bjarnason-Scalaz 通过 RúnarBjarnason http://scalaz.org