हास्केल में कोमोनॉड टाइपक्लास क्या है?


105

हास्केल में कोमोनॉड टाइपक्लास क्या है? के रूप में Comonad से Control.Comonad में कोमोनॉड पैकेज (किसी भी अन्य संकुल के स्पष्टीकरण जो कॉमनड टाइपकास्ट प्रदान करते हैं, उनका भी स्वागत है)। मैंने कॉमोनॉड के बारे में अस्पष्ट सुना है, लेकिन मुझे वास्तव में इसके बारे में पता है कि यह मोनाड के extract :: w a -> aसमानांतर है return :: a -> m a

"वास्तविक" कोड में "वास्तविक जीवन" कोमोनड के उपयोग के लिए बोनस अंक।


मैं वास्तव में यह देखना चाहूंगा कि "सह" और सामान्य के बीच क्या अंतर है। मुझे पता है कि एक सन्यासी क्या होता है। इसलिए अगर मुझे पता है कि "सह" का मतलब क्या है, तो मैं खुद को निष्कर्ष निकाल सकता हूं कि कॉमनॉड क्या है, और इसे गहराई से समझें। एलेक्सी रोमानोव के जवाब ने उस पहलू में कुछ नहीं किया।
Evi1M4chine

2
@ Evi1M4chine: "co" (शिथिल) का अर्थ है "तीर को पलटना"। यहाँ उस का एक मोटा दृश्य है। मानद संचालन पर विचार करें: return :: a ~> m a, flip bind :: (a ~> m b) -> (m a ~> m b)। टेढ़ा-मेढ़ा तीर उल्टा और आप comonadic संचालन मिलती है: extract :: a <~ w a, extend :: (a <~ w b) -> (w a <~ w b)( extract :: w a -> a, extend :: (w a -> b) -> w a -> w b)
दान बर्टन

शुक्रिया @ डॉन बर्टन ... तो एक सनक के साथ, आप "अंदर" (नई और परिवर्तित चीज़ों को भरना) पर काम करते हैं, एक कोमोनड के साथ, आप "बाहर" (अंत में चीजों को बाहर निकालने के लिए या सिर्फ उन्हें बदलने के लिए) पर काम करते हैं । क्या वह नजरिया सही है? क्योंकि यह निश्चित रूप से गहरी समझ के साथ बहुत मदद करता है।
Evi1M4chine 21

सह-प्रभावों का मॉडल बनाने के लिए कोमोनॉड्स का उपयोग किया जा सकता है। यहाँ coeffects का एक महान परिचय है: tomasp.net/coeffects
zeronone

जवाबों:


83

ये लिंक सहायक हो सकते हैं:

  1. सेलुलर ऑटोमेटा का मूल्यांकन कोमोनेडिक है । विशेष रूप से, "जब भी आप बड़े डेटास्ट्रक्चर देखते हैं तो बहुत सारे छोटे लेकिन समान संगणनों से एक साथ pieced होते हैं, एक अच्छा मौका है कि हम एक कोमोनॉड के साथ काम कर रहे हैं"।
  2. अनुक्रम, धाराएँ, और खंड
  3. रोजमर्रा की जिंदगी में कॉमनोड्स

1
+1 पहला लिंक वह था जो वास्तव में मेरे लिए इसे साथ लाया था।
लूकी

42
लिंक-केवल उत्तर में कम से कम लिंक की गई सामग्री का सारांश होना चाहिए। वर्तमान में यह उत्तर एक अच्छा SO उत्तर होने के लिए उपयुक्त नहीं है। इसे थोड़ा विस्तारित करने पर विचार करें, ताकि यह लिंक किए गए लेखों के बिना अपने दम पर खड़ा हो सके।
बकरीउ

3
"जब भी आप बड़े डेटास्ट्रेक्टर्स को बहुत सारे छोटे से एक साथ pieced देखते हैं, लेकिन इसी तरह की संगणना एक अच्छा मौका है जो हम कॉमनोड के साथ काम कर रहे हैं" .... तो क्या इसका मतलब यह है कि टुकड़े टुकड़े करना कॉमनोडिक हैं?
सैम केलेट

मैंने पाया इस उदाहरण के extendलिए उपयोगी हो सकते हैं।
क्रिस पेननर

22

यह मेरे प्रश्न का पूरी तरह से उत्तर नहीं देता है, लेकिन मैं उत्तर प्रारूप में कुछ प्रासंगिक जानकारी रखना चाहता था:

"सह" (शिथिल) का अर्थ है "तीर को पलटना"। यहाँ उस का एक मोटा दृश्य है।

मौद्रिक संचालन पर विचार करें:

return :: a ~> m a
flip (>>=) :: (a ~> m b) -> (m a ~> m b)

स्क्वीग्ली तीर को उल्टा करें और आपको कोमोनाडिक ऑपरेशन मिले:

extract :: a <~ w a
extend :: (a <~ w b) -> (w a <~ w b)

(सामान्य बाणों से युक्त)

extract :: w a -> a
extend :: (w a -> b) -> w a -> w b

ध्यान दें कि इस प्रारूप में कैसे, returnएक ऐसा तीर है जो केवल तर्क स्लॉट में फिट होने के लिए होता है flip (>>=), और वही सच है extractऔर extend। मोनाड / कोमोनॉड कानूनों का कहना है कि जब आप उस स्लॉट में returnया डालते हैं extract, तो परिणाम पहचान का तीर होता है। कानून समान हैं, "बस तीर के साथ फ़्लिप"। यह एक सुपर हैंडवीव जवाब है लेकिन उम्मीद है कि यह कुछ अंतर्दृष्टि प्रदान करता है।


2
मोनद ट्यूटोरियल फॉलिसिटी से बचने के साथ आपका जवाब अच्छा है। मोनाड्स (और कोमोनॉड्स) एक इंटरफ़ेस हैं। हालांकि यह जानना वास्तव में बहुत अच्छा होगा कि उनका इरादा कैसा था । जैसे: उनके पीछे का विचार।
Evi1M4chine
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.