2011-01-13 14 views
5

Sto cercando di utilizzare la convalida scalaz nel nostro progetto e ho fatto funzionare in una situazione seguente:Scalaz convalida

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") 

    ... 
} 

Ora devo tornare ValidationNEL contenente possibili errori dei parametri, se ci fossero, o l'uso convalidato parametri per chiamare il metodo:

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

lo so, potrei usare | @ | per la prima parte, ma questo codice

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

tornerà ValidationNEL[String, Validation[String, Int]]. C'è un modo per "appiattire" questo risultato, per ottenere il ValidationNEL[String, Int]?

risposta

10

È possibile appiattire il risultato con una piega.

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

lavorato dopo poco messa a punto: portare dentro (...) non corrisponde al tipo di ritorno, così ho dovuto fare questo: result.fold (e => e.fail, x => x.liftFailNel) – Digal

Problemi correlati