Skip to content

Instantly share code, notes, and snippets.

@pfcoperez
Created December 9, 2016 09:20
Show Gist options
  • Star 0 You must be signed in to star a gist
  • Fork 0 You must be signed in to fork a gist
  • Save pfcoperez/b45f823e714b4a196670c370453e5269 to your computer and use it in GitHub Desktop.
Save pfcoperez/b45f823e714b4a196670c370453e5269 to your computer and use it in GitHub Desktop.
import scala.util.{Try, Success, Failure}
def sequence[T](s: Seq[Try[T]]): Try[Seq[T]] =
(Try(Seq.empty[T]) /: s) {
case (Success(s), Success(v)) => Success(v +: s)
case (Failure(cause), _) => Failure(cause)
case (_, Failure(cause)) => Failure(cause)
} map (_.reverse)
def sequenceOptimized[T](s: Seq[Try[T]]): Try[Seq[T]] = {
def recSequence(s: Seq[Try[T]], acc: Seq[T]): Try[Seq[T]] =
s.headOption map {
case Failure(cause) => Failure(cause)
case Success(v) => recSequence(s.tail, v +: acc)
} getOrElse Success(acc reverse)
recSequence(s, Seq())
}
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment