2012-03-24 14 views
14

मैं अभी तक एक मोनद-जेडी नहीं हूं, लेकिन मुझे उनकी मूल समझ है।कृपया मुझे आंतरिक और बाहरी मोनैड की अवधारणा को समझने में मदद करें

अब मैं 'आंतरिक' और 'बाहरी' मोनड का उल्लेख करने वाले कुछ लेख पढ़ता हूं और मुझे आश्चर्य है कि इसका क्या अर्थ है।

(लिंक) कोड उदाहरण उपयोगी होंगे।

धन्यवाद!

+0

कृपया उन लेखों से लिंक करें। अन्यथा, आपका प्रश्न नीचे निर्दिष्ट है। – misterbee

उत्तर

19

हास्केल अनुप्रयोगों का एक बहुत इकाई ट्रांसफार्मर, जो प्रकार वर्ग

class MonadTrans t where 
    lift :: Monad m => m a -> t m a 

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

something :: StateT s Maybe a 

यहाँ, StateTmtl पैकेज में परिभाषित किया गया है, और है State के समान, इसके अंदर बैठे किसी अन्य मोनड के लिए जगह छोड़ने के अलावा। इस तरह मोनैड ट्रांसफार्मर का उपयोग करके, आप टुकड़े टुकड़े फैशन में कई मोनैड से प्रभाव लिख सकते हैं।

इस मामले में, Maybe आंतरिक मोनड है, और StateT s Maybe बाहरी मोनड है। MonadTrans टाइप क्लास से lift का उपयोग कर आप आंतरिक मोनड से बाहरी मोनड तक जा सकते हैं।

+1

आपने 'स्टेटटी' के राज्य प्रकार पैरामीटर को छोड़ दिया; यह 'कुछ :: स्टेटटी फू हो सकता है' जहां 'स्टेट टी फू हो सकता है' बाहरी मोनड होना चाहिए। – hammar

+0

@hammar प्रूफरीडिंग के लिए धन्यवाद। अब तय –

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