Я довольно новичок в сказазе, и я начал с проверки.Сглаживание вложенных Scalaz валидаций
У меня есть некоторые функции проверки вида:
def validateXyz(...): ValidationNEL[String, String] = ...
Я затем использовать аппликативный стиль для объединения нескольких валидаций, а затем вызвать другую функцию, которая также возвращает подтверждение:
(validateXyz(...) |@| validateAbc(...)) { (first, second) =>
otherFunction(first, second)
}
где,
def otherFunction(first: String, second: String): ValidationNEL[String, String] = ...
Однако при вызове вышеуказанного результирующего типа является:
val result: ValidationNEL[String, ValidationNEL[String, String]] = ...
Я могу распаковать это, вызывая складка на результат с двумя функциями, то первый, который только распространяет NEL как неудачу, а второй, который только распространяет свой аргумент:
def propagateF(result: NonEmptyList[String]): ValidationNEL[String, String] = result.fail
def propagateV(result: ValidationNEL[String, String]) = result
result.fold(propagateF, propagateV)
// result type: ValidationNEL[String, String]
Этот работает и возвращает правильные типы и результаты. Однако это не похоже на правильное решение, поэтому я должен что-то пропускать. Что мне нужно сделать, чтобы избежать этой ужасной складки в конце?