मान लें कि हम Maybe
मोनैड पर उपयोग करना चाहते हैं, और फिर हम सूची में एक लुकअप करना चाहते हैं।क्या एक मोनाड ट्रांसफॉर्मर में फ़ंक्शन लपेटना चाहिए/क्या खराब अभ्यास माना जाना चाहिए?
अब इस के लिए एक आसान, और भी असामान्य नहीं तरीका है:
पहली संभावना
find a = ReaderT (lookup a)
हालांकि यह इस तरह प्रतीत होता है कि कैसे ReaderT ट्रांसफार्मर काम करता है के बारे में कुछ गैर तुच्छ बात का दावा । Control.Monad.Reader के लिए स्रोत कोड को देखते हुए यह स्पष्ट है कि यह ठीक काम करता है। लेकिन मैंने इसका समर्थन करने वाले किसी दस्तावेज़ को नहीं पढ़ा है। हालांकि हम भी इस तरह लगता है लिख सकते हैं:
दूसरी संभावना
find a = do y <- ask
lift (lookup a y)
इसी प्रकार के विचारों MaybeT
, StateT
, State
और Reader
लपेटकर के लिए पकड़। आम तौर पर मैं पहले उदाहरण की तरह कुछ लिखता हूं, लेकिन अधिकांश समय यह वास्तव में स्पष्ट है कि इसे दूसरे उदाहरण की तरह कैसे लिखना है, और आप यह भी कह सकते हैं कि यह अधिक पठनीय है। तो मेरा सवाल है: क्या पहले उदाहरण की तरह कोड को बुरा माना जाना चाहिए?
आप 'ए = लिफ्ट' भी लिख सकते हैं। लुकअप ए = << पूछें ', जो कि दूसरे विकल्प के रूप में स्पष्ट (IMHO) है, लेकिन छोटा है। –
या fmap का उपयोग करें: एक = fmap (लुकअप ए) पूछें = लुकअप <$> – urso
पूछें कि यह निर्माता है कि उन्होंने कन्स्ट्रक्टर – fuz