मुझे लगता है कि मैं इकाई ट्रांसफार्मर के कुछ बुनियादी समझ याद कर रहा हूँ, क्योंकि मुझे लगने इस कोड लिखने:लिफ्ट त्रुटि मान
import Control.Monad.Identity
import Control.Monad.Error
liftError :: Either String Int -> ErrorT String Identity Int
liftError x = do case x of
Right val -> return val
Left err -> throwError err
gateway :: Bool -> ErrorT String Identity Int
gateway = liftError . inner
inner :: Bool -> Either String Int
inner True = return 5
inner False = throwError "test"
हालांकि यह काम करता है, मुझे लगता है कि यह अधिक किया जा सकता है सुंदर ढंग से। विशेष रूप से, मैं liftError
के प्रतिस्थापन की तलाश में हूं, जो मुझे लगता है कि मुझे अपने लिए परिभाषित नहीं करना चाहिए।
gateway
और inner
बनाने के लिए सबसे आसान तरीका क्या होगा?
ठीक है, इसलिए अधिक विशिष्ट होने के लिए, यदि मैं प्रकारों को छोड़ना चाहता हूं तो मुझे मैन्युअल उठाने का कार्य लिखना होगा? यह सिर्फ मेरी समझ के लिए है। बीटीडब्ल्यू दुर्भाग्य से मैं आज वोट नहीं दे सकता:/आपको कल वोट मिलेगा :) –
प्रकारों को बदलने के बिना, आप 'त्रुटि टी का उपयोग कर सकते हैं। अपने 'liftError' फ़ंक्शन के स्थान पर वापस लौटें। आप आंतरिक रूप से अधिक सामान्य संस्करण का भी उपयोग कर सकते हैं और केवल प्रतिबंधित प्रकार के साथ 'आंतरिक' की एक प्रति का पर्दाफाश कर सकते हैं। – hammar
वह 'त्रुटि टी। वापसी 'वही था जो मैं खोज रहा था। जैसा कि मैंने उल्लेख किया है, इसका कोई वास्तविक कोड नहीं है, मैं सिर्फ मोनड ट्रांसफार्मर की अवधारणा को समझना चाहता हूं :) –