2014-07-10 10 views
5

हास्केल में, जो चीजें मुझे लगता है वह काफी सुंदर है, इसका प्रभाव मोनाड्स का प्रभावशाली कार्यों पर एक अमूर्तता के रूप में है। यह अनिवार्य कोड व्यक्त करने के लिए वास्तव में एक शानदार तरीका बनाता है, जबकि शक्तिशाली चीजों को शुद्धता के बारे में गारंटी के साथ होने की इजाजत देता है।गतिशील रूप से टाइप की गई भाषाओं में आईओ मोनाड

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

कहा जा रहा है कि, मैंने कोई भी भाषा नहीं देखी है (शायद मैं बस इतना कठिन नहीं देख रहा हूं) जो गतिशील रूप से टाइप किए गए हैं, फिर भी मोनैड का उपयोग करके साइड इफेक्ट्स को अलग करते हैं। क्या कोई कारण है कि यह मामला क्यों है? (या वे मौजूद हैं?)

उत्तर

12

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

मोनैड अमूर्तता गतिशील रूप से टाइप की गई भाषाओं में वास्तव में बहुत अच्छी तरह से काम नहीं करती है। निश्चित रूप से, वे आपको fmap और (>>=) पर एनालॉग दे सकते हैं, लेकिन गतिशील रूप से टाइप की गई भाषा में काम करने के लिए return के लिए कोई अच्छा तरीका नहीं है। यह एक प्रकार परिवर्तक में बहुलक है जो केवल अपने रिटर्न प्रकार में दिखाई देता है। मैं गतिशील टाइपिंग वाली किसी भी भाषा से अवगत नहीं हूं जो उस संभाल को संभालने के लिए सुसज्जित है। मुझे लगता है कि एक मुफ्त मोनड निर्माण और आत्मनिरीक्षण के टन जैसे कुछ का उपयोग करके इसे हैक करने के शायद संभवतः हैं, लेकिन मुझे संदेह है कि यह कभी भी एक सहायक अमूर्त की तरह प्रतीत होता है।

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

वास्तव में, यह आखिरी है कि एक हत्यारा है।

+0

ठीक है, यह बहुत समझ में आता है। एक गतिशील भाषा में एक रनटाइम टैग की गई आईओ प्रणाली वह है जो मैं सोच रहा था (हालांकि मैं सोच रहा था कि यह मोनाड संयोजकों का उपयोग करेगा)। मुझे एहसास नहीं हुआ कि टाइप किए गए आईओ कार्यों के लिए अन्य प्रकार के संयोजक थे, क्या आपके पास कोई उदाहरण हैं? – Mystor

+3

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

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