2012-10-13 11 views
6

मैं ज्यादातर व्यावहारिक लड़का हूं लेकिन मुझे यह दिलचस्प लगता है।कार्यात्मक प्रोग्रामिंग में सीक्वेंसिंग को समझना

मैं मोनैडिक अनुक्रमण के बारे में सोच रहा हूं और कुछ चीजें हैं जिन्हें मुझे स्पष्ट करने की आवश्यकता है। तो मूर्खतापूर्ण लग का खतरा होता है यहाँ यह है:

monadic सदस्य बाँध

bind :: m b -> (b -> m c) -> m c

"कार्रवाई" आप मध्यवर्ती मूल्यों के लिए स्पष्ट उपयोग करने देने क्रम सकते हैं।

यह कैसे मुझे और अधिक देता है स्पष्ट सदस्य (.) से:

(.) :: cat b c -> cat a b -> cat a c

इस मैं क्रम सकते हैं

और मध्यवर्ती मूल्यों के लिए पहुँच जाते हैं। सभी (f . g) x = f(g (x)) के बाद।

अगर मुझे (.) के साथ अनुक्रमित किया जा सकता है तो मुझे अनुक्रमण के लिए bind क्यों चाहिए?

+3

'की monadic संस्करण' 'है (> =>) :: इकाई मीटर => (।) (क -> एमबी) -> (ख -> एम सी) -> (ए -> एमसी) ', क्लेस्ली संरचना। –

+4

यह आपको * कम * वास्तव में देता है। 'सी (ए, बी) = ए -> एम बी 'संरचना के रूप में' बाइंड 'के साथ एक श्रेणी बनाता है और' वापसी 'पहचान के रूप में, *' m' के क्लेस्ली श्रेणी *। –

+4

यह भी सच नहीं है कि 'एफ (जी एक्स)' 'जी एक्स 'में पहले होना चाहिए। यह केवल सख्त अर्थशास्त्र के तहत सच होगा। लेकिन, जैसा कि यह खड़ा है, यह पहले हो सकता है, जबकि या नहीं। – Ingo

उत्तर

14

आप सही रास्ते पर हैं। प्रत्येक मोनड Kleisli category तथाकथित को जन्म देता है। हर इकाई के लिए m अपनी इसी Kleisli श्रेणी तीर a -> m b है और वे >=>, जो

f >=> g  = \x -> f x >>= g 

Kleisli प्रकार हास्केल प्रकार सिस्टम में यह समाहित के रूप में परिभाषित किया गया है का उपयोग कर बना जा सकता है, जैसा कि आप देख सकते हैं कि यह उदाहरण

instance Monad m => Category (Kleisli m) where 
    id = Kleisli return 
    (Kleisli f) . (Kleisli g) = Kleisli (g >=> f) 
है

तो इस श्रेणी के भीतर अनुक्रमित अनुक्रमण केवल >=> का उपयोग करके संचालन अनुक्रमित कर रहा है, जिसे >>= का उपयोग करके समान रूप से व्यक्त किया जा सकता है।

हम return और >>= का उपयोग कर, क्योंकि यह अधिक सुविधाजनक है monads को परिभाषित है, लेकिन हम अगर हम चाहते थे return और >=> का उपयोग कर के रूप में अच्छी तरह से उन्हें निर्धारित कर सकते हैं।

(यह भी देखें Different ways to see a monad को my answer।)

+4

मैं टाइप कर रहा था लेकिन आपने मुझे इसे हराया, इसलिए मैं बस जोड़ूंगा कि मोनाद कानून उन कानूनों के बराबर हैं जो 'क्लेस्ली एम' श्रेणी बनाते हैं: पहचान के बाएं और दाएं अवशोषण, और संरचना की साझेदारी। ध्यान दें कि 'एरोएप्ली' अतिरिक्त संरचना को परिभाषित करता है जिसे 'तीर' को मोनाड उत्पन्न करना होगा। 'क्लेस्ली एम' सिर्फ एक श्रेणी नहीं है बल्कि 'तीर' है, और निश्चित रूप से अतिरिक्त 'तीर ऐप्ली' संरचना है, लेकिन सभी 'तीर का काम नहीं है। – pigworker

+0

@pigworker: कानून 100% समकक्ष नहीं हैं जिसमें आपको अतिरिक्त '(g> => h) जोड़ने की आवश्यकता है। f = (f.g)> => एच' कानून '> =' '' से '' '' कानूनों को कम करने के लिए।मुझे याद नहीं है कि इसे क्या कहा जाता है लेकिन कुछ अभ्यास करने पर मुझे पकड़ा गया। – hugomg

संबंधित मुद्दे