9
我對scalaz相當陌生,而且我已經開始驗證。Flattening嵌套Scalaz驗證
我有如下形式的一些驗證功能:
def validateXyz(...): ValidationNEL[String, String] = ...
然後我使用的是應用性的風格,以多種驗證相結合,然後調用另一個函數也返回一個驗證:
(validateXyz(...) |@| validateAbc(...)) { (first, second) =>
otherFunction(first, second)
}
def otherFunction(first: String, second: String): ValidationNEL[String, String] = ...
但是,當調用上述結果類型是:
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]
此:
val result: ValidationNEL[String, ValidationNEL[String, String]] = ...
我可以通過調用摺疊對結果有兩個功能,這只是傳播NEL作爲第一故障和第二剛剛傳播它的參數解壓縮此工作並返回正確的類型和結果。然而,它不覺得正確的解決方案,所以我必須錯過一些東西。我最後需要做些什麼來避免這種可怕的摺疊?