2012-06-07 9 views
9

कुछ stdlib फ़ंक्शन हैं जो अमान्य इनपुट पर त्रुटियां फेंकते हैं। उदाहरण के लिए:'त्रुटि' के साथ फेंकने वाली त्रुटियों को पकड़ना?

Prelude> read "1o2" :: Int 
*** Exception: Prelude.read: no parse 

मैं इसे एक Either e a वापस जाने के लिए बजाय रैप करने के लिए करना चाहते हैं। मैं उसे कैसे कर सकता हूँ?

उत्तर

14

There is no spoon. आपने इसे मुझसे नहीं सुना है।

इस विशेष उदाहरण के लिए, आपको इसके बजाय reads का उपयोग करना चाहिए।

+0

मैं जिस तरह से आप यह phrased पसंद है। :) जवाब के लिए धन्यवाद! चम्मच का जिक्र नहीं करने के लिए – missingfaktor

+6

+1! – is7s

2

मैं मूल्यों में त्रुटियों चालू करने के लिए पसंद करते हैं:

maybeRead :: Read a => String -> Maybe a 
maybeRead s = case reads s of 
     [(x, "")] -> Just x 
     _   -> Nothing 
+0

मैं भी इसे पसंद करता हूं, लेकिन सवाल यह है कि यह _generally_ करने के बारे में है। 'read' का उपयोग केवल एक उदाहरण के रूप में किया जाता है। – missingfaktor

+0

मुझे लगता है कि यह आम तौर पर सच है कि, किसी भी फंक्शन के लिए जो कोई त्रुटि फेंकता है, उसके लिए एक "सुरक्षित" संस्करण होगा। – MatrixFrog