2010-01-06 7 views
15

जैसा कि यह शीर्षक में कहता है: The last statement in a 'do' construct must be an expression का क्या अर्थ है? मैंने को putStrLn के साथ अवरुद्ध कर दिया जैसा कि मैंने देखा है कि कई उदाहरणों में दिखाया गया है, और मुझे एक त्रुटि मिलती है।हास्केल - "एक 'डू' निर्माण में अंतिम बयान एक अभिव्यक्ति होना चाहिए"

कोड:

main = do args <- getArgs 
      file <-readFile "TWL06.txt" 
      putStrLn results 
+2

अपना इंडेंटेशन जांचें। सुनिश्चित करें कि ब्लॉक में सभी लाइनों में एक ही इंडेंटेशन है। टैब और रिक्त स्थान समान नहीं हैं – newacct

+2

यदि आप इंडस्क-संवेदनशील भाषाओं जैसे हास्केल और पायथन के साथ काम कर रहे हैं, तो सुनिश्चित करें कि आपके संपादक में सेन टैब सेटिंग्स हैं। ': सेट करें और ts = 8 sw = 4 sta' या तो विम में। – ephemient

उत्तर

21

अधिकांश समय, यह क्योंकि आपके कोड गलत गठबंधन है और संकलक मानता है कि अपने "do" ब्लॉक समय से पहले ही समाप्त हो गया है (या अतिरिक्त कोड है कि वास्तव में न देखते हैं है)

+0

दिन बचाया! धन्यवाद! – hbobenicio

17

आपका अंतिम पंक्ति नहीं, किसी भी संयोग से, someVar <- putStrLn "hello" की तरह कुछ है यह क्या है? यदि आप अंतिम पंक्ति पर परिवर्तनीय बाध्यकारी करने का प्रयास करते हैं तो आपको वह त्रुटि मिल जाएगी, क्योंकि यह putStrLn "Hello" >>= \someVar -> के बराबर है - यह अंत में एक अभिव्यक्ति होने की अपेक्षा करता है।

+0

नहीं, बस एक 'putStrLn' ... – RCIX

+0

मुझे इसे हल करने में थोड़ी देर लग गई .... मैं आपको सलाम करता हूं ... महोदय! – 7kemZmani

7

गलत खरोज इस त्रुटि को जन्म दे सकता । साथ ही, टैब का उपयोग न करने के लिए अच्छा है, केवल रिक्त स्थान।

संबंधित मुद्दे