2012-01-16 5 views
6

Estoy intentando hacer un programa que lea un número dado por un usuario y luego lo imprima. el número tiene que ser un número entero cuando lo imprimo, pero este código me da un error de análisis:¿Por qué Haskell está dando un error de análisis para este código?

main = do 
{ 
     putStrLn "Please enter the number" 
     number <- getLine 
     putStrLn "The num is:" ++ show (read number:: Int) 
} 
+0

¿Cuál es el error real? –

+0

3: 8: Error de parse en el patrón: putStrLn –

+0

Esa fue mi primera pregunta también, pero puedes adivinar fácilmente simplemente mirando el código, así que está bien :) –

Respuesta

10

Si utiliza paréntesis en su estado de cuenta do, usted tiene que utilizar puntos y comas. Además, la última línea debe ser putStrLn $ "The num is:" ++ show (read number :: Int)

Así que tienes dos opciones:

main = do 
{ 
    putStrLn "Please enter the number"; 
    number <- getLine; 
    putStrLn $ "The num is:" ++ show (read number:: Int) 
} 

o:

main = do 
    putStrLn "Please enter the number" 
    number <- getLine 
    putStrLn $ "The num is:" ++ show (read number:: Int) 

Casi todo el código que he visto utiliza la segunda versión, pero son ambos validos Tenga en cuenta que en la segunda versión, el espacio en blanco se vuelve significativo.

+0

¿puedes decirme cómo puedo leer este número como número entero? directamente o cómo convertirlo después –

+1

Puede simplemente usar 'readLn :: IO Int' en lugar de' getLine'. En este fragmento, no hay suficiente información para inferir que es un número sin especificarlo en alguna parte; si realmente hiciste algo numérico con él, podrías usar 'readLn' por sí mismo. –

+0

supongamos que el usuario ingresa 10 y luego el compilador debe pedirle al usuario que ingrese 10 números y luego forme una lista. ¿Cómo se puede hacer eso usando la secuencia? –

1

Haskell reconoce el carácter Tab y su programa podría estar fallando debido a eso. Si usa pestañas, cámbielas a espacios en blanco.

+0

Eso a menudo causa problemas, pero aquí no fue el problema. – dfeuer

Cuestiones relacionadas