क्या कोई साधारण शब्दों में दोनों के बीच अंतर को समझा सकता है? मैं उस हिस्से को पूरी तरह से समझ नहीं पा रहा हूं जहां मोनैड एंडोफंक्टर बनाम केवल मज़ेदार हैं।फ़ैक्टर और एंडोफंक्चर के बीच अंतर
उत्तर
एक मज़ेदार एक श्रेणी से अलग हो सकता है, एक एंडोफंक्टर एक मजेदार है जिसके लिए प्रारंभ और लक्ष्य श्रेणी समान होती है।
एंडोमोर्फिज्म बनाम morphisms के समान ही।
अब, मोनैड एंडोफंक्टर क्यों होना चाहिए?
प्रसिद्ध उद्धरण है कि "मोनाड्स एंडोफंक्टरों की श्रेणी में सिर्फ मोनोइड्स हैं"। सौभाग्य से, किसी और ने पहले से ही समझाया है कि in this answer।
प्रमुख मुद्दा क्यों एक इकाई एक endofunctor हो गया है, कि join
है, के रूप में यह हास्केल में µ
कहा जाता है, या, के रूप में यह आम तौर पर श्रेणी में सिद्धांत कहा जाता है, एक इकाई की definition¹ का हिस्सा है। अब
Prelude Control.Monad> :t join
join :: Monad m => m (m a) -> m a
तो किसी ऑब्जेक्ट को functor m
लागू करने (Hask, वस्तुओं और morphisms, एक प्रकार के रूप में कार्य के रूप में हास्केल प्रकार की श्रेणी में) का परिणाम एक वस्तु है कि m
फिर से करने के लिए लागू किया जा सकता होना चाहिए। इसका मतलब है कि यह उस श्रेणी से संबंधित होना चाहिए जो कि मजेदार m
का डोमेन है।
एक मज़ेदार केवल तभी बनाया जा सकता है जब उसका डोमेन और कोडोमेन एक जैसा हो [सख्ती से, यदि इसका कोडोमेन अपने डोमेन की उपश्रेणी है], दूसरे शब्दों में, यदि यह एक एंडोफंक्टर है। चूंकि स्वयं के साथ composability एक monad की परिभाषा का हिस्सा है, monads एक fortiori endofunctors हैं।
¹ एक परिभाषा, कोई वैकल्पिक रूप से (>>=)
या bind
का उपयोग करके एक मोनैड को परिभाषित कर सकता है और व्युत्पन्न संपत्ति के रूप में join
रख सकता है।
क्या हास्केल में कोई फंतासी है जो एंडोफंक्टर नहीं हैं? (क्या वे सभी हास्क के लिए हास्क नक्शा नहीं करते हैं?) – huon
ठीक है, सभी हास्केल फंक्शंस एंडो हैं। –
गैर-एंडोफंक्टर पैकेजों में उपलब्ध हैं जैसे http://hackage.haskell.org/packages/archive/categories/1.0/doc/html/Control-Categorical-Functor.html – sdcvvc