2010-03-13 7 views
9

में मनमानी कार्यों को प्राप्त करना जब हास्केल में व्युत्पन्न उदाहरणों के साथ काम करते हैं, तो क्या मनमानी प्रकारों के लिए कार्यों को प्राप्त करना संभव है, या क्या हम विशेष कार्यों तक सीमित हैं?हास्केल

+0

हेहे, +1 अगर आपको यह पता चला क्योंकि आप उम्मीद कर रहे थे कि आप एडीटी के लिए 'टेस्ट.किक चेक। अनियंत्रित' प्राप्त कर सकते हैं। :) –

उत्तर

9

आप हैकेल 98: ईक, ऑर्ड, एनम, आईएक्स, बाउंड, रीड, और शो में निम्नलिखित कक्षाओं के उदाहरण प्राप्त कर सकते हैं।

ghc एक्सटेंशन का उपयोग करके आप निम्न वर्गों के उदाहरण भी प्राप्त कर सकते हैं: टाइप करने योग्य, डेटा, फ़ंक्शन, फोल्डबल और ट्रैवर्सबल। एक ghc एक्सटेंशन भी है जो एक नए प्रकार को इसके कार्यान्वयन प्रकार से उदाहरण प्राप्त करने की अनुमति देता है।

आप सामान्य कारण के लिए मनमाने ढंग से कक्षाओं के उदाहरण प्राप्त नहीं कर सकते हैं कि हैकेल को यह नहीं पता होगा कि प्रश्न के बारे में विशेष ज्ञान के बिना आवश्यक कार्यों को कैसे उत्पन्न किया जाए।

+0

लेकिन जीएचसी कुछ साधारण मामलों को संभाल सकता है। यदि आप कहते हैं कि 'न्यूटाइप बार = बार फू' और फू के पास एक क्वाक्स इंस्टेंस है, तो सामान्यीकृत न्यूटाइपडिविंग आपके लिए बार के लिए क्वाक्स इंस्टेंस प्राप्त कर सकता है। बेशक, यह सिर्फ मामूली अनचाहे है, लेकिन यह कुछ भी नहीं है। – jrockway

6

कंपाइलर जानता है कि आपके लिए कैसे प्राप्त किया जाए, इसके संदर्भ में आप विशेष कक्षाओं तक ही सीमित हैं। प्रीप्रोसेसर, या टेम्पलेट हास्केल का उपयोग करके, यदि आप विशेष प्रकार के कार्यों के कार्यान्वयन को प्राप्त करने के सामान्य दृष्टिकोणों के बारे में जानते हैं, तो आप स्वयं नए व्युत्पन्न तंत्र को कोड कर सकते हैं।

6

अन्य दो उत्तरों सही हैं। लेकिन अगर आपको और चाहिए, तो हैकेज पर कुछ पैकेज हैं जो अधिक संभाल सकते हैं। मुझे Data.Derive बहुत पसंद है, क्योंकि आप सीधे स्रोत कोड उत्पन्न कर सकते हैं (संगतता के लिए) या टेम्पलेट हास्केल में इसे संकलित समय पर करने के लिए इसे हुक कर सकते हैं। कक्षाओं की एक विस्तृत श्रृंखला पहले ही समर्थित है, और अपने लिए समर्थन जोड़ना बहुत आसान है। सारांश: विज्ञापन एक बहुत ठीक पुस्तकालय :-)

+0

अब मैं इसे वापस लेता हूं। मैंने उस समय अपने आप को समर्थन जोड़ने की कोशिश नहीं की थी, लेकिन मुझे लगता है कि यह आसान था। यह नहीं है; इसमें लाइब्रेरी को पुन: संकलित करना शामिल है जो मैं बता सकता हूं। लेकिन अभी भी अंतर्निहित समर्थन अच्छा और पूरा है। – luqui

4

के लिए पिच को डॉन की जवाब देने के लिए जोड़ने के लिए: डेटाटाइप्स के लिए कस्टम कार्यक्षमता पाने generic programming कहा जाता है और इस बारे में lot of literature है। प्रीप्रोसेसर और टेम्पलेट हास्केल एकमात्र समाधान नहीं हैं; अन्य विकल्पों के लिए साहित्य की सूची वाले सिंहावलोकन पत्रों में से एक देखें।