के लिए मोनाडप्लस परिभाषा मैं केवल कोड का एक त्वरित कोड लिख रहा था, और मैं आईओ मोनाड में guard function का उपयोग करना चाहता था। हालांकि, no definition of MonadPlus for IO है जिसका अर्थ है कि हम आईओ भूमि में गार्ड का उपयोग नहीं कर सकते हैं। मैंने an example of using the MabyeT transformer to use guard in the Maybe Monad देखा है और फिर सभी आईओ कार्यों को उठाया है, लेकिन अगर मुझे ऐसा नहीं करना है तो मैं वास्तव में ऐसा नहीं करना चाहता हूं।हास्केल आईओ
मैं क्या हो सकता है चाहता हूँ के कुछ उदाहरण:
handleFlags :: [Flag] -> IO()
handleFlags flags = do
when (Help `elem` flags) (putStrLn "Usage: program_name options...")
guard (Help `elem` flags)
... do stuff ...
return()
अगर वहाँ एक गार्ड समारोह (या कुछ इसी तरह) आईओ इकाई में MonadPlus या अन्यथा के लिए एक घोषणा के माध्यम से प्राप्त करने के लिए एक अच्छा तरीका था मैं सोच रहा था । या शायद मैं यह गलत कर रहा हूँ; ऊपर दिए गए फ़ंक्शन में उस सहायता संदेश को लिखने का एक बेहतर तरीका है? धन्यवाद।
(पी एस मैं अगर-तो-और कुछ बयानों लेकिन यह। किसी भी तरह बिंदु को हराने के लिए नहीं विकल्प यह घोंसले की एक बड़ी राशि में परिणाम होगा की एक बहुत कुछ के लिए है कि उल्लेख करने के लिए लगता है इस्तेमाल कर सकते हैं।)
है तो यह एक उत्कृष्ट जवाब है और यह मुझे समझने देता है कि आईओ के लिए मोनाडप्लस वास्तव में क्यों बनाता है त्रुटियों या अनंत लूप के बिना कोई समझ नहीं है। –
@Robert Massaioli: जो कहने के लिए कुछ भी नहीं है * गलत * है। यह एक बिल्कुल सही 'मोनाडप्लस' उदाहरण है, यह 'मोनाडप्लस' त्रुटि के मोनैड के रूप में 'या तो ई' का उपयोग करने के लिए कैसे काम करता है, और मुझे लगता है कि 'आईओ' के लिए ऐसा एक उदाहरण भी मोनैड ट्रांसफार्मर पुस्तकालयों में से एक में मौजूद है। एकमात्र समस्या यह है कि आपको त्रुटियों को पकड़ने के बारे में और अधिक सावधान रहना होगा, क्योंकि 'हो सकता है' या इस तरह के अपवाद, 'मुख्य' तक सभी तरह से बच सकते हैं। –