2012-01-26 14 views
7

Recientemente instalé el plugin Eclipse de Haskell "EclipseFP". Todo funciona bastante bien, mientras que hay una característica que me enoja mucho jeje. No puedo reducir el nivel de advertencia de la salida. El complemento Eclipse/It parece agregar automáticamente el distintivo "-Wall", que es muy sensible a las cosas tipográficas. Vamos a mostrar esto en un ejemplo:Reducir el nivel de advertencia de Eclipse (tipo)

*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> 

Sí, eso es realmente molesto. Es causado por funciones "intrínsecas", así como en las personalizadas. Otra:

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

¿Cómo podría escribir realmente este código para que la advertencia no aparezca en primer lugar? –

Respuesta

6

No sé sobre Eclipse, pero se puede fuera advertencias en el archivo de .ghci. Ponga

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

y todo lo que no quiere advertido por defecto en su ~/.ghci y reducir las advertencias a los más importantes. Si desea cargar algunos módulos por defecto, también puede agregar import Control.Applicative (o lo que sea).

+1

Gracias, eso hizo el trabajo. Tenga en cuenta que en Windows, la ruta sería C: \ Users \ \ AppData \ Roaming \ ghc \ ghci.conf - Cree el archivo y copie el anterior si el archivo aún no existe. – poitroae

2

Hay una forma de poner esos comandos suggested by Daniel Fischer directamente en EclipseFP.

abierto "Ejecutar configuraciones ...", seleccione el suyo, cambiar a la pestaña "Automatización ", escribe el comando en la edición de texto. Desafortunadamente, es una entrada de edición de una línea y GHCI no admite varios comandos en una línea.

Sin embargo, puede escribir texto multilínea en alguna parte y pegarlo en esta edición de texto para que se vea como :set -fno-warn-type-defaults[000A]:set -fno-warn-unused-do-bind.

También hay un texto de varias líneas de edición especial denominada "Argumentos " pero no resuelve el problema, ya que estos argumentos se insertan antes de que -Wall, es por eso que no tienen sentido.

+1

Está bien poner dos opciones en un conjunto de comandos como: set -fno-warn-type-defaults -fno-warn-unused-do-bind –

5

en el archivo de escritura .cabal: ghc-options: -Wall -fno-warn-type-defaults -fno-warn-unused-do-bind

1

Otro enfoque, en lugar de añadir argumentos de desactivar este comportamiento, es para evitar que se enciende en el primer lugar.

Dentro del proyecto Eclipse haskell, hay un archivo llamado eclispeProjectName .cabal. Aquí es donde se define el argumento -Wall ghci. Comenta esa línea.

Por ejemplo: en un proyecto de eclipse haskell llamado haskelltest, hay un archivo llamado haskelltest.cabal en el nivel superior del proyecto. Establezca su contenido como se muestra a continuación: consulte la última línea donde he comentado la configuración 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 Apagar aparentemente la configuración de -Wall se considera una mala práctica. Ver [enlace] (http: // stackoverflow.com/questions/4174629/impact-on-style-of-ghc-wall) entonces el enfoque de lambdor es probablemente mejor. –

Cuestiones relacionadas