2012-05-25 17 views
9

क्या हास्केल में टाइप सिस्टम को अक्षम या काम करना संभव है? ऐसी परिस्थितियां हैं जहां फर्थ और बीसीपीएल में या मैथमैटिका के रूप में मोनोटाइप के रूप में सबकुछ अलग-अलग होना सुविधाजनक है। मैं सब कुछ एक ही प्रकार या अक्षम प्रकार की जांच पूरी तरह से घोषित करने की लाइनों के साथ सोच रहा हूं।प्रकार के बिना हास्केल

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

+9

[नहीं] (http://dmwit.com/bacteria/grumpy.jpg) –

+6

सुविधाजनक, शायद। लेकिन ध्यान दें कि जो भी समाधान आप उपयोग करते हैं वह सांस्कृतिक रूप से बेवकूफ हास्केल नहीं होगा, जो हमेशा दृढ़ता से टाइप किया जाता है। मेरा सुझाव है कि आप अपनी "असुविधाओं" को पीछे छोड़ दें और इसे सांस्कृतिक रूप से मानदंड तरीके से सीखें - एक बार जब आप इसके साथ कुछ समय बिताएंगे, तो यह सब जगह में आ जाएगा और आपको आश्चर्य होगा कि आपने ऐसा क्यों सोचा था कि आपको टाइप चेकर को अक्षम करने की आवश्यकता है। प्रोग्रामिंग प्रश्न का उत्तर देने में "सांस्कृतिक रूप से मानक" के उपयोग के लिए – luqui

+3

+1। –

उत्तर

7

Data.Dynamic पर भी देखें जो आपको पूरे कोड टाइपिंग को अक्षम किए बिना आपके कोड के कुछ हिस्सों में गतिशील रूप से टाइप किए गए मानों की अनुमति देता है।

+0

बेशक किसी को अभी भी डेटा में हेरफेर करने की कोशिश करने से त्रुटियां मिलेंगी, जिनके पास एक मूल्य है जो किसी भी संदर्भ में कोई समझ नहीं लेता है। जैसे एक int में एक स्ट्रिंग जोड़ने की कोशिश कर रहा है। मुझे नहीं लगता कि यह मॉड्यूल बदलता है। – Wes

+0

मैं इसे एक कोशिश दूंगा। – user287424

8

GHC 7.6 (अभी तक जारी नहीं), एक समान सुविधा है -fdefer-type-errors:

http://hackage.haskell.org/trac/ghc/wiki/DeferErrorsToRuntime

यह क्रम जब तक सभी प्रकार की त्रुटियों को स्थगित होगा। यह वास्तव में untyped नहीं है, लेकिन यह लगभग ज्यादा स्वतंत्रता की अनुमति देता है।

+5

पब्बी नोट्स के रूप में, यह * गतिशील टाइपिंग के समान नहीं है। संक्षेप में, अंतर यह है: '-फेडर-प्रकार-त्रुटियों' मानें और 'addOne x = x + 1' द्वारा परिभाषित फ़ंक्शन' addOne :: a -> a' पर विचार करें।इसमें स्पष्ट रूप से एक प्रकार की त्रुटि है, और इसे 'addOne' x '' के रूप में बुलाकर उचित रूप से त्रुटि होगी। हालांकि, 'ऐडऑन (1 :: इंट)' (जैसा कि मैं इसे समझता हूं) * भी * त्रुटि: भले ही कोड उस मामले में दुर्घटना से काम करेगा, फिर भी यह गलत है *, और आपको त्रुटि मिल जाएगी * * संकलन समय पर मिल गया होगा। –

+2

यह प्रकार प्रणाली से स्वतंत्रता प्रदान नहीं करता है। यह टाइप सिस्टम को बंद करने के लिए नहीं है, अगर समस्या में त्रुटि संकलन समय पर 'मुख्य' के लिए प्रासंगिक नहीं है तो बस इसे देरी करें। – rotskoff

7

fdefer-type-errors के साथ भी कोई भी सिस्टम सिस्टम से परहेज नहीं करेगा। न ही यह वास्तव में स्वतंत्रता प्रकार की अनुमति देता है। ध्वज का बिंदु कोड त्रुटियों के साथ कोड को संकलित करने की अनुमति देना है, जब तक Main फ़ंक्शन द्वारा त्रुटियों को नहीं कहा जाता है। विशेष रूप से, किसी प्रकार की त्रुटि वाला कोड, जिसे वास्तव में हास्केल दुभाषिया द्वारा बुलाया जाता है, अभी भी असफल हो जाएगा।

जबकि हास्केल में अनियमित कार्यों की संभावना आकर्षक हो सकती है, यह ध्यान देने योग्य है कि टाइप सिस्टम वास्तव में भाषा के केंद्र में है। कोड संकलन में अपनी कार्यक्षमता साबित करता है, और प्रकार प्रणाली की कठोरता बड़ी संख्या में त्रुटियों को रोकती है।

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

+0

रुचि के लिए, दो प्रमुख अनुप्रयोग क्षेत्रों जहां यह प्रासंगिक है, खोजी प्रोग्रामिंग (जैसे एआई रिसर्च) और प्रतीकात्मक गणित हैं। लिस्परों के बीच चर्चा देखें जिन्होंने हास्केल की कोशिश की लेकिन टाइप सिस्टम की वजह से वापस स्विच किया। कंप्यूटर बीजगणित पर चर्चा देखें कि दृढ़ता से टाइप किए गए एक्सीम सिस्टम गणितज्ञों के बीच स्वीकृति प्राप्त करने में विफल क्यों रहे। – user287424

+0

नोट: उपर्युक्त शब्द "ध्वज का बिंदु कोड त्रुटियों के साथ कोड को संकलित करने की अनुमति देना है, जब तक त्रुटियां मुख्य में प्रकट न हों। विशेष रूप से, किसी भी प्रकार की त्रुटि वाले कोड को रनटाइम पर कॉल किया जाता है, फिर भी असफल। " अस्पष्ट और संभावित भ्रामक है। यानी, "मुख्य 'में क्या दिखाई देता है और" रनटाइम पर बुलाया गया "मतलब क्या है? बेहतर अंतर्ज्ञान के लिए [पेपर] देखें (http://dreixel.net/research/pdf/epdtecp_draft.pdf)। जैसे 'fst (True, 'a' && गलत)' 'True 'का मूल्यांकन करने के बाद,' fst (True, error "टाइप त्रुटि: बूल के साथ चार मिलान नहीं कर सका") का मूल्यांकन किया जा सकता है। – ntc2

+0

दूसरी तरफ, एक उदाहरण के लिए 'addOne' [नीचे] (http://stackoverflow.com/questions/10747703/haskell-without-types#comment13967400_10747745) देखें जहां आप किसी त्रुटि की अपेक्षा नहीं कर सकते हैं लेकिन एक प्राप्त कर सकते हैं। तो, एक बेहतर सारांश हो सकता है: टाइप त्रुटियों को स्थानीयकृत (अभिव्यक्ति वृक्ष की पत्तियों पर धक्का दिया जाता है) जितना संभव हो सके (ह्युरिस्टिकली), और फिर कॉल के साथ 'त्रुटि' में बदल दिया गया। हास्केल के आलसी मूल्यांकन का अर्थ है कि इन त्रुटि कॉलों को ट्रिगर नहीं किया जाता है अगर रन के समय उनके अभिव्यक्तियों के (सिर) मूल्य की आवश्यकता नहीं होती है। – ntc2

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