मुझे आश्चर्य है कि मुझे कहीं भी इसका जवाब नहीं मिला।त्रुटि फ़ंक्शन पर कॉल को कैसे पकड़ें (और अनदेखा करें)?
मैं एक roguelike लिख रहा हूँ और मैं हैकेज से ncurses पुस्तकालय का उपयोग कर रहा हूँ, जो ncurses पुस्तकालय के चारों ओर एक बहुत अच्छा रैपर है। अब ncurses में यह quirk है, जहां आप निचले दाएं चरित्र को लिखने का प्रयास करते हैं, ऐसा करता है, तो यह कर्सर को अगले चरित्र पर ले जाने की कोशिश करता है, तो यह विफल हो जाता है क्योंकि इसे स्थानांतरित करने के लिए कहीं भी नहीं है। यह एक त्रुटि मान देता है जिसे आप केवल अनदेखा कर सकते हैं।
मेरी समस्या यह है कि हैकेल ncurses लाइब्रेरी लेखक सभी कॉल पर किसी भी त्रुटि के लिए कर्तव्यपूर्वक जांच करता है, और जब कोई होता है, तो वह कॉल करता है: त्रुटि "drawText: आदि इत्यादि"।
अन्य भाषाओं में, सी या पायथन जैसे, इस के आसपास पाने के लिए आपको त्रुटि को अनदेखा करने या पकड़ने और अपवाद को अनदेखा करने के लिए मजबूर होना पड़ता है, लेकिन मेरे जीवन के लिए मैं यह नहीं समझ सकता कि इसे हैकेल में कैसे किया जाए। त्रुटि त्रुटि अप्राप्य है?
यदि मुझे करना है तो मैं उस फ़ंक्शन पर त्रुटियों की जांच न करने के लिए स्थानीय रूप से लाइब्रेरी को संशोधित कर दूंगा, लेकिन मुझे ऐसा करने से नफरत है। मैं किसी भी कामकाज के लिए भी खुला हूं जो मुझे कर्सर को घुमाने के बिना उस अंतिम चरित्र को आकर्षित करने की अनुमति देगा, लेकिन मुझे नहीं लगता कि यह संभव है।
"पकड़ो" के लिए होगल [1]। दूसरा लिंक नीचे। [1] http://haskell.org/hoogle/?hoogle=catch –
दुर्भाग्य से प्रश्न में त्रुटि IO monad में नहीं है। वैसे यह आईओ में शुरू होता है, फिर आप रनकर्स जाते हैं, जो शापित मोनड है, फिर अपडेट विन्डो, जो अद्यतन मोनड है। इसलिए मुझे नहीं लगता कि पॉल का जवाब काम करेगा। लेकिन लुक्की के दिखने की संभावना है और जब मैं घर आऊंगा तो मैं कोशिश करूँगा। –
ncurses को देखकर मुझे लगता है कि यह काम नहीं करेगा। 'drawText' 'त्रुटि' को कॉल नहीं करता है, यह सीधे सी समारोह में प्रतिनिधि करता है। और यह 'अपडेट' मोनैड में लौटाता है, जो 'रीडर टी विंडो आईओ ए' = 'विंडो -> आईओ ए' है, इसलिए 'असुरक्षित क्लेनअप' केवल काम करने जा रहा है अगर यह * फ़ंक्शन * उत्पन्न करते समय त्रुटियों पर न हो, न कि जब कार्रवाई चलाना (असंभव)। मुझे लगता है कि आपके विकल्प हैं: शीर्ष स्तर पर आईओ में त्रुटि को पकड़ें, या शाप स्रोत को खोलें ताकि आपको अधिक स्थानीय 'पकड़' फ़ंक्शन इंजेक्ट किया जा सके। (यह आसानी से किया जा सकता है, बस encapsulation तोड़ता है) – luqui