हास्केल अनुप्रयोगों का एक बहुत इकाई ट्रांसफार्मर, जो प्रकार वर्ग
class MonadTrans t where
lift :: Monad m => m a -> t m a
के उदाहरण हैं क्या यह करता है आप, कई monads द्वारा प्रदान की पर्यावरण गठबंधन करते हैं उन्हें एक साथ लपेटकर द्वारा अनुमति देते हैं का उपयोग करें। उदाहरण के लिए, State s
मोनैड आपको s
की स्थिति पर काम करने की क्षमता देता है जो स्वचालित रूप से आपकी गणना के माध्यम से थ्रेड किया जाता है, जबकि Maybe
मोनड आपको शॉर्ट सर्किट विफलता देता है। लेकिन अगर आप दोनों उन प्रभावों के चाहते हैं, तो आप उन्हें दो में से एक की एक इकाई ट्रांसफार्मर संस्करण का उपयोग करके, इस तरह के रूप गठजोड़ कर सकते हैं:
something :: StateT s Maybe a
यहाँ, StateT
mtl
पैकेज में परिभाषित किया गया है, और है State
के समान, इसके अंदर बैठे किसी अन्य मोनड के लिए जगह छोड़ने के अलावा। इस तरह मोनैड ट्रांसफार्मर का उपयोग करके, आप टुकड़े टुकड़े फैशन में कई मोनैड से प्रभाव लिख सकते हैं।
इस मामले में, Maybe
आंतरिक मोनड है, और StateT s Maybe
बाहरी मोनड है। MonadTrans
टाइप क्लास से lift
का उपयोग कर आप आंतरिक मोनड से बाहरी मोनड तक जा सकते हैं।
स्रोत
2012-03-24 17:19:03
कृपया उन लेखों से लिंक करें। अन्यथा, आपका प्रश्न नीचे निर्दिष्ट है। – misterbee