2011-01-09 15 views
6

Ive कुछ उत्तरों (यहां SO में) आती है और कहती है कि हैस्केल के पास इसके प्रकार के सिस्टम में कई "अंधेरे कोनों" हैं, और कुछ गंदे छेद भी हैं। क्या कोई इस पर विस्तार कर सकता है?हास्केल के टाइप-सिस्टम में समस्याएं

अग्रिम

+4

उन उत्तरों के लिंक पोस्ट करने के लिए देखभाल? –

+1

अच्छी तरह से, http://stackoverflow.com/questions/3770774/what-language-to-learn-after-haskell, और http://stackoverflow.com/questions/822752/should-i-learn-haskell-or- f-if-i-already-know-ocaml/823338 # 823338 – Ishihara

+0

मुझे लगता है कि 'ज़िप 2, ज़िप 3, ज़िप 4' आदि की आवश्यकता कुछ हद तक समस्याग्रस्त है? –

उत्तर

13

मुझे लगता है मैं इस उत्तर देना चाहिए, खासकर जब से दो लोगों को अब तक मेरी टिप्पणी का गलत मतलब निकाला गया है ...

गैर समाप्ति के बारे में, सवाल में टिप्पणी नाटकीय प्रभाव के लिए मामूली अतिशयोक्ति था, और गैर-समाप्ति के लिए भेजा पर स्तर पर। यह हास्केल की तुलना प्रमेय प्रोवर्स से करने के संदर्भ में किया गया था, जिसने टाइप-लागू किए गए शुद्धता गुणों का उल्लेख किसी विशेष रूप से सराहना की थी। उस अर्थ में, अन्यथा खाली प्रकारों में रहने वाले ⊥ की उपस्थिति एक "दोष" है, क्योंकि यह A -> B जैसे किसी दिए गए अर्थ को बदलती है, "ए को दिया गया है, एक बी उत्पन्न करता है" में "ए को दिया जाता है, या तो बी या क्रैश उत्पन्न करता है कार्यक्रम "जो स्पष्ट कारणों से है, सबूत-सही-सहीता दृष्टिकोण से कुछ हद तक कम संतुष्ट है।

यह लगभग सभी दिन-प्रतिदिन प्रोग्रामिंग के लिए पूरी तरह से अप्रासंगिक है और किसी अन्य सामान्य उद्देश्य वाली भाषा से भी बदतर नहीं है, बेशक, ट्यूरिंग-पूर्णता के लिए गैर-समाप्ति की संभावना आवश्यक है।

मुझे UndecidableInstances के साथ कोई समस्या नहीं है। असल में, यह मुझे मूल्य स्तर पर ⊥ से कम परेशान करता है क्योंकि यह तैयार कार्यक्रम नहीं, संकलन करते समय केवल जीएचसी को दुर्घटनाग्रस्त करता है। OverlappingInstances एक और मामला है, हालांकि, और जीएचसी एक्सटेंशन का विज्ञापन मिशमाश उन चीजों की छोटी बिट प्रदान करने के लिए है जो स्वाभाविक रूप से निर्भर प्रकारों की आवश्यकता होती है, निश्चित रूप से "गन्दा" के रूप में योग्य होती हैं।

लेकिन ध्यान रखें कि अधिकांश चीजें जिन्हें मैं हास्केल में शिकायत कर रहा हूं, अन्यथा बहुत ठोस नींव के कारण ही एक समस्या है। अन्य स्थाई रूप से टाइप की गई भाषाओं में अधिकांश प्रकार की प्रणालियां तुलनात्मक रूप से "गलत" कहने के लिए पर्याप्त सुसंगत नहीं हैं, और जिन चीज़ों को मैं "मैसी" कह रहा हूं, उन्हें साफ करना अनुसंधान का एक सक्रिय और चालू क्षेत्र है।

+0

धन्यवाद। मैं आश्चर्यचकित था कि मैंने क्या सोचा था कि आप बहस कर रहे थे, लेकिन मैं नहीं गया और संदर्भ में उद्धृत वाक्यांश को पढ़ने की कोशिश करता हूं। – sclv

+0

एक नाइटपिकिंग स्तर पर, मैं रास्ते में, "कार्यक्रम को दुर्घटनाग्रस्त" और निरंतरता के बीच में अंतर करता हूं। हमारे नारे को याद रखें - अच्छी तरह से टाइप किए गए कार्यक्रम गलत नहीं हैं! – sclv

+3

@ एससीएलवी: अभ्यास में, हाँ, बिल्कुल। प्रकार-लागू शुद्धता के संदर्भ में, विभिन्न प्रकार के d के बीच अंतर टाइटैनिक पर डेक कुर्सियों को पुनर्व्यवस्थित कर रहा है। मुझे शायद "... या evalu के लिए मूल्यांकन" जैसे कुछ कहना चाहिए था, लेकिन ... काव्य लाइसेंस, मुझे लगता है? –

1

तो तुम Camccann कहा, "हास्केल के प्रकार प्रणाली nontermination और अन्य गंदा समझौते की वजह से, छेद से भरा है" का जिक्र कर रहे हैं धन्यवाद? मुझे लगता है कि वह UndecidableInstances एक्सटेंशन और शायद कुछ अन्य लोगों के बारे में बात कर रहा है।

फिर आप नॉर्मन को संदर्भित करते हैं, मैं केवल यह कह सकता हूं कि "हास्केल की प्रकार प्रणाली महत्वाकांक्षी और शक्तिशाली है, लेकिन यह लगातार सुधार रहा है, जिसका अर्थ है इतिहास के परिणामस्वरूप कुछ असंगतता है।" मुझे यकीन है कि उसके मन में कुछ था लेकिन जब वह इस सवाल को देखता है तो उसे स्पष्ट करने देगा।

+0

मुझे संदेह है कि नॉर्मन रैमसे विभिन्न प्रयोगात्मक जीएचसी एक्सटेंशन, विशेष रूप से जीएडीटी, ओवरलैपिंग इंस्टेंस, टाइप परिवार, और व्हाट्नॉट - चीजों को मैंने किसी को देखा है (मैकब्राइड, शायद?) संदर्भ के बीच पूरी तरह से समझी गई बातचीत के बारे में बात नहीं कर रहा था एक "भयानक hodgepodge" के रूप में। –

6

हास्केल के प्रकार सिस्टम में वास्तव में कोई समस्या या गन्दा छेद नहीं है। हास्केल 98 पूरी तरह से टाइप-अनुमानित हो सकता है। इसमें "प्रिंसिपल टाइप" प्रॉपर्टी के रूप में जाना जाता है, जिसका कहना है कि किसी दिए गए अभिव्यक्ति में सबसे सामान्य प्रकार का सबसे सामान्य प्रकार है। हालांकि, अभिव्यक्तियों की एक श्रृंखला है जो अच्छी और उपयोगी और वैध हैं लेकिन हास्केल 98 के तहत टाइप नहीं करते हैं। इनमें से सबसे महत्वपूर्ण उच्च रैंक प्रकार हैं। forall a b. (a -> b) -> a -> b रैंक-वन प्रकार का एक (अनिच्छुक) उदाहरण है, जो कहता है कि forall केवल बहुत ही बाहर है। forall b. -> (forall a. a -> a) -> b -> b एक बेकार लेकिन संभव प्रकार का उदाहरण है जो रैंक-एक नहीं है, और इसे Haskell98 में व्यक्त नहीं किया जा सकता है। उच्च श्रेणी वाले प्रकार कई चीजों में से एक हैं जो मूल प्रकार की संपत्ति को तोड़ते हैं।

जैसे ही कोई मूल हास्केल 9 8 सिस्टम में अधिक से अधिक एक्सटेंशन जोड़ता है, वहां वास्तव में शक्तिशाली प्रकार लिखने की क्षमता के बीच ट्रेडऑफ शुरू होने लगते हैं जो विभिन्न प्रकार के बहुरूपता और विभिन्न प्रकार की बाधाओं को व्यक्त करते हैं और जितना अधिक क्षमता रखते हैं कोड पूरी तरह से टाइप-अनुमानित संभव है। जो भी संभव है, उसके किनारों पर, प्रकार गन्दा और जटिल हो सकते हैं, और कभी-कभी आप ऐसी चीजों में भाग ले सकते हैं जो ऐसा लगता है कि उन्हें काम करना चाहिए लेकिन नहीं। लेकिन उस समय, आप आम तौर पर "टाइप-स्तरीय प्रोग्रामिंग" के रूप में जाना जाता है, जहां आपके एप्लिकेशन लॉजिक का एक बड़ा सौदा स्वयं प्रकारों में एम्बेड किया गया है, और टाइपक्लास ट्रिक्स के संयोजन के माध्यम से आपने कंपाइलर को कंसोल किया है, अनिवार्य रूप से, संकलन समय पर एक प्रोग्राम के रूप में प्रकार चल रहा है।

मैं कैमकैन के इस दावे के साथ असहमत हूं कि संभावित nontermination टाइप-चेकर में एक गन्दा समझौता है। मुझे लगता है कि यह एक पूरी तरह से उपयोगी विशेषता है, वास्तव में टाइप स्तर पर मोड़-पूर्णता के लिए एक शर्त है, और आप केवल तभी जोखिम लेते हैं जब आप स्पष्ट रूप से संकलक से बहुत सारी डोडी सामानों को अनुमति देने के लिए कहें।

+0

नाइटपिकिंग की बात करना - प्रश्न के बिल्कुल बिल्कुल प्रासंगिक नहीं है, लेकिन जब लोग मेरे उपयोगकर्ता नाम को कैपिटल करते हैं तो यह वास्तव में अजीब लगता है, क्योंकि यह मेरा पहला प्रारंभिक ++ मध्य प्रारंभिक ++ अंतिम नाम है। मुझे शायद अपना डिस्प्ले नाम कुछ और समझदार में बदलना चाहिए [जैसे मैं कहीं और उपयोग करता हूं] (http://lambda-the-ultimate.org/user/7309)। –

+0

@camccann - पूंजीकरण निश्चित :-) – sclv

+0

मुझे नहीं लगता कि यह सिर्फ इसके लिए एक नया नया जवाब जोड़ने लायक है, लेकिन शायद आप monomorphism प्रतिबंध का भी उल्लेख कर सकते हैं? मुझे यह टाइप सिस्टम की बदसूरत जटिलता मिलती है जो बहुत से शुरुआती लोगों को काटने का प्रयास करती है। –

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