आईओ मोनाद के आलोचक को दुनिया पर काम करने वाले एक राज्य मोनाद के रूप में देखा जा रहा है


46

IOहास्केल में इकाई अक्सर एक राज्य इकाई जहां राज्य दुनिया है के रूप में समझाया गया है। तो प्रकार IO aमोनाड के मूल्य को कुछ इस तरह देखा जाता है worldState -> (a, worldState)

कुछ समय पहले मैंने एक लेख (या एक ब्लॉग / मेलिंग सूची पोस्ट) पढ़ा, जिसने इस दृश्य की आलोचना की और कई कारण बताए कि यह सही क्यों नहीं है। लेकिन मुझे न तो लेख याद है और न ही कारण। किसी को पता है?

संपादित करें: लेख खो गया लगता है, इसलिए यहां विभिन्न तर्क एकत्र करना शुरू करें। मैं चीजों को और अधिक रोचक बनाने के लिए एक इनाम शुरू कर रहा हूं।

संपादित करें: मैं जिस लेख की तलाश कर रहा था वह अजीबोगरीब दस्ते से निपट रहा है: साइमन पेटन जोन्स द्वारा हास्केल में मोनैडिक इनपुट / आउटपुट, कॉन्सर्ट, अपवाद, और विदेशी भाषा में कॉल । (टैटिक्स के जवाब के लिए धन्यवाद।)



@JoachimSauer धन्यवाद, यह भी एक दिलचस्प लेख है, लेकिन यह वह नहीं है जिसकी मुझे तलाश है। यह एक राज्य के विश्व प्रतिमान पर केंद्रित था।
पेट्र पुडलक

मेरे सिर के ऊपर, यहाँ टिप्पणी एक अच्छी शुरुआत है
एडम

1
इस संदर्भ में "दुनिया" का क्या अर्थ है? मुझे लगता है इसका मतलब यह नहीं है "पृथ्वी।" क्या यह किसी प्रकार का वैश्विक दायरा है? इसे लिखने वाले लेखक खुद को कम बेच रहे हैं। यदि वह अपने पाठकों के अहंकार को एक साथ भ्रमित और कुचल देना चाहता है, तो उसे "द स्टेट इज द यूनिवर्स" या "द गॉड स्टेट" कहना चाहिए। विश्व। पीएएच! आप युवा लोग इन दिनों उच्च आकांक्षा नहीं रखते हैं!
ग्लेनपेटर्सन

जवाबों:


33

के साथ समस्या यह IO a = worldState -> (a, worldState)है कि अगर यह सही थे तो हम उस साबित हो सकता है वह यह है कि forever (putStrLn "Hello") :: IO aऔर undefined :: IO aबराबर हैं। यहाँ डोलियो (2010, irc) के सबूत शिष्टाचार है:

forever m
 =
m >> forever m
 =
fix (\r -> m >> r)
 = {definition of >> for worldState -> (a, worldState)}
fix (\r -> \w -> r (snd $ m w))

लेम्मा: (\r w -> r (snd $ m w)) ⊥ = ⊥

(\r w -> r (snd $ m w)) ⊥
  =
\w -> ⊥ (snd $ m w))
  =
⊥ . snd . m
  =
⊥

इसलिये forever m = fix (\r -> \w -> r (snd $ m w)) = ⊥

विशेष रूप से forever (putStrLn "Hello") = ⊥और इसलिए forever (putStrLn "Hello")और undefinedसमतुल्य कार्यक्रम हैं। हालांकि, स्पष्ट रूप से उन्हें सिद्धांत या व्यवहार में समकक्ष कार्यक्रम नहीं माना जाता है।

ध्यान दें कि यह मॉडल गलत संगणना के बिना भी गलत है।


7
क्या कोई आश्चर्यचकित है कि एक गैर-संस्मरण कार्यक्रम undefinedहास्केल के शुद्ध शब्दार्थ में बराबर है ? हास्केल के शुद्ध शब्दार्थ में अलग-अलग ⊥ को अप्रभेद्य माना जाता है! लेकिन जब हम अपने कार्यक्रमों के बारे में परिचालन के बारे में सोचते हैं तो हम अलग-अलग प्रकार के we को अलग करना चाहते हैं, भले ही IOइसमें शामिल न हों; मुझे परवाह है कि क्या मेरा कार्यक्रम एक अपवाद फेंक रहा है या एक अनन्त लूप में प्रवेश कर रहा है, भले ही आप यह साबित कर सकें कि वे दोनों ing साबित कर रहे हैं कि वे समान हैं। हालांकि यह वास्तव में एक विरोधाभास नहीं है।
बेन

3
⊥ और [0,1 ..] के शब्द अलग-अलग हैं, भले ही वे दोनों "गैर-समाप्ति" हैं। अंतर यह है कि-गैर-समाप्ति और गैर-उत्पादक संगणना को दर्शाता है, जबकि [0,1 ..] गैर-समाप्ति योग्य लेकिन उत्पादक है। हम उम्मीद करते हैं (हमेशा के लिए (putStrLn "Hello")) एक समान नॉन-टर्मिनेटिंग लेकिन प्रोडक्टिव डिमोनेटेशन है।
रसेल ओ'कॉनर

1
लेकिन निश्चित रूप से forever (putStrLn "Hello")पसंद नहीं है [0,1..]। आपका प्रमाण कुछ विशेष नहीं है worldState, इसलिए यह नियमित रूप से राज्य के लिए लागू होता है। तो forever (someModificationWith "Hello")यह भी ational के समतुल्य है। मैं उस परिणाम से पूरी तरह से अप्रसन्न हूँ; यह संप्रदायात्मक शब्दार्थों में उत्पादक नहीं है , और जब हम हमेशा के लिए प्रतीक्षा करते हैं तो कंप्यूटर परिचालन कर रहा होता है। के लिए एक ही बात forever (putStrLn "Hello"); यह नहीं है और हम किसी भी तरह से आलसी उपभोग कर सकते हैं एक नई दुनिया का उत्पादन नहीं करना चाहिए
बेन

क्या पारा और क्लीन जैसी प्रोग्रामिंग भाषाएं जो स्पष्ट रूप से आईओ के लिए एक घोषणात्मक मॉडल प्रदान करने के लिए स्पष्ट विश्व-राज्य पासिंग का उपयोग करती हैं?
बेन

@ क्या आप इस बात का जिक्र कर रहे हैं कि कैसे दुनिया गुज़रने के साथ काम करती है? क्या आपने बुध की संगति के लिए रोसेट्टा कोड देखा है? मैंने सोचा है कि शब्द का अर्थ क्या है।
CMCDragonkai

12

यहां एक तुच्छ उत्तर दिया गया है: राज्य के किसी भी परिवर्तन के लिए राज्य के राज्य के किसी भी कार्रवाई के कारण मोनाड में भाग लिया जाता है। यदि वास्तव में "WorldState -> (a, WorldState)" स्पष्टीकरण एक ही संपत्ति का दावा करता है, तो WorldState का शुद्ध मान है कि केवल IO मोनड बदलता है, यह गलत है। समय बदल जाता है, फाइलों की सामग्री, हैंडल की स्थिति, इत्यादि आईओ मोनड में होने वाली स्वतंत्र रूप से बदल सकते हैं। यह बात है आईओ मोनाद की। तथ्य यह है कि GHC एक RealWorld मूल्य (या w / e था) के आसपास से गुजरता है, यह सुनिश्चित करने के लिए है कि चीजों को क्रम में चलाया जाए, जहां तक ​​मुझे पता है, अगर वह (एसटी मूल्य में डालने के लिए बस कुछ हो सकता है)।


8
यह वास्तव में कोई समस्या नहीं है। आप कुछ निश्चित-लेकिन-अनजाने नियम की दुकान से प्राप्त विश्व स्थिति में संशोधन करते हुए बाइंड ऑपरेशन को मॉडल कर सकते हैं।
15

1
@ एससीएलवी: हाँ, लेकिन यह निश्चित-लेकिन-अनजाने नियम की दुकान अलग-अलग कारक है जो आईओ को राज्य का सन्यासी नहीं बनाता है , यह असंगति राज्य के मोनाड में नहीं पाई जाती है
जिम्मी होफा

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

@ जिमीहॉफ: आप राज्य में नियम स्टोर के आसपास ले जा सकते हैं।
sclv

1
@ जिमीहॉफ: यह अमूर्तन का उद्देश्य है। इसके अलावा, मेरी आरंभिक टिप्पणी का अनुसरण करने के लिए, क्लीन मॉडल IO को स्पष्ट रूप से और खुशी के साथ विश्व-पास करना, विशिष्टता प्रकारों का उपयोग करके यह सुनिश्चित करना कि आप धोखा न दें और दुनिया को "डुप्लिकेट" करें। यह अमूर्तता को बढ़ाने का एक तरीका है।
sclv

12

मैंने इस विषय पर एक ब्लॉग पोस्ट लिखा कि कैसे IO को अपनी भाषा के लिए रनटाइम सिस्टम के साथ संचार करने वाले असममित कोरटाइन के रूप में मॉडल करें। (यह श्रृंखला का तीसरा भाग है)

http://comonad.com/reader/2011/free-monads-for-less-3/

यह पोस्ट इस बात को थोड़ा कवर करती है कि passing दुनिया-गुजर ’के शब्दार्थ के बारे में तर्क करना अजीब है।


+1 - विशेष रूप से दिलचस्प, जैसा कि मैंने लंबे समय से भाषा के आईओ को लागू करने की योजना बनाई है जो मैं इस तरह से डिजाइन कर रहा हूं! :)
जूल्स

8

देखें अजीब दस्ते से निपटना

इसका बड़ा कारण है IO monad का RealWorld राज्य मॉडल, संगामिति के साथ अच्छा काम नहीं करता है। इस पठनीय क्लासिक एसपीजे ने इसे समझने के लिए एक ऑपरेशनल शब्दार्थ का उपयोग किया है।


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

5

RealWorld राज्य मॉडल के बारे में मुख्य शिकायत यह है कि, जैसा कि टैक्निक्स का कहना है, दुनिया-पासिंग जरूरी तौर पर संगामिति के साथ काम नहीं करता है। लेकिन Wouter Swierstra और Thorsten Altenkirch दिखाया है कि कैसे के रूप में प्रभाव "विश्व गुजर", उनके अखबार में धागे interleaving की एक निश्चित बल्कि मनमाने ढंग से अनुक्रम के साथ संगामिति के बारे में कारण के लिए "द बीस्ट में सौंदर्य: अजीब दस्ते के लिए एक कार्यात्मक sematics": http : //www.staff.science.uu.nl/~swier004/Publications/BeautyInTheBeast.pdf

इसके अनुरूप कोड IOSpec के रूप में Hackage पर है: http://hackage.haskell.org/package/IOSpec

मुझे लगता है कि Wouter की थीसिस अधिक विस्तार से जाती है: http://www.staff.science.uu.nl/~swier004/Publications/Thesis.pdf

हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.