Компилятор жалуется на Left (e): выражение типа Left (List [ServiceError, Nothing]) не соответствует ожидаемому типу Either [E, R]
sealed trait ServiceResult[+E <: List[ServiceError], +R ] {
def toEither: Either[E , R] = this match {
case Success(a) => Right(a)
case Failure(e) => **Left(e)**
}
}
final case class Success[+R](a: R) extends ServiceResult[Nothing, R] {}
final case class Failure[+T <: ServiceError](e: List[T]) extends ServiceResult[List[T], Nothing]{}
Мое требование объясняется ниже,
Итак ... у меня есть черта ServiceError
. У каждой службы на бэкэнде есть свои ошибки, которые расширяют эту черту. Когда я делаю запрос, например, из слоя отдыха,
val r = subnetService ? GetByIdWithInfo( SubnetId( id ) )
val r2 = r.mapTo[ ServiceResult [ SubnetServiceError, SubnetWithInfoDTO ] ] )
Я хочу иметь такой тип, как Either [A, B], но с некоторыми дополнительными ограничениями. В случае ошибки (или ошибок) на сервере - вернуть List[ServiceError]
или вернуть result
.
sbt compile
и добавьте соответствующий журнал ошибок. - person sarveshseri   schedule 20.02.2015type ServiceResult[ R ] = Either[ List[ ServiceError ], R ]
. - person sarveshseri   schedule 20.02.2015