Предположим, у меня есть несколько классов и функций для их проверки:
case class PersonName(...)
case class Address(...)
case class Phone(...)
def testPersonName(pn: PersonName): Either[String, PersonName] = ...
def testAddress(a: Address): Either[String, Address] = ...
def testPhone(p: Phone): Either[String, Phone] = ...
Теперь я определяю новый класс case Person
и тестовую функцию, которая быстро завершается неудачей.
case class Person(name: PersonName, address: Address, phone: Phone)
def testPerson(person: Person): Either[String, Person] = for {
pn <- testPersonName(person.name).right
a <- testAddress(person.address).right
p <- testPhone(person.phone).right
} yield person;
Теперь я хотел бы, чтобы функция testPerson
накапливала ошибки, а не просто быстро сбой.
Я бы хотел, чтобы testPerson
всегда выполнял все эти функции test*
и возвращал Either[List[String], Person]
. Как я могу это сделать?