अन्य अन्य उत्तर पुष्टि करते हैं कि दो ही व्यवहार करते हैं, लेकिन यह नहीं बताते कि जहां id
वास्तव में चला गया। इस जवाब में, मैं ऐसा करने का प्रयास करूंगा। पंचलाइन यह है कि, रीडर के लिए, हमारे पास एक उत्सुक id
है- समीकरण को हटा रहा है: id >>= return . f = f
। (इस समीकरण का एक और सुंदर रूप यह है कि (id >>=) = (>>= id)
; साथ में मोनैड कानूनों के साथ सुंदर रूप आसानी से उपयोग करने योग्य रूप का तात्पर्य है।) स्पष्टीकरण को थोड़ा सरल बनाने के लिए, आवेदक रूप से मोनाडिक रूप में परिवर्तित करने की कोशिश करने के बजाय, मैं करूँगा बस इसे ले प्रदान करने के लिए है कि आपको लगता है कि निम्न समीकरण:
(==) <$> reverse <*> id
= { too annoying to do carefully }
reverse >>= \xs -> id >>= \ys -> return ((==) xs ys)
तो हम उस अंतिम पंक्ति से शुरू कर देंगे, और reverse >>= (==)
में खत्म। रास्ते में, यह ध्यान रखना महत्वपूर्ण होगा कि id
(.)
की पहचान है - जो रीडर मोनैड के लिए fmap
होने के कारण होता है। यहां हम जाते हैं:
reverse >>= \xs -> id >>= \ys -> return ((==) xs ys)
= { monad law }
reverse >>= \xs -> fmap ((==) xs) id
= { definition of fmap for Reader }
reverse >>= \xs -> (.) ((==) xs) id
= { id is the identity of fmap }
reverse >>= \xs -> (==) xs
= { eta reduction }
reverse >>= (==)
तो id >>= return . f = f
का अर्थ क्या है? खैर, कार्यों को "अनुक्रमित मान" के रूप में देखते हुए, हम id
को उसके सूचकांक के बराबर मान के रूप में समझ सकते हैं; और return
वह मान होने के नाते जो हर जगह समान है। तो id >>= return . f
कहता है "इंडेक्स x
पर देखें; फिर, (अभी भी इंडेक्स x
पर), उस मान को वापस करें जो इसकी अनुक्रमणिका को अनदेखा करता है और उसके पास f x
मान है"। ऐसा ही होता है कि जिस इंडेक्स को हम अनदेखा करते हैं और जिस मूल्य को हम f
से मेल खाते हैं - इसलिए हम सभी संकेतों को भी छोड़ सकते हैं और बस "इंडेक्स x
पर देखें और f
पर लागू करें"। यह समीकरण का अर्थ है।
स्रोत
2015-09-15 19:05:59
https://stackoverflow.com/questions/14430397/about-the-function-monad – Ryan