Tôi muốn sử dụng Scalaz để xác thực và muốn có thể sử dụng lại các hàm xác thực trong các ngữ cảnh khác nhau. Tôi hoàn toàn mới đối với Scalaz btw.Soạn xác nhận Scalaz
Hãy nói rằng tôi có những kiểm tra đơn giản:
def checkDefined(xs: Option[String]): Validation[String, String] =
xs.map(_.success).getOrElse("empty".fail)
def nonEmpty(str: String): Validation[String, String] =
if (str.nonEmpty) str.success else "empty".fail
def int(str: String): Validation[String, Int] = ...
Tôi thích để có thể soạn kiểm chứng thực nơi đầu ra từ một được đưa vào khác. Tôi có thể dễ dàng làm điều đó với flatMap
hoặc thông qua để hiểu, nhưng nó cảm thấy như có phải là một cách tốt hơn.
for {
v1 <- checkDefined(map.get("foo"))
v2 <- nonEmpty(v1)
v3 <- int(v2)
v4 <- ...
} yield SomeCaseClass(v3, v4)
hoặc
val x1 = checkDefined(map get "foo").flatMap(nonEmpty).flatMap(int)
val x2 = check(...)
// How to combine x1 and x2?
Bất kỳ suy nghĩ từ các chuyên gia Scalaz out there?
những gì về "(x1 | @ | x2) {(x1, x2) => ...}" Tôi không như vậy chắc chắn về cú pháp chính xác mặc dù ... Xem http://www.casualmiracles.com/2012/01/16/a-small-example-of-applicative-functors-with-scalaz/ – Jan