मैं हैकेल में एक कार्यात्मक भाषा के लिए एक दुभाषिया बनाने की कोशिश कर रहा हूं (मैं भाषा में नया हूं)। मैं शायद कम से कम एक अजीब मिश्रण और सुविधा का अजीब मिश्रण बना रहा हूं - कोई सार डेटा प्रकार नहीं, लेकिन मैं सजातीय सूचियां बनाने की क्षमता प्रदान करना चाहता हूं।हास्केल में एक भाषा को कार्यान्वित करना: समरूप सूची
तो मेरे मूल चर data Datum = DatInt Int | DatDbl Double | DatBool Bool
हैं और मुझे एहसास हुआ है कि मुझे बिल्कुल यकीन नहीं है कि सजातीय सूचियों का प्रतिनिधित्व कैसे किया जाए। एक कन्स्ट्रक्टर List Datum
जोड़ना या इस तरह का कुछ एक विषम सूची बना देगा, और प्रत्येक प्रकार के लिए एक अलग सूची बनायेगा, यानी ListInt [Int] | ListDbl [Double]
सूचियों की सूचियों को रोक देगा।
एक सजातीय सूची का प्रतिनिधित्व करने के लिए सबसे अच्छा तरीका क्या होगा?
के लिए आप [डाटुम]' सजातीय सूचियों के लिए, यहां तक कि यह सिद्धांत रूप में विषम लोगों पकड़ रूप में अच्छी तरह सकता है। यदि आप इसके बजाय _statically_ गारंटी देना चाहते हैं कि ऐसी सूची एकरूप है, तो आपको शायद जीएडीटी और संभावित रूप से अस्तित्व के प्रकार की आवश्यकता होगी। यदि आप हास्केल के लिए नए हैं, तो शायद पहले अपने सरलतापूर्ण नो-स्टेटिक-गारंटी तरीके से अपना दुभाषिया खत्म करना बेहतर होगा। यदि आप साहसी महसूस करते हैं, तो आप फैनसीयर प्रकारों पर जाने का प्रयास कर सकते हैं। – chi
दरअसल, आपका वर्तमान ढांचा आपको किसी भी प्रकार की गारंटी को एन्कोड करने का कोई मौका नहीं देता है। यदि आप 'फंक्शन' कन्स्ट्रक्टर जोड़ते हैं, तो आप यह सुनिश्चित करने में सक्षम नहीं होंगे कि फ़ंक्शंस सही प्रकारों पर लागू होते हैं। – dfeuer
@chi मैं भाषा विस्तार का सहारा लेते हुए, आदर्श प्रकार की गारंटी प्रदान करना चाहता हूं। क्या यह सभी के लिए संभव है? – drowdemon