Я хотел реализовать аналогичный тип с именем Result
для типа Either
. Основное отличие состоит в том, что левая сторона типа Result
всегда должна быть списком чего-то. Какое определение типа было бы правильным для этого? Я пробовал иметь что-то вроде этого:
sealed trait Result[List, +A] {
def map[B](f: A => B): Result[List, B] = this match {
case Failure(err) => Failure(err)
case Success(value) => Success(f(value))
}
def apply[B](f: Result[List, A => B]): Result[List, B] = (f, this) match {
case (Failure(fE), Failure(aE)) => Failure(fE ::: aE)
case ...
}
}
final case class Failure[+E](errors: List[E]) extends Result[List[E], Nothing]
final case class Success[+A](value: A) extends Result[Nothing, A]
Но это работает с ошибкой в функции карты, говорящей Failure[Any] does not equal Result[List, B]
и Success[B] does not equal Result[List, B]
. Является ли определение типа Result[List, +A]
уже неправильным, должен ли я вместо этого использовать тип более высокого типа, такой как List[_]
?