2011-11-03 19 views
6

Control.Applicative के लिये दस्तावेज को देखते हुए, मैं वे कुछ monads (जैसे IO, Maybe और विशेष रूप से ST) के लिए उदाहरण घोषणाओं है कि नोटिस, लेकिन ऐसी State और RWS रूप MTL monads के लिए कोई उदाहरण नहीं है। इसके बजाए ऐसा लगता है कि एक सामान्य उद्देश्य WrappedMonad प्रकार परिभाषित किया गया है, जिसका मैं अनुमान लगा रहा हूं कि अन्य सभी मामलों को कवर करना है।राज्य और अन्य एमटीएल monads के लिए आवेदक उदाहरण?

तो यहाँ मेरे सवालों हैं:

  1. क्यों MTL monads के लिए Applicative उदाहरणों नहीं हैं? सबसे अच्छा जवाब मैं अब तक अपने आप को खोजने में सक्षम हूं three year old post, जहां किसी ने इन उदाहरणों को लागू किया और संक्षेप में अनदेखा किया गया।

  2. WrappedMonad के साथ क्या सौदा है? मुझे post on Reddit मिला जो संक्षेप में बताता है, लेकिन मुझे लगता है कि मैं इसका उपयोग कैसे कर रहा हूं इसके बारे में उलझन में हूं।

अंत में मैं एक अनुप्रयोगी शैली में State उपयोग करने के लिए सक्षम होने के लिए (के रूप में recommended to me था) चाहते हैं, लेकिन WrappedMonad डेटा कंस्ट्रक्टर्स के साथ अपने कोड तो यह एक जीत की तरह प्रतीत नहीं होता है, तो मैं कूड़े के लिए है। मैं WrappedMonad पूरी तरह से अनदेखा कर सकता हूं, और IO, ST और return और ap के संदर्भ में Applicative उदाहरण स्वयं को उसी तरह से परिभाषित कर सकता हूं ... और यह भी मूर्खतापूर्ण लगता है।

+0

अगर हमारे पास केवल फंक्टर => आवेदक => मोनाड, और (वैकल्पिक, मोनाड) => मोनाडप्लस – alternative

उत्तर

8

वह दस्तावेज केवल base पैकेज की सामग्री पर आधारित है, जिसमें State नहीं है - इसलिए इसमें Applicative उदाहरण नहीं हैं। यदि आप the MTL documentation में देखते हैं, तो आपको एक Applicative इंस्टेंस सूचीबद्ध दिखाई देगा।

वैकल्पिक रूप से, आप GHCi, आयात Control.Monad.State और Control.Applicative खोल सकते हैं, और :i Applicative का उपयोग Applicative या :i StateT के उदाहरण सूची कक्षाएं जिसके लिए StateT उदाहरण हैं सूची (State के लिए एक प्रकार का अन्य नाम है इसके पैरामीटर में से एक के साथ StateT)। या तो दिखाएगा कि वास्तव में ऐसा एक उदाहरण है।

+0

स्पष्ट रूप से मैं बल्ले के रूप में अंधेरा हूं। मैं उस सटीक दस्तावेज को देख रहा था और 'आवेदक' उदाहरण नहीं देखा। – mergeconflict

2

एमटीएल monads के लिए आवेदक उदाहरण बेस दस्तावेज़ों में सूचीबद्ध नहीं किया जा सकता है, क्योंकि उस बिंदु पर कोई एमटीएल उपलब्ध नहीं है। अच्छी खबर यह है कि mtl में mtl-2.0.0.0 के बाद, StateT for example लागू उदाहरण हैं।