मैं हास्केल के आवेदन सीख रहा हूं। यह मुझे लगता है (मैं शायद गलत हूं) कि pureफ़ंक्शन को वास्तव में ज़रूरत नहीं है, उदाहरण के लिए:
pure (+) <*> [1,2,3] <*> [3,4,5]
के रूप में लिखा जा सकता है
(+) <$> [1,2,3] <*> [3,4,5]
क्या कोई लाभ बता सकता है कि pureफ़ंक्शन स्पष्ट मानचित्रण के साथ प्रदान करता है fmap?
pureएक को एक संगणनात्मक गणना में "शुद्ध" मानों का उपयोग करने की अनुमति देता है। हालांकि, जैसा कि आप सही ढंग से निरीक्षण करते हैं, pure f <*> xवही है f <$> x, के लिए ऐसा कोई समकक्ष नहीं है, कहते हैं f <*> x <*> pure y <*> z,। (कम से कम मुझे ऐसा नहीं लगता।)
Monoidवर्ग से निकटता से संबंधित करता है - जिसमें यह पहचान तत्व pureसे मेल खाता है Monoid। (इससे पता चलता है कि Applicativeबिना pureदिलचस्प हो सकता है, क्योंकि Semigroup- जो Monoidजरूरी नहीं कि एक पहचान के बिना है - अभी भी उपयोग किया जाता है। वास्तव में, अब मैं इसके बारे में सोचता हूं, मुझे लगता है कि मुझे याद है कि PureScript के पास वास्तव में ऐसा "आवेदन के बिना pure" वर्ग है, हालांकि मैं डॉन 'यह नहीं जानते कि यह किसलिए इस्तेमाल किया जाता है।)
fmap (\f' x' z' -> f' x' y z') f <*> x <*> zमुझे लगता है @RobinZigmond । विचार Applicative"इंटरचेंज" के कानून के रूप में प्रलेखन में है।
pure f <*> xके रूप में बिल्कुल वैसा ही हैfmap f x। मुझे यकीन है कि ऐसा कुछ कारण है कि मुझे क्योंpureशामिल किया गया थाApplicative, लेकिन मुझे पूरी तरह से यकीन नहीं है कि क्यों।