में डेटा प्रकारों का उपयोग करके मैंने इसे एक नया प्रश्न शुरू कर दिया है क्योंकि यह मेरे पिछले प्रश्न से फॉलो-ऑन बन गया है।हास्केल
अगर मैं जो समान कंस्ट्रक्टर्स का बना रहे हैं दो डेटा प्रकार है:
data A = C | Z
data B = C
data C = X | Y
अगर आप देख सकते हैं कि मैं क्या कर रहा हूँ:
data A = X | Y | Z
data B = X | Y
कोई रास्ता नहीं मैं किसी भी तरह इस का प्रतिनिधित्व कर सकते है - मैं एक्स को समूहबद्ध करने की कोशिश कर रहा हूं वाई एक डेटा प्रकार में, जिसे कई अन्य डेटा प्रकारों द्वारा उपयोग किया जा सकता है। मुझे यह अनुमति देने के लिए कंपाइलर नहीं मिल रहा है, या यदि ऐसा होता है, तो मैं एक्स या वाई के खिलाफ पैटर्न-मिलान नहीं कर सकता, केवल सी ??
मुझे त्रुटि संदेश मिलता है कि सी को कई बार घोषित किया गया है।
मैंने सोचा कि मैं शायद प्रकार का उपयोग कर सकता हूं, लेकिन वे कई टाइपिंग की अनुमति नहीं देते हैं।
संपादित
यहां तक कि अगर मैं लंबा रास्ता तय की घोषणा (नीचे) की तरह, यह अभी भी संकलन नहीं है और कहते हैं एक्स और वाई कई घोषणाओं है:
data A = X | Y | Z
data B = X | Y
क्या आप के लिए पूछ रहे हैं 'एक की एक उप-प्रकार होगा '। इसे कीवर्ड 'डेटा' के साथ घोषित नहीं किया जाएगा, जो एक नए प्रकार का निर्माण करता है, जो पूर्व मौजूदा प्रकारों से अलग होता है। मुझे नहीं लगता कि हास्केल की ऐसी कोई सुविधा है, लेकिन मैं सभी हास्केल एक्सटेंशन के साथ एयू फ़ैट नहीं हूं। – Gilles
@ गिल्स: नहीं, हास्केल में कोई सबटाइप पॉलीमोर्फिज्म नहीं है। इसमें केवल पैरामीट्रिक पॉलिमॉर्फिज्म है, और टाइप-क्लास के माध्यम से एड-हाॉक पॉलिमॉर्फिज्म है। सबसे नज़दीकी चीज जो आप प्राप्त कर सकते हैं वह एक अस्तित्वहीन प्रकार है, लेकिन यह लगभग पूरी तरह से अलग है, लेकिन काफी नहीं है। –
मैं इसे एक उत्तर के रूप में रखूंगा, लेकिन क्योंकि यह काफी नहीं है .. आप एक टाइपक्लास घोषित करके और फिर उन "सामान्य चीजों" के लिए आवश्यक संचालन के जरिए जो चाहते हैं उसके करीब पहुंच सकते हैं। इस समस्या को हल करने के लिए आसपास चीजों को फ़्लिप करने का यह एक बहुत ही आम तरीका है ( –