En Haskell, ¿cuál es la diferencia entre "let x = 5" y "x = 5"?


Respuesta 1:

x = 5 puede ser

  • una declaración de nivel superior una declaración local dentro de una expresión let o donde se bloquea
x = 5 - Declaración de nivel superior foo = - func de ejemplo tonto, agrega 5 y luego divide por 2 let y = 2 x = 5 in (/ y). (+ x) foo = (/ y). (+ x) donde y = 2 x = 5

let x = 5 puede ser

  • el comienzo de una expresión let (ver arriba) una declaración local en una lista de comprensión una declaración local en un bloque de anotación.

Lo que no puede ser es una declaración de nivel superior.

Los recién llegados a Haskell a menudo se confunden con este último punto, porque tienen que escribir let x = 5 en lugar de solo x = 5 si están trabajando en el shell GHCi. Pero eso se debe a que GHCI funciona envolviendo cada línea escrita en una entrada implícita para que el código que escriba interactivamente en GHCi se convierta en una expresión let anidada. Como resultado, el código escrito en CHCi no sigue exactamente el mismo formato que el código normal de Haskell.