मैं पढ़ रहा हूँ आपको एक हास्केल सीखें और मैंने पहले ही आवेदक को कवर किया है और अब मैं मोनोइड्स पर हूं। मुझे दोनों को समझने में कोई समस्या नहीं है, हालांकि मुझे प्रैक्टिस में आवेदक उपयोगी पाया गया है और मोनॉयड काफी नहीं है। तो मुझे लगता है कि मुझे हास्केल के बारे में कुछ समझ में नहीं आता है।मोनोइड्स का व्यावहारिक उपयोग क्या है?
सबसे पहले, Applicative
की बात करते हुए, यह 'कंटेनर' पर विभिन्न कार्यों को करने के लिए एक समान वाक्यविन्यास की तरह बनाता है। इसलिए हम सामान्य कार्यों का उपयोग कर सकते Maybe
, सूची पर कार्रवाई करने के लिए, IO
(? मैंने कहा जाना चाहिए था monads मैं monads अभी तक पता नहीं), कार्य:
λ> :m + Control.Applicative
λ> (+) <$> (Just 10) <*> (Just 13)
Just 23
λ> (+) <$> [1..5] <*> [1..5]
[2,3,4,5,6,3,4,5,6,7,4,5,6,7,8,5,6,7,8,9,6,7,8,9,10]
λ> (++) <$> getLine <*> getLine
one line
and another one
"one line and another one"
λ> (+) <$> (* 7) <*> (+ 7) $ 10
87
तो अनुप्रयोगी एक अमूर्त है। मुझे लगता है कि हम इसके बिना जी सकते हैं लेकिन यह कुछ विचार मोड स्पष्ट रूप से व्यक्त करने में मदद करता है और यह ठीक है।
अब, Monoid
पर एक नज़र डालें। यह भी अमूर्त और बहुत सरल है। लेकिन क्या यह हमारी मदद करता है? किताब से हर उदाहरण के लिए यह वहाँ काम करने के लिए और अधिक स्पष्ट तरीका है कि स्पष्ट हो रहा है:
λ> :m + Data.Monoid
λ> mempty :: [a]
[]
λ> [1..3] `mappend` [4..6]
[1,2,3,4,5,6]
λ> [1..3] ++ [4..6]
[1,2,3,4,5,6]
λ> mconcat [[1,2],[3,6],[9]]
[1,2,3,6,9]
λ> concat [[1,2],[3,6],[9]]
[1,2,3,6,9]
λ> getProduct $ Product 3 `mappend` Product 9
27
λ> 3 * 9
27
λ> getProduct $ Product 3 `mappend` Product 4 `mappend` Product 2
24
λ> product [3,4,2]
24
λ> getSum . mconcat . map Sum $ [1,2,3]
6
λ> sum [1..3]
6
λ> getAny . mconcat . map Any $ [False, False, False, True]
True
λ> or [False, False, False, True]
True
λ> getAll . mconcat . map All $ [True, True, True]
True
λ> and [True, True, True]
True
तो हम कुछ पैटर्न देखा और नए प्रकार वर्ग बनाया है ... ठीक है, मैं गणित की तरह। लेकिन व्यावहारिक दृष्टिकोण से, Monoid
का क्या मतलब है? यह विचारों को बेहतर व्यक्त करने में हमारी सहायता कैसे करता है?
यदि आप कुछ उन्नत सामग्री में खोदना चाहते हैं जो वास्तव में मोनोइड्स की शक्ति दिखाता है, तो [उंगली के पेड़] देखें (http://www.cs.ox.ac.uk/ralf.hinze/publications/FingerTrees.pdf) ('डेटा.Sequence' के पीछे इंजन)। मुझे यकीन है कि सरल उदाहरण हैं जिन्हें मैं अभी नहीं सोच सकता। – luqui
मैं आपको इस उत्कृष्ट [दान पाइपोनी] (http://blog.sigfpe.com/2009/01/haskell-monoids-and-their-uses.html) लेख के माध्यम से जाने का सुझाव दूंगा। – Sibi
संबंधित, लेकिन डुप्लिकेट प्रश्न नहीं: [Data.Monoid में उन सभी नए प्रकार के रैपर का व्यावहारिक मूल्य क्या है) (http://stackoverflow.com/questions/22080564/whats-the-practical-value-of-all-those- न्यूटाइप-रैपर-इन-डेटा-मोनॉयड) – AndrewC