Скалаз ValidationNel - складной - PullRequest
0 голосов
/ 29 мая 2018

Я недавно использовал ScalaZ в целях проверки и решил выбрать ValidationNel, так как быстрое поведение при сбое нежелательно.У меня было более 12 проверок, поэтому я не мог использовать оператор | @ |поэтому я выразил это с помощью <*> так:

validatePropertyA(object.propertyA) <*>
  (validatePropertyB(object.propertyB) <*>
    (validatePropertyC(object.propertyC) map (_ => _ => _ => object)))

Имея около 15 свойств для проверки, этот код становится довольно сложным и на первый взгляд выглядит как нечто, что можно было бы выразить с помощью foldRight вместо этого,но я понятия не имею, как этого добиться.

Реально ли foldRight для работы, чтобы сделать этот кусок кода лаконичным, или мне нужно использовать что-то еще?

1 Ответ

0 голосов
/ 29 мая 2018

Вы можете легко сделать это, используя traverse или sequence:

List(validatePropertyA(object.propertyA), validatePropertyB(object.propertyB), ...)
  .sequence.map(_ => object)

. Это вернет вам Validated со всеми ошибками на левой стороне и object направая сторона.

...