7

मैं मौजूदा लोगों के डिज़ाइनों के आधार पर अपनी छोटी लाइब्रेरी को लागू करके मोनाड ट्रांसफार्मर को समझने की कोशिश कर रहा हूं।एमटीएल लाइब्रेरी की कौन सी भाषा एक्सटेंशन की आवश्यकता है?

जो मैं फंस गया हूं वह भाषा एक्सटेंशन है। MonadError में, उल्लेख किया गया एकमात्र विस्तार UndecidableInstances है। हालांकि, मुझे FunctionalDependencies और FlexibleInstances का उपयोग किए बिना संकलित करने के लिए समान कोड नहीं मिल सकता है।

class (Monad m) => MonadError e m | m -> e where 

और एक लचीला उदाहरण:

instance MonadError e m => MonadError e (MaybeT m) where 

कैसे MonadError कोड अतिरिक्त दो एक्सटेंशन से बचने करता

उदाहरण है कि मेरा मानना ​​है कि FunDeps की आवश्यकता है?

उत्तर

11

आपको स्रोत फ़ाइल में सभी एक्सटेंशन को स्पेल करने की आवश्यकता नहीं है। सभी/अधिकांश मॉड्यूल द्वारा उपयोग किए जाने वाले सामान्य एक्सटेंशन को परियोजना की कैबल फ़ाइल में सूचीबद्ध किया जा सकता है। mtl's case में:

extensions: 
    MultiParamTypeClasses 
    FunctionalDependencies 
    FlexibleInstances 
+7

ध्यान दें: आप ऐसा कर सकते हैं, लेकिन कई लोग एक फ़ाइल में 'LANGUAGE' pragmas साथ एक्सटेंशन उल्लेख करने के लिए पसंद करते हैं। इस तरह से फ़ाइलें स्टैंडअलोन और ghci-able हो सकती हैं, और यह देखना आसान है कि प्रत्येक विशेष फ़ाइल किस एक्सटेंशन का उपयोग कर रही है, क्योंकि आपको प्रत्येक फ़ाइल के लिए प्रत्येक एक्सटेंशन को चालू करने की आवश्यकता नहीं है। यह इस बात पर निर्भर करता है कि आप किस एक्सटेंशन का उपयोग कर रहे हैं, और कितनी व्यापक रूप से। – shachaf

+1

@ शचाफ: बिलकुल। अच्छी बात। मैं भी, व्यक्तिगत रूप से उन सभी स्रोत फ़ाइल में प्रत्येक एक्सटेंशन को स्पेल करना पसंद करता हूं जो उनका उपयोग करता है। – shang

+2

दोनों उपयोगी हैं। मुझे लगता है कि सुझाए गए दृष्टिकोण को 'LANGUAGE' प्रागमा का उपयोग करके प्रति फ़ाइल की आवश्यकता के अनुसार एक्सटेंशन को स्पेल करना होगा, और कैबल के' अन्य एक्सटेंशन 'फ़ील्ड में पैकेज के लिए आवश्यक एक्सटेंशन रिकॉर्ड करना होगा। 'अन्य-एक्सटेंशन' सूची डिफ़ॉल्ट रूप से सक्षम नहीं है, लेकिन यह अभी भी यह समझने में सहायता कर सकती है कि पैकेज की कौन सी एक्सटेंशन आवश्यकताएं हैं (बिना सभी स्रोत फ़ाइलों को देखने के लिए)। – kosmikus

संबंधित मुद्दे

 संबंधित मुद्दे