मैं मौजूदा लोगों के डिज़ाइनों के आधार पर अपनी छोटी लाइब्रेरी को लागू करके मोनाड ट्रांसफार्मर को समझने की कोशिश कर रहा हूं।एमटीएल लाइब्रेरी की कौन सी भाषा एक्सटेंशन की आवश्यकता है?
जो मैं फंस गया हूं वह भाषा एक्सटेंशन है। MonadError में, उल्लेख किया गया एकमात्र विस्तार UndecidableInstances
है। हालांकि, मुझे FunctionalDependencies
और FlexibleInstances
का उपयोग किए बिना संकलित करने के लिए समान कोड नहीं मिल सकता है।
class (Monad m) => MonadError e m | m -> e where
और एक लचीला उदाहरण:
instance MonadError e m => MonadError e (MaybeT m) where
कैसे MonadError
कोड अतिरिक्त दो एक्सटेंशन से बचने करता
उदाहरण है कि मेरा मानना है कि FunDeps की आवश्यकता है?
ध्यान दें: आप ऐसा कर सकते हैं, लेकिन कई लोग एक फ़ाइल में 'LANGUAGE' pragmas साथ एक्सटेंशन उल्लेख करने के लिए पसंद करते हैं। इस तरह से फ़ाइलें स्टैंडअलोन और ghci-able हो सकती हैं, और यह देखना आसान है कि प्रत्येक विशेष फ़ाइल किस एक्सटेंशन का उपयोग कर रही है, क्योंकि आपको प्रत्येक फ़ाइल के लिए प्रत्येक एक्सटेंशन को चालू करने की आवश्यकता नहीं है। यह इस बात पर निर्भर करता है कि आप किस एक्सटेंशन का उपयोग कर रहे हैं, और कितनी व्यापक रूप से। – shachaf
@ शचाफ: बिलकुल। अच्छी बात। मैं भी, व्यक्तिगत रूप से उन सभी स्रोत फ़ाइल में प्रत्येक एक्सटेंशन को स्पेल करना पसंद करता हूं जो उनका उपयोग करता है। – shang
दोनों उपयोगी हैं। मुझे लगता है कि सुझाए गए दृष्टिकोण को 'LANGUAGE' प्रागमा का उपयोग करके प्रति फ़ाइल की आवश्यकता के अनुसार एक्सटेंशन को स्पेल करना होगा, और कैबल के' अन्य एक्सटेंशन 'फ़ील्ड में पैकेज के लिए आवश्यक एक्सटेंशन रिकॉर्ड करना होगा। 'अन्य-एक्सटेंशन' सूची डिफ़ॉल्ट रूप से सक्षम नहीं है, लेकिन यह अभी भी यह समझने में सहायता कर सकती है कि पैकेज की कौन सी एक्सटेंशन आवश्यकताएं हैं (बिना सभी स्रोत फ़ाइलों को देखने के लिए)। – kosmikus