将scalaz析取集合转换为单个析取

时间:2014-10-21 01:16:31

标签: scala scalaz

考虑以下方法:

def foo(seq: Seq[Long]) : Seq[\/[String, Long]] = seq map { v =>
  for {
    bar <- returnsOptionLong1(v) \/> "first was None"
    baz <- returnsOptionLong2(bar) \/> "second was None"
  } yield baz  
}

我想实现以下方法:

def qux(initial: Seq[\/[String, Long]]) : \/[String, Seq[Long]] = {
  // ... Fill-in implementation here ...
}

换句话说:如何使用scalaz将一系列析取变换为与右侧为序列的析取。

注意:如果更清晰的实施也涉及对foo进行更改(例如将map更改为flatMap的修改),请将其包括在内好。

1 个答案:

答案 0 :(得分:2)

您可以使用sequenceU下的syntax.traverse._将其“内部”翻过来。或者使用traverseU传递Long => String \/ Long来一次性完成。