के बारे में कुछ सामान्य प्रश्न मुझे the documentation for -XUndecidableInstances पता है, लेकिन मैंने सोचा कि मैं एक विस्तार के लिए पूछूंगा।अनिश्चितता सुरक्षित कब सुरक्षित है? जीएचसी एक्सटेंशन
मान लीजिए मैं दो बहु-प्राचल typeclasses (-XMultiParamTypeClasses साथ अनुमति दी)
class Foo a b
class Goo a b
अब
है, मैं एक पैरामिट्रीकृत डेटा प्रकार
data Bar a b
जो मैं Foo
जब का एक उदाहरण बनाना चाहते है लगता है इसके पैरामीटर में से एक Goo
के उदाहरण का हिस्सा है। मुझे यकीन है कि पिछले वाक्य सटीक शब्दावली का उपयोग करता नहीं हूँ, इसलिए यहाँ मैं क्या लिखना चाहते है:
instance (Goo c d) => Foo d (Bar a d)
मैं UndecidableInstances
विस्तार के बिना करने की अनुमति नहीं कर रहा हूँ। क्या मैं सोचने में सही हूं क्योंकि यह उदाहरण c
प्रकार का संदर्भ नहीं देता है?
मैं ...
- बस एक्सटेंशन सक्षम करना चाहिए? क्या कोई इस बात पर विस्तार कर सकता है कि मुझे किस प्रकार की परेशानी मिल सकती है?
Foo
पर एक और पैरामीटर जोड़ें, ताकि अंतिम उदाहरण घोषणाFoo c d (Bar a d)
जैसी कुछ हो जाए? इसके साथ एक समस्या यह है कि मेरे पासFoo
के अन्य उदाहरण हो सकते हैं जो कभी भी इस तरह के "चौथे प्रकार पैरामीटर" का कोई संदर्भ नहीं देते हैं (यानी मेरे कोड के असंबद्ध हिस्सों मेंinstance Foo A B
फॉर्म के उदाहरण हैं), इसलिए ये टूट जाएंगे। मैं अपनी कक्षा को नहीं बल्कि मेरी कक्षा को ठीक कर दूंगा।- पर्याप्त पैरामीटर के साथ एक नई कक्षा
FooGoo
बनाएँ? मुझे लगता है कि मैं उस मामले में खुद को दोहरा रहा हूं, लेकिन कम से कम मैं असंबंधित वर्गों को तोड़ नहीं पाऊंगा।
क्या किसी के पास ज्ञान का कोई शब्द है?
धन्यवाद। यह कुछ हद तक स्पष्टीकरण लाता है। – gspr
+1 'इनकोइन्टेंट इंस्टेंस' को बुराई के रूप में वर्णित करने के लिए +1। –
मुझे लगता है कि 'गुओ सीडी' बाधा 'फू डी (बार विज्ञापन)' उदाहरण को अनुपयोगी बनाती है जब तक कि 'गुओ' में कार्यात्मक निर्भरता 'd -> c' न हो - अन्यथा, संकलक कैसे तय करता है कि 'गो' उदाहरण उपयोग करने के लिए? यदि सभी 'Goo' उदाहरणों में 'c'' प्रकार के चर के रूप में 'c' होता है, तो उस प्रकार पैरामीटर को छोड़ने के लिए @ बारसोप का सुझाव जाने का तरीका है। – mokus