Dans Haskell, quelle est la différence entre "let x = 5" et "x = 5"?


Réponse 1:

x = 5 peut être

  • une déclaration de niveau supérieur une déclaration locale dans une expression let ou where block
x = 5 - Déclaration de niveau supérieur foo = - exemple idiot de fonction, ajoute 5 puis divise par 2, y y = 2 x = 5 in (/ y). (+ x) foo = (/ y). (+ x) où y = 2 x = 5

soit x = 5 peut être

  • le début d'une expression let (voir ci-dessus) une déclaration locale dans une liste compréhension une déclaration locale dans un bloc do-notation.

Ce qu'elle ne peut pas être, c'est une déclaration de haut niveau.

Les nouveaux arrivants à Haskell sont souvent confus par ce dernier point, car ils doivent taper let x = 5 plutôt que juste x = 5 s'ils travaillent dans le shell GHCi. Mais c'est parce que GHCI fonctionne en encapsulant chaque ligne tapée dans un let implicite afin que le code que vous tapez interactivement dans GHCi devienne une longue expression let imbriquée. Par conséquent, le code saisi dans CHCi ne suit pas exactement le même format que le code Haskell standard.