2012-01-26 44 views
7

Gần đây tôi đã cài đặt Eclipse Eclipse plugin "EclipseFP" của Haskell. Mọi thứ hoạt động khá tốt trong khi có một tính năng khiến tôi rất tức giận hehe. Tôi không thể giảm mức cảnh báo của đầu ra. Eclipse/Plugin của nó có vẻ tự động gắn thêm cờ "-Wall", rất nhạy cảm với kiểu-thứ. Hãy hiển thị điều này trên ví dụ:Giảm mức cảnh báo của Eclipse (loại)

*Main> head [1,2,3] 

<interactive>:1:11: 
    Warning: Defaulting the following constraint(s) to type `Integer' 
       (Num a0) arising from the literal `3' 
    In the expression: 3 
    In the first argument of `head', namely `[1, 2, 3]' 
    In the expression: head [1, 2, 3] 

<interactive>:1:11: 
    Warning: Defaulting the following constraint(s) to type `Integer' 
       (Num a0) arising from the literal `3' at <interactive>:1:11 
       (Show a0) arising from a use of `print' at <interactive>:1:1-12 
    In the expression: 3 
    In the first argument of `head', namely `[1, 2, 3]' 
    In the expression: head [1, 2, 3] 
1 
*Main> 

Đúng, điều đó thực sự gây khó chịu. Nó được gây ra bởi các chức năng "nội tại" cũng như các chức năng tùy chỉnh. Một số khác:

factorial :: (Integral a) => a -> a 
factorial 1 = 1 
factorial n = n * factorial (n-1) 

*Main> factorial 3 

<interactive>:1:1: 
    Warning: Defaulting the following constraint(s) to type `Integer' 
       (Integral a0) arising from a use of `factorial' 
          at <interactive>:1:1-9 
       (Num a0) arising from the literal `3' at <interactive>:1:11 
    In the expression: factorial 3 
    In an equation for `it': it = factorial 3 

<interactive>:1:1: 
    Warning: Defaulting the following constraint(s) to type `Integer' 
       (Integral a0) arising from a use of `factorial' 
          at <interactive>:1:1-9 
       (Num a0) arising from the literal `3' at <interactive>:1:11 
       (Show a0) arising from a use of `print' at <interactive>:1:1-11 
    In the expression: factorial 3 
    In an equation for `it': it = factorial 3 
6 
*Main> 
+0

Bạn sẽ viết mã này như thế nào để cảnh báo không hiển thị ngay từ đầu? –

Trả lời

6

Tôi không biết về Eclipse, nhưng bạn có thể tắt cảnh báo trong tập tin .ghci của bạn. Đặt

:set -Wall   -- unnecessary if Eclipse already turns it on 
:set -fno-warn-type-defaults 
:set -fno-warn-unused-do-bind 

và bất kỳ thứ gì khác bạn không muốn cảnh báo theo mặc định vào số ~/.ghci và giảm cảnh báo cho số quan trọng. Nếu bạn muốn tải một số mô-đun theo mặc định, bạn cũng có thể thêm import Control.Applicative (hoặc tùy điều kiện nào).

+1

Cảm ơn, điều đó đã thực hiện công việc. Lưu ý rằng trên các cửa sổ, đường dẫn sẽ là C: \ Users \ \ AppData \ Roaming \ ghc \ ghci.conf - Tạo tệp và sao chép ở trên nếu tệp chưa tồn tại. – poitroae

2

Có cách để đặt các lệnh đó suggested by Daniel Fischer ngay trong EclipseFP.

Mở "Chạy cấu hình ...", chọn của bạn, chuyển sang "Tự động hóa" tab, nhập lệnh trong chỉnh sửa văn bản. Thật không may, đó là một mục chỉnh sửa một dòng và GHCI không hỗ trợ một số lệnh trong một dòng.

Tuy nhiên, bạn có thể nhập văn bản nhiều dòng ở đâu đó và dán văn bản này vào chỉnh sửa văn bản này để nó trông giống như :set -fno-warn-type-defaults[000A]:set -fno-warn-unused-do-bind.

Cũng có một chỉnh sửa văn bản nhiều dòng đặc biệt có tên "Đối số" nhưng không giải quyết được vấn đề vì các đối số này được chèn trước đó -Wall, đó là lý do tại sao chúng không có ý nghĩa.

+1

Được phép đặt hai tùy chọn trên một lệnh thiết lập như: set -fno-warn-type-defaults -fno-warn-unused-do-bind –

5

trong .cabal tập tin ghi: ghc-options: -Wall -fno-warn-type-defaults -fno-warn-unused-do-bind

1

cách tiếp cận khác, thay vì thêm lý lẽ để tắt hành vi này, là để ngăn chặn nó được bật lên ở nơi đầu tiên.

Bên trong dự án haskell Eclipse, có một tệp được gọi là eclispeProjectName .cabal. Đây là nơi mà đối số -Wall ghci được xác định. Nhận xét ra dòng đó.

Ví dụ: trong dự án haslell eclipse có tên là haskelltest, có một tệp có tên là haskelltest.cabal ở cấp cao nhất của dự án. Đặt nội dung của nó như dưới đây - xem dòng cuối cùng mà tôi đã nhận xét cài đặt ghc-options:

name:   haskelltest 
version:  0.1 
cabal-version: >=1.2 
build-type:  Simple 
author:   marty 

executable haskelltest 
    hs-source-dirs: src 
    main-is:   Main.hs 
    build-depends: base >= 4 
-- ghc-options:  -Wall 
+0

BTW Rõ ràng tắt cài đặt -Wall được coi là thực hành không tốt. Xem [link] (http: // stackoverflow.com/questions/4174629/impact-on-style-of-ghc-wall) để cách tiếp cận của lambdor có lẽ tốt hơn. –

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