scala - Converting `flatMap` to `for-comprehension` with Either -


given either[string,int]:

scala> val z: either[string, int] = right(100) z: either[string,int] = right(100) 

i can write following code flatmap:

scala> z.right.flatmap(x => if(x == 100) left("foo") else right(x)) res14: scala.util.either[string,int] = left(foo) 

but, doing wrong for comprehension version?

scala> {      |  <- z.right      |  _ <- if(a == 100) left("foo") else right(a)      | } yield <console>:11: error: value map not member of product serializable           scala.util.either[string,int]                _ <- if(a == 100) left("foo") else right(a)                     ^ 

if(a == 100) left("foo") else right(a) either[string, int], , not leftprojection or rightprojection, doesn't have map or flatmap. need project well:

for {     <- z.right     _ <- (if(a == 100) left("foo") else right(a)).right } yield 

the difference between , one-liner one-liner equivalent to:

for {     <- z.right } yield (if(a == 100) left("foo") else right(a)) 

.. not have map @ end.


Comments

Popular posts from this blog

tcpdump - How to check if server received packet (acknowledged) -