2013-04-11 7 views
17

के साथ मोनाड ट्रांसफार्मर ट्रांसफॉर्मर के "मानक" संस्करण का उपयोग करने के बजाय पहचान मोनैड के साथ मोनाड ट्रांसफार्मर का उपयोग करने में क्या बात है?पहचान मोनड

क्या यह अधिक लचीला है?

+0

"मानक" संस्करण से आपका क्या मतलब है? – Adrian

+0

ट्रांसफॉर्मर के 'मानक "संस्करण का क्या मतलब है? आम तौर पर, यह ट्रांसफॉर्मर का मानक संस्करण _is_ है जो पहचान मोनड पर लागू होता है। – leftaroundabout

+0

मेरा मतलब है 'स्टेट टी की पहचान' बनाम 'राज्य एस' दोनों एक ही कार्यात्मक हैं, है ना? –

उत्तर

30

mtl 1,0 में वापस हम दोनों

newtype State s a = State { runState :: s -> (a, s) } 

और

newtype StateT s m a = StateT { runStateT :: s -> m (a, s) } 

था हालांकि, इस सभी लोग जिनके बातों के लिए उदाहरणों लागू करने के लिए की तरह MonadState समापन प्रयास डुप्लिकेट करने के लिए किया था मतलब है।

transformers (और अब मृत monads-fd और monads-tf) रॉस पैटर्सन केवल बाद की पेशकश और आधार इकाई के रूप में Identity का उपयोग करने का सरल दृष्टिकोण का उपयोग करने का फैसला किया।

इससे mtl को बनाए रखने में कार्यान्वयन प्रयास कम हो गया और इस तथ्य को हटा दिया गया कि State मोनैड को लागू करने के दो अलग-अलग तरीके थे। हालांकि, यह mtl के आंतरिक को सिखाने के लिए कठिन बनाता है, क्योंकि आपको गेट के बाहर transformers संस्करणों को समझने की आवश्यकता है और प्रशिक्षण पहियों के रूप में सरलीकृत संस्करण नहीं मिलता है।

जब पुराना mtl सेवानिवृत्त हो गया था और monads-fdmtl 2.0 बन गया, तो मौजूदा transformers का उपयोग करके यह डिज़ाइन निर्णय लिया गया था।

मुझे व्यक्तिगत तौर पर शैक्षिक उद्देश्यों के लिए अलग-अलग सरल मोनैड पसंद आया, लेकिन बहस के दूसरी तरफ कहीं अधिक लोग थे।

+5

मैं पूरी तरह से शिक्षण उद्देश्यों के बारे में सहमत हूं। शायद हमें एक 'monads-teach' पैकेज स्थापित करना चाहिए जिसमें मूल सरल संस्करण शामिल हैं। –

11

प्रलेखन से: कम्प्यूटेशनल रूप से, उनके तर्कों को केवल क्रियाओं को लागू करने के बहुत सरल कार्य के बजाय पहचान मोनड का उपयोग करने का कोई कारण नहीं है। पहचान मोनड का उद्देश्य मोनैड ट्रांसफार्मर के सिद्धांत में इसकी मौलिक भूमिका है। पहचान मोनैड पर लागू कोई भी मोनड ट्रांसफॉर्मर उस मोनड का एक गैर-ट्रांसफॉर्मर संस्करण उत्पन्न करता है।

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

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