मैं एक फ़ंक्शन saveStuff
लिखना चाहता हूं जो कुछ परीक्षणों को पास करने के बाद फ़ाइल में कुछ सहेजता है। यदि परीक्षण विफल हो जाते हैं, तो मुझे एक त्रुटि उठाने की आवश्यकता है। इस समारोह का परिणाम प्रकार क्या होना चाहिए? मैंने IO (Either String())
और IO (Maybe String)
के बारे में सोचा, लेकिन उनमें से कुछ कारणों से गलत महसूस करते हैं। मैंने मानक पुस्तकालय से समान कार्यों को देखा, लेकिन वे बस IO()
लौटते प्रतीत होते हैं। वे विफलताओं पर अपवाद फेंक देते हैं। मैं खुद को उस दृष्टिकोण को पसंद नहीं कर सकता।इस फ़ंक्शन का परिणाम प्रकार क्या होना चाहिए?
उत्तर
परिभाषित आप कुछ है कि एक ErrorT String IO()
रिटर्न लिखने पर विचार कर सकता है। ErrorT
मोनैड ट्रांसफॉर्मर के लिए प्रलेखन on Hackage है। एरिक किड द्वारा उत्कृष्ट Eight Ways to Report Errors और एडवर्ड यांग द्वारा कुछ वर्षों बाद follow up में और सुझाव हैं।
'त्रुटि टी' मैंने जो भी सोचा था, वह भी है। आपके पास अनिवार्य रूप से एक 'आईओ() 'है, और आप किसी संदेश के साथ त्रुटि के लिए संभावित जोड़ना चाहते हैं, इसलिए बस इसके ऊपर' त्रुटि टी 'ट्रांसफॉर्मर को थप्पड़ मार दें। –
यदि saveStuff
सफल हो सकता है तो केवल एक ही तरीका है, Maybe ErrorMessage
पर एक प्रकार isomorphic सही प्रकार है। Maybe ErrorMessage
में नकारात्मकता है जो Nothing
Maybe
का उपयोग करते समय विफलता को दर्शाता है, इसलिए यह यहां अपेक्षाओं के मुकाबले चलाएगा। इसके संबंध में, Either ErrorMessage()
बेहतर है, लेकिन पैरामीटर Right
मामले में कोई जानकारी नहीं लेती है, इसलिए विकल्प में भी लालित्य नहीं है।
आप इन कमियों को स्वीकार नहीं करना चाहते हैं, अपने स्वयं के परिणाम प्रकार
data Result = Success | Failure ErrorMessage
-- with type ErrorMessage = String, for example
- 1. इस सी ++ टेम्पलेट में इटरेटर प्रकार क्या होना चाहिए?
- 2. टेम्पलेट पैरामीटर प्रकार होना चाहिए?
- 3. फ़ंक्शन कितना छोटा होना चाहिए?
- 4. जावा: 'ज़िप' फ़ंक्शन कैसे लिखें? वापसी का प्रकार क्या होना चाहिए?
- 5. ओओ क्या होना चाहिए और क्या नहीं होना चाहिए?
- 6. एरलांग फ़ंक्शन कब ठीक होना चाहिए?
- 7. एनएचबीर्नेट सत्र का जीवनकाल क्या होना चाहिए?
- 8. जावा सदस्य enum प्रकार पूंजीकृत होना चाहिए?
- 9. Struts ActionForm गुणों को किस प्रकार का होना चाहिए?
- 10. क्या प्रत्येक वर्ग का अपना नामस्थान होना चाहिए?
- 11. क्या डब्ल्यूसीएफ डाटाकंट्रैक्ट मूल्य या संदर्भ प्रकार होना चाहिए?
- 12. क्या 'eval' बुरा होना चाहिए?
- 13. एफ #: इस अभिव्यक्ति में 'यूनिट' टाइप होना चाहिए, लेकिन 'ConsoleKeyInfo'
- 14. क्या विनाशक थ्रेडसेफ होना चाहिए?
- 15. एसक्यूएल कीमिया परिणाम Proxy.rowcount शून्य नहीं होना चाहिए
- 16. सी #: क्या एनम का डिफ़ॉल्ट मान कोई नहीं होना चाहिए या अज्ञात होना चाहिए?
- 17. Argparse का उपयोग करते समय, सत्यापन और प्रारंभिक प्रकार कस्टम प्रकार या कार्यों में होना चाहिए?
- 18. क्या एक कोणीय सेवा राज्य होना चाहिए?
- 19. सी ++ कंपाइलर त्रुटि का कारण क्या है: कक्षा या गणना के प्रकार का तर्क होना चाहिए?
- 20. क्या बेस केस ओपन सोर्स होना चाहिए?
- 21. क्या लॉगर निजी स्थिर होना चाहिए या
- 22. जावास्क्रिप्ट में इस प्रकार का फ़ंक्शन आमंत्रण गलत क्यों है?
- 23. क्या सभी यूनिट परीक्षण सफल होना चाहिए?
- 24. क्या यह चार हस्ताक्षरित होना चाहिए?
- 25. पायथन: प्रकार() खाली परिणाम
- 26. xhdpi लॉन्च आइकन क्या आकार होना चाहिए?
- 27. TypeError: फ़ंक्शन() तर्क * अनुक्रम होना चाहिए, जनरेटर नहीं
- 28. मुख्य गतिविधि का नाम होना चाहिए .MainActivity?
- 29. क्या विस्तार विधियों में उपसर्ग होना चाहिए?
- 30. क्या कार्यक्षमता हमेशा तृतीय पक्ष होना चाहिए?
यदि यह केवल एक ही तरीके से सफल हो सकता है, तो शायद 'शायद त्रुटि संदेश' या कुछ आइसोमोर्फिक सही प्रकार है। यदि आपको 'शायद' पसंद नहीं है क्योंकि आमतौर पर 'कुछ भी नहीं' विफलता इंगित करता है, तो 'डेटा परिणाम = सफलता | का उपयोग करें विफलता स्ट्रिंग'। –
@DanielFischer: यह शायद एक उत्तर के रूप में अच्छा है (एक टिप्पणी के बजाय)। –