किस स्थिति में liftIO
उपयोग किया जाना चाहिए? जब मैं ErrorT String IO
का उपयोग कर रहा हूं, lift
फ़ंक्शन IO क्रियाओं को ErrorT
में उठाने के लिए काम करता है, इसलिए liftIO
अनिवार्य लगता है।हास्केल: लिफ्ट बनाम लिफ्टियो
उत्तर
lift
हमेशा "पिछली" परत से लिफ्ट करता है। यदि आपको दूसरी परत से उठने की आवश्यकता है, तो आपको lift . lift
और इसी तरह की आवश्यकता होगी।
दूसरी ओर, liftIO
हमेशा आईओ परत से निकलता है (जो, जब मौजूद होता है, हमेशा ढेर के नीचे होता है)। इसलिए, यदि आपके पास मोनैड की 2 से अधिक परतें हैं, तो आप liftIO
की सराहना करेंगे।
तर्क के प्रकार की तुलना करें निम्नलिखित lambdas में:।
type T = ReaderT Int (WriterT String IO) Bool
> :t \x -> (lift x :: T)
\x -> (lift x :: T) :: WriterT String IO Bool -> T
> :t \x -> (liftIO x :: T)
\x -> (liftIO x :: T) :: IO Bool -> T
liftIO आईओ इकाई, जो भी इकाई आप में हैं करने के लिए सिर्फ एक शॉर्टकट है असल में, liftIO लिफ्टों के परिवर्तनशील का उपयोग करने के बराबर होती है । सबसे पहले यह अनावश्यक लग सकता है लेकिन लिफ्टियो का उपयोग करना एक बड़ा फायदा है: यह आपके आईओ कोड को वास्तविक मोनाड निर्माण का अनुपालन करता है ताकि आप उसी कोड का पुन: उपयोग कर सकें, चाहे आपका अंतिम मोनाड बनाया गया हो, यह काफी महत्वपूर्ण है (यह काफी महत्वपूर्ण है एक मोनड ट्रांसफार्मर लिखते समय)।
ओहटर हाथ पर, लिफ्टियो मुफ्त में नहीं आ रहा है, क्योंकि लिफ्ट करता है: आपके द्वारा उपयोग किए जा रहे मोनाड ट्रांसफार्मर के लिए इसका समर्थन होना चाहिए, उदा। जिस मोनैड में आप हैं, वह मोनाडियो क्लास का एक उदाहरण होना चाहिए, लेकिन ज्यादातर मोनाड आजकल करते हैं (और निश्चित रूप से, टाइप-चेकर आपके लिए संकलन समय पर यह जांच करेगा: यह हैस्केल की ताकत है!)।
- 1. लिफ्ट बनाम अन्य
- 2. लिफ्ट उदाहरण?
- 3. लिफ्ट
- 4. लिफ्ट
- 5. लिफ्ट
- 6. हास्केल: foldr foldr1 बनाम
- 7. हास्केल: लिस्ट बनाम स्ट्रीम
- 8. हास्केल
- 9. लिफ्ट-जेसन
- 10. स्कैला/लिफ्ट
- 11. लिफ्ट-जेसन
- 12. हास्केल: बीजीय डेटा टपल बनाम
- 13. हास्केल बनाम पायथन थ्रेडिंग मॉडल
- 14. रिवर्स AJAX (धूमकेतु) और वसंत एमवीसी बनाम स्कैला/लिफ्ट?
- 15. कैसे एक लिफ्ट webapp
- 16. लिफ्ट: सीएसएस ट्रांसफॉर्म
- 17. लिफ्ट ट्रैकिंग उपयोगकर्ता
- 18. लिफ्ट फ्रेमवर्क JSON डेटा
- 19. लिफ्ट और जेटी
- 20. लिफ्ट/स्काला पर एमवीसी
- 21. लिफ्ट और टाइप सुरक्षा
- 22. लिफ्ट त्रुटि मान
- 23. लिफ्ट - अजाक्स सबमिशन
- 24. लिफ्ट फ़िल्टर एसएसएल
- 25. गार्ड बनाम अगर-तो-और कुछ बनाम हास्केल
- 26. असली दुनिया में हास्केल बनाम प्रक्रियात्मक प्रोग्रामिंग
- 27. मॉडल संचालित सॉफ्टवेयर विकास बनाम हास्केल
- 28. सी बनाम हास्केल कोलाट्स अनुमान गति तुलना
- 29. तैनाती में हास्केल स्टेटिक बनाम डायनामिक लिंकिंग
- 30. हास्केल - वर्ग typeclass बनाम - क्या अंतर
मैं आमतौर पर 'लिफ्ट' पर्याप्त रूप से आईओ परत को उठाने के लिए उपयोग करता हूं, भले ही 'लिफ्ट' पर्याप्त हो, क्योंकि तब मैं मोनैड स्टैक बदल सकता हूं और कोड अभी भी काम करता है। –
@ जॉन: अच्छा बिंदु। और यह भी स्पष्ट करता है कि आप आईओ उठा रहे हैं और कोई अन्य मोनड नहीं। –