in haskell, I get this error, and the tabulation is correct as I think
main = do
archivo <- openFile "09septiembre2019.txt" ReadMode
contenido <- hGetContents archivo
let lineas = lines String archivo
registros = filter filtrarRenglones lineas
matrizHorarios = map words registros
matrizHorariosFiltrada = map (map (filter (`notElem` "\"\""))) matrizHorarios
tuplas = map hacerTuplas matrizHorariosFiltrada
diaFecha = map (unirStrings . take 1) tuplas
horarios = map (tomarTuplas . drop 1) tuplas
horasSumadas = map (map sumarHoras) horarios
horasAcumuladas = map sum horasSumadas
horasNormalizadas = map normalizar horasAcumuladas
stringHoras = map show horasNormalizadas
resultado = zip diaFecha stringHoras
stringRegistrosEmpleados = map mostrarResultado resultado
intCantidadEmpleados = length $ filter buscarCantEmpleados lineas
stringCantidadEmpleados = ["Total de empleados listados: " show intCantidadEmpleados]
floatHorasAcumuladas = fromIntegral (sum horasAcumuladas) / 60
stringHorasAcumuladas = ["\nCantidad de horas acumuladas en el mes: " show floatHorasAcumuladas " hs"]
floatHorasHombre = floatHorasAcumuladas / fromIntegral intCantidadEmpleados
stringHorasHombre = ["\nCantidad de horas/hombre en el mes: " show floatHorasHombre " hs"]
intAvgHorasHombre = floatHorasHombre / 20
stringAvgHorasHombre = ["\nPromedio diario de horas/hombre: " show intAvgHorasHombre " hs"]
informe = stringRegistrosEmpleados stringCantidadEmpleados stringHorasAcumuladas stringHorasHombre stringAvgHorasHombre
putStrLn $ unlines informe
hClose archivo
and the error is: parse error on input ‘=’ Perhaps you need a 'let' in a 'do' block? e.g. 'let x = 5' instead of 'x = 5'
CodePudding user response:
Let's reproduce your problem with something that we can easily fully compile:
main = do
i <- return 2
j <- return 4
let sum = i j
mult = i * j
putStrLn $ "Sum: " (show sum)
putStrLn $ "Multiplication: " (show mult)
If I try to load this file on the ghci:
λ> :l 69859274-2.hs
[1 of 1] Compiling Main ( 69859274-2.hs, interpreted )
69859274-2.hs:5:13: error:
parse error on input ‘=’
Perhaps you need a 'let' in a 'do' block?
e.g. 'let x = 5' instead of 'x = 5'
|
5 | mult = i * j
| ^
Failed, no modules loaded.
Fixing it:
main = do
i <- return 2
j <- return 4
let sum = i j
mult = i * j
putStrLn $ "Sum: " (show sum)
putStrLn $ "Multiplication: " (show mult)
And loading again:
λ> :l 69859274-2.hs
[1 of 1] Compiling Main ( 69859274-2.hs, interpreted )
Ok, one module loaded.
λ> main
Sum: 6
Multiplication: 8
Notice I am using two spaces columns. You are using one space columns.
Using an abridged version of your code:
main = do
archivo <- openFile "09septiembre2019.txt" ReadMode
contenido <- hGetContents archivo
let lineas = lines String archivo
registros = filter filtrarRenglones lineas
matrizHorarios = map words registros
matrizHorariosFiltrada = map (map (filter (`notElem` "\"\""))) matrizHorarios
tuplas = map hacerTuplas matrizHorariosFiltrada
// all other bindings starting at the same column as this comment...
// ....
putStrLn $ unlines informe
hClose archivo
CodePudding user response:
Yes, i move all the lines to the left, I stay like this:
main = do
archivo <- openFile "09septiembre2019.txt" ReadMode
contenido <- hGetContents archivo
let lineas = lines String archivo
registros = filter filtrarRenglones lineas
matrizHorarios = map words registros
matrizHorariosFiltrada = map (map (filter (`notElem` "\"\""))) matrizHorarios
tuplas = map hacerTuplas matrizHorariosFiltrada
diaFecha = map (unirStrings . take 1) tuplas
horarios = map (tomarTuplas . drop 1) tuplas
horasSumadas = map (map sumarHoras) horarios
horasAcumuladas = map sum horasSumadas
horasNormalizadas = map normalizar horasAcumuladas
stringHoras = map show horasNormalizadas
resultado = zip diaFecha stringHoras
stringRegistrosEmpleados = map mostrarResultado resultado
intCantidadEmpleados = length $ filter buscarCantEmpleados lineas
stringCantidadEmpleados = ["Total de empleados listados: " show intCantidadEmpleados]
floatHorasAcumuladas = fromIntegral (sum horasAcumuladas) / 60
stringHorasAcumuladas = ["\nCantidad de horas acumuladas en el mes: " show floatHorasAcumuladas " hs"]
floatHorasHombre = floatHorasAcumuladas / fromIntegral intCantidadEmpleados
stringHorasHombre = ["\nCantidad de horas/hombre en el mes: " show floatHorasHombre " hs"]
intAvgHorasHombre = floatHorasHombre / 20
stringAvgHorasHombre = ["\nPromedio diario de horas/hombre: " show intAvgHorasHombre " hs"]
informe = stringRegistrosEmpleados stringCantidadEmpleados stringHorasAcumuladas stringHorasHombre stringAvgHorasHombre
putStrLn $ unlines informe
hClose archivo
and I have the same mistake