2010-01-06 30 views
15

Giống như trong tiêu đề: The last statement in a 'do' construct must be an expression là gì? Tôi đã kết thúc khối do của mình với một putStrLn như nó hiển thị trong một số ví dụ mà tôi đã nhìn thấy và tôi gặp lỗi.Haskell - "Câu lệnh cuối cùng trong cấu trúc 'do' phải là một biểu thức"

Code:

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

kiểm tra thụt lề của bạn. đảm bảo tất cả các dòng trong khối có cùng một thụt đầu dòng. các tab và dấu cách không giống nhau – newacct

+2

Nếu bạn đang làm việc với các ngôn ngữ nhạy cảm như Haskell và Python, hãy đảm bảo rằng trình chỉnh sửa của bạn có cài đặt tab lành mạnh. ': set et ts = 8 sw = 4 sta' hoặc hơn trong Vim. – ephemient

Trả lời

21

Hầu hết thời gian, đó là vì mã của bạn là mis-liên kết và trình biên dịch giả định rằng "làm" khối của bạn kết thúc sớm (hoặc có thêm mã mà không thực sự thuộc về đó)

+0

Đã lưu trong ngày! Cảm ơn! – hbobenicio

17

dòng cuối cùng của bạn không phải là một cái gì đó giống như someVar <- putStrLn "hello", bởi bất kỳ cơ hội, phải không? Bạn sẽ nhận được lỗi đó nếu bạn cố gắng làm một biến ràng buộc trên dòng cuối cùng, bởi vì nó tương đương với putStrLn "Hello" >>= \someVar -> - nó hy vọng có một biểu thức ở cuối.

+0

Không, chỉ cần một 'putStrLn' ... – RCIX

+0

đã cho tôi một thời gian để sắp xếp này ra .... Tôi chào bạn ... Sir! – 7kemZmani

7

thụt đầu dòng không đúng có thể dẫn đến lỗi này . Ngoài ra, tốt là không sử dụng các tab, chỉ có khoảng trắng.

Các vấn đề liên quan