में एक मौजूदा प्रकार का विस्तार मैं भाषा सीखने की और कार्यात्मक प्रोग्रामिंग के साथ और अधिक परिचित पाने के लिए हाल ही में कुछ OCaml प्रोग्रामिंग कर रहा हूँ। हाल ही में, मुझे लगता है कि है कि मैं एक मौजूदा प्रकार का विस्तार करने में सक्षम होना चाहते हैं शुरू कर दिया है (या तो या में अपने ही में से एक का निर्माण), उदाहरण के लिए:OCaml
type bexp =
And of bexp * bexp
| Or of bexp * bexp
| Xor of bexp * bexp
| Not of bexp;;
अब मान लीजिए कि मैं जोड़ना चाहते हैं चलो इस प्रकार के लिए एक नॉप संस्करण, लेकिन केवल नए प्रकार के उपयोग के लिए - विरासत की तरह। अरे, ये बीजगणितीय डेटा प्रकार माना जाता है, है ना? तो क्यों कुछ नहीं:
type nbexp = bexp | Nop nbexp ;;
... लेकिन यह मान्य ओकैमल नहीं है, यह एक वाक्यविन्यास त्रुटि देता है। असल में, जो मैं करने की कोशिश कर रहा हूं वह यह कहता है कि मैं nbexp को सबकुछ शामिल करना चाहता हूं जिसमें बीएक्सपी शामिल है और इसमें एक एनओपी भी शामिल है। मुझे लगता है कि यह संभव नहीं है क्योंकि, उदाहरण के लिए यदि आपने और कन्स्ट्रक्टर का उपयोग किया है तो यह निर्धारित करने का कोई तरीका नहीं होगा कि यह एक बीएक्सपी प्रकार या nbexp प्रकार था या नहीं। (मुझे लगता है कि निर्माता Nop एक nbexp लेने भी समस्याग्रस्त हो सकता है।)
तो वहाँ OCaml में कुछ इस तरह करने के लिए कोई तरीका है? और, क्या यह ऐसी चीज है जो हास्केल में कर सकती है (टाइपक्लास के साथ, शायद)?
करना होगा: https://sites.google.com/site/ocamlopen/ –