Как карта оставляет только значение из scala Либо?

Рассмотрим код:

val some: OneCaseClass Either TwoCaseClass = ???
val r = some.left.map(_.toString)

Почему r Serializable with Product with Either[String, TwoCaseClass] типом Serializable with Product with Either[String, TwoCaseClass] вместо Either[String, TwoCaseClass]?

Как отобразить только левое значение?

Ответ 1

Потому что это возвращаемый тип LeftProjection.map.

map[X](f: (A) ⇒ X): Product with Serializable with Either[X, B]

Но это не проблема. При желании вы можете использовать типу типа:

val r: Either[String, TwoCaseClass] = some.left.map(_.toString)

Взгляните на примеры Either docs:

val l: Either[String, Int] = Left("flower")
val r: Either[String, Int] = Right(12)
l.left.map(_.size): Either[Int, Int] // Left(6)
r.left.map(_.size): Either[Int, Int] // Right(12)
l.right.map(_.toDouble): Either[String, Double] // Left("flower")
r.right.map(_.toDouble): Either[String, Double] // Right(12.0)