2011-12-31 23 views
13
class Monad m where 
    return :: a -> m a 
    (>>=) :: m a -> (a -> m b) -> m b 
    (>>) :: m a -> m b -> m b 
    m >> n = m >>= \_ -> n 

    fail :: String -> m a 

मैंने पहले टाइपक्लास में समीकरण (या फ़ंक्शन घोषणा?) कभी नहीं देखा है। टाइपक्लास में समीकरण क्यों है?लैम्बडा नोटेशन के साथ यह समीकरण क्या है "एम >> एन = एम >> = _ -> एन" मोनड की घोषणा में?

मुझे पता है _ किसी भी चीज़ से मेल खाने के लिए एक शब्द है। लेकिन मीटर >> = \ _ -> एन मैच?

+1

मुझे अभी एहसास हुआ कि ** \\ _ -> n ** पहला पैरामीटर फेंकता है। – snow

उत्तर

17

यह विधि के लिए एक डिफ़ॉल्ट कार्यान्वयन है। जब तक आपके इंस्टेंस घोषणा में (>>) का स्पष्ट कार्यान्वयन नहीं होता है, तो वह परिभाषा है जिसका उपयोग किया जाएगा। यदि किसी विधि को किसी अन्य विधि का उपयोग करके कार्यान्वित किया जा सकता है तो डिफ़ॉल्ट विधियां व्यापक हैं, लेकिन संभावित रूप से कुछ डेटाटाइप के लिए अधिक कुशल कार्यान्वयन हो सकते हैं।

m >>= \_ -> n 

'परिणाम' m का कार्य है कि अपने तर्क पर ध्यान नहीं देता और n कोई फर्क नहीं पड़ता रिटर्न को खिलाया का मतलब है। यह भी

m >>= const n 

लिखा जा सकता है प्रभाव के साथ monads के संदर्भ में, यह है m प्रभाव हो सकता है, लेकिन उपेक्षा वापसी मान, तो n 'है। (>>) यही है जो वहां करने के लिए है।