2012-04-01 27 views
5

मैं वर्तमान में हास्केल मूल बातें के साथ चारों ओर खेल रहा हूँ और निम्नलिखित "उपयोग के मामले" पर ठोकर खाई ख:एक समारोह एक → का प्रयोग के रूप में "monadic" समारोह एक → एमबी

ghci> let divideTenBy x | x == 0 = Nothing | otherwise = Just (10/x) 
ghci> let composed = divideTenBy <=< return . (*10) <=< divideTenBy <=< return . (-)5 
ghci> Just 5 >>= composed 
Nothing 
ghci> Just 10 >>= composed 
Just (-0.5) 

तो मैं मूल रूप से monadic मिश्रण कर रहा हूँ और यहाँ शुद्ध कार्य और उन्हें एक monadic समारोह में लिखें। यह काम करता है, लेकिन return . (*10) मुझे एक सामान्य रूप से आवश्यक चीज़ की तरह लगता है, इसलिए मैं इसके लिए एक शॉर्टंड परिभाषित करने के लिए प्रेरित हूं, monadify = (return.) जैसे कुछ।

ऐसा करने से पहले, हालांकि, मैं पूछना चाहता हूं कि पहले से ही इस तरह की स्थिति से निपटने में मददगार हैं या नहीं। निस्संदेह मैं पूरी चीज के बारे में भी उलझन में पड़ सकता हूं और ऐसा कारण हैं कि ऐसा क्यों नहीं किया जाना चाहिए। यदि हां, तो कृपया मुझे बताएं।

+0

के रूप में फिर से लिखा जा सकता है यह भी ध्यान दें कि 'mu >> = वापसी। f === liftM f mu === fmap f mu' (उत्तरार्द्ध को 'फ़ैक्टर' उदाहरण की आवश्यकता होती है, लेकिन सभी सभ्य 'मोनाद के पास एक है)। जैसा कि डैनियल वाग्नेर का जवाब दिखाता है, 'वापसी। f> => foo === foo। f'। '(> =>) की अन्य तर्क स्थिति में 'यह काफी अच्छा नहीं है,' foo> => वापसी। एफ === एफएमएपी एफ। foo'। –

+0

@Daniel: अच्छा, जानकारी के लिए धन्यवाद! –

उत्तर

7

ऐसा करने का कोई कारण नहीं है। हालांकि, यह शायद ही कभी जरूरी है। उदाहरण के लिए, आपके उपयोग मामले को

composed = divideTenBy . (*10) <=< divideTenBy . (-)5 
+0

मुझे आश्चर्य है कि यह मेरे साथ नहीं हुआ, यह वास्तव में काफी स्पष्ट है :) मुझे लगता है कि यह सवाल पूरी तरह से ठीक है, धन्यवाद! –