According to the Haskell wikibook, एक Monad
बुलाया m
दो अतिरिक्त कार्यों के साथ एक Functor
है:यह एक मोनड नहीं है, लेकिन यह क्या है?
unit :: a -> m a
join :: m (m a) -> m a
यह अच्छा है, लेकिन मैं कुछ अलग है। गोररी विवरणों पर चमकते हुए, मेरे पास एक प्रकार है जिसमें unit
और join
फ़ंक्शन हैं, लेकिन इसकी fmap
अच्छी तरह से व्यवहार नहीं किया गया है (fmap g . fmap f
आवश्यक नहीं है fmap (g.f)
)। इस वजह से, इसे Monad
का उदाहरण नहीं बनाया जा सकता है। फिर भी, मैं इसे जितना संभव हो उतना सामान्य कार्यक्षमता देना चाहता हूं।
तो मेरा सवाल यह है कि, किस श्रेणी में सैद्धांतिक संरचनाएं मोनैड के समान हैं, जिनमें उनके पास unit
और join
है?
मुझे एहसास है कि कुछ स्तर पर, उपर्युक्त प्रश्न खराब परिभाषित है। मोनैड के लिए unit
और join
परिभाषाएं केवल fmap
परिभाषा के संदर्भ में समझ में आती हैं। fmap
के बिना, आप किसी भी मोनैड कानून को परिभाषित नहीं कर सकते हैं, इसलिए unit
/join
की किसी भी परिभाषा समान रूप से "मान्य" होगी। तो मैं fmap
के अलावा अन्य कार्यों की तलाश में हूं कि इन unit
और join
फ़ंक्शंस पर कुछ "नॉन-मोनैड" कानूनों को परिभाषित करने का अर्थ हो सकता है।
आप संरचना आप के बारे में अधिक वर्णन कर सकते है, और क्या खास कारणों में इसके लिए संलयन कानून विफल 'fmap'? – luqui
मुझे लगता है कि आप विशेष रूप से "tweaked" 'fmap' को इस तरह से बदलते हैं ताकि 'शामिल' दूसरे मोनैड कानून को पूरा कर सके? आम तौर पर, आप लगभग हमेशा 'fmap जी मिलता है। fmap f ≡ fmap $ f.g' बस स्वचालित रूप से। – leftaroundabout
@luqui मैं इस विशिष्ट मामले की तुलना में सामान्य में अधिक रुचि रखता हूं, लेकिन यह एक सामान्य वितरण है। यदि आप वितरण में हर बिंदु पर एक फ़ंक्शन लागू करने के रूप में 'fmap' के बारे में सोचते हैं, तो' fmap' केवल अतिरिक्त और गुणा के लिए 'फ़ैक्टर' कानूनों का पालन करता है। 'यूनिट 'एक डेटा बिंदु पर प्रशिक्षण दे रहा है, और' जॉइन 'एक सामान्य वितरण में" सामान्य वितरण के सामान्य वितरण "को विलय कर रहा है। जाहिर है, इसके लिए पैरामीटर पर कुछ बाधाओं की आवश्यकता है, इसलिए इसे 'बेस' प्रकार वर्गों का उपयोग करके बिल्कुल नहीं किया जा सकता है और मैं इसके साथ खेलने के लिए 'कॉन्स्ट्रेनटिंड्स' का उपयोग कर रहा हूं। –