考虑以下方法:
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
的修改),请将其包括在内好。
答案 0 :(得分:2)
您可以使用sequenceU
下的syntax.traverse._
将其“内部”翻过来。或者使用traverseU
传递Long => String \/ Long
来一次性完成。