मैं वर्तमान में हास्केल के साथ प्रोजेक्ट पर काम कर रहा हूं, और मुझे कुछ परेशानी मिली है। मुझे "dictionary.txt" फ़ाइल में प्रत्येक पंक्ति को एक सूची में पढ़ना और डालना है, लेकिन मुझे ऐसा नहीं लगता है। ठीक से काम करता है एक "putStrLn inpStr" के साथ: "सूची inpStr", सभी लाइनों को प्रदर्शित करनेहास्केल: फ़ाइल से प्रत्येक पंक्ति को एक सूची में सम्मिलित करना
main = do
let list = []
loadNums "dictionary.txt" list
loadNums location list = do
inh <- openFile location ReadMode
mainloop inh list
hClose inh
mainloop inh list = do
ineof <- hIsEOF inh
if ineof
then return()
else do
inpStr <- hGetLine inh
inpStr:list
mainloop inh list
यह हर लाइन (मैं जानता हूँ कि यह हर पंक्ति प्राप्त करता है, की जगह के बाद से प्राप्त करने के लिए माना जाता है: मैं इस कोड मिल गया है), और यह एक सूची में डालने, लेकिन मैं निम्नलिखित त्रुटि मिलती है:
Couldn't match expected type `IO' against inferred type `[]'
शायद क्योंकि hGetLine एक स्ट्रिंग नहीं है, लेकिन एक आईओ स्ट्रिंग है, जो मैं पता नहीं कैसे करने के लिए एक प्राप्त करने के लिए संभाल करने के लिए है उचित स्ट्रिंग मैं अपनी सूची में डाल सकता हूं। मुझे नहीं पता कि यह कैसे हल किया जा सकता है, या समस्या वास्तव में क्या है, लेकिन अगर किसी को किसी फ़ाइल में सूची में प्रत्येक पंक्ति को सही ढंग से कैसे प्राप्त किया जाए, तो मुझे इसकी सराहना होगी।
अग्रिम धन्यवाद!
किसी ऐसे व्यक्ति को चीजों को समझाते समय जो हास्केल सीख रहा है, मैं व्यर्थ शैली का उपयोग (या यहां तक कि दिखा रहा) से बचाना चाहता हूं। उन्हें पढ़ने के लिए नहीं चाहते ;-) – CesarB
+1 'readFile' का उल्लेख करने के लिए +1। ओपन फाइल/रीड लाइन/ईओएफ/क्लोज़ फाइल का पता लगाने की अनिवार्य मानसिकता से बाहर निकलना बहुत उपयोगी है, और 'readFile', 'getContents' और' interact' जैसे कार्यों को आपके लिए गड़बड़ करने दें। – Nefrubyr
"mapM_" का क्या अर्थ है? मुझे पता है कि "mapM" मोनैड के लिए एक फ़ंक्शन को मानचित्र करता है .. लेकिन अंडरस्कोर वाला वाला एक? – drozzy