मेरे पास यह परीक्षा है:
testReadFile = रनटास्टटीटी $ टेस्ट लेबल "इंटरैक्शनडमाइन। रीडफाइल कंटेंट टूलिस्ट" ( टेस्ट लिबेल [(टेस्टलाबेल "टेस्टफिल्म इंफ्रास्ट्रक्चर: टेस्ट फाइल पढ़ने के लिए" (टेस्टलाइस्ट [टेस्टसीज़] (टेम्फफ़ाइल कंटनिंग टेक्स्ट (\ फाइलहेण्डल - & gt; जोर दे रहा है। "अपेक्षित सामग्री" "आधी रात को कुत्ते की छाल।" (सामग्री & lt; - hGetContents फ़ाइलहैंडल रिटर्न कंटेंट) ) और (यदि यह मदद करता है) withTempFileContainingText यह फ़ंक्शन है
withTempFileContainingText lambda = bracketOnError () (पथ, फाईलहाण्डल) और लेफ्टिनेंट; - "ओपनटामफ़ाइल"। "" इनपुटटाईफ "रिटर्न फाइलहाण्डल) (डिलफ़ाइल) (\ फाइलहेण्डल - & gt; एचपीटएसआरटी फ़ाइल -" आधी रात को कुत्ते की छाल। "एचक्लोस फ़ाइलहैंडल - इस फ्लश बफर्स को वापस लाया जा रहा है (लैम्ब्डा फाइलहाण्डल)) < / Code> ghc शिकायत करता है कि
इंटरेक्शनडिमैन। एचएस: 36: 4: अपेक्षित प्रकार `आईओ स्ट्रिंग 'को अनुमानित प्रकार से मेल नहीं लगाया जा सकता है [ स्ट्रिंग] एक 'कर' अभिव्यक्ति के एक एसटीएमटी में: सामग्री & ले; - hGetContents फ़ाइलहंडल पूर्व>जो मुझे समझ में नहीं आता। ऐसा क्यों है कि
contentस्ट्रिंग की एक सूची है? और यह कोड कैसा दिखता है?
ठीक है, जो मैं तुरंत देख रहा हूं वह आपके प्रकार में एक प्रकार का बेमेल है अभिप्राय।
जोर दोबारा है स्ट्रिंग - & gt; ए - & gt; ए - & gt; अभिकथन । आप दूसरे कोड के रूप में एक स्ट्रिंग पास करते हैं, जिसका अर्थ है एक स्ट्रिंग भी तीसरा तर्क होना चाहिए। हालांकि, आपका करना अभिव्यक्ति स्ट्रिंग नहीं लौट रही है, बल्कि IO String
संपादित करें: विस्तार करने के लिए, एक बार जब आप IO के साथ गड़बड़ करते हैं, तो आप इसे कभी भी खा नहीं सकते आप सही तरीके से आईओ के बाहर अपने & lt; - के साथ निकाल सकते हैं, लेकिन फिर इसे तुरंत IO में return के साथ लपेटें। यदि आप स्ट्रिंग का उपयोग करना चाहते हैं, तो आपको इसे IO के अंदर करना चाहिए, कुछ ऐसा:
सामग्री करना & lt; - hGetContents assertEqual को संभालना "वे समान हैं" " अपेक्षित स्ट्रिंग "सामग्री ध्यान दें कि तब आपका करना लौट जाएगा IO asserttion यदि आप दावा मूल्य का उपयोग करना चाहते हैं, तो आपको इसे इसी तरह खोलना होगा, और इसी तरह। हास्केल आपको छिपे हुए साइड इफेक्ट्स से दूर नहीं होने देता!
Comments
Post a Comment