将scalaz析取集合转换为单个析取
根据以下方法:将scalaz析取集合转换为单个析取,scala,scalaz,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[\/[
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
),请也包括这些内容。您可以使用语法.遍历下的sequenceU
将其“由内而外”或者使用traverseU
传入Long=>String\/Long
一次性完成。ah是的。我最初使用的是sequenceU,但唉,我用错了。谢谢阿德尔伯特!