2012-05-03 11 views
11

मैंने हास्केल रिकॉर्ड के साथ कुछ मुद्दों के बारे में पढ़ा है, विशेष रूप से, तथ्य यह है कि एक ही मॉड्यूल में दो तत्वों का एक ही नाम नहीं हो सकता है।हास्केल रिकॉर्ड, क्लीनर दृष्टिकोण?

मैं समझता हूँ कि आप इस के आसपास अलग मॉड्यूल होने से काम कर सकते हैं, लेकिन मैं ऐसा नहीं करना चाहता था और इसके बजाय इस दृष्टिकोण की कोशिश की:

class HasX a where 
    x :: a -> X 

data D1 = D1 { d1_x :: X, ... } 
instance HasX D1 where 
    x = d1_x 

data D2 = D2 { d2_x :: X, ... } 
instance HasX D2 where 
    x = d2_x 

(यह केवल करता है, हो जाता है नहीं सेट, मैं था निश्चित रूप से सेट करने के लिए और कोड लिखने की जरूरत है)।

हालांकि, ऐसा लगता है कि यह सब कुछ के लिए वर्ग और आवृत्ति घोषणाएं बॉयलरप्लेट की तरह लगती हैं जो टेम्पलेट हैकेल या कुछ और का उपयोग करके समाप्त होनी चाहिए।

क्या जीएचसी के लिए कोई पुस्तकालय या विस्तार है जो इस तरह के दृष्टिकोण को लिखने के लिए कम गन्दा बनाता है?

+0

हाँ, ओह। फिक्स्ड। – Clinton

+1

यह उससे थोड़ा अधिक जटिल है क्योंकि दोनों फ़ील्ड में एक ही प्रकार नहीं हो सकता है। – augustss

+0

मेरे उद्देश्यों के लिए, मान लें कि उसी नाम वाले फ़ील्ड एक ही प्रकार के हैं। मेरे पास अलग-अलग प्रकार वाले नाम वाले फ़ील्ड नहीं होंगे। – Clinton

उत्तर

5

ऐसा लगता है कि Data.Has आप जो कुछ खोज रहे हैं उसे encapsulates। उनकी शब्दावली में वे सोचते हैं कि उनके Knows टाइप-क्लास आपके Has के करीब है, और यह इंजेक्शन के लिए भी एक हस्ताक्षर प्रदान करता है।

वे किसी समस्या का इलाज करने के लिए लेबलिंग तंत्र का भी उपयोग करते हैं जो मुझे नहीं लगता कि आपने अभी तक विचार किया है: रिकॉर्ड जिनमें फ़ील्ड समान प्रकार हैं। वे इस असंबद्धता के लिए टाइप-लेवल लेबल्स का उपयोग करते हैं।

सुविधा के लिए, वहाँ भी कुछ समर्थन है कि Has-TH

आप ओलेग के कार्यों में अधिक प्रकार स्तरीय लेबल और अन्य रिकार्ड प्रासंगिक सामग्री प्राप्त कर सकते हैं में टेम्पलेट हास्केल के साथ Has उदाहरण के लिए एक जनरेटर प्रदान करता प्रतीत हो रहा है प्रकार जादूगर, जैसे OOHaskell (राल्फ लैमल के साथ भी)।

+0

क्या आप मुझे 'डेटा.हास' (और उस मामले के लिए 'हैश-TH') के लिए कुछ ट्यूटोरियल स्टाइल दस्तावेज़ों में इंगित कर सकते हैं। यह वही दिखता है जो मैं ढूंढ रहा हूं, लेकिन मुझे यकीन नहीं है कि इसे सब एक साथ कैसे रखा जाए। – Clinton

+0

असल में, मुझे यह 'डेटा' हैस के लिए मिला: https://github.com/nonowarn/has/blob/master/examples/Announce04.lhs – Clinton

0

डेटा-एक्सेसर-टेम्पलेट कम से कम सेट/एक्सेस एक्सेसर्स लिखने में मदद कर सकता है। हो सकता है कि कुछ लोग प्रत्येक रिकॉर्ड फ़ील्ड नाम के लिए कक्षाओं और उदाहरणों के उत्पादन के लिए टेम्पलेट हास्केल कोड के साथ आ सकें। हालांकि, मैं टेम्पलेट हास्केल सामान का उपयोग स्वयं नहीं करता हूं। यह आपको जीएचसी, और यहां तक ​​कि विशिष्ट जीएचसी संस्करणों तक भी प्रतिबंधित करता है, क्योंकि टेम्पलेट हास्केल विभिन्न जीएचसी संस्करणों के बीच बदलता है। प्रति मॉड्यूल एक (प्रमुख) रिकॉर्ड होने के कारण वास्तव में भुगतान करता है।

संबंधित मुद्दे