मैं हास्केल के आवेदन सीख रहा हूं। यह मुझे लगता है (मैं शायद गलत हूं) कि 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
, लेकिन मुझे पूरी तरह से यकीन नहीं है कि क्यों।