2011-01-13 29 views
5

Estoy tratando de utilizar la validación scalaz en nuestro proyecto y he corrió en una situación siguiente:Scalaz validación

def rate(username: String, params: Map[String, String]): ValidationNEL[String, Int] = { 
    val voteV:Validation[String, RateVote] = validate(params, "vote") flatMap {v: String => RateVote(v)} 
    val voterV:Validation[String, Sring] = validate(params, "voter") 

    ... 
} 

ahora tengo que volver ValidationNEL que contiene los parámetros posibles errores, si los hubiera, o el uso validados parámetros para llamar al método:

storage.rate(username, voter, vote): Validation[String, Int] 

Lo sé, podría usar | @ | para la primera parte, pero este código

(voterV.liftFailNel |@| voteV.liftFailNel) { (voter, rv) => 
    storage.rate(username, voter, rv) 
} 

volverá ValidationNEL[String, Validation[String, Int]]. ¿Hay alguna forma de "aplanar" este resultado para obtener el ValidationNEL[String, Int]?

Respuesta

10

Puede aplanar el resultado con un doblez.

result.fold(e => e.fail, x => x.liftFailNel) 
+0

Trabajado después de poco de sintonía: provocar el interior (...) no coincide con el tipo de retorno, así que tuve que hacer esto: result.fold (e => e.fail, x => x.liftFailNel) – Digal

Cuestiones relacionadas