यदि आप pure
के बजाय return
का उपयोग करते हैं तो आपको वही व्यवहार मिलता है। यह जानने के लिए कि क्या करना है, ghci को दिए गए अभिव्यक्ति के लिए एक प्रकार का चयन करना होगा। ghci के डिफ़ॉल्ट नियम ऐसे हैं जो अन्य बाधाओं को अनुपस्थित करते हैं, यह IO
को Applicative
या Monad
उदाहरण के लिए चुनता है। इस प्रकार यह की अभिव्यक्ति के रूप में pure 1
का अर्थ है। प्रॉम्प्ट पर दर्ज IO a
के अभिव्यक्ति निष्पादित किए गए हैं और उनके परिणाम मुद्रित किए गए हैं, यदि 1. a
में Show
उदाहरण है और 2. a
()
नहीं है। इस प्रकार
v <- return (1 :: Integer)
print v
return v
में शीघ्र परिणाम पर pure 1
में प्रवेश निष्पादित किया जा रहा है (और जादू चर it
लौटे v
करने के लिए बाध्य)। pure()
के लिए, विशेष मामले के बाद से ()
अरुचिकर माना जाता है, इस प्रकार केवल return()
निष्पादित किया जाता है और it
pure (+1)
के लिए ()
करने के लिए बाध्य, लागू होता है, एक समारोह लौटा दिया जाता है, वहाँ दायरे में कार्यों के लिए कोई Show
उदाहरण है, तो कुछ भी नहीं छपा है। हालांकि,
Prelude Control.Applicative> :m +Text.Show.Functions
Prelude Control.Applicative Text.Show.Functions> pure (+1)
<function>
it :: Integer -> Integer
Prelude Control.Applicative Text.Show.Functions> it 3
4
it :: Integer
दायरे में कार्यों के लिए एक
Show
उदाहरण के साथ
, यह प्रिंट हो (नहीं है कि यह जानकारीपूर्ण है), और समारोह तो इस्तेमाल किया जा सकता (उत्तरार्द्ध, एक Show
उदाहरण दायरे में किया जा रहा से स्वतंत्र है निश्चित रूप से)।
स्रोत
2011-10-31 03:05:11
मुझे अभी एहसास हुआ है कि 'उदाहरण आवेदक IO'। इसलिए यह 'शुद्ध 1 >> = \ it -> इसे प्रिंट करने के लिए' प्रिंट करने की अनुमति भी देता है। मैंने अभी 'Text.Show.Functions' मॉड्यूल के बारे में सीखा है। मैंने हमेशा सोचा है कि फ़ंक्शन डिफ़ॉल्ट रूप से क्यों नहीं दिखाए जा रहे थे। – gawi
आवेदक, फ़ंक्शन और आईओ का उपयोग करने का एक और उदाहरण यहां दिया गया है: 'शुद्ध (+1) <*> fmap (पढ़ें :: स्ट्रिंग -> Int) getLine' – nponeccop