के साथ सही abstractions प्राप्त करने में मुझे Haskell के प्रकार प्रणाली का उपयोग कर परेशानी हो रही है। मुझे यकीन है कि मेरी समस्या एक आम है, लेकिन मुझे नहीं पता कि मेरे प्रोग्राम के लिए विशिष्ट शर्तों को छोड़कर इसका वर्णन कैसे किया जाए।हास्केल के प्रकार सिस्टम
अवधारणाओं मैं प्रतिनिधित्व करने के लिए कोशिश कर रहा हूँ कर रहे हैं:
datapoints, कई रूपों में से एक लेता है, जिनमें से प्रत्येक, उदा (आईडी, मामलों की संख्या, नियंत्रण की संख्या), (आईडी, मामलों की संख्या, आबादी)
डाटापॉइंट्स और कुल जानकारी के सेट: (आईडी के कुल मामलों, कुल नियंत्रण, कुल नियंत्रण), जोड़ने/अंक को हटाने
मैं बिंदु प्रकार के एक वर्ग है और अपने स्वयं के प्रकार के रूप में बिंदु के प्रत्येक किस्म निर्धारित कर सकते हैं (ताकि बिंदु के प्रत्येक किस्म के लिए, वहाँ सेट के एक इसी किस्म है)। वैकल्पिक रूप से, मेरे पास प्रत्येक बिंदु के लिए एक बिंदु प्रकार और एक अलग डेटा कन्स्ट्रक्टर हो सकता है। इसी तरह अंक के सेट के लिए।
प्रकार वर्गों के साथ: से बचना समारोह नाम टक्कर कष्टप्रद हो जाएगा
मैं प्रत्येक दृष्टिकोण के साथ कम से कम एक चिंता का विषय है। उदाहरण के लिए, दोनों प्रकार के अंक "मामलों की संख्या" निकालने के लिए फ़ंक्शन का उपयोग कर सकते हैं, लेकिन टाइप क्लास को इस फ़ंक्शन की आवश्यकता नहीं हो सकती क्योंकि कुछ अन्य बिंदु प्रकार में मामले नहीं हो सकते हैं।
प्रकार कक्षाओं के बिना: मैं डेटा कन्स्ट्रक्टर को, प्वाइंट मॉड्यूल (अन्य मूल्य, एक नया मूल्य बनाने के लिए सुरक्षित कार्य प्रदान करने) से निर्यात नहीं करना चाहता हूं। डेटा कन्स्ट्रक्टर के बिना, मैं यह निर्धारित करने में सक्षम नहीं होगा कि दिए गए प्वाइंट मान किस प्रकार के हैं।
कौन सा डिज़ाइन इन (और अन्य) समस्याओं को कम करने में मदद कर सकता है?
किन परिस्थितियों आप अपने डेटा अंक इसी तरह का इलाज करने की आवश्यकता है में? आप कहते हैं कि प्रत्येक फॉर्म को अपनी खुद की सेट की आवश्यकता होगी, और "मामलों की संख्या" जैसे ऑपरेशंस सार्वभौमिक नहीं हैं। –