मैं वास्तव में यह जानने में दिलचस्पी रखता हूं कि मतभेद कहां हैं, और अधिक आम तौर पर, विहित उपयोग के मामलों की पहचान करने के लिए जहां HLists का उपयोग नहीं किया जा सकता है (या बल्कि, नियमित सूचियों पर कोई लाभ नहीं मिलता है)।
(मुझे पता है कि TupleN
स्काला में 22 (मुझे विश्वास है) हैं , जबकि किसी को केवल एक ही एचएलिस्ट की जरूरत है, लेकिन यह वैचारिक अंतर नहीं है, जिसमें मुझे दिलचस्पी है।)
मैंने नीचे पाठ में कुछ प्रश्नों को चिह्नित किया है। यह वास्तव में उन्हें जवाब देने के लिए आवश्यक नहीं हो सकता है, वे उन चीजों को इंगित करने के लिए अधिक हैं जो मेरे लिए अस्पष्ट हैं, और कुछ दिशाओं में चर्चा का मार्गदर्शन करने के लिए।
प्रेरणा
मैं हाल ही में (के रूप में द्वारा प्रदान की, उदाहरण के लिए, जहां लोगों को HLists उपयोग करने के लिए सुझाव दिया इतने पर जवाब के एक जोड़े को देखा है निराकार में किसी हटाए गए जवाब भी शामिल है), इस सवाल का । इसने इस चर्चा को जन्म दिया , जिसने बदले में इस प्रश्न को जन्म दिया।
पहचान
यह मुझे लगता है, कि hlists केवल तब उपयोगी होते हैं जब आप तत्वों की संख्या और उनके सटीक प्रकारों को सांख्यिकीय रूप से जानते हैं। संख्या वास्तव में महत्वपूर्ण नहीं है, लेकिन यह संभावना नहीं लगती है कि आपको कभी भी अलग-अलग लेकिन सांख्यिकीय रूप से ज्ञात प्रकारों के तत्वों के साथ एक सूची तैयार करने की आवश्यकता है, लेकिन यह कि आप सांख्यिकीय रूप से उनकी संख्या नहीं जानते हैं। प्रश्न 1: क्या आप ऐसा उदाहरण भी लिख सकते हैं, उदाहरण के लिए, लूप में? मेरा अभिप्राय यह है कि एक अज्ञात रूप से अज्ञात संख्या के साथ मनमाने ढंग से सटीक सूची होना (किसी दिए गए वर्ग पदानुक्रम के लिए मनमाना सापेक्ष) केवल संगत नहीं है।
HLists बनाम ट्यूपल्स
यदि यह सच है, अर्थात, आप स्टेटिक रूप से संख्या और प्रकार जानते हैं - प्रश्न 2: क्यों न केवल n-tuple का उपयोग करें? निश्चित रूप से, आप टाइप कर सकते हैं मानचित्र और एक HList पर मोड़ो (जो आप भी कर सकते हैं, लेकिन प्रकारों पर नहीं , इसकी सहायता से एक टपल पर productIterator
), लेकिन चूंकि संख्या और प्रकार के तत्व सांख्यिकीय रूप से ज्ञात हैं, आप शायद केवल टपल तत्वों का उपयोग कर सकते हैं सीधे और संचालन करते हैं।
दूसरी ओर, यदि f
आप जिस कार्य को किसी सूची में रखते हैं, तो वह इतना सामान्य होता है कि वह सभी तत्वों को स्वीकार कर लेता है - प्रश्न 3: इसका उपयोग क्यों नहीं करते productIterator.map
? ठीक है, एक दिलचस्प अंतर विधि ओवरलोडिंग से आ सकता है: यदि हमारे पास कई अतिभारित हैं f
, तो हिस्टल द्वारा प्रदान की जाने वाली मजबूत प्रकार की जानकारी (उत्पादक के विपरीत) कंपाइलर को अधिक विशिष्ट चुनने की अनुमति दे सकती है f
। हालांकि, मुझे यकीन नहीं है कि अगर वास्तव में स्काला में काम किया जाएगा, क्योंकि विधियां और कार्य समान नहीं हैं।
HLists और उपयोगकर्ता इनपुट
एक ही धारणा पर निर्माण, अर्थात्, आपको संख्या और तत्वों के प्रकार को सांख्यिकीय रूप से जानने की आवश्यकता है - प्रश्न 4: क्या hlists का उपयोग उन स्थितियों में किया जा सकता है जहां तत्व किसी भी प्रकार के उपयोगकर्ता सहभागिता पर निर्भर करते हैं? उदाहरण के लिए, एक पाश के अंदर तत्वों के साथ एक सूची को आबाद करने की कल्पना करें; तत्वों को कहीं से पढ़ा जाता है (यूआई, कॉन्फ़िगर फ़ाइल, अभिनेता इंटरैक्शन, नेटवर्क) जब तक कि एक निश्चित स्थिति नहीं होती है। हिटलर का प्रकार क्या होगा? इंटरफ़ेस विनिर्देशन के लिए समान है getElements: HList [...] जो सांख्यिकीय रूप से अज्ञात लंबाई की सूचियों के साथ काम करना चाहिए, और जो कि सिस्टम A में घटक A को घटक B से ऐसे मनमाने तत्वों की सूची प्राप्त करने की अनुमति देता है।