Tôi khá mới đối với scalaz và tôi đã bắt đầu với xác thực.Làm phẳng xác nhận hợp lệ Scalaz
Tôi có một số chức năng xác nhận có dạng:
def validateXyz(...): ValidationNEL[String, String] = ...
tôi sau đó sử dụng phong cách applicative để kết hợp nhiều hợp lệ và sau đó gọi một chức năng mà cũng trả về một xác nhận:
(validateXyz(...) |@| validateAbc(...)) { (first, second) =>
otherFunction(first, second)
}
ở đâu,
def otherFunction(first: String, second: String): ValidationNEL[String, String] = ...
Tuy nhiên, khi gọi loại kết quả ở trên là:
val result: ValidationNEL[String, ValidationNEL[String, String]] = ...
tôi có thể giải nén này bằng cách gọi gấp về kết quả với hai chức năng, người đầu tiên mà chỉ truyền các NEL như một thất bại và đó thứ hai chỉ truyền đối số của nó:
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]
này hoạt động và trả về các loại và kết quả chính xác. Tuy nhiên nó không cảm thấy như giải pháp chính xác vì vậy tôi phải mất một cái gì đó. Tôi cần phải làm gì để tránh nếp gấp kinh khủng này ở cuối?