2014-09-03 17 views
8

Một số ngôn ngữ (như Go & Rust) yêu cầu người lập trình phải siêng năng loại bỏ tất cả mã đã chết khỏi nguồn. Điều này có lợi ích trong khả năng bảo trì mã và khả năng đọc, nếu một chút cực đoan đối với một số người dùng.Cách kích hoạt cảnh báo mã chết trong Haskell (GHC)

Làm cách nào để bật tính năng này trong Haskell? (Có thể không?) Ví dụ, trong đoạn mã sau, tôi muốn url2 được gắn cờ là mã chết vì nó không được sử dụng trong main.

url1 = "http://stackoverflow.com" 
url2 = "http://stackexchange.com" 

main = print url1 

tôi thấy đề cập đến một số cờ biên dịch (ví dụ -fwarn-unused-binds, -fwarn-name-shadowing, và -fwarn-hi-shadowing) nhưng không ai trong số họ dường như để hoàn thành những gì tôi muốn.

+0

Có nội dung nào hiển thị với '-Wall' về các tên không sử dụng khi bạn biên dịch mã đó không? Nếu không, thì GHC không cảnh báo chống lại nó. – bheklilr

+0

No. Điều đó buộc chữ ký kiểu được thêm vào, nhưng không phải là cảnh báo mã chết. –

+0

Sau đó, tôi không tin rằng GHC sẽ kiểm tra điều đó. Xem [tài liệu GHC] (http://www.haskell.org/ghc/docs/7.6.3/html/users_guide/options-sanity.html) để biết những cảnh báo nào có sẵn. – bheklilr

Trả lời

17

GHC sẽ báo cáo url2 mã như chết với -fwarn-unused-binds nếu bạn hạn chế danh mục hàng xuất khẩu từ các module một cách thích hợp, ví dụ:

module Main(main) where 
... 

Nếu tiêu đề module của bạn chỉ là

module Main where 

sau đó bạn có ngầm xuất tất cả mọi thứ và do đó, nó không thể xem xét bất kỳ ràng buộc cấp cao nhất nào không được sử dụng.

+0

Tuyệt vời. Có cách nào để yêu cầu một dòng 'module' trong tệp nguồn không? –

+0

Giá trị mặc định nếu 'mô-đun' không được chỉ định là' mô-đun Chính (chính) trong đó' - xem https://www.haskell.org/onlinereport/haskell2010/haskellch5.html#x11-990005.1, nhưng tôi không biết của bất kỳ cảnh báo nào cho phép bạn nhấn mạnh rằng dòng 'module' được cung cấp. –

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