scala - Transform and flatten List of disjunctions -



scala - Transform and flatten List of disjunctions -

case class errs(errors: list[err]) case class err(exceptionmessage: string, custommessage: string, statuscode: int, extrainfo: option[string] = none)

one of functions returning val result = list[\/[errs, boolean]]

in order transform/sequence , flatten result next passes done

val finalres: \/[errs, boolean] = result.map(_.swap).sequenceu.map(x => errs(x.map(_.errors).flatten)).swap

this looks inelegant , performance intensive (given number of passes has via multiple map calls etc)

is there combinator in scalaz can create more elegant less number of passes or demands writing custom function?

firstly, utilize traverseu, suggested travis brown.

after that, phone call map followed phone call flatten can written flatmap.

val finalres: \/[errs, boolean] = result.traverseu(_.swap).map(x => errs(x.flatmap(_.errors))).swap

moreover, may consider using type alias errs.

type errs = list[err]

so, code simpler (less boxing/unboxing) :

val finalres: \/[errs, boolean] = result.traverseu(_.swap).map(_.flatten).swap

scala scalaz

Comments

Popular posts from this blog

java - How to set log4j.defaultInitOverride property to false in jboss server 6 -

c - GStreamer 1.0 1.4.5 RTSP Example Server sends 503 Service unavailable -

Using ajax with sonata admin list view pagination -