2016-01-12 17 views
6

शायद यह पूछने के लिए सही जगह नहीं है और शायद इस सवाल का भी 'मेटा' है, लेकिन किसी भी कारण से <*> (और तुलनात्मक रूप से <$>) समारोह इन्फ़िक्स है? हास्केल की मेरी समझ और मेरे ज्ञान (इस प्रकार दूर) के लिए यह fmap जैसा ही है।<*> हास्केल में एक इंफिक्स फ़ंक्शन क्यों है?

तो, क्यों fmap इन्फ़िक्स नहीं है, लेकिन इसके अनुप्रयोगी और functor संस्करण कर रहे हैं?

+3

किसी या अन्य के बारे में '' <$>, '' <*>, और '= <<' समारोह पर सभी रूपों में किया जा रहा आवेदन लिखा था। तो यह उन्हें सभी अस्पष्ट समान वाक्यविन्यास देने में मददगार है। जैसा कि काले गिबार्ड (मुझे लगता है) ने कहा, यह दुर्भाग्यपूर्ण है कि '$' सही सहयोगी है जबकि अन्य सभी प्रकार के आवेदन सहयोगी छोड़ दिए गए हैं। – dfeuer

+1

ध्यान दें कि '<*>' fmap जैसा नहीं है: बल्कि, '<$> 'वास्तव में fmap के लिए समानार्थी है, और' <*>' कुछ ऐसा है जो * fmap * की तरह है, लेकिन थोड़ा अलग है। – amalloy

उत्तर

13

मुझे लगता है कि यह ज्यादातर इस मुहावरे से प्रेरित है:

f <$> x <*> y <*> z 

उपसर्ग कार्यों के साथ वर्तनी यह बहुत कम सुंदर है, और आप को पता है कि कितने अनुप्रयोगों वहाँ बस टाइप करना शुरू करने के लिए कर रहे हैं की जरूरत है:

ap (ap (fmap f x) y) z 
+3

हालांकि आप निश्चित रूप से अभी भी '' f 'fmap' x 'ap' y' ap' z'' लिख सकते हैं। – leftaroundabout

+10

@ बाएंअराउंडबाउट निश्चित। और यदि आप हर समय ऐसा करने जा रहे हैं, तो आप फ़ंक्शन नामों का चयन भी कर सकते हैं जिन्हें इन्फिक्स का उपयोग किया जा सकता है। –

+0

यह भी उल्लेखनीय है कि '<*>' 'ap' की तुलना में एक मजबूत विनिर्देश है, क्योंकि यह सभी आवेदकों पर काम करता है, और इसलिए सभी मोनाड्स, लेकिन 'एपी' केवल मोनाड्स पर काम करता है। – semicolon

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