2011-01-12 39 views
8

tin xấu sáng nay, tôi đã sẵn sàng để thử và sử dụng Leksah (đẹp tìm kiếm ứng dụng bằng cách này) để tiếp tục học haskell.haskell leksah hello-world

Tôi không thể biên dịch ví dụ "Hello World" mà tôi đã tìm thấy đọc leksah tutorial.

module Main (
main = putStrLn "Hello World"  
) where 

compilation-error: src\Main.hs:16:5: parse error on input = '`

module Main (
) where 
main = putStrLn "Hello World" 

compilation-error: src\Main.hs:1:0: The main function chính' không được xuất khẩu bởi module Main'

Những gì bạn sẽ tư vấn cho tôi để thử cái gì khác?

QUAN TRỌNG EDIT: Bây giờ Leksah được vận chuyển với một tập tin Main.hs, nạp trực tiếp lần đầu tiên bạn khởi động leksah, có chứa một dự án Hello World nhỏ đầy đủ functionnal. Nó cũng có bộ phận kiểm tra đơn vị tối giản. Tuyệt vời cho người mới bắt đầu :-)

Trả lời

15

Văn bản trong ngoặc đơn sau tên mô-đun là một danh sách xuất khẩu. Điều này có nghĩa, bạn phải đặt tất cả các chức năng trong chương trình bạn muốn xuất trong đó. Nhưng ngoài việc này, bạn cũng phải xác định chức năng chính của bạn ở đâu đó. Hãy thử cách này:

module Main (
    main 
) where 
main = putStrLn "Hello World" 

PS: Bạn cũng có thể xóa dấu ngoặc đơn và bất kỳ thứ gì trong đó, bất kỳ thứ gì trong mô-đun của bạn sẽ được xuất.

+0

nhiều thanx fuz! –

6

Ví dụ thứ hai của bạn gần như ở đó, chỉ cần xóa () từ bên cạnh Main. Đây là danh sách xuất khẩu của bạn cho mô-đun của bạn, mà bạn đã làm trống (không có gì ở giữa các dấu ngoặc đơn). Do đó, main không được nhìn thấy (vì nó không được xuất).

Bạn cũng có thể chỉ xuất khẩu chính:

module Main (main) where 
+0

thực tiễn tốt là xuất tất cả mọi thứ? –

+0

Vâng, tôi không thể nói chắc chắn thực hành tốt nhất là gì, nhưng: nói chung, tôi hạn chế xuất khẩu của mình khi tôi có một ý tưởng hợp lý là tôi đã tạo thành một mô-đun gắn kết. Hạn chế xuất khẩu của bạn có thể quan trọng đối với các kiểu dữ liệu mà bạn không muốn mọi người truy cập trực tiếp, thông qua một tập các hàm được xác định. – ScottWest

+1

Và cũng có thể, trình biên dịch có thể tối ưu hóa tốt hơn, nếu bạn không xuất khẩu anythig. – fuz

6

"Thực tiễn tốt để xuất mọi thứ?" Chắc chắn không phải. Bạn không muốn các chi tiết thực hiện như phương pháp trợ giúp bị rò rỉ ra bên ngoài. Một ví dụ khác là các hàm tạo giá trị, bởi vì không có cách nào để kiểm tra sự lành mạnh, các đối số mặc định, vv cho chúng. Để khắc phục điều này, bạn chỉ sử dụng chúng bên trong module, và cung cấp các chức năng khởi tạo thuận tiện và an toàn cho bên ngoài.