उदाहरण के तौर पर "संग्रह-जैसे" मोनैड से शुरू करते समय आम तौर पर मोनैड सामान को समझना आसान होता है। कल्पना कीजिए कि आप दो अंक की दूरी की गणना:
data Point = Point Double Double
distance :: Point -> Point -> Double
distance p1 p2 = undefined
अब आप एक निश्चित संदर्भ हो सकता है। जैसे अंक में से एक "अवैध" हो सकता है क्योंकि यह कुछ सीमाओं से बाहर है (उदा। स्क्रीन पर)।तो तुम Maybe
इकाई में अपने मौजूदा गणना लपेट:
distance :: Maybe Point -> Maybe Point -> Maybe Double
distance p1 p2 = undefined
आप बिल्कुल वैसा ही गणना है, लेकिन अतिरिक्त सुविधा के साथ वहाँ "कोई परिणाम" (Nothing
के रूप में एन्कोड) हो सकता है।
या आपके पास "संभावित" बिंदुओं के दो समूह हैं, और उनकी पारस्परिक दूरी की आवश्यकता है (उदाहरण के लिए बाद में सबसे कम कनेक्शन का उपयोग करें)। तब सूची इकाई अपने "संदर्भ" है:
distance :: [Point] -> [Point] -> [Double]
distance p1 p2 = undefined
या अंक एक उपयोगकर्ता है, जो गणना "गैर नियतात्मक" (अर्थ में है कि आप बाहर की दुनिया में चीजों पर निर्भर करता है, जो बदल सकते हैं द्वारा दर्ज की जाती हैं), तो IO
इकाई अपने दोस्त है:
distance :: IO Point -> IO Point -> IO Double
distance p1 p2 = undefined
गणना हमेशा एक ही रहता है, लेकिन एक निश्चित "संदर्भ" है, जो कुछ उपयोगी पहलुओं कहते हैं में जगह लेने के लिए होता है (विफलता, बहु मूल्य, nondeterminism) । आप इन संदर्भों (मोनैड ट्रांसफार्मर) को भी जोड़ सकते हैं।
आप एक परिभाषा है कि परिभाषाओं ऊपर सम्मिलित है लिख सकते हैं, और लिए काम करता है किसी भी इकाई:
distance :: Monad m => m Point -> m Point -> m Double
distance p1 p2 = do
Point x1 y1 <- p1
Point x2 y2 <- p2
return $ sqrt ((x1-x2)^2 + (y1-y2)^2)
साबित होता है कि हमारे गणना वास्तव में स्वतंत्र वास्तविक इकाई है, जो के रूप में योगों की ओर जाता है से है "एक्स y-monad (-side) में गणना की जाती है"।
आजकल मैं इन्हें * क्रिया * या * कम्प्यूटेशंस * के रूप में संदर्भित करना पसंद करता हूं। यदि वे किसी फ़ंक्शन द्वारा उत्पादित होते हैं, तो आप पैरामीट्रिक क्रियाओं या मोनैडिक फ़ंक्शंस के बारे में बात कर सकते हैं, लेकिन बाद वाला शब्द संदिग्ध है। यह 'a -> m b' का संदर्भ ले सकता है, लेकिन' m (a -> b) 'के लिए भी। चूंकि इस आखिरी व्यक्ति को आवेदक शैली में उपयोग किया जाता है, इसलिए मैं कम अस्पष्ट शब्द पसंद करता हूं। – ertes
सुनिश्चित करें कि नीचे सी। मैककन का जवाब याद न करें। – ertes