सबसे पहले, यह प्रश्न हास्केल के लिए 100% विशिष्ट नहीं है, टाइपक्लास, इंटरफेस और प्रकार के सामान्य डिज़ाइन पर टिप्पणी करने के लिए स्वतंत्र महसूस करें।हास्केल फ़ंक्शन हस्ताक्षर में डेटाटाइप के टाइपक्लास को घुमाने में क्यों रोकता है?
मैं LYAH - creating types and typeclasses निम्नलिखित पढ़ रहा हूँ कि मैं पारित होने के बारे में अधिक जानकारी के लिए देख रहा हूँ है:
Data (Ord k) => Map k v = ...
हालांकि, यह हास्केल में एक बहुत मजबूत सम्मेलन है में बाधाओं typeclass जोड़ने कभी नहीं करने के लिए डेटा घोषणाएं क्यूं कर? ठीक है, क्योंकि हमें बहुत लाभ नहीं होता है, लेकिन हम बाधाओं को और अधिक कक्षा लिखते हैं, भले ही हमें की आवश्यकता न हो। अगर हम मानचित्र के वी के लिए डेटा घोषणा में ऑर्ड के बाधा डालते हैं या नहीं करते हैं, तो हमें को फ़ंक्शन में बाधा डालना होगा, जो नक्शा में कुंजियां हो सकती हैं। लेकिन अगर हम डेटा घोषणा में बाधा डाल नहीं करते, हम कार्यों कि परवाह नहीं है की प्रकार घोषणाओं में (Ord ट) => डाल करने के लिए कुंजी आदेश दिया जा सकता है कि क्या नहीं है या नहीं। इस तरह के फ़ंक्शन का एक उदाहरण है, जो कि मैपिंग लेता है और इसे सहयोगी सूची में परिवर्तित करता है। इसका प्रकार हस्ताक्षर toList :: मैप के ए -> [(के, ए)] है। यदि मानचित्र केवी के पास डेटा घोषणा में एक प्रकार की बाधा थी, तो लिस्ट के लिए प्रकार को सूची :: (Ord k) => मानचित्र का -> [(के, ए)] होना चाहिए, भले ही फ़ंक्शन आदेश के अनुसार कुंजी की तुलना नहीं करता है।
यह पहली बार तार्किक लगता है - लेकिन इस प्रकार से जुड़े टाइपक्लास को उल्टा करने के लिए कोई उल्टा नहीं है? यदि टाइपक्लास प्रकार का व्यवहार है, तो व्यवहार को प्रकार (कार्यों के माध्यम से) के उपयोग से क्यों परिभाषित किया जाना चाहिए, न कि स्वयं का प्रकार? मुझे लगता है कि कुछ मेटा-प्रोग्रामिंग हैं जो इसका उपयोग कर सकती हैं, और यह निश्चित रूप से अच्छा और वर्णनात्मक कोड-दस्तावेज है। इसके विपरीत, क्या यह अन्य भाषाओं में एक अच्छा विचार होगा? क्या यह ऑब्जेक्ट निर्दिष्ट करने के लिए आदर्श होगा कि वस्तु को विधि पर अनुरूप होना चाहिए, जैसे कि अगर कॉलर द्वारा विधि का उपयोग नहीं किया जाता है तो ऑब्जेक्ट को इंटरफ़ेस के अनुरूप नहीं होना चाहिए? इसके अलावा, हास्केल का अनुमान नहीं लगाया जा सकता है कि Foo
का उपयोग कर एक फ़ंक्शन को टाइप Foo
की घोषणा में टाइप की गई टाइपक्लास बाधाओं को खींचना है? क्या यह सक्षम करने के लिए एक प्रगति है?
पहली बार मैंने इसे पढ़ा, यह एक "हैक (या कामकाज) प्रतिक्रिया" को स्वीकार किया। कुछ विचारों के साथ दूसरे पढ़ने पर, यह चालाक लग रहा था। तीसरे पढ़ने पर, ओओ दुनिया के लिए एक समझौता ड्राइंग, यह फिर से एक हैक की तरह लग रहा था।
तो मैं यहां हूं।
मैं हास्केल के लिए काफी नया हूं, एक संक्षिप्त विवरण क्या है कि एक जीएडीटी सहायक (या लिंक) होता। –
मैंने उस सेक्शन को थोड़ा सा काम किया है, और जीएडीटी के लिए जीएचसी दस्तावेज के लिए एक लिंक जोड़ा है। यदि कोई और जीएडीटी के बेहतर स्पष्टीकरण पर एक दरार लेना चाहता है, तो इसका स्वागत होगा! – mithrandi