2013-07-17 15 views
9

के लिए न्यूनतम पूर्ण परिभाषा एनोटेशन मैंने अपने डेटा प्रकार के लिए NumericPreludeRing उदाहरण परिभाषित किया, लेकिन one या fromInteger को परिभाषित करने में विफल रहा। जब मैंने प्रोग्राम संकलित किया, तो मुझे कोई चेतावनी नहीं मिली क्योंकि Ring कक्षा में पारस्परिक रूप सेone और fromInteger के लिए कार्यान्वयन है। नतीजा: एक ढेर अतिप्रवाह जो खोजना बहुत मुश्किल था। (वास्तव में, जब -XRebindableSyntax, आंकिक स्थिरांक पर fromInteger का उपयोग कर स्पष्ट होने की ज़रूरत नहीं है, तो यह काफी यह पता लगाने की fromInteger ढेर अतिप्रवाह के अपराधी था मुश्किल था।)हास्केल

वहाँ एक रास्ता डेवलपर्स के लिए कक्षाएं टिप्पणी करने के लिए के लिए है एक न्यूनतम पूर्ण परिभाषा इंगित करें? यह बहुत उपयोगी होगा अगर जीएचसी उन उदाहरणों के लिए चेतावनी दे सकता है जो इस परिभाषा को पूरा नहीं करते हैं, जबकि डिफ़ॉल्ट कार्यान्वयन के पूर्ण सेट की अनुमति देते हैं। यदि नहीं, तो यहां स्वीकार्य अभ्यास क्या है? क्या डेवलपर्स को (ए?) डिफ़ॉल्ट रूप से बिना किसी डिफ़ॉल्ट सेट के सेट को छोड़ना चाहिए ताकि उपयुक्त चेतावनियां फेंक दी जाए, या क्या हम उपयोगकर्ताओं पर आरटीएफएम पर भरोसा करते हैं?

उत्तर

2

दो दृष्टिकोण मैंने देखा है मूल रूप से कर रहे हैं:

  1. चूक प्रदान करें। प्रलेखन में न्यूनतम पूर्ण परिभाषा निर्दिष्ट करें (अक्सर आपके पास विकल्प होते हैं; पारस्परिक रूप से रिकर्सिव डिफ़ॉल्ट के साथ आपको केवल रिकर्सन को तोड़ने के लिए पर्याप्त विधियों को लागू करने की आवश्यकता होती है, लेकिन आप अपनी पसंद के किसी भी व्यक्ति को चुन सकते हैं)। प्रलेखन पढ़ने के लिए उदाहरण लेखकों की अपेक्षा करें।

  2. डिफ़ॉल्ट निर्दिष्ट न करें, लेकिन defaultImplementationOfFoo जैसे नामों के साथ फ़ंक्शंस प्रदान करें। यह मूल रूप से डिफ़ॉल्ट लेखक को डिफ़ॉल्ट रूप से डिफ़ॉल्ट रूप से कार्यान्वित करने की आवश्यकता के बिना, डिफ़ॉल्ट रूप से डिफ़ॉल्ट रूप से पूछने के लिए मजबूर करता है। लेकिन उन्हें अभी भी यह जानने के लिए दस्तावेज पढ़ना होगा कि वे कार्य मौजूद हैं।