为什么Haskell为此代码提供了解析错误?

时间:2012-01-16 05:51:27

标签: haskell

我正在尝试创建一个程序,该程序读取用户给出的数字然后打印出来。当我打印它时,数字必须是一个整数,但是这段代码给了我一个解析错误:

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

2 个答案:

答案 0 :(得分:10)

如果在do语句中使用括号,则必须使用分号。此外,最后一行应为putStrLn $ "The num is:" ++ show (read number :: Int)

所以你有两个选择:

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

或:

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

我见过的几乎所有代码都使用第二个版本,但它们都是有效的。请注意,在第二个版本中,空格变得很重要。

答案 1 :(得分:1)

Haskell识别Tab字符,因此您的程序可能会失败。如果您正在使用Tabs,请将它们更改为空格。