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
Post a Comment