shown in this answer, seq
undefined
के साथ संयुक्त समीकरण तर्क की बात करते समय बहुत अजीब चीजें करता है, उदाहरण के लिए यह कोई भी monad विफल हो सकता है। एक और उदाहरण this question में है।`seq` की तुलना में 'मूल्यांकन' सुरक्षित है?
हाल ही में मैंने evaluate :: a -> IO a
पर ठोकर खाई है जो एक समान बात करता है - यह डब्ल्यूएचएनएफ को इसके तर्क का मूल्यांकन करता है, लेकिन केवल IO
कार्रवाई का मूल्यांकन किया जाता है। यह अधिक सुरक्षित लगता है, क्योंकि एक उम्मीद करता है कि "IO
में हम सबकुछ कर सकते हैं"। बेशक इसे हर जगह इस्तेमाल नहीं किया जा सकता है, लेकिन अक्सर किसी अभिव्यक्ति का मूल्यांकन करने की आवश्यकता IO
ऑपरेशन के साथ किसी भी तरह से जुड़ी होती है (जैसे MVar
एस के साथ काम करते समय उपभोग करने वाले थ्रेड के बजाय गणना करने के लिए एक उत्पादन धागे को मजबूर करना)।
तो मैं पूछना चाहता हूं, evaluate
कितना सुरक्षित है? क्या उदाहरण बनाना संभव है (IO
बेशक) जहां यह seq
जैसे कोड के बारे में तर्क तोड़ता है? या क्या मैं इसे seq
(यदि यह किसी विशेष कार्यक्रम के लिए संभव है) के सुरक्षित प्रतिस्थापन के रूप में विचार कर सकता हूं?