scala - Scalaz use applicative builder with validations and a list of validations -


i'm working scalaz validations , i've run situation (note heavily simplified actual code, idea same)

given:

case class foo(bar: int)  val x1: validation[string, foo] = foo(1).success val x2: validation[string, foo] = foo(2).success val x3: validation[string, foo] = foo(3).success  val l1 = list(x1, x2) 

i able along lines this:

(x3 |@| l1) { (x1, x2, x3) => /*do of foo's*/ }  

of course if there errors, either in list or outside of list i'd them accumulate would.

i know above syntax not work, advice on how achieve result i'm looking appreciated.

if have list[f[a]] , f has applicative functor instance, can turn list inside out in effect sequenceu f[list[a]]:

scala> l1.sequenceu res0: scalaz.validation[string,list[foo]] = success(list(foo(1), foo(2))) 

or:

scala> (x3 |@| l1.sequenceu) {   case (third, rest) => // values } 

it's worth noting if find writing things of xs.map(f).sequenceu, can use xs.traverseu(f) instead—it's equivalent except don't build intermediate list.


Comments

Popular posts from this blog

c++ - No viable overloaded operator for references a map -

java - Custom OutputStreamAppender not run: LOGBACK: No context given for <MYAPPENDER> -

java - Cannot secure connection using TLS -