एक कंटेनर के रूप में एक मजेदार देखने के अलावा, आप इसे एक निश्चित प्रकार के संदर्भ के रूप में भी देख सकते हैं। आपके मान उस संदर्भ में हैं, और यदि आप उन पर काम करना चाहते हैं, तो आप संदर्भ में फ़ंक्शन उठाने के लिए map
का उपयोग करते हैं। इसे डालने का एक और तरीका यह है कि आपके मान उस संदर्भ के साथ बढ़ाए गए हैं।
यह समझने के लिए कि कैसे सूची फ़ैक्टर नोडेटर्मेनिस्टिक पसंद का संदर्भ है, यह देखने के लिए उपयोगी हो सकता है कि एक और मज़ेदार कैसे एक संदर्भ है: शायद मज़ेदार एक गणना का संदर्भ है जो असफल हो सकता है। यदि आप किसी फंक्शन में किसी फ़ंक्शन को फ़ंक्शन लागू करने का प्रयास करते हैं, तो परिणामी मान अभी भी वही संदर्भ रखेगा चाहे वह पहले स्थान पर असफल गणना हो या नहीं।
इसी तरह, एक गणना के परिणामस्वरूप एक सूची देखी जा सकती है जिसमें निर्धारिती परिणाम नहीं है, लेकिन जिसके परिणामस्वरूप कई मूल्यों में से एक से नोडेटर्मिनिस्टिक रूप से चुना जा सकता है। यदि आपने 3 तत्वों के साथ किसी सूची में फ़ंक्शन को मैप करने का प्रयास किया है, तो उन तत्वों को बदला जाएगा, लेकिन तीन मानों के बीच चयन करने में सक्षम होने का संदर्भ वही रहेगा।
दान Burtons जवाब से थोड़ा उधार, सूचियों के लिए monadic अंकन को देखो:
foo = do
x <- [1 .. 10]
y <- [2, 3, 5, 7]
return (x * y)
यह पहले थोड़ा अजीब लगता है पर जब से अंकन में इंगित करता है, कि आप से एक मान निकाल सकते प्रत्येक सूची में, लेकिन फिर आप परिणामस्वरूप एक सूची प्राप्त करते हैं जो 40 तत्व लंबा है। जब आप एक मूल्य के संदर्भ के रूप में फ़ैक्टर (अच्छी तरह से, इस मामले में monads) को देखते हैं तो यह अधिक समझ में आता है। उदाहरण में, x
और y
ऐसे मूल्य हैं, लेकिन उनका संदर्भ यह है कि वे nondeterministic हैं। जब आप दो ऐसे मानों को गुणा करते हैं, तो आपको और अधिक नोडेटर्मिनिज्म मिलता है, जिसके परिणामस्वरूप लंबी सूची होती है। तो monads और >>=
के साथ, संदर्भ बदला जा सकता है, जबकि functors और map
के साथ, यह नहीं कर सकता।
यह उद्धरण कहां से है? मैंने सूची _monad_ को nondeterministic पसंद का प्रतिनिधित्व करने के बारे में सुना है, लेकिन सूची _functor_ नहीं है। – ivanm
उद्धरण निम्न है: http://www.haskell.org/haskellwiki/Typeclassopedia#Instances – groodt