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

SQL php on different pages to Insert (mysqli) -

php - How can an email be returned from Stripe Checkout? -

sql - Partition elimination in Greenplum -