Pregunta

Especificaciones

GHC 6.12.1

Mac OS X 10.6.4 x64

MacBook Pro

Problema:

Estoy teniendo problemas para usar la sintaxis let. El siguiente código se niega a compilar:

module Main where

main = let x = 1
        y = 2
        z = 3
    in putStrLn $ "X = " ++ show x ++ "\nY = " ++ show y ++ "\nZ = " ++ show z

He intentado tabulación en y = 2 y z = 3 aún más. No dados.

(indeseable) Soluciones

La única manera que he recibido el código de compilación es o bien

  1. Sustitución de pestañas duras con espacios.
  2. Sustitución de la cláusula let con una cláusula where.
¿Fue útil?

Solución

Saizan en #haskell explica que el asignaciones en una expresión let que alinear, no permitir en sí. Siempre y cuando las asignaciones se alinean, es apropiado el uso de pestañas duras o blandas pestañas.

código correcto:

module Main where

main = let
        x = 1
        y = 2
        z = 3
    in putStrLn $ "X = " ++ show x ++ "\nY = " ++ show y ++ "\nZ = " ++ show z

Otros consejos

Usted simplemente no puede controlar las sangrías correctamente con pestañas debido a que el tamaño de una pestaña no está definido.

Por lo tanto, no utilice las fichas en Haskell. Están mal.

Sangría cada declaración en el let-bloque en el mismo grado. También es una buena forma para sangrar el 'en' y 'dejar' al mismo nivel. Por ejemplo ..

main = let x = 1
           y = 2
           z = 3
       in putStrLn $ "X = " ++ show x ++ "\nY = " ++ show y ++ "\nZ = " ++ show z

Personalmente, puse punto y coma al final de cada línea

module Main where

main = let x = 1 ;
           y = 2 ;
           z = 3 
in putStrLn $ "X = " ++ show x ++ "\nY = " ++ show y ++ "\nZ = " ++ show z

Si usted insiste en caracteres de tabulación en su origen, las siguientes compilaciones:

module Main where

main =
    let x = 1
        y = 2
        z = 3
    in putStrLn $ "X = " ++ show x ++ "\nY = " ++ show y ++ "\nZ = " ++ show z

donde todos los espacios en blanco que lleva es o bien uno o dos pestañas, y el espacio en blanco entre let y x = 1 es también un TAB. Visto de la VI modo de lista para hacer tabulaciones y line-extremos explícita:

module Main where$
$
main =$
^Ilet^Ix = 1$
^I^Iy = 2$
^I^Iz = 3$
^Iin putStrLn $ "X = " ++ show x ++ "\nY = " ++ show y ++ "\nZ = " ++ show z$

Su vida será mucho más simple y el más bonito de código si se cambia a espacios.

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top