2009-09-25 5 views
0

Je le code suivant qui ressemble à ceciComment spécifier le type de liste en vrac missions

[a,b,c,d] = ["a","b","c","d"] 

Le compilateur signale l'avertissement:

Warning: Definition but no type signature for 'a' 
     Inferred type: a :: [Char] 

Comment faire taire l'avertissement et préciser le type de cette expression?

+0

compilateur utilisez-vous? – sth

+1

Je ne reçois pas ce problème dans GHCi avec 'let [a, b, c, d] = ["a", "b", "c", "d"]' Veuillez publier plus de détails concernant le compilateur (et sa version). – mrueg

+0

ghc 6.10.4, pas ghci. Le problème est lorsque je fais cette affectation dans le niveau supérieur. Si je le déplace à l'intérieur de la méthode en utilisant let ou où il ne signale pas d'avertissement. Ghc est configuré pour utiliser l'option -Wall. – Marko

Répondre

2

Aucune erreur dans GHCi:

Prelude> let [a,b,c,d] = ["a","b","c","d"] 

Si vous voulez donner le fragment entier un type, essayez,

Prelude> let x :: [String] 
        [email protected][a,b,c,d] = ["a","b","c","d"] 
3

Vous pouvez ajouter une signature de type explicite pour les variables:

a, b, c, d :: String 
[a,b,c,d] = ["a","b","c","d"] 

Il devrait aussi y avoir un drapeau du compilateur qui désactive l'avertissement car il est pratique courante de ne pas spécifier explicitement les types de chaque variable d'aide.

+0

Oui, mais je voudrais éviter de taper a, b, c, d deux fois. – Marko

+1

Vous pourriez probablement écrire [a, b, c, d] = ["a", "b", "c", "d"] :: [String] – mrueg

Questions connexes