के एक उदाहरण के रूप में कार्य मुझे यह समझने में कठिनाई हो रही है कि एक समारोह एक मोनड कैसे हो सकता है।मोनाड
instance Monad ((->) r) where
return x = \_ -> x
h >>= f = \w -> f (h w) w
यहां तक कि क्या मिरान Lipovača says के बारे में यह मुझे उलझन में आता है:
समारोह (->) r
Control.Monad.Instances
में एक घोषणा के अनुसार एक इकाई है,
>>=
के लिए कार्यान्वयन एक सा लगता है, लेकिन गुप्त यह वास्तव में नहीं है। जब हम किसी फ़ंक्शन में एक monadic मान फ़ीड करने के लिए>>=
का उपयोग करते हैं, तो परिणाम हमेशा एक monadic value है। तो इस मामले में, जब हम फ़ंक्शन को किसी अन्य फ़ंक्शन पर फ़ीड करते हैं, तो परिणाम भी एक फ़ंक्शन होता है। यह क्यों परिणाम लैम्ब्डा के रूप में शुरू होता है।>>=
के सभी कार्यान्वयन अब तक किसी भी तरह से monadic मूल्य से परिणाम अलग कर दिया और फिर उस परिणाम को फ़ंक्शन f लागू किया। वही बात यहां होती है। किसी फ़ंक्शन से परिणाम प्राप्त करने के लिए, हमें इसे पर लागू करना होगा, यही कारण है कि हम(h w)
पर फ़ंक्शन से परिणाम प्राप्त करने के लिए यहां हैं और फिर हम उस पर लागू होते हैं। एफ एक monadic मूल्य देता है, जो हमारे मामले में एक समारोह है, इसलिए हम इसे भी लागू करने के लिए लागू करते हैं। -> (एक -> एमबी) -> एमबीतो मैं ले कि
h
के रूप में लिखा गया (>> =) :: मा:
के प्रकार के हस्ताक्षर (>> =) यह है m a
और f
(a -> m b)
के रूप में। यदि कोई फ़ंक्शन m a
है, तो क्या यह a
प्रकार मान देता है? या यह a
प्रकार लेते हुए कुछ और लौटाता है?
h
के गैर इकाई मूल्य f
को खिलाया जाता है, तो हम पाते हैं: च (ज डब्ल्यू) ठीक लग रहा है। चूंकि f
एक फ़ंक्शन है और उसने अपना एकमात्र तर्क लिया है, यह पहले से ही एक मान है, नहीं? चूंकि यह एक monadic समारोह है मूल्य भी एक monadic मूल्य है। फिर उसे एक और मूल्य w
क्यों चाहिए? w
f something
को खिला नहीं रहा है, यह गैर-मोनैडिक बनाते हैं, यानी, यह कोई फ़ंक्शन नहीं है, नहीं? मैं यह भी समझ नहीं पा रहा हूं कि क्यों f something
और h
एक ही तर्क w
लेते हैं और विभिन्न मान प्रकार (m a
और m b
) लौटाते हैं।
धन्यवाद। सब कुछ स्पष्ट है! – amemus