Skip to content

Instantly share code, notes, and snippets.

@frgomes
Created March 7, 2022 21:40
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 frgomes/02b629c5956e9e41319b7f4a379e1063 to your computer and use it in GitHub Desktop.
Save frgomes/02b629c5956e9e41319b7f4a379e1063 to your computer and use it in GitHub Desktop.
FP - sequence :: Seq[Try[T]] to Try[Seq[T]]
import scala.util.{Try,Success,Failure}
def sequence[T](seq: Seq[Try[T]]): Try[Seq[T]] =
seq
.foldRight(Try(List.empty[T])) {
case (item, acc) => for { a <- acc; i<- item } yield i :: a
}
@frgomes
Copy link
Author

frgomes commented Mar 7, 2022

import scala.util.{Try,Success,Failure}

val tf = Seq(Success(1), Success(2), Failure(new RuntimeException("not a number")), Success(4), Success(5))
val ts = Seq(Success(1), Success(2), Success(3), Success(4), Success(5))

val rf = sequence(tf)
val rs = sequence(ts)

@frgomes
Copy link
Author

frgomes commented Mar 7, 2022

Prints:

rf: scala.util.Try[Seq[Int]] = Failure((java.lang.RuntimeException: not a number)
rs: scala.util.Try[Seq[Int]] = Success(List(1, 2, 3, 4, 5))

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment