减少Eclipse(类型)警告级别

时间:2012-01-26 17:25:33

标签: eclipse haskell

我最近安装了Haskell Eclipse插件“EclipseFP”。 一切都很好,而有一个功能让我非常生气呵呵。 我无法降低输出的警告级别。 Eclipse / It的插件似乎会自动附加“-Wall”标志,这对于类型事物非常敏感。 让我们以一个例子来说明这一点:

*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> 
是的,这真的很烦人。它是由“内在”功能以及自定义功能引起的。 另一个:

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> 

4 个答案:

答案 0 :(得分:6)

我不了解Eclipse,但您可以在.ghci文件中关闭警告。放

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

以及其他任何您不希望默认警告到~/.ghci的内容,并减少对重要警告的警告。如果您想默认加载某些模块,您还可以添加import Control.Applicative(或其中任何一个)。

答案 1 :(得分:5)

<。>在.cabal文件中写:ghc-options: -Wall -fno-warn-type-defaults -fno-warn-unused-do-bind

答案 2 :(得分:2)

有一种方法可以将这些命令suggested by Daniel Fischer放在EclipseFP中。

打开“运行配置... ”,选择您的,切换到“自动化”选项卡,在文本编辑中输入命令。不幸的是,它是一个单行编辑条目,GHCI不支持一行中的几个命令。

但是,您可以在某处键入多行文字并将其粘贴到此文字编辑中,以使其看起来像:set -fno-warn-type-defaults[000A]:set -fno-warn-unused-do-bind

还有一个名为“ Arguments ”的特殊多行文本编辑但它没有解决问题,因为这些参数是在-Wall之前插入的,这就是为什么他们不要有道理。

答案 3 :(得分:1)

另一种方法是,不是添加参数来关闭此行为,而是首先防止它被打开。

在Eclipse haskell项目中,有一个名为 eclispeProjectName .cabal的文件。这是定义-Wall ghci参数的地方。注释掉那条线。

例如:在一个名为haskelltest的eclipse haskell项目中,项目的顶层有一个名为haskelltest.cabal的文件。如下设置其内容 - 请参阅我已注释掉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