के रूप में सुझाव दिया है, Applicative
यहाँ अच्छा हो सकता है, साथ ही MaybeT
के रूप में संदर्भ के आधार पर। एक तीसरी चीज जो आप ध्यान में रख सकते हैं वह है कि do
ब्लॉक बाध्यकारी कॉल fail
में पैटर्न मिलान विफलता।
यह मैं क्या कर सकता है:
loginCheck = do
ml <- getPostParam "login"
mp <- getPostParam "password"
fromMaybe (render "Msg" [("text", "Form incomplete")]) $
authAs <$> ml <*> mp
या कोई भिन्न वापसी मान के साथ MaybeT
के साथ एक समाधान, यद्यपि (फिर से अधिक संदर्भ यह दिखा सकता है एक अच्छा दृष्टिकोण है या नहीं होने के लिए):
getPostParamT = MaybeT . getPostParam
loginCheckT = do
ml <- getPostParamT "login" -- ml and mp :: Maybe ByteString
mp <- getPostParamT "password"
liftIO $ authAs ml mp
<|> (liftIO $ render "Msg" [("text", "Form incomplete")])
... वास्तव में ऊपर अब बल्कि सस्ती है कि मैं इस पर पुन अपने दूसरे atte
मुझे लगता है कि आपका पहला दृष्टिकोण बहुत से साफ है। मैं वही करता हूं, किसी भी तरह :)। –
+1 जब मैंने तर्क के प्रकार की आवश्यकता देखी, तो मैंने तुरंत 'माईबे' + आवेदकों से सोचा। आपका 'सेबेबे' समाधान बहुत साफ है। हो सकता है कि समाधान खराब न हो; होप का उपयोग करने के लिए कोड के बड़े swaths refactoring ओपी के मामले में एक अच्छा विकल्प हो सकता है। –