2012-06-20 30 views
24

Đặc tả Haskell 98 nói rằng điểm vào của chương trình, cụ thể là, hàm main, nên nằm trong mô-đun được gọi là Chính, theo quy ước. Tuy nhiên, ngay cả khi bạn không viết module Main where ở đầu tệp bạn viết main, thì mã nguồn biên dịch và có vẻ hoạt động chính xác khi bạn đang sử dụng GHC.Để viết hay không viết `module Main where` trong Haskell

Câu hỏi đặt ra là:

  1. sự khác biệt giữa văn bản module Main where và không viết nó là gì?
  2. Ứng dụng nào được ưu tiên hơn?

Trả lời

22

Không có sự khác biệt thực sự, module Main (main) where sẽ là định nghĩa ẩn khi bạn không tự xác định tiêu đề. Từ Haskell 98 Report:

Một hình thức viết tắt của mô-đun, bao gồm duy nhất của cơ thể module, được cho phép. Nếu điều này được sử dụng, tiêu đề được giả định là module Main(main) where.

Tôi muốn một định nghĩa rõ ràng hơn cho một định nghĩa tiềm ẩn nhưng, đối với một số Main.hs thì đó là tùy chọn nhỏ.

+8

Sự khác biệt là không có tiêu đề mô-đun, chỉ 'main' được xuất, nhưng với' module Main where', mọi định nghĩa cấp cao nhất đều được xuất. Dường như mắt của bạn đã thấy 'module Main (main) trong đó' không có danh sách xuất khẩu;) –

+4

Điều quan trọng là phải có danh sách xuất khẩu' (chính) ', bởi vì điều đó cho phép trình biên dịch tối ưu hóa nhiều hơn. – augustss

+0

@DanielFischer @augustss Tôi không thể tìm thấy bất kỳ tài liệu nào để hỗ trợ điều đó. GHC dường như không tạo ra sự khác biệt khi xây dựng một tệp thực thi; nó dường như làm cùng một tối ưu hóa và liên kết cho 'module Main (main) trong đó' như 'module Main where' là tốt. – jdeseno

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