2010-08-20 14 views
36

क्या दूसरों पर निम्नलिखित में से कोई एक टिप्पणी पसंद करने का कोई कारण है या क्या यह केवल वरीयता का मामला है?

map toLower "FOO" 

fmap toLower "FOO" 

toLower <$> "FOO" 

एक अलग रूप में के रूप में: मुझे लगता है कि <$>`fmap` के समान है। क्या मैं इस धारणा में सही हूं कि mapfmap का एक सामान्य सामान्य रूप है?

उत्तर

39

जैसा कि आप कहते हैं, mapfmap का एक सामान्य सामान्य रूप है। यदि आपको पता है कि आपके पास एक सूची है तो मैं map का उपयोग करूंगा क्योंकि यह कोड स्पष्ट करता है और यदि आप कोई गलती करते हैं तो त्रुटि संदेश कम भ्रमित होने की संभावना है। हालांकि काफी हद तक यह वरीयता का मामला है।

(<$>)fmap जैसा ही है। जीएचसी 7.10 तक इसे प्रीलूड द्वारा निर्यात नहीं किया गया था, इसलिए डिफ़ॉल्ट रूप से उपलब्ध नहीं था - लेकिन पुराने जीएचसी संस्करणों के साथ भी Data.Functor या Control.Applicative से आयात करना आसान है और इन दिनों यह ऐसा करने का मानक तरीका है।

+15

और 'लिफ्टएम'' fmap' जैसा ही है, सिवाय इसके कि इसे 'फंक्शन' के बजाय 'मोनाड' पर अधिभारित किया गया है। –

+2

[** 'liftA' **] (http://hackage.haskell.org/package/base-4.7.0.1/docs/Control-Aplicative.html#liftA) साथ ही, [**' लागूकर्ता 'के लिए सामान्यीकृत ** फंक्शंस] (http://hackage.haskell.org/package/base-4.7.0.1/docs/Control-Applicative.html) –

+0

'<$> 'हाल के संस्करणों में प्रस्ताव द्वारा निर्यात किया जाता है। – fphilipe

12

मैं गणेश से सहमत हूं कि map सूचियों के लिए स्पष्ट है। मैं <$>fmap से अधिक उपयोग करता हूं, जब तक कि यह आंशिक रूप से लागू नहीं होता है। तो मैं fmap reverse का उपयोग ऐसे फ़ंक्शन को घोषित करने के लिए करता हूं जो कुछ मज़ेदार के सभी तत्वों को उलट देता है लेकिन यदि मेरे पास सभी तर्क उपलब्ध हैं (उदाहरण के लिए यदि मैं do ब्लॉक में एक पंक्ति लिख रहा हूं) तो मैं ऑपरेटर फॉर्म का उपयोग करता हूं: reverse <$> f x

+1

अद्यतन किया है, मैं अक्सर इंफिक्स नोटेशन में 'fmap' का उपयोग करता हूं, उदाहरण के लिए:' रिवर्स \ 'fmap \' x', क्योंकि 'fmap' प्रीलूड में है, इसलिए मेरे पास नहीं है नियंत्रण आयात करने के लिए। आवेदनक। फिर अगर मुझे आंशिक आवेदन की आवश्यकता है, तो मैं लिखना समाप्त करता हूं: 'f = (रिवर्स \' fmap \ ')' –

+1

मुझे लगता है कि यह 'fmap' फ़ंक्शन सादा और सरल (उपसर्ग) का उपयोग करने के लिए बेहतर दिखता है, लेकिन हो सकता है कि यह सिर्फ मुझे ... मैं '<$> 'का उपयोग करता हूं, जब भी मैं' <*> 'का उपयोग कर रहा हूं। – mk12

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