Для Either[T,T] левая и правая ветки отличаются, а для T|T — нет. Более выпуклый пример: в Option[String] | Option[Int] один и тот же None для обоих вариантов, а в Either[Option[String],Option[Int]] — разные. Так что объединения не будут заменой Either во всех случаях. То же касается Option, который можно понимать как прямую сумму чего-то и ничего.
Используйте
Coproduct
из shapeless.Для
Either[T,T]
левая и правая ветки отличаются, а дляT|T
— нет. Более выпуклый пример: вOption[String] | Option[Int]
один и тот жеNone
для обоих вариантов, а вEither[Option[String],Option[Int]]
— разные. Так что объединения не будут заменойEither
во всех случаях. То же касаетсяOption
, который можно понимать как прямую сумму чего-то и ничего.