You can use sequenceUto convert List[Throwable \/ String]to Throwable \/ List[String](it will save only the first Throwable), and you should just use it flatMaplike this:
def source: Throwable \/ List[Throwable \/ String] = ???
def result: Throwable \/ List[String] = source.flatMap{_.sequenceU}
You can also use traverseUinstead of map+ sequenceU:
def readlines: Throwable \/ List[String] = ???
def parseLine[A](s: String): Throwable \/ A = ???
def parseLines[A](): Throwable \/ List[A] =
readlines flatMap { _ traverseU parseLine[A] }
:
def parseLines[A](): Throwable \/ List[A] =
for {
l <- readlines
r <- l traverseU parseLine[A]
} yield r