Vorrei utilizzare Scalaz per le convalide e mi piacerebbe poter riutilizzare le funzioni di convalida in diversi contesti. Sono assolutamente nuovo di Scalaz tra i due.Convalida Convalida Scalaz
Diciamo che ho questi semplici controlli:
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] = ...
mi piace essere in grado di comporre le convalide in cui l'uscita da una viene immessa nella altro. Potrei facilmente farlo con flatMap
o via per le comprensioni, ma sembra che ci debba essere un modo migliore di quello.
for {
v1 <- checkDefined(map.get("foo"))
v2 <- nonEmpty(v1)
v3 <- int(v2)
v4 <- ...
} yield SomeCaseClass(v3, v4)
o
val x1 = checkDefined(map get "foo").flatMap(nonEmpty).flatMap(int)
val x2 = check(...)
// How to combine x1 and x2?
Ogni pensiero da parte degli esperti Scalaz là fuori?
che dire "(x1 | @ | x2) {(x1, x2) => ...}" Io non sono così sicuro di la sintassi esatta però ... Vedi http://www.casualmiracles.com/2012/01/16/a-small-example-of-applicative-functors-with-scalaz/ – Jan