Quand j'essaie de compiler
main = putStrLn $ show x where
2 + x = 7
Le CGH se plaint
error: Variable not in scope: x
|
1 | main = putStrLn $ show x
| ^
Il semble donc que 2 + x = 7
est en soi syntaxiquement valide, bien qu'il ne définisse pas réellement l'option x
. Mais pourquoi en est-il ainsi ?
4 votes
Haskell signale souvent la première erreur fatale, seulement. Mettez un chiffre à l'endroit où la première erreur hors de portée
x
est de voir des erreurs supplémentaires, c'est-à-dire,x
hors sujet10 votes
C'est de mieux en mieux. Par exemple,
let 1+1 = 3 in 1+1
.2 votes
@Alec En effet ! Encore mieux,
let 1+1=3 in 1+1
évalue à3
(pas2
), tandis quelet 2=3 in 2
évalue à2
(pas3
). Et, dans l'ancien Haskell,let x+2=7 in x
utilisé pour évaluer à5
contrairement àlet 2+x=7 in x
(heureusement, ce n'est plus le cas).0 votes
@chi Je pensais que les motifs n+k nécessitaient des parenthèses, ou ce n'est pas le cas ?
0 votes
@Potato44 Oui, je pense que vous avez raison. Ils ont été supprimés de Haskell il y a longtemps, donc j'ai oublié comment ils fonctionnaient précisément.
1 votes
@chi Ils existent toujours dans GHC, il suffit d'activer la fonction
-XNPlusKPatterns
.