2011-01-13 17 views
5

मैं हमारे परियोजना में scalaz मान्यता उपयोग करने के लिए कोशिश कर रहा हूँ और एक के बाद स्थिति में भाग है:Scalaz सत्यापन

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

    ... 
} 

अब मैं, अगर कोई थे ValidationNEL संभव पैरामीटर जिनमें त्रुटियां हैं वापस जाने के लिए है, या मान्य का उपयोग विधि को कॉल करने के लिए पैरामीटर:

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

मुझे पता है, मैं इसका उपयोग कर सकता हूं। @ | पहले भाग है, लेकिन इस कोड के लिए

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

ValidationNEL[String, Validation[String, Int]] वापस आ जाएगी। ValidationNEL[String, Int] प्राप्त करने के लिए, इस परिणाम को "फ़्लैट" करने का कोई तरीका है?

उत्तर

10

आप परिणाम को एक गुना के साथ फ़्लैट कर सकते हैं।

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

थोड़ा ट्यूनिंग के बाद काम किया: अंदर (...) परिणाम वापसी प्रकार से मेल नहीं खाता, तो मैं यह करने के लिए किया था: result.fold (ई => e.fail, एक्स => x.liftFailNel) – Digal

संबंधित मुद्दे