2013-04-29 8 views
5

हास्केल में "एपी" मोनैड का उपयोग करने का सही तरीका क्या है? मैं इसके साथ कुछ ऐसा करना चाहता हूं:हास्केल क्विन: "एपी" मोनाड

main = (putStr . ap (++) show) "main = (putStr . ap (++) show) " 

लेकिन मुझे "स्कोप में नहीं:" एपी त्रुटि मिली है।

"आयात नियंत्रण। मोनाड" का उपयोग कुछ भी नहीं करता है। और मैं यह दे रही है

"ap :: Monad m => m (a -> b) -> m a -> m b" 

तो मैं मिलता है की कोशिश की है

उत्तर

8

आयात कर रहा है Control.Monad आप ap देना चाहिए "` एपी के लिए प्रकार हस्ताक्षर 'एक साथ बंधन का अभाव है। " हालांकि, जीएचसी (7.6.1 और नए) के सबसे हाल के संस्करणों में, आपको कार्यों के लिए मोनैड इंस्टेंस का उपयोग करने के लिए Control.Monad.Instances आयात करने की भी आवश्यकता होगी।

वैकल्पिक रूप से, आप Control.Applicative आयात कर सकते हैं जो आप <*> ऑपरेटर, जो apApplicative का सामान्यीकरण है, साथ ही आवश्यक उदाहरणों कार्यों के साथ इसका इस्तेमाल करने देता है।

+2

और वैकल्पिक रूप से, अगर हम आयात से बचना चाहते हैं, तो मॉड्यूल को आयात करने के बजाय हम केवल '(\ fgx -> fx (gx))' (एस संयोजक, ''(<*>)' और' ap' का उपयोग कर सकते हैं इसके वर्ग-जेनेरिक संस्करण टाइप करें)। –

+0

बहुत बहुत धन्यवाद! – GossJ

+0

@ सकुंडीम: "आयात से बचने" के लिए मानक लाइब्रेरी फ़ंक्शन को फिर से परिभाषित कौन करेगा? मेरा मतलब है, आपको किसी भी गैर-तुच्छ कार्यक्रमों के लिए आयात की आवश्यकता होगी –

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