functional programming - With a Scala Either, how do you stop at the first error, but gets the already computed values -


for example, let have function

def foo(): either[string, int] = ??? 

i want call function 3 times. if values right, want sum. if have 1 left, want error , sum of previous right values (~ stop computation @ point).

the way found :

list(foo, foo, foo).foldleft((none, 0)) {    case ((some(err), sum), _) =>  (some(err), sum)   case ((none, sum), fn) => fn() match {     case left(err) => (some(err), sum)     case right(x) => (none, sum + x)   } } 

is there generic functional programming feature (with cats or scalaz example) that?

using stream.span:

val (ints, rest) = stream.continually(foo()).take(3).span(_.isright)  val sum = ints.map(_.right.get).sum val error = rest.headoption 

Comments

Popular posts from this blog

resizing Telegram inline keyboard -

command line - How can a Python program background itself? -

php - "cURL error 28: Resolving timed out" on Wordpress on Azure App Service on Linux -