मैं एक राज्य इकाई भी त्रुटि हैंडलिंग का समर्थन कर सकते लिखने के लिए की जरूरत है। मैं इस उद्देश्य के लिए किसी भी मोनाद का उपयोग करने के बारे में सोच रहा था क्योंकि यह त्रुटि के कारण के बारे में विवरण भी प्रदान कर सकता है। मुझे शायद मोनैड का उपयोग करके एक राज्य मोनैड की परिभाषा मिली, हालांकि मैं शायद इसके बजाय, इसका उपयोग करने के लिए इसे संशोधित करने में असमर्थ हूं। यहां कोड है:मैं एक राज्य मोनैड कैसे लिख सकता हूं जो त्रुटि प्रबंधन को भी करता है?
newtype StateMonad a = StateMonad (State -> Maybe (a, State))
instance Monad StateMonad where
(StateMonad p) >>= k = StateMonad (\s0 -> case p s0 of
Just (val, s1) -> let (StateMonad q) = k val in q s1
Nothing -> Nothing)
return a = StateMonad (\s -> Just (a,s))
data State = State
{ log :: String
, a :: Int}
मैं पहली बार कोड ब्लॉक और दूसरे के बीच अंतर नहीं दिख रहा। क्या आपने गलती से एक ही कोड को दो बार शामिल किया था, या यदि नहीं, तो क्या आप अंतर को स्पष्ट कर सकते हैं? – seh
@seh, अच्छी पकड़, यह –
अपडेट किया गया है यह भी ध्यान दें कि ये दोनों परिचालन रूप से थोड़ा अलग हैं। दूसरा संस्करण पुन: प्रारंभ करने योग्य त्रुटियों की अनुमति देता है, जबकि पहला संस्करण पहली त्रुटि पर समाप्त होता है। यदि आप लॉगिंग मॉडलिंग कर रहे हैं, तो पहले संस्करण को पता चले कि त्रुटि पर लॉग 'खो देता है'। –