online - Error del compilador Haskell: no en el alcance
haskell pdf (2)
Esta pregunta ya tiene una respuesta aquí:
- ¿Por qué no debería mezclar pestañas y espacios? 1 respuesta
Estoy tratando de aprender haskell escribiendo una simple utilidad de copia de archivo:
main = do
putStr "Source: "
srcPath <- getLine
putStr "Destination: "
destPath <- getLine
putStrLn ("Copying from " ++ srcPath ++ " to " ++ destPath ++ "...")
contents <- readFile srcPath
writeFile destPath contents
putStrLn "Finished"
Esto me pone
GHCi, version 6.10.4: http://www.haskell.org/ghc/ :? for help
Loading package ghc-prim ... linking ... done.
Loading package integer ... linking ... done.
Loading package base ... linking ... done.
[1 of 1] Compiling Main ( D:/Test.hs, interpreted )
D:/Test.hs:8:22: Not in scope: `contents''
Failed, modules loaded: none.
Prelude>
No entiendo ese error del compilador porque la variable parece estar bien. ¿Qué está mal?
Aquí hay un archivo repro: en rapidshare
Eso se ve correcto Acabo de pegar eso en un archivo .hs y: lo cargué en GHCi. Funciona aquí y tengo la misma versión de GHC que tú.
Parece que mezcló pestañas y espacios (simplemente mire su pregunta en la vista "editar" para ver el problema). Si bien su editor ve el código con una sangría uniforme, el compilador parece tener una interpretación diferente de cuán amplia debe ser una pestaña, lo que da como resultado que la línea de writeFile destPath contents
adicionalmente. Entonces la fuente se interpreta así:
...
putStrLn ("Copying from " ++ srcPath ++ " to " ++ destPath ++ "...")
contents <- readFile srcPath writeFile destPath contents
putStrLn "Finished"
En esta interpretación, el contents
código fuente se usa antes de que se cree, por lo que se obtiene un error de compilación.
Para evitar este tipo de errores, mejor no utilice pestañas, o al menos tenga cuidado adicional de que los use de manera consistente.