Для типов, которые вы не можете extend
, например Either
, вы также можете использовать тривиальную оболочку:
class MyEither(get: Either[String, MyEither])
или рекурсивное дерево с Either
(что привело меня к этой теме):
// represents (validation) errors for a tree structure of nested dictionaries
type FieldName = String
type Error = String
type Errors = List[(FieldName, FieldError)]
case class FieldError(val get: Either[Error, Errors])
, которая является типовой версией этого псевдокода:
type Error = String
type Errors = List[(FieldName, Either[Error, Errors])]
Тогда все ваши звонки Left(...)
и Right(...)
станут FieldError(Left(...))
и FieldError(Right(...))
соответственно, так что, например, FieldError(Right(x)).get == Right(x)
.