2014-05-21 10 views
5

शीर्षक में के रूप में:क्यों हास्केल में `mappend` उर्फ` <> `बजाय है` + `

क्यों हास्केल में, mappend (से वर्ग Monoid) उर्फ ​​<> बजाय + है?

[संपादित करें - जोड़ा प्रेरणा] बीजगणित पाठ्यक्रम + में आमतौर पर monoid द्विआधारी ऑपरेटर के लिए प्रयोग किया जाता है।

+0

xmonad 'mappend' के लिए [' <+> '] (http://xmonad.org/xmonad-docs/xmonad/XMonad-ManageHook.html#v:-60--43--62-) का उपयोग करता है; आईआईआरसी इसे मानक पुस्तकालयों में '<>' जोड़ा जाने से पहले पेश किया गया था। – raymonad

उत्तर

12

फ़ंक्शन + संख्याओं के लिए विशिष्ट है, और इसके अलावा, संख्याओं के लिए मोनॉयड को लागू करने का यह एकमात्र तरीका है (* समान रूप से मान्य है)। इसी तरह, बूलियन के साथ, यह && और || का उपयोग करने के लिए समान रूप से मान्य होगा। प्रतीक + का उपयोग करने से पता चलता है कि मोनोइड्स लगभग अतिरिक्त विशेष रूप से, जब वास्तव में वे लगभग सहयोगी ऑपरेशन के बारे में हैं।

यह सच है कि, मेरे अनुभव में कम से कम mappend का उपयोग फैशन के समान रूप में करने की संभावना है: सूचियों या वैक्टरों को जोड़ना, सेट या मानचित्र आदि के यूनियन लेना आदि। हालांकि, हास्केल मानसिकता सामान्यता का पक्ष लेती है और गणितीय सिद्धांतों का पालन करना (तर्कसंगत) अधिक सहज ज्ञान युक्त है। यह निश्चित रूप से उचित है, मेरी राय में, mappend के सामान्य जोड़ के रूप में सोचें, और उन मामलों में समायोजन करें जहां यह नहीं है।

+0

यह आईएमओ का एक बहुत अच्छा कारण भी है। मैंने केवल इसका जिक्र नहीं किया क्योंकि लोगों को यह सुझाव देना असामान्य नहीं है कि '++' को उपनाम के रूप में उपयोग किया जाना चाहिए (उदाहरण के लिए [क्लासी-प्रीलूड] (http://hackage.haskell.org/package/classy-prelude -0.9.2/docs/ClassyPrelude.html))। – duplode

+0

मैं भी बूलियन से सहमत हूं, '*' और '+' सममित नहीं हैं। '+' एक समूह है जहां '*' नहीं है (रिमोट 0 तक)। इसलिए, '+' किसी भी तरह * बेहतर * * * 'के बराबर है और समकक्ष नहीं है। यह आईएमएचओ को 'न्यू' के लिए डिफ़ॉल्ट मोनोइड के रूप में उपयोग करने के लिए समझ में आता है – mb14

5
आंशिक रूप से principle of least astonishment की वजह से और आंशिक रूप से वहाँ क्योंकि

कम से कम two sensible monoid instances for numbers (यानी, Sum और Data.Monoid से Product) कर रहे हैं।

+1

कम से कम आश्चर्य * सिद्धांत के सिद्धांत के लिए धन्यवाद। 'उत्पाद 5 + उत्पाद 2' लिखना संभव होगा, लेकिन यह वास्तव में आश्चर्यचकित कर सकता है। –

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